文章 "针对初学者以 MQL5 编写“EA 交易”的分步指南" - 页 27

 
Rustam Ayupov #:

亲爱的弗拉基米尔!我读到了您为傻瓜所做的巨著,我的工作重点正在发生变化,模拟交易将有自己的方式,现在最主要的是您的初学者学校,我汲取了您宝贵的经验,这是无价之宝,无以言表。如果我知道如何在这个 EA 中插入追踪止损,我可能会优先考虑,因为作为前向优化的结果,EA 创建了长期 takeprofits,他们的安全网变得令人尖叫。在贵校的培训过程中,我可能会学会看到错误(没有错误就没有有效的程序)并纠正它们。谢谢。

真诚的,鲁斯塔姆。

不客气,鲁斯塔姆!

尊敬的弗拉基米尔

 
Valeriy Yastremskiy #:

回复或新建评论,在底部 添加文件。

谢谢您的巧妙简化)还有一个问题,以您的追踪经验,如何将其中一个插入到此 EA 中?

 
MrBrooklin #:

求你了,鲁斯塔姆

敬礼,弗拉基米尔

我发现了一个独特的、简单到天才的 "跟踪方法",它是由作者本人开发的,但按照这种开发的传统,它并没有像作者评论的那样被执行。他和我一样,可能也是个傻瓜,不过是个大傻瓜)他承诺,当价格反转时,之前打开的仓位会被关闭,嗯,是的,如果是这样就好了......但只有两个打开的仓位挂着,在两个方向上,都没有关闭。早些时候,在您提出第一条建议之前,在两个方向上都有大量未平仓合约,但都没有平仓。试着挤出蛋糕上的这颗樱桃吗?

 
Rustam Ayupov #:

谢谢您的巧妙简化)还有一个问题,以您的追踪经验,如何在此 EA 中插入追踪器?

如果有追踪的结果比没有追踪的结果好,那就不用追踪。

 
Valeriy Yastremskiy #:

如果使用拖网比不使用拖网效果更好,那就不使用拖网。

插入并不难,但插入什么呢?要进行测试和评估。

 
Rustam Ayupov #:

装进去并不难,但装什么呢?试一试

在您的 EA 中加入拖网代码,但不加入拖网。最好将拖网代码放入一个函数中。如果有订单,则根据条件调用拖网。

 
Rustam Ayupov #:

我发现了一个独特的、简单到天才的 "跟踪方法",它是由作者自己开发的智能交易系统(Expert Advisor),按照这种开发的传统,它并没有像作者评论的那样被执行。他和我一样,可能也是个傻瓜,不过是个大傻瓜)他承诺,当价格反转时,之前打开的仓位会被关闭,嗯,是的,如果是这样就好了......但只有两个打开的仓位挂着,在两个方向上,都没有关闭。早些时候,在您提出第一条建议之前,在两个方向上都有大量未平仓合约,但都没有平仓。试着挤出蛋糕上的这颗樱桃吗?

你好,鲁斯塔姆!为了让我们继续富有成效地合作,您首先需要学会如何将有问题的 EA 代码附加到您的消息中。如果您在测试 EA 时遇到问题,您需要将代码另存为一个新名称,编译后将其附加到邮件中。您必须用新名称保存 EA 并编译它!!! 否则 我们会在不同的邮件中混淆 否则,我们在与您交流时会在不同的变体中感到困惑。

如果由于某种原因无法附加 EA 代码,您可以使用另一种方法:

  1. 在 MetaEditor 中,按Ctrl+A 选出有问题的 EA 代码
  2. Ctrl+C 复制 EA 代码。
  3. 创建一篇要在论坛上发表的帖子,按AL+S 按钮打开一个字段,按Ctrl+V 按钮粘贴复制的代码。
  4. 将帖子添加到论坛

如果您没有学会在您的帖子中附加或放置有问题的 EA 代码,那么与您的进一步对话将变得毫无用处。

再见,弗拉基米尔

 
MrBrooklin #:

你好,鲁斯塔姆!为了让我们继续进行富有成效的合作,您首先需要学会如何将有问题的 EA 代码附加到消息中。如果您在测试 EA 时遇到问题,您需要将代码另存为一个新名称,编译后将其附加到消息中。您必须用新名称保存 EA 并编译它!!! 否则 您和我都会搞不清楚 否则,在与您交流时,您和我都会在不同的变体中感到困惑。

