Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Ne sois pas comme ça ))))
Ce n'est pas vraiment comme ça que ça marche. Les arguments de cette fonction sont 1) la chaîne à rechercher ; 2) la combinaison de caractères à trouver ; 3) le début de la recherche (par défaut, à partir du caractère nul de la chaîne de l'étape 1).
Elle renvoie le numéro de la position dans la chaîne, à laquelle la sous-chaîne recherchée commence, ou -1 si aucune sous-chaîne n'est trouvée.
Il faut donc l'écrire comme ceci :
Merci pour la réponse... Ainsi, la fonctionStringFind avec ses paramètres ( string_value, string match_substring, int start_pos=0 ) est écrite en code commun en une seule ligne avec
desarguments correspondant aux données des paramètres de la fonction : chaîne de caractères OrderComment(), chaîne de caractères "[tp]", int 0 et si cette expression (entre crochets) est supérieure à -1 , le code {entre crochets}suivant est exécuté
if(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit() ;
si(OrderSelect(12, SELECT_BY_POS)==true)
Print("Ordre #",OrderTicket()," profit : ", OrderTakeProfit()) ;
sinon
Print("OrderSelect() returned error ",GetLastError()) ;
bool PlaySound(
string payment // où "payment" estle nom du fichier dans le dossier MT4 Sound
) ;
}
... Ce code fonctionnera-t-il dans MQL4 ? ...
Merci pour la réponse ... Il s'avère que la fonctionStringFind avec ses paramètres ( string_value, string match_substring, int start_pos=0 ) est écrite dans le code commun en une seule ligne avec
desarguments correspondant aux données des paramètres de la fonction : chaîne de caractères OrderComment(), chaîne de caractères "[tp]", int 0 et si cette expression (entre crochets) est supérieure à -1 , le code {entre crochets}suivant est exécuté
if(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit() ;
si(OrderSelect(12, SELECT_BY_POS)==true)
Print("Ordre #",OrderTicket()," profit : ", OrderTakeProfit()) ;
sinon
Print("OrderSelect() returned error ",GetLastError()) ;
bool PlaySound(
string payment // où "payment" estle nom du fichier dans le dossier MT4 Sound
) ;
}
... Ce code fonctionnera-t-il dans MQL4 ? ...
double OrderTakeProfit() ; - le code devrait avoir une erreur lors de la compilation.
D'après ce que je comprends (je l'étudie encore moi-même), OrderTakeProfit() ; demande le profit de l'ordre au marché. Ainsi, notre Expert Advisor fait 2 requêtes pour ces quelques lignes OrderTakeProfit() ; il semble que cette ligne doive être supprimée (double OrderTakeProfit() ; )
Merci pour la réponse ... Il s'avère que la fonctionStringFind avec ses paramètres ( string_value, string match_substring, int start_pos=0 ) est écrite dans le code commun en une seule ligne avec
desarguments correspondant aux données des paramètres de la fonction : string OrderComment(), string "[tp]", int 0 et si cette expression (entre crochets) est supérieure à -1 , le code {entre crochets}suivant est exécuté
if(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit() ;
si(OrderSelect(12, SELECT_BY_POS)==true)
Print("Ordre #",OrderTicket()," profit : ", OrderTakeProfit()) ;
sinon
Print("OrderSelect() returned error ",GetLastError()) ;
bool PlaySound(
string payment // où "payment" estle nom du fichier dans le dossier MT4 Sound
) ;
}
... Ce code fonctionnera-t-il dans MQL4 ? ...
Cela a déjà été mentionné :double OrderTakeProfit() - ne le faites pas. Cette fonction est déclarée automatiquement et ne doit pas être annoncée à nouveau. Le compilateur générera une erreur, car les fonctions standard n'ont pas besoin d'être déclarées au préalable.
if(OrderSelect(12, SELECT_BY_POS)==true) - si nous le faisons, alors, au mieux, il s'agira d'un autre ordre, et non de celui pour lequel le commentaire a été traité ci-dessus. L'ordre doit déjà être sélectionné au tout début avantif(StringFind(OrderComment(),"[tp]",0)>-1) et le compteur de boucle doit être utilisé comme argument du numéro d'ordre, et non comme une constante, sinon le 12ème ordre sera vérifié à chaque itération.
Ils l'ont déjà dit :double OrderTakeProfit() - ne le faites pas. Cette fonction est déclarée automatiquement et ne doit pas être déclarée à plusieurs reprises. Le compilateur générera une erreur, car les fonctions standard n'ont pas besoin d'être déclarées au préalable.
if(OrderSelect(12, SELECT_BY_POS)==true) - si nous le faisons, alors, au mieux, il s'agira d'un autre ordre, et non de celui pour lequel le commentaire a été traité ci-dessus. L'ordre doit déjà avoir été sélectionné au tout début, avantif(StringFind(OrderComment(),"[tp]",0)>-1).
double OrderTakeProfit() ; - il est censé se planter ici lors de la compilation.
D'après ce que je comprends (je le comprends toujours moi-même), OrderTakeProfit() ; fait une demande de profit de l'ordre auprès du marché. Ainsi, notre Expert Advisor fait 2 requêtes pour ces quelques lignes OrderTakeProfit() ; il semblerait que cette ligne doive être supprimée (double OrderTakeProfit() ; )
Ils l'ont déjà dit :double OrderTakeProfit() - ne le faites pas. Cette fonction est déclarée automatiquement et ne doit pas être déclarée à plusieurs reprises. Le compilateur générera une erreur, car les fonctions standard n'ont pas besoin d'être déclarées au préalable.
if(OrderSelect(12, SELECT_BY_POS)==true) - si nous faisons cela, alors, au mieux, ce sera un autre ordre, et non celui pour lequel le commentaire a été traité ci-dessus. L'ordre doit déjà être sélectionné au début, avantif(StringFind(OrderComment(),"[tp]",0)>-1) et nous devons définir le compteur de boucle comme un argument du numéro d'ordre, et non comme une constante.
Merci pour la réponse ... La déclaration de la fonctiondouble OrderTakeProfit() est compréhensible, supprimons-la.
"Si nous n'avons qu'un seul compteur de boucle dans le code précédent, dans la fonctionOrdersHistoryTotal, la boucle pour l' opérateur avec le corps(i=0;i<accTotal;i++) doit êtreutilisée comme argument du numéro de commande, ce qui signifie que nous devons remplacer le corps de l'opérateur par le corps de la fonctionOrderSelect et nous l'obtiendrons
if(StringFind(OrderComment(),"[tp]",0)>-1)
{
si(OrderSelect(i=0;i<accTotal;i++)==true)
Print("Ordre #",OrderTicket()," profit : ", OrderTakeProfit()) ;
sinon
Print("OrderSelect() returned error ",GetLastError()) ;
bool PlaySound(
string payment // où"payment" estle nom du fichier dans le dossier MT4 Sound
) ;
}
... Ce code fonctionnera-t-il dans MQL4 ? ...
Merci pour la réponse ... La déclaration de la fonctiondouble OrderTakeProfit() est claire, supprimons-la.
Loop counter should be used as an argument of the order number" - dans le code précédent, nous n'avons qu'un seul compteur de boucle ; l'opérateur "for "dans la fonctionOrdersHistoryTotal a le corps(i=0;i<accTotal;i++), ce qui signifie que nous devrions remplacer le corps de l'opérateur par le corps de la fonctionOrderSelect, et nous l'obtiendrons :
Encore une fois. Dans le travail avec la commande, la première place doit être OrderSelect. Et puis tout le reste.
Si nous travaillons en boucle autour de la commande, l'ordre des opérations est le suivant
1. Vérification if(OrderSelect())
2. Pour vérifier s'il s'agit du bon ordre, nous vérifions généralement le symbole et le numéro magique, puis le type si(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) - dans ce cas, seuls les ordres de marché placés pour le symbole actuel et avec le numéro magique spécifié sont traités.
Traitement d'autres données comme OrderComment(), OrderProfit(), etc.
Cela ressemblerait à quelque chose comme ceci
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //если ордер выбран то работаем дальше, иначе смысла нет
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) //Если ордер тот, что нам нужен (эту проверку можно и опустить, если нужно обработать все ордера в истории)
{
if(StringFind(OrderComment(),"[tp]",0)>-1) //если найден признак закрытия профитом
Print("Order #",OrderTicket()," profit: ", OrderTakeProfit());
if(StringFind(OrderComment(),"[sl]",0)>-1) //если найден признак закрытия стоплосс
Print("Order #",OrderTicket()," loss: ", OrderTakeProfit());
}
}
}
Encore une fois. OrderSelect devrait se trouver en première place lorsqu'on travaille avec une commande. Puis tout le reste.
Ils ont décidé par essai et erreur apparemment, mais c'est cher, j'y suis allé moi-même...
Mes oreilles bourdonnent pour être honnête...
Comment puis-je vérifier s'il y a une valeur de signal dans le tampon de l'indicateur iCustom?