[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 - 5. - page 234

 

J'AI VRAIMENT BESOIN D'AIDE POUR REDESSINER MON EA ! !!

Je suis content de tout ce qu'il contient, j'aimerais juste pouvoir ..... Si vous ne pouvez pas traduire une transaction pour atteindre le seuil de rentabilité ou clôturer à la prise de bénéfices, alors clôturez-la à l'opposé d'un nouveau signal d'ouverture sans changer la stratégie de trading. Par exemple, si la transaction de vente s'est retournée et que Owls ne l'a pas transférée au Breakeven, il commence une nouvelle bougie pour ouvrir une transaction de vente avec un volume croissant en espérant un pullback, et je veux qu'il continue à travailler comme s'il avait fermé la transaction au Stop Loss/Take... si le prix s'inverse, il ouvre l'achat, et ferme celui-là, bien qu'avec un grand minus..... Comme ceci

/*décompilé supprimé*/

 
deyron:
Bonjour. Pouvez-vous nous dire si un EA est attaché à plusieurs fenêtres de paires de devises, les changements dans l'EA d'une fenêtre affectent l'EA d'une autre fenêtre ? c'est-à-dire que les variables locales changent ou non ?
Non, ils ne s'influencent pas mutuellement. La même position magique ne peut être nuisible que lorsque l'EA détermine la fermeture de la position uniquement par magie.
 

Bonne journée à tous. Veuillez m'aider à comprendre les variables globales. Le problème est le suivant : j'ai une variable bool line_1=false ; il passe à vrai ; lors de l'atteinte d'un prix et faire des niveaux d'atteinte qui seront d'autres actions et bool line_1 devient à nouveau faux ; je dois redémarrer le système ou les paramètres ne seront pas atteints le vendredi soir, les valeurs de cette variable sont perdues et affecteront le résultat du trading, comme je comprends je dois en faire des variables bool globales. je n'ai encore rien fait à ce sujet et j'ai besoin de vos conseils si je pense faire des corrections dans le code, s'il vous plaît dites-moi si quelque chose doit être fait, merci.

bool line_1=GlobalVariableGet(false) ;

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Si le code est construit de cette manière, alors lors du redémarrage du terminal, la variable laissera-t-elle sa valeur précédente au moment du redémarrage ou sera-t-elle réinitialisée à l'état déclaré au début du programme ? Merci encore !

 
paladin80:
Non, ils ne s'influencent pas mutuellement. La magie de la même position ne peut être que préjudiciable lorsque l'EA détermine la fermeture de la position par magie uniquement.

Oui, vous pouvez bien sûr filtrer différemment. Par exemple, par symbole, etc. J'ai dit l'option la plus simple.
 
laveosa:

Bonne journée à tous. s'il vous plaît, aidez-moi à comprendre les variables globales. le problème est le suivant : j'ai une variable bool line_1=false ; il passe à vrai ; lors de l'atteinte d'un prix et faire des niveaux d'atteinte qui seront d'autres actions et bool line_1 devient à nouveau faux ; je dois redémarrer le système ou les paramètres ne seront pas atteints le vendredi soir, les valeurs de cette variable sont perdues et affecteront le résultat du trading, comme je comprends je dois en faire des variables bool globales. je n'ai encore rien fait à ce sujet et j'ai besoin de vos conseils si je pense faire des corrections dans le code, s'il vous plaît dites-moi si quelque chose doit être fait, merci.

bool line_1=GlobalVariableGet(false) ;

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Si le code est construit de cette manière, alors lors du redémarrage du terminal, la variable laissera-t-elle sa valeur précédente au moment du redémarrage ou sera-t-elle réinitialisée à l'état déclaré au début du programme ? Merci encore !

Tout d'abord, lisez ce qui concerne GlobalVariableSet() - il vous manque des paramètres et vous l'utilisez de manière incorrecte.

Et la séquence des opérations est la suivante : lorsque la valeur de la variable que vous voulez sauvegarder change, cette valeur est passée à la variable globale appropriée du terminal en utilisant cette fonction. Et lorsque vous réinitialisez l'EA dans init(), vous transmettez sa valeur à la variable via la fonction GlobalVariableGet().

 

Messieurs, donnez-moi un indice !

J'essaie de mettre en œuvre une idée simple qui est décrite dans les commentaires du programme.

Le programme ouvre des ordres dans le TESTER à un prix qui ne coïncide pas avec celui spécifié dans le code.

Par exemple, l'ordre s'ouvre au prix de 0,86084, alors que la valeur la plus proche dans le tableau est 0,85375.

La différence est positive alors que le code spécifie d'ouvrir des ordres si la différence est < 0.00000, c'est-à-dire négative.


Veuillez nous indiquer où se trouve l'erreur.

Merci.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
 
solnce600:

Messieurs, donnez-moi un indice !

J'essaie de mettre en œuvre une idée simple qui est décrite dans les commentaires du programme.

Le programme ouvre des ordres dans le TESTER à un prix qui ne coïncide pas avec celui spécifié dans le code.

Par exemple, l'ordre s'ouvre au prix de 0.86084 avec la valeur la plus proche 0.85375 dans le tableau.

La différence est positive, alors que le code spécifie d'ouvrir des ordres si la différence est < 0.00000, c'est-à-dire négative.

Veuillez nous indiquer où se trouve l'erreur.

Merci.

La meilleure façon de trouver l'erreur est de parcourir chaque ligne de bas en haut et de voir comment elle correspond à ce que vous voulez obtenir et à ce qui est écrit.

if ((NormalizeDouble (Bid-massiv[S],Digits) <=0))
//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000
Cette condition présuppose que... - C'est ce que vous vouliez ? (1 - 1000000 <= 0) - satisfait ? ??

Je t'ai donné une solution et tu l'as "laissée passer"...

 
TarasBY:

La façon de trouver les erreurs : parcourez chaque ligne de bas en haut et réalisez la correspondance entre ce que vous vouliez et ce qui est écrit.

Cette condition suppose que... - C'est ce que vous vouliez ? (1 - 1000000 <= 0) - cela satisfait-il ? ???

Je t'ai donné une solution et tu l'as "laissée passer"...

Merci beaucoup. J'ai même copié votre conseil pour moi-même.... je n'ai juste pas tout compris..... excusez ma stupidité .... Je vais me creuser les méninges et essayer de trouver une solution.

Je ne comprends pas pourquoi vous prenez la valeur variable Bid (prix du dernier tick) comme 1. Je suppose que c'est une valeur à 6 chiffres avec un point décimal après le premier... et la valeur de

Dites-moi ce que je peux comprendre de travers.

J'ai étudié votre code avec attention.

double ld_Delta = 10. * Point ;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
et ce prix est le prix d'ouverture d'une nouvelle barre
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//ouvrirl'ordre


Mais je ne comprends pas

-Pourquoi suggérez-vous d'utiliser la variable Price au lieu de la variable massiv[S] ? Il contient le prix ouvert de la dernière barre.

Mon idée est que l'une des conditions nécessaires pour ouvrir un ordre est la coïncidence de son prix d'ouverture avec l'une des valeurs du tableau les plus proches du prix du dernier tick.

Ma stratégie dans son ensemble ressemble à ceci

OUVRIR LA COMMANDE si 2 conditions sont remplies en même temps

-Le prix ouvert de la dernière bougie

au prix le plus proche de l'une des valeurs du tableau (valeurs du tableau - environ 2000 valeurs de prix d'offre non répétitives dans un ordre aléatoire).

