[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 240

 
artmedia70:
È tutta qui la differenza che avete visto?
tutto quello che ho visto, dato che non ho guardato il resto, non è conveniente leggere il codice grigio
 
artmedia70:

Forse questo è il modo per farlo. :

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



Tutto funziona perfettamente!!!!!!!!!!!
 

Ho capito bene che se ottimizzo tre parametri bool nel tester, esso eseguirà tutte le 9 combinazioni dei loro valori?

1) bool1=vero, bool2=vero, bool3=vero,
2) bool1=vero, bool2=vero, bool3=falso,
3) bool1=vero, bool2=falso, bool3=vero,
4) bool1=vero, bool2=falso, bool3=falso ecc.
 
eddy:

Ho capito bene che se si ottimizzano tre parametri bool nel tester, esso eseguirà tutte le 9 combinazioni dei loro valori...?

Mi sembra che bool non possa essere eseguito a passi durante l'ottimizzazione. Prendo invece int e lo eseguo da 0 a 1.
 

Pensavo che si potesse semplicemente mettere un bool e che avrebbe eseguito le varianti true e false.

Non ho mai usato l'ottimizzazione prima, mi sto familiarizzando con l'argomento

 
Fate una prova. Non ha funzionato per me.
 
daytrader19:

Cari colleghi, sono ancora un completo "manichino"nella programmazione MQL, ho iniziato a studiare questo argomento abbastanza recentemente. Ma ho già iniziato a scrivere il mio primo Expert Advisor, o almeno ci ho provato.

Nella 182esima pagina di questo argomento ho esposto i criteri di trading con cui questo EA dovrebbe operare. Si prega di vedere cosa dice (ultimo post della pagina). Ho lottato per tre settimane e ancora non riesco a scrivere qui la parte di codice responsabile dei criteri di trading. Ho lettoil capitolo del tutorial dedicato a questo argomento, ma non mi ha aiutato in questo caso particolare.

Ho scritto decine di varianti di questa parte del codice durante le mie battaglie di programmazione, ma nessuna di esse funziona correttamente. Ovviamente non ho abbastanza conoscenze, non posso padroneggiareMQL così velocemente .Comunque, ecco una delle varianti di codice che funziona, almeno approssimativamente, come voglio io.

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

So che il codice è tutto storto e inclinato, e in generale le posizioni dellabaia e vendita sono mescolate. Ma questa è l'unica variante del codice, quando Stocastico e Inviluppo stanno scambiando insieme, senza ignorarsi a vicenda. Allo stesso tempo, i segnali parabolici non sono presi in considerazione nel trading per qualche motivo. Comunque, per favore non rimproveratemi troppo per questa "presa per il culo", sono ben consapevole che il codice non è corretto.

Per favore aiutatemi, correggete il codice del mio Expert Advisor. Sto avendo un momento difficile con questo. Ho implementato strategie più semplici (Mooving + Momentum; Mooving +RSI), ma questa funziona. Per favore, aiutatemi. Per favore riscrivete tutte le linee sbagliate per far sì che il mio EA commercializzi secondo queste regole, che ho descrittoa pagina 182. Ne ho davvero bisogno.

P.S.: Non ho scritto l'intero codice dell'Expert Advisor, perché ho usato modelli MQL già pronti .

Penso di aver capito qual è stato il mio errore principale (e forse non l'unico). Tutte le condizioni nei miei criteri di trading sono combinate con una "e" logica. Per quanto ho capito, significa che tutte le condizioni devono essere soddisfatte simultaneamente. Ma secondo le regole del sistema non è corretto. I segnali di Envelope e Stochastic dovrebbero essere sincronizzati - sì. Ma la Parabolica dovrebbe confermare l'apertura di una posizione dopo averricevuto segnali dall'Inviluppo e dallo Stocastico. Può anche succedere (e questo è abbastanza normale) che si confermi dopo 5-10 barre.

Domanda: come si può mettere questo "dopo" nel codice? Se è possibile, per favore mostratemi un esempio del mio codice.
Per favore, aiutatemi molto. Sono già esausto con questi criteri di trading.
 
eddy:

Ho capito bene che se il tester ottimizza tre parametri bool, eseguirà tutte le 9 combinazioni dei loro valori?


Due alla terza potenza è sempre stato otto :-)
 
daytrader19:

Penso di aver capito qual è stato il mio errore principale (forse non l'unico). Tutte le condizioni nei miei criteri di trading sono raggruppate con una "e" logica. Per quanto ho capito, questo significa che tutte le condizioni devono essere soddisfatte allo stesso tempo. Ma secondo le regole del sistema non è corretto. I segnali di Envelope e Stochastic dovrebbero essere sincronizzati - sì. Ma la Parabolica dovrebbe confermare l'apertura di una posizione dopo averricevuto segnali dall'Inviluppo e dallo Stocastico. Può anche succedere (e questo è abbastanza normale) che possa confermare le posizioni dopo 5-10 barre.

La mia domanda è: come faccio a incollare questo "dopo" nel mio codice? Se possibile, mostratemi un esempio del mio codice.
Per favore, aiutatemi molto. Mi sto esaurendo con questi criteri di trading.


Quindi prova, ho sistemato il tuo codice proprio qui nella pagina - non l'ho controllato io stesso - fai attenzione ai commenti.

Tutto come descritto a pagina 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:

Due alla terza potenza è sempre stato otto :-)

Bella osservazione :-)))
Motivazione: