[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 240

 
artmedia70:
Ist das der einzige Unterschied, den wir feststellen konnten?
alles, was ich gesehen habe, da ich mir den Rest nicht angesehen habe, ist es unpraktisch, den grauen Code zu lesen
 
artmedia70:

Vielleicht ist das der richtige Weg. :

//===================================================================================
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);
}
//===================================================================================



Alles funktioniert perfekt!!!!!!!!!!!
 

Verstehe ich das richtig, dass, wenn ich drei boolsche Parameter im Tester optimiere, alle 9 Kombinationen ihrer Werte durchlaufen werden, d. h.

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 usw.
 
eddy:

Verstehe ich das richtig, dass der Tester bei der Optimierung von drei boolschen Parametern alle 9 Kombinationen ihrer Werte durchläuft...?

Mir scheint, dass bool während der Optimierung nicht schrittweise ausgeführt werden kann. Ich nehme stattdessen int und lasse es von 0 bis 1 laufen.
 

Ich dachte, man könnte einfach ein bool eingeben und es würde die Varianten true und false ausführen.

Ich habe noch nie mit Optimierung gearbeitet, ich mache mich mit dem Thema vertraut

 
Probieren Sie es aus. Bei mir hat es nicht funktioniert.
 
daytrader19:

Liebe Kollegen, ich bin noch ein kompletter "Dummy"in der MQL-Programmierung, ich habe erst vor kurzem angefangen, mich mit diesem Thema zu beschäftigen. Aber ich habe bereits begonnen, meinen ersten Expert Advisor zu schreiben, oder ich habe es zumindest versucht.

Auf der 182. Seite dieses Themas habe ich die Handelskriterien dargelegt, nach denen dieser EA handeln sollte. Bitte lesen Sie, was dort steht (letzter Beitrag auf dieser Seite). Ich habe mich drei Wochen lang abgemüht und kann hier immer noch nicht den Teil des Codes schreiben, der für die Handelskriterien zuständig ist. Ich habedas Kapitel des Tutorials zu diesem Thema gelesen, aber es hat mir in diesem speziellen Fall nicht geholfen.

Ich habe während meiner Programmierkämpfe Dutzende von Varianten dieses Teils des Codes geschrieben, aber keine davon funktioniert richtig. Offensichtlich habe ich nicht genug Wissen, ichkannMQL nichtso schnell beherrschen. Wie auch immer, hier ist eine der Codevarianten, die zumindest annähernd so funktioniert, wie ich es möchte.

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
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 - == Окончание блока =============================================================
}

Ich weiß, dass der Code krumm und schief ist, und im Allgemeinen sinddie Buchtenpositionen und sell durcheinander. Dies ist jedoch die einzige Variante des Codes, bei der Stochastic und Envelope zusammen handeln, ohne sich gegenseitig zu ignorieren. Gleichzeitig werden parabolische Signale aus irgendeinem Grund beim Handel nicht beachtet. Wie auch immer, bitte schimpfen Sie nicht zu sehr über diesen "Arschtritt", ich bin mir durchaus bewusst, dass der Code nicht korrekt ist.

Bitte helfen Sie mir, bitte korrigieren Sie den Code meines Expert Advisors. Es fällt mir schwer, damit umzugehen. Ich habe einfachere Strategien implementiert (Mooving + Momentum; Mooving +RSI), aber ich kann es nicht mit diesem tun. Bitte um Hilfe. Bitte schreiben Sie alle falschen Zeilen um, damit mein EA nach diesen Regeln handelt, die ichauf Seite 182 beschrieben habe. Ich brauche es wirklich.

P.S.: Ich habe nicht den gesamten Code des Expert Advisors geschrieben, da ich vorgefertigte MQL-Vorlagen verwendet habe .

Ich glaube, ich habe herausgefunden, was mein Hauptfehler (und vielleicht nicht der einzige) war. Alle Bedingungen in meinen Handelskriterien sind mit einem logischen "und" verbunden. Soweit ich es verstanden habe, bedeutet dies, dass alle Bedingungen gleichzeitig erfüllt sein müssen. Nach den Regeln des Systems ist dies jedoch nicht korrekt. Die Signale von Envelope und Stochastic sollten synchron sein - ja. Aber der Parabolic sollte die Eröffnung einer Position bestätigen , nachdemer Signale vom Envelope und dem Stochastic erhalten hat. Es kann sogar vorkommen (und das ist ganz normal), dass er nach 5-10 Takten bestätigt.

Frage: Wie kann dieses "nach" in den Code eingefügt werden? Wenn es möglich ist, zeigen Sie mir bitte ein Beispiel für meinen Code.
Bitte helfen Sie mir sehr. Ich bin bereits mit diesen Handelskriterien überfordert.
 
eddy:

Verstehe ich das richtig, dass der Tester bei der Optimierung von drei boolschen Parametern alle 9 Kombinationen ihrer Werte durchläuft, d. h.


Zwei hoch drei war schon immer acht :-)
 
daytrader19:

Ich glaube, ich habe herausgefunden, was mein Hauptfehler (vielleicht nicht der einzige) war. Alle Bedingungen in meinen Handelskriterien sind mit einem logischen "und" zusammengefasst. Soweit ich das verstanden habe, bedeutet dies, dass alle Bedingungen gleichzeitig erfüllt sein müssen. Nach den Regeln des Systems ist dies jedoch nicht korrekt. Die Signale von Envelope und Stochastic sollten synchron sein - ja. Aber der Parabolic sollte die Eröffnung einer Position bestätigen , nachdemer Signale vom Envelope und dem Stochastic erhalten hat. Es kann sogar vorkommen (und das ist ganz normal), dass er Positionen nach 5-10 Balken bestätigen kann.

Meine Frage ist: Wie füge ich dieses "nach" in meinen Code ein? Wenn möglich, zeigen Sie mir bitte ein Beispiel für meinen Code.
Bitte helfen Sie mir sehr. Ich bin mit diesen Handelskriterien einfach überfordert.


Probieren Sie es aus, ich habe Ihren Code hier auf der Seite korrigiert - ich habe es nicht selbst überprüft - achten Sie auf die Kommentare.

Alles wie auf Seite 182 beschrieben.

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:

Zwei hoch drei war schon immer acht :-)

Gut beobachtet :-)))
Grund der Beschwerde: