文章 "如何创建自己的追踪止损"

 

新文章 如何创建自己的追踪止损已发布:

交易人员的基本原则 - 让利润增长,截停损失!本文讨论遵循该原则的其中的一个基本技巧 - 在增加持仓利润后移动保护性止损水平(止损水平),追踪止损水平。我们将给出用于在SAR和NRTR指标上追踪止损的类的分步创建过程。每个人都可以将该追踪止损插入他们的EA交易,或是在帐户中单独使用以控制持仓。

Figure 5. Enabling the standard trailing stop in terminal.

作者:Dmitry Fedoseev

 

非常有用。谢谢。


史蒂文

 

尾部示例出错。

 
请说明是哪一个。
 

程序员们,请帮助解决 mql5 的问题!

是否可以像在 mql4 中一样,不使用任何类而只使用普通的跟踪函数?例如,就像在Moving Averages.mq5 中实现 TradeSizeOptimised 函数一样。

我已经搜索了所有范例、文章和论坛,但一无所获。我已经完全迷失了....。也许有人有现成的变体,我会非常感激!!! - 我真的很想参加冠军赛。

 
Setslav:

程序员们,请帮助解决 mql5 的问题!

是否可以像在 mql4 中一样,不使用任何类而只使用普通的跟踪函数?例如,就像在 Moving Averages.mq5 中实现 TradeSizeOptimised 函数一样。

我已经搜索了所有范例、文章和论坛,但一无所获。我已经完全迷失了....。也许有人有现成的变体,我会非常感激!!! - 我真的很想参加冠军赛。


给您

int TrailingStop()
  {
   if(PositionSelect(Symbol())) // 选择位置
     {
      //MqlTradeRequest m_request;// 向服务器声明请求结构
      //MqlTradeResult m_result;// 声明服务器响应结构
      double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);                         // 将出价写入变量
      double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);                         // 写入变量卖价
      double OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);                     // 将建仓价格写入变量
      double PositionSL=PositionGetDouble(POSITION_SL);                            // 将止损水平写入变量
      double PositionTP=PositionGetDouble(POSITION_TP);                            // 将获利水平写入变量

      if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // 定义位置类型
        {
         if(TrailWhileMinus==true || Bid-OpenPrice>_Point*Trail) // 在第一站转运达到收支平衡之前,不进行拖网作业
           {
            if(Bid-PositionSL>Trail*_Point) //必须移动止损的基本条件
              {
               //--- 向结构体写入数据
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Bid-Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                              // 向服务器发送请求
              }
           }
        }
      else
        {
         if(TrailWhileMinus==true || OpenPrice-Ask>_Point*Trail) // 在第一站转运达到收支平衡之前,不进行拖网作业
           {
            if(PositionSL-Ask>Trail*_Point) //必须移动止损的基本条件
              {
               //--- 向结构体写入数据
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Ask+Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                            // 向服务器发送请求
              }
           }
        }
     }
   return(0);
  }
 
sergey1294:

给你

我认为(可能不无道理)结果最好作为参数传递:)

否则就无法对其进行分析。这多少有点不太好...

PS

我还想创建两个函数 - TrailingStopBuy 和 TrailingStopSell

 
Interesting:

我认为(可能不无道理)结果最好作为参数传递:)

否则就无法对其进行分析。这多少有点不太好...

PS

我还会创建两个函数 - TrailingStopBuy 和 TrailingStopSell。

我给他举了个例子,因为他的大脑已经知道如何写一个普通的跟踪,然后让他稍微想一想,在测试器中,原则上这个结构可以正常工作,不会出错。
 
sergey1294:
我给他举了个例子,因为他已经想好了如何写一个普通的拖尾,然后让他稍微想一想,这样就不会出错了,原则上在测试仪中,这样的设计工作得很好。
作为一个例子当然可以,但如果不对结果 进行分析,就会出现很多错误(迟早的事)......
 
sergey1294:

给您。

谢谢
 

sergey1294

再次感谢,一切正常

还有一个小问题,如何在函数中添加魔法数字校验?我正在尝试插入这样一个校验:

if (OrderGetInteger(ORDER_MAGIC)==EA_Magic)
{
.....
}
.....,但这样做会破坏整个交易.....。