设为首页收藏本站

 找回密码
 注册
查看: 7961|回复: 12
打印 上一主题 下一主题

随机试错模型 [复制链接]

Rank: 3Rank: 3

精华
0
UID
117185
积分
220
帖子
68
主题
10
阅读权限
40
注册时间
2013-3-21
最后登录
2015-6-2
跳转到指定楼层
1#
发表于 2013-3-29 13:53:10 |只看该作者 |正序浏览
投资学里经典的一句话 - 限制损失,让盈利奔跑。只要盈亏比达到一个理想的值,那胜率低也一样能赚到钱。为了验证这个理论,我写了一个随机发买卖单的模型,并且限制每次损失的上限,对盈利进行追踪止损。模型为日内交易,每3分钟发一个单。
  1. Params
  2.         Numeric InitialStop(2);
  3.         Numeric BreakEvenStop(3);
  4.         Numeric TrailStop(5);
  5.    
  6. Vars
  7.         Numeric RandNum;
  8.         Numeric BuyOrSell;
  9.         Numeric StopLine;
  10.         Numeric MyEntryPrice;
  11.         Numeric MyExitPrice;
  12.         NumericSeries HighestAfterEntry;
  13.         NumericSeries LowestAfterEntry;

  14. Begin

  15.         If(Time>=0.1455){//如果要实盘测试,把Time改为CurrentTime
  16.                         If(MarketPosition == 1)
  17.                                 Sell(0,Close);
  18.                         If(MarketPosition == -1)
  19.                                 BuyToCover(0,Close);
  20.                                 return;
  21.                         }

  22. If(BarsSinceentry == 0)
  23.         {  
  24.                 HighestAfterEntry = Close;
  25.                 LowestAfterEntry = Close;  
  26.          If(MarketPosition <> 0)  
  27.          {
  28.                 HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);
  29.                 LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);
  30.          }         
  31.     }else
  32.         {
  33.                 HighestAfterEntry = Max(HighestAfterEntry,High);
  34.                 LowestAfterEntry = Min(LowestAfterEntry,Low);
  35.         }
  36.         Commentary("HighestAfterEntry="+Text(HighestAfterEntry)); Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
  37.         MyEntryPrice = AvgEntryPrice;

  38.         If(MarketPosition==1) // 有多仓的情况  
  39.         {
  40.                 StopLine = AvgEntryPrice * (1-InitialStop/1000);
  41.                
  42.                 If(HighestAfterEntry[1] >= MyEntryPrice *(1 + BreakEvenStop/1000))
  43.                   Stopline  = MyEntryPrice;
  44.                
  45.                 If(Stopline < HighestAfterEntry[1]*(1 - TrailStop/1000))
  46.                   Stopline  = HighestAfterEntry[1]*(1 - TrailStop/1000);
  47.                
  48.                 if(Low <= Stopline)
  49.                 {
  50.                         MyExitPrice = Stopline;
  51.                         If(Open < MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
  52.                         Sell(0,MyExitPrice);
  53.                         return;
  54.                 }
  55.         }else if(MarketPosition==-1) // 有空仓的情况
  56.         {
  57.             StopLine = AvgEntryPrice * (1+InitialStop/1000);
  58.                
  59.                 If(LowestAfterEntry[1] <= MyEntryPrice *(1 - BreakEvenStop/1000))
  60.                   Stopline  = MyEntryPrice;
  61.                
  62.                 If(Stopline > LowestAfterEntry[1]*(1 + TrailStop/1000))
  63.                   Stopline  = LowestAfterEntry[1]*(1 + TrailStop/1000);
  64.                
  65.                 Commentary("StopLine="+Text(Stopline));
  66.                 If(High >= Stopline)
  67.                 {
  68.                         MyExitPrice = Stopline;
  69.                         If(Open > MyExitPrice) MyExitPrice = Open; // 如果该Bar开盘价有跳空触发,则用开盘价代替
  70.                         BuyToCover(0,MyExitPrice);
  71.                         return;
  72.                 }
  73.         }

  74.         RandNum = Rand(0,100); //产生0到100的随机数
  75.         BuyOrSell = Mod(RandNum,2); //产生0到1的随机数

  76.         Commentary("BuyOrSell:"+TEXT(BuyOrSell));

  77.         If(BuyOrSell == 0 && Mod(Minute,3) == 0 && MarketPosition!= -1) //如果BuyOrSell为0,每3分钟发一次多单
  78.                 Buy(1,Close);
  79.         else If(BuyOrSell == 1 && Mod(Minute,3) == 0 && MarketPosition!=1)//如果BuyOrSell为1,每3分钟发一次空单
  80.                 SellShort(1,Close);  
  81. End
复制代码
用这个模型在橡胶单日做了10次测试,开一手,结果意外的发现共赢8次,仅亏2次。最大亏损才660,最大盈利4210. 难道是我RP比较好?

第1次 : 亏450
第2次 : 赢1520
第3次 : 赢2790
第4次 :赢3540
第5次 :赢4210
第6次 :亏660
第7次 :赢2840
第8次 :赢1020
第9次 :赢3130
第10次 :赢810

不信邪,再测10次,结果还是很意外的盈利8次,亏2两次。不过这次最大亏损达到4910,最大盈利4030.
第1次 : 赢240
第2次 : 赢1480
第3次 : 赢1020
第4次 :赢360
第5次 :亏4910
第6次 :赢4030
第7次 :赢1920
第8次 :赢1230
第9次 :赢1980
第10次 :亏3090

经过这次测试我终于相信盈利其实跟入市的选择关系并不大,关键是要控制好亏损,让盈利尽量增长,就是人们经常说的高盈亏比。篮球赛场上也有一句话,就是谁的防守好谁就能赢得总冠军,我相信投资也是一样的,我们很难控制盈利,那我们能做的就是很好的防守,让损失降到最低。小弟愚见,欢迎拍砖。

Rank: 2

精华
0
UID
205749
积分
57
帖子
56
主题
1
阅读权限
30
注册时间
2015-3-23
最后登录
2020-5-24
13#
发表于 2015-5-29 20:51:46 |只看该作者
RP比较好

使用道具 举报

Rank: 4

精华
0
UID
113701
积分
342
帖子
12
主题
1
阅读权限
50
注册时间
2012-11-25
最后登录
2013-7-29
12#
发表于 2013-7-23 10:14:53 |只看该作者
25.If(BarsSinceentry == 0)

26.        {  

27.                HighestAfterEntry = Close;

28.                LowestAfterEntry = Close;  

29.         If(MarketPosition <> 0)  

30.         {

31.                HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);

32.                LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);

33.         }         

