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

还是ForexCombo进行分析,依旧是它的Scalping模式,这个模式应该是三个模式中最好的,那么就值得大家去借鉴了。无数的借鉴这让你的EA更上一层楼。好的,我们进入主题,在二的笔记中,我截取了两段较长的代码,两段代码也是这个模式的主要交易代码,可能有些朋友是懂非懂的不知道这些代码的具体意义,于是我们又再详细了一下代码:

          if (l_count_256 < 1 && (l_iclose_92 > l_ima_100 + TREND_STR * ld_40 && l_iwpr_108 < OSC_open + (-100) && Bid < l_iclose_92 - gi_356 * ld_40) || (l_iwpr_108 < gi_368 +
            (-100) && Bid < l_iclose_92 - gi_356 * ld_40 && Hour() == li_196 || Hour() == li_200))


我们进行中文简述:
         //MAGIC1订单数<1并且(前一根K线收盘价大于均线+TRENDSTR的值并且WPR指标小于OSC_OPEN-100并且现在的买价小于收盘价减去-5就是加上5)或者是
         //WPR指标小于gi_368-100并且买价小于收盘价-gi_356并且现在是交易的时间范围

可以看出,要交易的话有两种情况存在。
第一种:
(前一根K线收盘价大于均线+TRENDSTR的值并且WPR指标小于OSC_OPEN-100并且现在的买价小于收盘价减去-5就是加上5)
第二种:
WPR指标小于gi_368-100并且买价小于收盘价-gi_356并且现在是交易的时间范围
 && Hour() == li_196 || Hour() == li_200
li_196和li_200的代码:
   int gi_360 = 21;
   int li_196 = gi_360 + li_48;
   int li_200 = gi_360 + li_48;

这个应该是限制交易的小时数。我们不妨测试一下。默认参数的话,大概是什么时间里交易。也可以通过计算得到li_196和li_200的值。
从表达式上看,我们可以知道li_196和li_200是一样的,那么我们计算li_196的值。
li_48 = -9;
li_196 = 12;
也就是当小时数为12的时候,又符合WPR指标小于gi_368-100并且买价小于收盘价-gi_356
那么第二种交易就触发,我们大可改这个条件,甚至删除来测试这个条件对我们创造的盈利到底有多少。
接着我们看看卖单,它的条件又是如何的:
if (l_count_260 < 1 && (l_iclose_92 < l_ima_100 - TREND_STR * ld_40 && l_iwpr_108 > (-OSC_open) && Bid > l_iclose_92 + gi_356 * ld_40) || (l_iwpr_108 > (-gi_368) &&
            Bid > l_iclose_92 + gi_356 * ld_40 && Hour() == li_196 || Hour() == li_200))

可以看到的与买单相反,这里不做过多的详细的讲解了。可以肯定的是,这个交易条件的成功率很高。那么我们可以占为己有。

看完Scalping的开单条件,那我们还需要来研究它的Close条件,Scalping不是靠止损和止盈,在回测的时候就可以看到它有Close事件,我们找找代码。

            if (OrderMagicNumber() == Magic1) {
               if (OrderType() == OP_BUY) {
                  if (OrderStopLoss() == 0.0) {
                     l_price_312 = NormalizeDouble(Ask - StopLoss * ld_40, Digits);
                     l_price_320 = NormalizeDouble(Ask + TakeProfit * ld_40, Digits);
                     if (CheckStop(OrderType(), l_price_312) && CheckTarget(OrderType(), l_price_320)) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_312, l_price_320, 0, Green);
                  }
                  if (l_iwpr_108 > (-OSC_close) && Bid > l_iclose_92 + gi_356 * ld_40) {
                     RefreshRates();
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Violet);
                  } else l_count_256++;
               } else {
                  if (OrderStopLoss() == 0.0) {
                     l_price_312 = NormalizeDouble(Bid + StopLoss * ld_40, Digits);
                     l_price_320 = NormalizeDouble(Bid - TakeProfit * ld_40, Digits);
                     if (CheckStop(OrderType(), l_price_312) && CheckTarget(OrderType(), l_price_320)) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_312, l_price_320, 0, Green);
                  }
                  if (l_iwpr_108 < OSC_close + (-100) && Bid < l_iclose_92 - gi_356 * ld_40) {
                     RefreshRates();
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Violet);
                  } else l_count_260++;
               }
            }

这段代码是它的平仓机制了。我们进行分析一下。
                if (OrderType() == OP_BUY) {
                  if (OrderStopLoss() == 0.0) {
                     l_price_312 = NormalizeDouble(Ask - StopLoss * ld_40, Digits);
                     l_price_320 = NormalizeDouble(Ask + TakeProfit * ld_40, Digits);
                     if (CheckStop(OrderType(), l_price_312) && CheckTarget(OrderType(), l_price_320)) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_312, l_price_320, 0, Green);
                  }

这一段代码,是用来判断订单是否有止损止盈,没有的话,更改一下。
if (l_iwpr_108 > (-OSC_close) && Bid > l_iclose_92 + gi_356 * ld_40) {
                     RefreshRates();
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Violet);
                  }

这一段是平单的代码,这是买单的平单代码,wpr指标的>-OSC_close并且,买价大于前一根K线收盘价+gi_356个点的话,买单则平单。OSC_close在这里是13,大概这个平单条件比较轻重于WPR指标,如果WPR指标在-13上面,基本是一个超卖区,那么这时候就平掉多单。l_count_256是用来记录现在MAGIC1的买单数量的。
那么现在我们在来看看,卖单的平单代码:
                  if (OrderStopLoss() == 0.0) {
                     l_price_312 = NormalizeDouble(Bid + StopLoss * ld_40, Digits);
                     l_price_320 = NormalizeDouble(Bid - TakeProfit * ld_40, Digits);
                     if (CheckStop(OrderType(), l_price_312) && CheckTarget(OrderType(), l_price_320)) OrderModify(OrderTicket(), OrderOpenPrice(), l_price_312, l_price_320, 0, Green);
                  }

上面这一段跟买单一样,判断是否没有设置止损,没有的话,设置止损。
                  if (l_iwpr_108 < OSC_close + (-100) && Bid < l_iclose_92 - gi_356 * ld_40) {
                     RefreshRates();
                     OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Violet);
                  } else l_count_260++;

如果WPR指标小于13+(-100)=-87,WPR进入超买区,并且买价小于前一根K线收盘价+5点这样的话,我们就平单。否则卖单数量记录++

到此我们可以知道其实模式一,Scalping这个的开单可能相对用到MA和WPR然后平单用到WPR,其他也没什么特别的指标,然后就价位的限制,可以说它的交易条件是相当的简单。
大家大可用Scalping这个模式测试一下,10年的交易情况如何。

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); })();