Demandez ! - page 176

 

PS : juste pour rappeler - le 3ème paramètre dans l'appel iCustom() est le nom de l'indicateur. Le premier paramètre est le symbole et le second paramètre est le cadre temporel souhaité.

mladen:
Faites comme ceci :
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

J'appelle un indicateur personnalisé en utilisant icustom dans une boucle pour plusieurs paires. Je peux voir dans l'onglet experts que l'indicateur est déchargé puis rechargé pour la paire suivante. Cela signifie-t-il que l'appel iCustom recalcule les valeurs pour l'ensemble des barres maximales du graphique à chaque fois qu'il est chargé ? De même, si vous l'appelez pour la barre N puis la barre N+1 en tant qu'appels successifs distincts, le deuxième appel nécessite-t-il un recalcul complet ? Et enfin, si les appels successifs concernent des tampons différents, chacun d'eux est-il recalculé ?

Je me souviens que vous avez dit que chaque appel iCustom génère une instance distincte, donc je présume que chacun est recalculé dans son intégralité.

Merci pour votre réponse,

Tzuman

 

Tzuman,

Metatrader crée une nouvelle instance de l'indicateur pour chaque nouvel ensemble de valeurs de paramètres (à l'exception du numéro de tampon et de l'index).

Un exemple - les deux appels suivants :

iCustom(NULL,0, "name",1,0,0) ;

iCustom(NULL,0, "name",2,0,0) ;

créeront deux instances d'un indicateur (même si vous utilisez par exemple "n" au lieu de 1 et 2 et que vous attribuez des valeurs différentes à n avant un nouvel appel à iCustom(), cela créera des instances séparées. C'est pourquoi certains indicateurs adaptatifs ne peuvent pas être écrits en utilisant iCustom() mais doivent être faits sous forme de fonctions).

Voilà pour les instances. Mais si l'indicateur est chargé puis déchargé, il s'agit généralement d'un problème de paramètres (la partie déchargement l'indique généralement). Si les types de paramètres ne correspondent pas, l'indicateur fera la cascade "chargement - déchargement". Vérifiez si par accident certains des paramètres passés à iCustom ne sont pas du type attendu (ou si certains des paramètres sont accidentellement omis et que cela pourrait causer une confusion des types de paramètres).

Tzuman:
MLaden

J'appelle un indicateur personnalisé en utilisant icustom dans une boucle pour plusieurs paires. Je peux voir sur l'onglet experts que l'indicateur est déchargé et ensuite rechargé pour la paire suivante. Cela signifie-t-il que l'appel iCustom recalcule les valeurs pour l'ensemble des barres maximales du graphique à chaque fois qu'il est chargé ? De même, si vous l'appelez pour la barre N puis la barre N+1 en tant qu'appels successifs distincts, le deuxième appel nécessite-t-il un recalcul complet ? Et enfin, si les appels successifs concernent des tampons différents, chacun d'eux est-il recalculé ?

Je me souviens que vous avez dit que chaque appel iCustom génère une instance distincte, donc je présume que chacun est recalculé dans son intégralité.

Merci pour votre réponse,

Tzuman
 

Je ne voulais pas interrompre vos récentes discussions.

veuillez consulter ce nouveau fil de discussion

https://www.mql5.com/en/forum/182212

 

Comme je le vois, mrtools a déjà résolu le problème.

MaaTini:
Je ne voulais pas interrompre vos récentes discussions.

veuillez consulter ce nouveau fil de discussion

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman,

Metatrader crée une nouvelle instance de l'indicateur pour chaque nouvel ensemble de valeurs de paramètres (à l'exception du numéro de tampon et de l'index).

Un exemple - les deux appels suivants :

iCustom(NULL,0, "name",1,0,0) ;

iCustom(NULL,0, "name",2,0,0) ;

créeront deux instances d'un indicateur (même si vous utilisez par exemple "n" au lieu de 1 et 2 et que vous attribuez des valeurs différentes à n avant un nouvel appel à iCustom(), cela créera des instances séparées. C'est pourquoi certains indicateurs adaptatifs ne peuvent pas être écrits en utilisant iCustom() mais cela doit être fait sous forme de fonctions).

Voilà pour les instances. Mais si l'indicateur est chargé puis déchargé, il s'agit généralement d'un problème de paramètres (la partie déchargement l'indique généralement). Si les types de paramètres ne correspondent pas, l'indicateur fera la cascade "chargement - déchargement". Vérifiez si par accident certains des paramètres passés à iCustom ne sont pas du type attendu (ou si certains des paramètres sont accidentellement omis et que cela pourrait causer le mélange des types de paramètres).

Merci beaucoup pour l'explication. J'ai supposé que le chargement/déchargement était dû au fait que le symbole changeait à chaque itération de la boucle et qu'il fallait donc charger toutes les nouvelles valeurs de données,

par exemple iCustom("EURUSD",0, "name" ,1,0,0) ; & iCustom("GBPUSD",0,name" ,1,0,0) ;

Je vais vérifier soigneusement les paramètres mais j'ai procédé à l'écriture de mes propres fonctions de moyenne MA avec un certain plagiat. En regardant l'utilisation du processeur dans le Gestionnaire des tâches, il semble que mon utilisation du cpu ait diminué de 90-95%. Je suis content

 

bonjour gourou je suis débutant en codage pouvez-vous m'aider à "arrêter l'ouverture d'un ordre multiple lorsque le takeprofit est atteint" j'ai essayé le code comme ceci mais cela ne fonctionne pas. pouvez-vous m'aider s'il vous plait.

static datetime closeT ;

for(int a=OrdersHistoryTotal()-1; a>=0 ; a--) {si(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {si(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime() ; if((buy==true || sell==true) && closeT==Time[0]){buy=false ; sell=false;} } } }

 

merci mladen, je vais essayer votre code.

 
RBarias:
Bonjour gourou, je suis débutant en codage, pouvez-vous m'aider à "arrêter l'ouverture d'un ordre multiple lorsque le takeprofit est atteint". J'ai essayé un code comme celui-ci, mais il ne fonctionne pas. Pouvez-vous m'aider s'il vous plaît ?

staticdatetime closeT ;

for(int a=OrdersHistoryTotal()-1; a>=0 ; a--) {si(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {si(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime() ; if((buy==true || sell==true) && closeT==Time[0]){buy=false ; sell=false;} } } }

Vous pouvez essayer quelque chose comme ceci (cela vérifiera si le dernier ordre fermé est fermé sur une barre actuelle et si un take profit a été atteint) :

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Salut mladen,

Votre script Symbols.mq4 a parfaitement fonctionné dans MT4 build 509, mais il génère une erreur de fichier dans le build 636 (lors de l'ouverture de symbols.raw).

Auriez-vous l'amabilité de partager une version mise à jour pour MT4 build 636 ?

Merci beaucoup d'avance.

Salutations,

Timo.