首先我们把之前的挂单模块、开仓模块、K线开盘判断模块拿过来,然后需要写这个模型独有的模块。 从以上规则中可以知道海龟交易系统的系统一和系统二是关联的,如果上一次入场是盈利的,那么系统二将不会生效,只有系统一工作。所以我们要写一个模块来判断上一个订单是否盈利。鉴于海龟系统是统一平仓的系统,订单关闭的时间都是一样的,所以我们可以通过检查订单平仓的时间来判断订单是否属于上一次入场。另外我们把四个订单都拆分开来,以便于订单的管理,每一个订单对应一个魔术号(MagicNumber),这里分别用1000、2000、3000、4000来作为四个订单的魔术号,魔术号为1000的订单为首单,其他为加仓单。 用于判断上一次入场是否盈利的模块如下:
- int magicnumber1=1000;
- int magicnumber2=2000;
- int magicnumber3=3000;
- int magicnumber4=4000;
复制代码
- int profitjudge(string sym,int peri)
- {
- int i;
- datetime time=0;
- int k=0;
- double profit=0;
- for(i=OrdersHistoryTotal()-1;i>=0;i--)
- {
- if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
- {
- if(OrderSymbol()==sym && OrderMagicNumber()==magicnumber1 &&
- (OrderType()==OP_BUY || OrderType()==OP_SELL))
- {
- time=OrderCloseTime();
- break;
- }
- }
- }
-
- if(time==0)
- {
- return(0);
- }
- while(iTime(sym,peri,k)>=time)
- {
- k++;
- }
- for(i=OrdersHistoryTotal()-1;i>=0;i--)
- {
- if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
- {
- if(OrderSymbol()==sym && OrderCloseTime()>=iTime(sym,peri,k) &&
- (OrderType()==OP_BUY || OrderType()==OP_SELL) &&
- (OrderMagicNumber()==magicnumber1 ||
- OrderMagicNumber()==magicnumber2 ||
- OrderMagicNumber()==magicnumber3 ||
- OrderMagicNumber()==magicnumber4))
- {
- profit=profit+OrderProfit();
- }
- if(OrderCloseTime()<iTime(sym,peri,k))
- {
- break;
- }
- }
- }
- if(profit>0)
- {
- return(1);
- }
- else
- {
- return(0);
- }
- }
复制代码
|