34.    }else

35.        {

36.                HighestAfterEntry = Max(HighestAfterEntry,High);

37.                LowestAfterEntry = Min(LowestAfterEntry,Low);

38.        }
楼主这段代码有问题

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
117185
积分
220
帖子
68
主题
10
阅读权限
40
注册时间
2013-3-21
最后登录
2015-6-2
11#
发表于 2013-6-17 13:44:17 |只看该作者
liq77 发表于 2013-6-17 13:09
有证据表明,对于日内短线来说,入场的优势至关重要!

同意,想要有好的资金增长,入场肯定重要。这也是为什么我没使用这个模型,而是转而开发一个高胜率的模型。不过话说回来,资金和风险管理在任何系统都是不可缺少的,这如同打防守战,慢慢试探,一有弱点(趋势),大举进攻。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4647
积分
1403
帖子
432
主题
31
阅读权限
60
注册时间
2009-6-16
最后登录
2019-10-27
10#
发表于 2013-6-17 13:09:27 |只看该作者
有证据表明,对于日内短线来说,入场的优势至关重要!

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
117185
积分
220
帖子
68
主题
10
阅读权限
40
注册时间
2013-3-21
最后登录
2015-6-2
9#
发表于 2013-6-17 09:50:07 |只看该作者
zzzlondon 发表于 2013-6-17 09:20
那是因为lz的手续费一向设得很低,否则这个代码的资金曲线陀陀地都是30度向下 ...

做这个测试的时候没考虑滑点,手续费等因素。只是想测试如果风险控制的好的话,入场条件不重要。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
117185
积分
220
帖子
68
主题
10
阅读权限
40
注册时间
2013-3-21
最后登录
2015-6-2
8#
发表于 2013-6-17 09:47:49 |只看该作者
liq77 发表于 2013-6-17 07:33
“...用这个模型在橡胶单日做了10次测试,开一手,结果意外的发现共赢8次,仅亏2次。最大亏损才660,最大盈 ...

不是,是简单的backtest,用历史数据测试。

使用道具 举报

Rank: 8Rank: 8

精华
0
UID
17581
积分
5464
帖子
275
主题
27
阅读权限
100
注册时间
2010-10-13
最后登录
2021-8-30
7#
发表于 2013-6-17 09:20:33 |只看该作者
那是因为lz的手续费一向设得很低,否则这个代码的资金曲线陀陀地都是30度向下

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4647
积分
1403
帖子
432
主题
31
阅读权限
60
注册时间
2009-6-16
最后登录
2019-10-27
6#
发表于 2013-6-17 07:33:14 |只看该作者
“...用这个模型在橡胶单日做了10次测试,开一手,结果意外的发现共赢8次,仅亏2次。最大亏损才660,最大盈利4210...”

请问一下,这是模拟实盘的结果吗?

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
117185
积分
220
帖子
68
主题
10
阅读权限
40
注册时间
2013-3-21
最后登录
2015-6-2
5#
发表于 2013-6-16 17:07:56 |只看该作者
ywh211 发表于 2013-6-16 13:09
好像Close是未来数据吧?????????

这个模型用close没关系,因为是随机买卖。TB对Bar进行了处理,不会在同一个bar开仓多次。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-28 09:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部