Je vous serai très reconnaissant de m'aider et de me donner des conseils, mais cela fait deux jours que je me pose des questions à ....., en vain.


	          
 
solnce600:

Merci beaucoup. J'ai même copié votre conseil.... mais je ne l'ai pas bien compris..... désolé pour la stupidité .... Je vais me creuser les méninges pour essayer de comprendre.

Je ne comprends pas pourquoi vous prenez la valeur variable Bid (prix du dernier tick) comme 1. Je suppose que c'est une valeur à 6 chiffres avec un point décimal après le premier... et la valeur de

Dites-moi ce que je peux comprendre de travers.

J'ai étudié votre code avec attention.

double ld_Delta = 10. * Point ;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
et ce prix est le prix d'ouverture d'une nouvelle barre
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//ouvrirl'ordre

Mais je ne comprends pas

-Pourquoi suggérez-vous d'utiliser la variable Prix au lieu de la variable massiv[S] ? Il contient le prix ouvert de la dernière barre.

Mon idée principale est que l'une des conditions nécessaires pour ouvrir un ordre est la coïncidence de son prix d'ouverture avec l'une des valeurs du tableau les plus proches du prix du dernier tick.

Ma stratégie dans son ensemble ressemble à ceci

OUVRIR LA COMMANDE si 2 conditions sont remplies en même temps

-Le prix ouvert de la dernière bougie

au prix le plus proche de l'une des valeurs du tableau (valeurs du tableau - environ 2000 valeurs de prix d'offre non répétitives dans un ordre aléatoire).

Je vous serai très reconnaissant de m'aider et de me donner des conseils. Cela fait deux jours que je me creuse la tête sur ....., mais cela n'a aucun effet.

Pour comprendre ce qui se passe, je dois envoyer les calculs à l'imprimante :

    //если разница между значением массива возвращенным на последнем тике 
    // и ценой последнего тика отрицательная или = 0.00000
    if ((NormalizeDouble (Bid-massiv[S], Digits) <= 0))
    {
        Print ("massiv[", S , "] = ", massiv[S], " | massiv[", S - 1, "] = ", massiv[S-1], " | massiv[", S + 1, "] = ", massiv[S+1], " | Bid = ", Bid);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыт
    }
et analyser les résultats.
 
Pouvez-vous nous dire s'il est possible d'ouvrir une position manuellement dans le testeur de stratégie Metatrader4 au lieu d'utiliser un conseiller expert ? Afin de ne pas calculer les pips dans une calculatrice, mais d'appuyer sur le bouton, une fenêtre d'ouverture d'ordre apparaîtra, remplissez les données et appuyez sur F12 et le testeur lui-même calculera comme lors de l'ouverture par un EA. Peut-être existe-t-il un programme prêt à l'emploi à cette fin, mais je ne l'ai pas trouvé dans mes recherches.