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

 
xyz999: 2)如果在10个月内进行了优化(回测),并选择了1/4正向测试选项,比如说,我应该如何理解。
客户端/ 策略测试员/ 回测/ 正向测试
 

谢谢你。

是的,从这个链接。

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing

我找到了第二个问题的答案。然而,第一个和第三个问题是没有答案的。

我也想拥有它们。

我想知道其他交易者的结果和比率。因为我的结果是非常令人震惊的。我是自动控制和非稳态过程建模领域的科学家,其中也包括市场上的价格变动图。我已经为非平稳过程建模多年,测试器的工作方式完全不符合我多年的经验。这里有些不对劲。要么是我对测试仪的使用不正确,要么是它不能正常工作。让我们一起找出来。

我严格按照优化期进行的回测显示,在相同的参数下,我们的利润是优化期间的200%。然而,当选择其他优化参数并在优化期间进行测试时,我们获得的利润将减少数倍。情况不应该是这样的。这就是为什么我有一些问题。

 
xyz999: 我找到了第二个问题的答案。然而,第一个和第三个问题没有答案。我也想拥有它们。

好吧,这不是由我决定的,就像他们说的,"只要我能做到"(c)。 我离这个话题本身很远。试着在论坛上搜索一下,也许哪里已经讨论过正向测试了。或者,如果你认为这个主题非常重要,就创建一个新的主题分支。否则,问题会在总支部中丢失。

xyz999 : 是的,在这个链接https://www.metatrader5.com/ru/terminal/help/algotrading/testing,我找到了我第二个问题的答案。

在航站楼里也有参考资料。F1.

 
mario065:

做了一件非常愚蠢的事情。

我把自定义移动平均线指标的主体拿出来,把MFI缓冲区放在里面。

我改变了价格。

我是作为专家为你做的,只是一个指标和检查的意见。

谢谢你没有留下未被回答的信息。唉,测试者仍然拒绝其他指标的平滑化。我的EA同时使用两个指标的值 - MFI和DEMA。我已经在我的EA中用MFI实现了你的算法--但徒劳无功--我无法运行它来优化全局变量

再次感谢您的留言。
 
关于EA的文章https://www.mql5.com/ru/articles/100,提到了开仓 的条件,但没有提到平仓的条件。


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

我把PositionSelect(_Symbol)的值改为true,而不是问号。 这并没有什么帮助。


问题。我可以最大限度地改变什么--以便能够设定接近条件?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
关于专家顾问的文章https://www.mql5.com/ru/articles/100,提到了开仓 的条件,但没有讨论平仓的条件。


我把PositionSelect(_Symbol)的值改为true,而不是问号。 这并没有什么帮助。


问题。我可以把什么改成最低限度--能够设置关闭条件?

你有一个警报后的回报。职位可能不会因为这个回报而关闭。请把它拿走,再试一次。

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
谢谢,因为我觉得答案非常简单,而且就在身边。
然而,在问号部分出现了另一个问题。

关于算法。

在适当的条件下+没有位置--位置被打开,在其他条件下和存在一个打开的位置--打开的位置被关闭。

如果我没有弄错的话--存在一个位置,即Buy_opened

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

等于1 - 导致警报和返回(返回到开头),等于0 - 打开买入订单。

问题。我应该写什么来代替问号--未平仓订单的条件,以便EA不开仓(在我的例子中,它开的是卖单)?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

目前,我还规定了Buy_opened,因为这个定义的条件与PositionSelect(_Symbol)有关。

我理解这些问题并不意味着什么,因为可以快速尝试所有可能的逻辑选项并进行测试,但问题是测试者的错误不允许我这样做,但有机会在真实交易模式下对M1进行实际诊断。

 
Lester:
...

我理解这些问题并不意味着什么,因为你可以快速尝试所有可能的逻辑选项并进行测试,但问题是,测试者的错误不允许我这样做,但有机会在真实交易模式下对M1进行实际诊断。

我不太明白你的问题。

那么你在测试器中发现了什么错误,使你无法运行测试?

 
tol64:

我不太明白你的问题。

测试器中的错误是什么,使你无法运行测试?

我在前面或在指示器分支中描述了它。Dema指的是MFI指标手柄不显示在MFI窗口,因此测试器不工作,但专家顾问工作。与MA、AMA一样...!

关于这个问题。我们应该写什么来代替问号,以使专家顾问 "理解 "有一个未结头寸,而不是开出一个订单!

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
前面描述的,或在指标分支中描述的。Dema指的是MFI指标手柄--不显示在MFI窗口,因此--专家顾问不工作。医学硕士也是如此,AMA也是如此。关于这个问题。我们应该写什么来代替问号,以便让EA "看到 "

有一个未平仓的头寸,而不会开出一个订单!

如果有一个位置(PositionSelect(_Symbol)),并且所有其他条件都满足,那么就关闭这个位置。如果不删除你的例子中的返回,条件应该是这样的

if(!PositionSelect(_Symbol))
  {
   return;
  }

这意味着如果没有位置,就退出。如果不退出,程序将执行此块之后的代码。

但我想在关闭条件检查之前,先检查位置的存在/不存在。