[转FX988]Forex Combo 1.46 详解笔记四

进行ForexCombo的模式二,BreakOut,趋势突破策略,我们就来看看吧,我先用我们一个EXCEL回测数据工具记录了一下在回测过程,一些重要的数据,这个模式二,2011年走的让人忐忑丫,或者说这个模式本来就很让人忐忑,30点的止损,可以接连好几次的亏损,个人觉得这个模式还得优化一下阿。看看它的参数吧。

extern string Breakout = "==== FXCOMBO Breakout System Parameters ====";
extern int TakeProfit_II = 500;
extern int StopLoss_II = 30;
extern int MaxPipsTrailing2 = 180;
extern int MinPipsTrailing2 = 10;
extern int Break = 13;
int g_period_400 = 1;
int g_period_404 = 19;
double gd_408 = 1.4;
extern double ATRTrailingFactor2 = 4.7;
int gi_424 = 300;
int gi_428 = 270;
int gi_432 = 20;
int gi_436 = 0;
int gi_440 = 8;
int gi_444 = 7;
int gi_448 = 18;
int gi_452 = 17;
int gi_456 = 13;
int gi_460 = 14;
int gi_464 = 6;
int gi_468 = 9;
int gi_472 = 2;
int gi_476 = 3;
它的参数挺多的,我们看看这些参数具体是被什么指标或者表达式所应用。
extern int TakeProfit_II = 500;
extern int StopLoss_II = 30;
该模式的止盈500点和止损30点。显而易见的参数。下面是它根据ATR通道的移动止损参数,我把这3个相关的参数贴出来
extern int MaxPipsTrailing2 = 180;
extern int MinPipsTrailing2 = 10;

extern double ATRTrailingFactor2 = 4.7;
代码可见:

                  if (TimeCurrent() >= li_284) {
                     ld_344 = l_iatr_116 * ATRTrailingFactor2;
                     if (ld_344 > MaxPipsTrailing2 * ld_40) ld_344 = MaxPipsTrailing2 * ld_40;
                     if (ld_344 < MinPipsTrailing2 * ld_40) ld_344 = MinPipsTrailing2 * ld_40;
                     if (Bid - OrderOpenPrice() > gi_428 * ld_40) ld_344 = gi_432 * ld_40;
                     l_price_352 = NormalizeDouble(Bid - ld_344, Digits);
                     if (Bid - OrderOpenPrice() > ld_344) {
                        if (OrderStopLoss() < l_price_352 && CheckStop(OrderType(), l_price_352)) {
                           l_bool_32 = OrderModify(OrderTicket(), OrderOpenPrice(), l_price_352, OrderTakeProfit(), 0, Blue);
                           if (l_bool_32) {
                              l_datetime_280 = TimeCurrent();
                              g_datetime_584 = l_datetime_280;
                           }
                        }
                     }
                  }
double l_iatr_116 = iATR(NULL, PERIOD_H1, g_period_404, 1);
g_period_404  是我们上面参数的之一,它的默认是19.
通过计算我们可以大概猜出l_iatr_116的Max的话应该38或以上,Min应该是2左右。那么ATR有多少时间点是出现这样的情况呢,大家可以回测然后找位置看看,这里不是开单这里移动止损。
 if (Bid - OrderOpenPrice() > gi_428 * ld_40) ld_344 = gi_432 * ld_40;
gi_428  = 270 上面的参数设置的,gi_432 =20。这上面这句比较简单大概是盈利270点的话,那就ld_344=20点
                     if (ld_344 > MaxPipsTrailing2 * ld_40) ld_344 = MaxPipsTrailing2 * ld_40;
                     if (ld_344 < MinPipsTrailing2 * ld_40) ld_344 = MinPipsTrailing2 * ld_40;
这另外两种获取止损位的计算方法,也比较简单,如果ATR在38以上则新的止损在Bid-MaxPipsTrailing2*ld_40,类似。如果在2以下则新的止损位在Bid-MinPipsTrailing2
大概就将移动止损的参数讲完了。大家自己去体会。接着往下看Break=13这个参数它的代码出处:
                  if (l_iclose_148 <= ld_140 - Break * ld_40) {
                     RefreshRates();
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Violet);
                  } else l_count_264++;
double l_iclose_148 = iClose(NULL, PERIOD_M5, 1);
double ld_140 = l_ima_124 - l_iatr_116 * gd_408;
double gd_408 = 1.4; 这是上面的参数设置之一,也是没有提供外部接口的参数
double l_ima_124 = iMA(NULL, PERIOD_H1, g_period_400, 0, MODE_EMA, PRICE_CLOSE, 1);
 double l_iatr_116 = iATR(NULL, PERIOD_H1, g_period_404, 1);
