文章 "MQL5 Cookbook: 怎样在设置/修改交易参数时避免错误" - 页 2

 
tatankaska:
您好,在黄金策略测试器中测试您的专家顾问时,我总是收到开仓失败 - 无效止损 - 未开仓的提示。出了什么问题?它是为了避免此类错误而编写的吗?
恐怕我们需要一些代码才能帮助您。最有可能的是您的代码中确实存在这个错误。请检查您的止损点是否大于允许的最小距离,您是否偶然错置了买入和卖出止损点。还要确保您的经纪商允许在开仓时指定止损点 - 有些经纪商要求只在现有仓位上添加止损点(所谓的"市场执行")。
 
marketeer:
恐怕我们需要一些代码才能帮助您。最有可能的是您的代码中确实存在错误。请检查您的止损是否大于允许的最小距离,以及您是否在任何情况下错误地设置了买入和卖出止损。还要确保您的经纪商允许在开仓时指定止损点--有些经纪商要求只在现有仓位上添加止损点(即所谓的"市场执行")。

您好,我只测试了文章 "如何避免在设置/修改交易级别时出错 "所附的专家顾问,没有任何变化(Positionpropertiesplus)。Instaforex 的 Instatrader 平台。该顾问的功能是这样编写的:如果我设置了错误的止损参数,它们就会被设置为允许的最低值。因此,通常情况下,我不会收到错误提示 - 外汇交易对就是如此。但在该平台的 GOLD 中,我每次尝试 positionpropertiesplus EA 用止损建仓时,都会收到错误提示:止损无效,策略测试器中没有建仓。这是否就是您提到的情况--instatrader 平台和经纪商的问题?在 GOLD 符号属性中写着即时执行。

下面是上述 EA 计算止损的函数示例 - 我使用了上述文章所附的 EA,没有做任何更改,只是使用了黄金而不是外汇货币对:

//+------------------------------------------------------------------+

//| 计算止损值|

//+------------------------------------------------------------------+

double CalculateStopLoss(ENUM_ORDER_TYPE order_type)

  {

//--- 如果需要止损

   if(StopLoss>0)

     {

      //--- 对于计算出的止损值

      double sl=0.0;

      //--- 如果需要计算买入头寸的值

      if(order_type==ORDER_TYPE_BUY)

        {

         // 计算电平

         sl=NormalizeDouble(sym_ask-CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- 如果计算值低于止损水平的下限,则返回计算值

         // 如果数值较高或相等,则返回调整后的数值

         return(sl<sym_down_level ? sl : sym_down_level-sym_offset);

        }

      //--- 如果需要计算卖出头寸的价值

      if(order_type==ORDER_TYPE_SELL)

        {

         //--- 计算电平

         sl=NormalizeDouble(sym_bid+CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- 如果计算值高于止损水平的上限,则返回计算值

         // 如果数值较低或相等,则返回调整后的数值

         return(sl>sym_up_level ? sl : sym_up_level+sym_offset);

        }

     }

//---

   return(0.0);

  } 
 
tatankaska:
...

关于交易、自动交易系统和交易策略测试的论坛


您好、

请在发布代码时使用SRC 按钮。谢谢。


这次,我为您编辑了它。


 
tatankaska:

你好,我只测试了文章 "如何避免在设置/修改交易级别时出错 "所附的专家顾问,没有任何变化(Positionpropertiesplus)。Instaforex公司的Instatrader平台。该顾问的功能是这样编写的:如果我设置了错误的止损参数,它们就会被设置为允许的最低值。因此,通常情况下,我不会收到错误提示 - 外汇交易对就是如此。但在该平台的 GOLD 中,我每次尝试 positionpropertiesplus EA 用止损建仓时,都会收到错误提示:止损无效,策略测试器中没有建仓。这是否就是您提到的情况--instatrader 平台和经纪商的问题?在 GOLD 符号属性中写着即时执行。

下面是上述 EA 中止损计算功能的示例 - 我使用了上述文章所附的 EA,没有做任何更改,只是使用了黄金而不是外汇货币对:

是的,就是这样。通过 Instatrader 中的黄金,只有在开仓后才能设置止损。开仓时没有止损,开仓后修改了止损,一切正常。谢谢你们。
 

关于所附 EA 中止损(SL/TP)的计算,只有在符号点 = 符号刻度的情况下才能正确计算。GOLD 的情况并非如此。

在这种情况下(通过 GOLD),止损必须修正为有效的符号刻度,否则会出现错误提示 - 无效止损。

因此,GOLD 的错误提示不是市场执行 的结果。如果要使用 GOLD,EA 在计算 SL/TP 时需要稍作修正。

 
如何平仓?如果智能交易系统中有平仓条件(信号),该如何操作?
 
Nauris:
如何平仓?如果在智能交易系统中有平仓条件(信号),该如何操作?
文章中使用了标准库中的CTrade 类。它有PositionClose 方法。您可以使用它。
 
我修改了代码

//+------------------------------------------------------------------+
//| 设置信息面板|
//|------------------------------------------------------------------+
void SetInfoPanel()
  {
//--- 可视化或实时模式
   if(ShowInfoPanel && (IsVisualMode() || IsRealtime()))
     {
     // SetInfoPanel() 函数的剩余代码
     // ...
     }
  }