[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 240

 
artmedia70:
C'est toute la différence que vous avez pu voir ?
tout ce que j'ai vu, car je n'ai pas regardé le reste, ce n'est pas pratique de lire le code gris
 
artmedia70:

Peut-être que c'est la façon de faire. :

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



Tout fonctionne parfaitement !!!!!!!!!!!
 

Dois-je comprendre que si j'optimise trois paramètres bool dans le testeur, il exécutera les 9 combinaisons de leurs valeurs ?

1) bool1=vrai, bool2=vrai, bool3=vrai,
2) bool1=vrai, bool2=vrai, bool3=faux,
3) bool1=vrai, bool2=faux, bool3=vrai,
4) bool1=vrai, bool2=faux, bool3=faux etc.
 
eddy:

Est-ce que je comprends bien que si vous optimisez trois paramètres bool dans le testeur, il exécutera les 9 combinaisons de leurs valeurs... ?

Il me semble que bool ne peut pas être exécuté par étapes pendant l'optimisation. Je prends int à la place et je le fais passer de 0 à 1.
 

Je pensais que l'on pouvait simplement mettre un bool et que cela ferait fonctionner les variantes true et false.

Je n'ai jamais utilisé l'optimisation auparavant, je me familiarise avec le sujet.

 
Essayez-le. Ça n'a pas marché pour moi.
 
daytrader19:

Chers collègues, je suis encore un parfait "nigaud"en matière de programmation MQL, j'ai commencé à étudier ce sujet assez récemment. Mais j'ai déjà commencé à écrire mon premier conseiller expert, ou du moins j'ai essayé.

Sur la 182ème page de ce sujet, j'ai défini les critères de négociation de cet EA. Veuillez voir ce qu'il dit (dernier message de la page). Cela fait trois semaines que je me démène et je n'arrive toujours pas à écrire ici la partie du code responsable des critères de négociation. J'ai lu lechapitre du tutoriel consacré à ce sujet, mais il ne m'a pas aidé dans ce cas particulier.

J'ai écrit des dizaines de variantes de cette partie du code au cours de mes batailles de programmation, mais aucune ne fonctionne correctement. Il est évident que je n'ai pas assez de connaissances, jene peux pas maîtriserMQL aussi rapidement .Quoi qu'il en soit, voici l'une des variantes du code qui fonctionne, du moins approximativement, comme je le souhaite.

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

Je sais que le code est tout croche et incliné, et qu'en général les positions des baies et sell sont mélangées. Mais c'est la seule variante du code, lorsque le Stochastique et l'Enveloppe négocient ensemble, sans s'ignorer. En même temps, les signaux paraboliques ne sont pas pris en compte dans le trading pour une raison quelconque. Quoi qu'il en soit, ne me grondez pas trop pour un tel "coup de pied au cul", je suis bien conscient que le code n'est pas correct.

S'il vous plaît aidez-moi, s'il vous plaît fixer le code de mon conseiller expert. J'ai du mal à le supporter. J'ai mis en œuvre des stratégies plus faciles (Mooving + Momentum ; Mooving +RSI), mais celle-ci fonctionne. Aidez-moi, s'il vous plaît. S'il vous plaît, réécrivez toutes les lignes incorrectes pour que mon EA trade selon ces règles, que j'ai décritesà la page 182. J'en ai vraiment besoin.

P.S.: Je n'ai pas écrit tout le code de l'Expert Advisor, car j'ai utilisé des modèles MQL prêts à l'emploi .

Je pense que j'ai trouvé quelle était ma principale (et peut-être pas la seule) erreur. Toutes les conditions de mes critères de négociation sont combinées par un "et" logique. D'après ce que je comprends, cela signifie que toutes les conditions doivent être remplies simultanément. Mais selon les règles du système, ce n'est pas correct. Les signaux de l'Enveloppe et de la Stochastique devraient être synchrones - oui. Mais le Parabolique devrait confirmer l'ouverture d'une position après avoirreçu les signaux de l'Enveloppe et du Stochastique. Il peut même arriver (et c'est tout à fait normal) qu'il confirme après 5 à 10 mesures.

Question : Comment mettre ce "après" dans le code ? Si c'est possible, veuillez me montrer un exemple de mon code.
Je vous en prie, aidez-moi beaucoup. Je suis déjà épuisé par ces critères de négociation.
 
eddy:

Dois-je comprendre que si le testeur optimise trois paramètres bool, il exécutera les 9 combinaisons de leurs valeurs ?


Deux à la troisième puissance a toujours été huit :-)
 
daytrader19:

Je pense que j'ai trouvé quelle était ma principale (peut-être pas la seule) erreur. Toutes les conditions de mes critères de négociation sont regroupées par un "et" logique. D'après ce que je comprends, cela signifie que toutes les conditions doivent être remplies en même temps. Mais selon les règles du système, ce n'est pas correct. Les signaux de l'Enveloppe et de la Stochastique devraient être synchrones - oui. Mais le Parabolique devrait confirmer l'ouverture d'une position après avoirreçu les signaux de l'Enveloppe et du Stochastique. Il peut même arriver (et c'est tout à fait normal) qu'il puisse confirmer des positions après 5 à 10 barres.

Ma question est la suivante : comment coller ce "après" dans mon code ? Si possible, veuillez me montrer un exemple de mon code.
Je vous en prie, aidez-moi beaucoup. Je commence à être épuisé par ces critères d'échange.


Essayez donc, j'ai corrigé votre code juste ici sur la page - je ne l'ai pas vérifié moi-même - faites attention aux commentaires.

Tout comme décrit à la page 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:

Deux à la troisième puissance a toujours été huit :-)

Belle observation :-)))