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

 

Quel genre d'erreur est-ce, je le prends du côté du DC, une mauvaise séance d'entraînement ?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

Quel genre d'erreur est-ce, je le prends du côté du DC de mauvais débriefing ?

128

ERR_TRADE_TIMEOUT

Le délai d'attente a expiré


Pièce du manipulateur :

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

ERR_TRADE_TIMEOUT

Délai d'exécution de la transaction expiré


Pièce du manipulateur :

J'ai ces gestionnaires d'erreurs dans mon code, mais ils n'ont jamais existé. Aujourd'hui, j'ai décidé de vérifier mon programme à la démo d'une société de courtage populaire et j'ai été confronté à de tels bugs pour la première fois.

J'ai bien compris qu'il s'agit d'un problème matériel au niveau de la société de courtage et non de mon côté ?

 

L'idée est de calculer si le prix a dépassé le prix moyen pendant un certain nombre de bougies précédentes.

la fonction n'est pas exécutée du tout, le résultat devrait être : si elle n'est pas cassée returnToMA ==1, si elle est cassée returnToMA ==0

peut-être existe-t-il une autre solution à ce problème ?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

si(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))) {return(0);break;}

Si (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

sinon retour(1) ;

}

 
forexpipsrunner:

L'idée est de calculer si le prix a dépassé le prix moyen pendant un certain nombre de bougies précédentes.

la fonction n'est pas exécutée du tout, le résultat devrait être : si elle n'est pas cassée returnToMA ==1, si elle est cassée returnToMA ==0

Peut-être existe-t-il d'autres solutions à ce problème ?

Votre fonction aura toujours zéro car le maximum ou le minimum est toujours supérieur/moins ou égal à la MA.

Dans votre cas, le chandelier doit être décrit par au moins deux paramètres :

1) Définissez l'endroit où la bougie s'est ouverte - au-dessus ou au-dessous de la MA.

2. En fonction de 1, vérifiez si la MA a été touchée.

 
-Aleks-:

Vous aurez toujours zéro dans la fonction - car le maximum ou le minimum est toujours supérieur/moins ou égal à la MA.

Dans votre cas, le chandelier doit être décrit par au moins deux paramètres :

1. déterminer où la bougie s'est ouverte - au-dessus ou au-dessous de la MA

2. En fonction de 1, vérifiez si la MA a été touchée.

Merci. J'ai ajouté la condition mais elle renvoie toujours 1. Puis-je changer les parenthèses quelque part ? Ou bien la rupture ne fonctionne pas et la fonction se termine en assignant 1 à la valeur de retour.


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

sinon retour(1) ;

}

 
forexpipsrunner:

Merci. J'ai ajouté la condition, mais elle renvoie toujours 1. Puis-je changer les parenthèses quelque part ? Ou bien la rupture ne fonctionne pas et la fonction se termine en assignant 1 à la valeur de retour


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

sinon retour(1) ;

}


Essayez comme ceci

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

Il retournera 1 si la condition est remplie - il y a eu une intersection - n'est-ce pas ce que nous voulons ?

 
-Aleks-:

Essayez ceci

Il retournera 1 si la condition est remplie - il y a eu une intersection - n'est-ce pas ce que nous voulons ?

Merci, cela fonctionne comme sur des roulettes avec votre version du code.
 
forexpipsrunner:
Merci, cela fonctionne comme sur des roulettes avec votre version du code.

Heureux d'avoir pu vous aider.
 

Bonjour !

Les gars, pouvez-vous me dire si vous pouvez programmer l'affichage de l'indicateur sur le graphique? Ou seulement manuellement ?

Si c'est le cas, quel ordre est donné ?