如果由于某种原因您无法附加 EA 代码,您可以使用其他方法:

  1. 在 MetaEditor 中,按Ctrl+A 选出有问题的 EA 代码
  2. Ctrl+C 复制 EA 代码。
  3. 创建一篇要在论坛上发布的帖子,按AL+S 按钮打开一个字段,按Ctrl+V 按钮粘贴复制的代码。
  4. 将信息添加到论坛

如果您没有学会如何在帖子中附加或张贴有问题的 EA 代码,那么与您的进一步对话将变得毫无用处。

再见,弗拉基米尔。

很抱歉耽误了您的时间,我周末忙得焦头烂额,但还是找到了上次问题的原因,原来是经纪商 FXopen 无法适应 MT5。好了,教我简单的文件选择,发送。前两个是您对作者工作的优化,您阻止了作者在代码中的疏忽,大量开仓,而不是一个,唯一的一个,后两个是他在价格反转时平仓的声明。第二点值得努力,毕竟作者即使没有完成,也想获利)。

附加的文件:
 
Rustam Ayupov #:

很抱歉耽误了您的时间,周末 24 小时都在工作,但还是找到了上次出现问题的原因,原来是代理 FXopen 没有适应 MT5。好了,教我简单的文件选择,发送。前两个是您对作者工作的优化,您阻止了作者在代码中的不注意,大量开仓,而不是一个,一个单一的,后两个是他在价格反转时关闭位置的声明。第二点值得努力,毕竟作者即使没有完成,也想获利)。

对于这最后一单,我仍在整理,试图理解一些东西,并开始在其中导航,同时为长期获利提供保险。我已经准备好迎接作者未来的惊喜,路要自己走)。

附加的文件:
 
Rustam Ayupov #:

对于这最后一部作品,我仍在试图理解一些东西,并开始定位自己,暂时对冲长期收益。我已经准备好迎接作者未来的惊喜,路要自己走)。

你好,鲁斯塔姆!我在邮件底部附上了该智能交易系统的工作版本。这部分代码已做了修改:

//-- 把所有东西放在一起 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // 立即执行订单
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // 最新卖出价
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // 止损
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // 获利
         mrequest.symbol = _Symbol;                                            // 货币对
         mrequest.volume = Lot;                                                 // 交易手数
         mrequest.magic = EA_Magic;                                             // 订购神奇号码
         mrequest.type = ORDER_TYPE_BUY;                                        // 购买订单
         mrequest.type_filling = ORDER_FILLING_FOK;                             // 订单执行类型
         mrequest.deviation=100;                                                // 与当前价格的偏差
         //--- 发送订单
         bool check=OrderSend(mrequest,mresult);
         // 获取结果代码
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2.检查做空/卖出设置:MA-8 向下递减,
 前收盘价低于它,ADX > 22,-DI > +DI
*/。
//--- 声明 bool 类型变量,以保存我们的卖出条件
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 向下递减
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // 前一个价格低于 MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // 当前 ADX 值大于最小值 (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI 大于 +DI

//-- 把所有东西放在一起
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // 立即执行订单
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // 最新投标价格
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // 止损
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // 获利
         mrequest.symbol = _Symbol;                                          // 货币对
         mrequest.volume = Lot;                                              // 交易手数
         mrequest.magic = EA_Magic;                                          // 订购神奇号码
         mrequest.type= ORDER_TYPE_SELL;                                     // 卖出订单
         mrequest.type_filling = ORDER_FILLING_FOK;                          // 订单执行类型
         mrequest.deviation=100;                                             // 与当前价格的偏差
         //--- 发送订单
         bool check=OrderSend(mrequest,mresult);
         // 获取结果代码
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

添加了黄色高亮显示的内容:

&& PositionsTotal()==0

并删除了与 Buy_opened 和 Sell_opened 相关的条件:

         // 有任何已打开的买入仓位吗?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // 不要打开新的买入头寸
           }
.
.
.
         // 是否有卖出仓位?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // 不要建立新的卖出仓位
           }

再见,弗拉基米尔。

附加的文件: