[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 240

 
artmedia70:
这就是你能看到的所有区别吗?
我只看到了这些,因为我没有看其他的,看灰色代码不方便。
 
artmedia70:

也许这就是方法。:

//===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0;  cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}
//===================================================================================



一切工作都很完美!!!!!!!!!!!
 

我的理解是否正确,如果我在测试器中优化了三个bool参数,它将运行它们的所有9个组合值? 也就是说。

1) bool1=true, bool2=true, bool3=true。
2) bool1=true, bool2=true, bool3=false。
3) bool1=true, bool2=false, bool3=true。
4) bool1=true, bool2=false, bool3=false等等。
 
eddy:

我的理解是否正确,如果你在测试器中优化了三个bool参数,它将运行它们的所有9种组合值......?

在我看来,在优化过程中,bool不能分步运行。我用int代替,从0到1运行。
 

我以为你可以直接输入一个bool,它将运行真假变体。

我以前从未使用过优化,我正在熟悉这个话题

 
试一试吧。这对我来说并不奏效。
 
daytrader19:

亲爱的同事们, MQL编程方面 还是一个完全的 "傻瓜",我最近才开始研究这个话题。但我已经开始写我的第一个专家顾问,或者至少我试图这样做。

本主题的第182页 ,我已经列出了该EA应遵循的交易标准。请看它是怎么说的(页面上的最后一个帖子)。我已经挣扎了三个星期,我仍然不能在这里写出负责交易标准的那部分代码。我读过专门讨论这个问题教程章节,但在这个特定的案例中,它没有帮助我

在我的编程战斗中,我已经写了几十种这部分代码的变体,但没有一种能正常工作。显然我没有足够的知识, 不能那么快 掌握MQL 总之,这里是其中一个代码变体,它的工作原理,至少是近似于我希望的那样。

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 0);
 double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1);
 double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1);
 double StochM = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1);
 double StochS = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
 if (SAR < Low[1])
   {
    Signal = 3;                                                          // Закрытие SELL
    if (StochM > StochS && StochM >= 80 && StochS >= 80 && High[1] >= EnvUp && SAR < Open[1])
      Signal = 1;                                                         // Открытие BUY
   }   
 
 if (SAR > High[1])
   {
    Signal = 4;                                                           // Закрытие BUY
    if (StochM < StochS && StochM <= 20 && StochS <= 20 && Low[1] <= EnvDn && SAR > Open[1])
      Signal = 2;                                                        // Открытие SELL
   }   
// - 2 - == Окончание блока =============================================================
}

我知道代码都是歪歪斜斜的,一般来说 海湾位置 卖出的位置 是混在一起 但这是代码的唯一变体,当随机指数和包络线一起交易时,不会相互忽视。同时,由于某些原因,抛物线信号在交易中不被考虑。总 之,请不要因为这样的 "屁股 "骂我太多,我很清楚代码是不正确的。

请帮助我,请修复我的专家顾问的代码。我对它感到很难受。我已经实施了更容易的策略(Mooving + Momentum;Mooving +RSI),但我不能用这个策略来做请帮助。请重写所有错误的线条,使我的EA按照我在第182页上 描述的规则进行交易。我真的需要它。

P.S.: 我没有编写专家顾问的全部代码,因为我使用了现成的 MQL模板

我想我知道了我的主要(也许不是唯一)错误是什么。我的交易标准中的所有条件都是用逻辑上的 "和 "来组合。就我的理解,这意味着所有条件必须同时满足。但根据系统规则,这是不正确的。 Envelope和Stochastic的信号应该是同步的 - 是的。但抛物线应该 收到包络线和随机 指数的信号确认开仓 甚至可能发生(这很正常),它在5-10个小节后确认。

问题:如何将这个 "后 "放到代码中? 如果可以的话,请给我看一个我的代码的例子。
请帮助我。我已经对这些交易标准感到疲惫不堪。
 
eddy:

我的理解是否正确,如果测试者优化了三个bool参数,它将运行它们的所有9种组合值? 即


2的三次方一直是8:-)
 
daytrader19:

我想我已经知道我的主要(也许不是唯一)错误是什么了。我的交易标准中的所有条件都是用一个逻辑上的 "和 "凑在一起的。根据我的理解,这意味着所有条件必须同时满足。但根据系统规则,这是不正确的。 Envelope和Stochastic的信号应该是同步的 - 是的。但抛物线应该 收到包络线和随机 指数的信号确认开仓 它甚至可能发生(这很正常),它可以在5-10个柱子后确认头寸。

我的问题是:我如何在我的代码中粘贴这个 "后"? 如果可能的话,请给我看一个我的代码的例子。
请帮助我。我只是对这些交易标准感到疲惫。


那就试试吧,我已经把你的代码固定在这一页上了--自己没有检查--注意注释。

均如第182页所述。

bool Buy_signal=false, Sell_signal=false; // эту строку разместить в глобальные переменные эксперта!!!!!!!!!!

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 1);                            // тут тоже правки в коде - вместо "0"-го используем первый бар 
 double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1);
 double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1);
 double StochM1 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1);
 double StochS1 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1);
 double StochM2 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 2);
 double StochS2 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 2);

// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
   if (SAR > High[1]) {Buy_signal=false; Sell_signal=false;                                 // сбрасываем флаги условий открытия по стохастику и энвелопсу 
                       Signal = 4;}                                                         // Закрытие BUY

   if (SAR < Low[1])  {Buy_signal=false; Sell_signal=false;

                       Signal = 3;}                                                         // Закрытие Sell

    
   if ( StochM2 < StochS2 && StochM1 > StochS1 &&  StochM1 <= 20 && Low[1] <= EnvDn)        // ставим флаги условий открытия по стохастику и энвелопсу в лонг 
       { 
          Buy_signal=true;
          Sell_signal=false;
        }          
    if (SAR < Low [1] && Buy_signal==true &&  Sell_signal==false) 
         Signal = 1;                                                         // Открытие BUY
      
 
     
   if ( StochM2 > StochS2 && StochM1 < StochS1 &&  StochM1 >= 80 && High[1] >= EnvUp)        // ставим флаги условий открытия по стохастику и энвелопсу в шорт
       { 
          Buy_signal=false;
          Sell_signal=true;
        }          
    if (SAR > High [1] && Buy_signal==false &&  Sell_signal==true) 
          Signal = 2;                                                        // Открытие SELL
      
// - 2 - == Окончание блока =============================================================
}
 
Roger:

2的三次方一直是8:-)

不错的观察:-)))