g_period_404\g_period_400\gd_408这3个上面的变量都用到了。得代入进去。
这里的原理构成了一个以H1为主的通道。如果5分钟的收盘价跌破了前一个小时的通道下轨,那么就确定下降趋势已经形成。。
这时候平单离场,到现在为止有提供extern外部参数的变量基本都是平单或者移动止损的参数,仿佛没有开单的外部参数可以设置当然排除止损止盈。那么我们看看这个模式的开单条件是如何。。

            if (l_count_268 < 1 && l_iclose_148 <= ld_140 - Break * ld_40) {
               ls_400 = "SELL";
               l_cmd_28 = 1;
               l_color_24 = Yellow;
               l_price_0 = NormalizeDouble(Bid, Digits);
               l_price_8 = l_price_0 + StopLoss_II * ld_40;
               l_price_16 = l_price_0 - TakeProfit_II * ld_40;
            }
            if (l_count_264 < 1 && l_iclose_148 >= ld_132 + Break * ld_40) {
               ls_400 = "BUY";
               l_cmd_28 = 0;
               l_color_24 = DodgerBlue;
               l_price_0 = NormalizeDouble(Ask, Digits);
               l_price_8 = l_price_0 - StopLoss_II * ld_40;
               l_price_16 = l_price_0 + TakeProfit_II * ld_40;
            }

ForexCombo写的真的很规范很工整,非常喜欢。
我们拿卖单的条件来说事: if (l_count_268 < 1 && l_iclose_148 <= ld_140 - Break * ld_40)
l_count_268 这个Magic2的买单数量。
l_iclose_148 前一根K线的5分钟收盘价
看到这里我们应该明白了吧,这不是买单的平仓条件吗?
5分钟的K线的收盘价,抵触1小时的通道,平多开空。大家可以将这个通道给写出来。这应该没什么难题。

发现下面还有很多的参数没有讲到模式二已经讲得差不多了,我们具体去找找每个变量用到的地方。
gi_424 = 300;
int li_284 = g_datetime_584 + gi_424;
这个是OrderModify的间隔单位是秒。300秒,也就是OrderModify每5分钟修改一次止损。而不是不停的修改。这种好坏各占多少呢。

   int li_212 = gi_436 + li_48;
   int li_216 = gi_440 + li_48;
   int li_220 = gi_444 + li_48;
   int li_224 = gi_448 + li_48;
   int li_228 = gi_452 + li_48;
   int li_232 = gi_456 + li_48;
   int li_236 = gi_460 + li_48;
   int li_240 = gi_464 + li_48;
   int li_244 = gi_468 + li_48;
   int li_248 = gi_472 + li_48;
   int li_252 = gi_476 + li_48;
   if (li_212 > 23) li_212 -= 24;
   if (li_212 < 0) li_212 += 24;
   if (li_216 > 23) li_216 -= 24;
   if (li_216 < 0) li_216 += 24;
   if (li_220 > 23) li_220 -= 24;
   if (li_220 < 0) li_220 += 24;
   if (li_224 > 23) li_224 -= 24;
   if (li_224 < 0) li_224 += 24;
   if (li_228 > 23) li_228 -= 24;
   if (li_228 < 0) li_228 += 24;
   if (li_232 > 23) li_232 -= 24;
   if (li_232 < 0) li_232 += 24;
   if (li_236 > 23) li_236 -= 24;
   if (li_236 < 0) li_236 += 24;
   if (li_240 > 23) li_240 -= 24;
   if (li_240 < 0) li_240 += 24;
   if (li_244 > 23) li_244 -= 24;
   if (li_244 < 0) li_244 += 24;
   if (li_248 > 23) li_248 -= 24;
   if (li_248 < 0) li_248 += 24;
   if (li_252 > 23) li_252 -= 24;
   if (li_252 < 0) li_252 += 24;
这个很显然的东西阿。又是计算交易的小时数。

   if (!(TimeHour(TimeCurrent()) != li_212 && TimeHour(TimeCurrent()) != li_216 && TimeHour(TimeCurrent()) != li_220 && TimeHour(TimeCurrent()) != li_224 && TimeHour(TimeCurrent()) != li_228 &&
      TimeHour(TimeCurrent()) != li_232 && TimeHour(TimeCurrent()) != li_236 && TimeHour(TimeCurrent()) != li_240 && TimeHour(TimeCurrent()) != li_244 && TimeHour(TimeCurrent()) != li_248) ||
      !(TimeHour(TimeCurrent()) != li_252)) {
看来在很多的小时数,这个模式都被限制了交易。这种写法还挺怪异的,实际可以写的很明了,这里给人错觉是不等于才可以交易,实际是必须在我们得到的小时数里交易。
}
我这边的数据是:1、3、4、7、8、9、10、14、15、18、19
这个测试一下就知道了。

这个模式得优化呀。。。。

通过我们的工具,知道它,耗费了很多很好的盈利。比如一个订单最大获利过211点,但是平单的时候只有111点盈利。然后还有更离谱的,99点的盈利最后亏损平单。真是瞎了。很多的订单的都可以成功获利的。
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?44d5929b98ed1fd093ffc3d47ec712b9"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();