Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 51

 

Peut-être que je n'ai pas compris ma question.

Étant sur le graphique de la période M1, je veux remplir le tampon si sur la période M5, la ligne de l'indicateur " Stochastique " est maintenant au-dessus du niveau 55.

input ENUM_TIMEFRAMES   TimeFrame2  =  PERIOD_M5; //ЭТО ВО ВНЕШНИХ Н
////////////////////////////////////////////////
       for(int i=limit; i>=0; i--) {
      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
    
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
    
      if(sto2_0>55.0)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      
      if(sto2_0<44.0)
       {
      BufferDN[i]=high[i]+distance*MyPoint;
       }

      Comment(sto2_0);
       }

Dans le commentaire la valeur actuelle est correcte avec M5, mais sur l'historique les flèches mises pas sur condition, chaos.

Qu'est-ce que ça peut être ?

Dans le " sous-sol", le stochastique de M5

Les flèches sont encerclées pas selon le signal



xaoc
 

J'écris un Conseiller Expert qui place simultanément deux StopOrdres, un à la vente et un à l'achat.

Comment puis-je écrire la condition qui fait que lorsqu'un StopOrder se déclenche, le second (opposé) est supprimé ?

Merci.

 
RichLux:

J'écris un Conseiller Expert qui place simultanément deux StopOrdres, un à la vente et un à l'achat.

Comment puis-je écrire la condition qui fait que lorsqu'un StopOrder se déclenche, le second (opposé) est supprimé ?

Merci.

La condition est simple. Lorsqu'un StopOrder se déclenche, une position apparaît sur le marché, cela signifie que nous devons suivre cette position et si elle existe, nous devons supprimer l'ordre opposé.

Ceci est un morceau de code pour la réflexion)

void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1, color cl=clrOliveDrab) {
  bool b, s;
  switch(op) {
    case OP_BUY : b=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: s=ExistPositions(sy, OP_SELL, mn); break;
  }

  if(b) {
    DeleteOrders(sy, OP_SELLLIMIT, mn, cl);
    DeleteOrders(sy, OP_SELLSTOP , mn, cl);
  }
  if(s) {
    DeleteOrders(sy, OP_BUYLIMIT, mn, cl);
    DeleteOrders(sy, OP_BUYSTOP , mn, cl);
}}
 
Vitaly Muzichenko, d'après ce que je comprends, vous devez maintenant ajouter les fonctionsExistPositions etDeleteOrders.
 
RichLux:
Vitaly Muzichenko, d'après ce que je comprends, nous devons maintenant ajouter les fonctionsExistPositions etDeleteOrders.
Si, vous le faites.
 
RichLux:
Vitaly Muzichenko, d'après ce que je comprends, nous devons maintenant écrire les fonctionsExistPositions etDeleteOrders.
Vous n'avez pas besoin de les écrire, ils sont tous deuxprêts à l'emploi.
 
Vitaly Muzichenko:
Tu n'as pas besoin de les écrire, ils sont tous deuxprêts à l'emploi.

Eh bien..., à des fins éducatives, c'est assez utile...

Pour des raisons pratiques, il est très coûteux d'exécuter des cycles dans chaque fonction.

 
Artyom Trishkin:

Eh bien..., pour la formation, c'est très utile...

Pour des raisons pratiques, il est très coûteux d'exécuter des cycles dans chaque fonction.

C'est pourquoi je n'ai pas attaché tout de suite et j'ai décrit et attaché seulement la logique de la "fermeture du contraire").
 

Que faire si le stop/stop est de 200

mais

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits) ;

sur un dollar-yen rapportera 317.000 au taux de change de 117.000

le résultat attendu est 117.200

 
trader781:

Que faire si le stop/stop est de 200

mais

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits) ;

sur un dollar-yen rapportera 317.000 au taux de change de 117.000

le résultat attendu est 117.200

Pourquoi tant de parenthèses ? C'est une question de goût, bien sûr, mais c'est toujours trop.

tp=NormalizeDouble(price+TakeProfit*_Point,_Digits) ;

Les valeurs sont substituées de manière incorrecte si le résultat est incorrect dans la sortie, car cette ligne de code calculera tout correctement, même avec des parenthèses supplémentaires.
Raison: