初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1494

 
Maksim Burov #:

下午好。

您能告诉我如何安排重新运行所获得的优化参数,但要在不同的时间段内进行。

我在 Excel 中记录了过去半年对一种货币对的优化参数。我选择了去年的时间段,并希望运行这些参数。我如何将它们放回测试器或优化器中。
检查哪些可以通过,哪些不能通过,将其记入 Excel。然后运行过去两年的数据。

选择要运行数据的时间段。然后在获得的参数选项卡中,右击所需的参数并选择单个测试。
 
Roman Kutemov #:
选择要运行数据的时间段。然后在获得的参数选项卡上,右击所需的参数并选择单个测试。

谢谢。
如何在范围内完成所有操作,而不是戳每个参数?

 

您能帮我计算一下吗?


我需要止盈是止损的 3 倍。它似乎可以工作,但有些地方出错了))。机器人可以进行黄金和指数交易,但拒绝进行货币交易(尽管它的计算完全正确)。

首先,我将止损点设为蜡烛 1 的低点:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

然后以点为单位计算从ASK 到止损 的距离,并将此值分配给 pert

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

然后,我也以点为单位计算止损:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


然后打开交易,将TR 添加到ASK

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


在测试仪中,所有计算都是正确的,以 5 位数点为单位,止损点也在 Low1 上,止损点的大小以 5 位数点为单位也是正确的。但止盈有些问题,不是 507 点,而是 5070 点。



 

你好,谢尔盖。

计算止损时,您需要从价格距离到点数距离。然后乘以 3,就得到了同样以点为单位的止损距离。然后将点数加到卖出价上。

尽量不要除以一个点的大小,否则要记得再乘以它。

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

或者像这样

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

你好,谢尔盖


非常感谢!我真的被价格/项目搞糊涂了。我现在就试试)))

 
现在一切都能正确计算和设置,但仅限于美元兑日元、美元兑澳元和任何指数。但对于 USDCAD、EURUSD 等货币,猫头鹰无法交易,并发送错误信息 4756。我在帮助中查找了该值,但没有帮助)。
 
Sergey Izhutov #:
现在一切都能正确计算和设置,但仅限于美元兑日元、美元兑澳元和任何指数。但对于 USDCAD、EURUSD 等货币,猫头鹰无法交易,并发送错误信息 4756。我在帮助中查找了该值,但一无所获)。

像上一篇文章一样:提供为您开仓的代码。然后,也许你就能给出一些建议了。美元兑日元和美元兑加元之间不应该有任何本质区别,很可能是一些微不足道的错误。

 
Yuriy Bykov #:

按照上一个帖子的方法操作:

代码如下

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

错误很可能出在这里:

if(Close > maHandle && Close > Open)

根据您的逻辑,maHandle 应该是价格,而这很可能是一个句柄,即一个整数 - 在所有加载的指标中该指标的序列号。请查看 MQL5 帮助,了解获取指标值的正确方法。

 
Yuriy Bykov #:

这里可能搞错了:

根据您的逻辑,maHandle 应该是价格,而这很可能是一个句柄,即一个整数 - 在所有加载的指标中该指标的序列号。请在 MQL5 帮助中查看获取指标值的正确方法。

我晚上也是这么想的,我应该删除它。我还没有和指标成为朋友。我只依稀记得,在 4 中,我只写了 Close > MA,然后一切正常。我将尝试注释掉句柄,看看结果如何。