[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 741

 

Je l'ai dans le bureau de l'expert.

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);

if(tic1<0) Print(GetLastError());

return(0);}





 
artmedia70:
Les variables booléennes ne sont pas initialement initialisées à false, en général, avant d'entrer dans la boucle, mettez-les à zéro (false) - lorsque vous sortez de la boucle, elles auront les valeurs qui leur ont été attribuées dans la boucle (mieux vaut true que 1) et elles continueront à avoir ces valeurs jusqu'à la prochaine entrée dans la boucle. Si l'ouverture d'un ordre dépend strictement des valeurs de ces variables, alors, après l'ordre d'ouverture d'un ordre, on vérifie la présence de cette position sur le marché, et si elle est présente, on met les variables à zéro (faux)

et dans le code vous pouvez souligner

 
artmedia70:
Comparez la valeur ADX de la barre actuelle (ou de préférence la première barre) avec la valeur ADX de la barre précédente (de préférence la deuxième barre).

Si c'est simple, c'est quelque chose comme ça :

Mais ce n'est pas très joli. Il est préférable d'assigner les valeurs ADX à des variables doubles et de travailler avec les variables...






Merci beaucoup pour votre aide :)
 

Mes amis, je n'arrive pas à trouver comment me débarrasser des signaux inutiles qui apparaissent lorsque la ligne de tendance est inversée. La ligne de tendance (descendante dans l'exemple) est tracée de l'extrémité la plus grande à l'extrémité la plus petite, situées dans un intervalle de barres spécifié. Le problème est que dès qu'un nouvel extrême inférieur apparaît, la ligne de tendance saute à cet extrême (elle est conçue de cette façon).

Mais, également sur la première barre, la ligne de tendance trace des niveaux avec la valeur de la ligne de tendance, dont le croisement par la ligne indicatrice donne un signal. Si la ligne de l'indicateur sur la première barre est en dessous de ce niveau et sur la deuxième barre elle est au-dessus de ce niveau, alors nous avons un croisement top-down.

Alors... Lorsque la ligne de tendance saute vers un nouvel extrême inférieur, il se produit une situation où la ligne de l'indicateur sur la deuxième barre est au-dessus de la ligne de tendance et en dessous du niveau tracé, alors que sur la première barre elle est en dessous, c'est-à-dire un signal de vente inutile (dans ce cas) :


Dans l'image, vous pouvez voir comment la ligne de tendance a sauté vers un nouvel extremum (l'emplacement est marqué par une flèche vers le bas) et le niveau de prix de la nouvelle ligne de tendance sur la première barre (ligne horizontale en tirets rouges).
est devenue inférieure à la ligne AD de la deuxième barre et la ligne AD de la première barre est inférieure au niveau de prix...
En conséquence, en déplaçant la ligne de tendance vers une extrémité inférieure, un signal indésirable a été simulé... Le même signal inutile s'est produit plus tôt -
Je l'ai marqué avec une ligne verticale bleu clair...

D'où la question : comment éviter cette situation ? Je suis épuisé à essayer de penser à quelque chose...
Des idées ? Merci... :)

 
profitinvesting:
Merci beaucoup pour votre aide :)
Vous êtes les bienvenus :)
 
ToLik_SRGV:

Au tout début de la fonction de démarrage, ajoutez une ligne d'appel à cette fonction :

Le conseiller sera activé 1 fois, uniquement sur une nouvelle barre.

Cher Anatoly. Merci beaucoup pour ce code. Une autre question, comment faire pour qu'il fonctionne tout le temps, mais qu'il ne puisse faire qu'une seule transaction sur une barre ?
 
artmedia70:
après un ordre d'ouverture, vérifier si la position est déjà sur le marché et si c'est le cas, réinitialiser les variables (false)

Dites-moi comment cela peut être mis en œuvre dans ma commande ?

Quelle fonction dois-je insérer dans mes ordres pour les remettre à zéro ?

 
FoxUA:

Dites-moi comment cela peut être mis en œuvre dans ma commande ?

Quelle fonction dois-je insérer dans mon ordre pour le remettre à zéro ?


Il suffit de vérifier si l'ordre est dans le marché pour attribuer des valeurs aux variables. Par exemple, Variable1 = false ;
Les variables que vous avez définies comme "vraies" dans la boucle, ce qui était le critère pour passer la commande, doivent être de nouveau définies comme "fausses" après que la commande a été passée, sinon les commandes continueront à être passées par lots. Vous devez donc attribuer la valeur "false" à ces variables.
 
artmedia70:
Après avoir vérifié s'il existe un ordre sur le marché, il suffit d'attribuer des valeurs aux variables. Par exemple, Variable1 = false;
Les variables que vous avez mises à "vrai" dans la boucle, qui était le critère pour passer la commande, doivent à nouveau être mises à "faux" après que la commande ait été passée. Vous devez donc attribuer la valeur "false" à ces variables.

Je dois dire que je suis debout depuis deux jours à essayer de comprendre ce qu'il faut placer à partir de ce que vous avez dit, donc je n'ai rien compris. Pourriez-vous mettre ces valeurs dans le code que j'ai posté ou simplement écrire une fonction et me dire exactement où la placer - c'est la dernière partie de mon puzzle et je n'arrive pas à savoir où et comment la placer.

 
FoxUA:

Je dois dire que je n'ai pas dormi pendant deux jours et que j'ai lutté avec l'Expert Advisor parce que je ne comprends pas quoi et où mettre ce que vous avez dit, pouvez-vous mettre ces valeurs dans le code que j'ai posté ou simplement écrire la fonction et dire exactement où la mettre, c'est la dernière pièce de mon puzzle et je ne peux pas me concentrer sur où et comment la mettre.

Je ne veux pas toucher à votre code (maléfique, mais honnête :)). Dites-moi exactement ce que vous voulez obtenir comme résultat et je vous écrirai la fonction dont vous avez besoin. Honnêtement - ce sera plus facile pour moi. Je devrais m'occuper de mon propre code... :)

... Ou alors, allez vous coucher, dormez, et le lendemain, tous vos puzzles se mettront en place... :) C'est ce que je fais quand je ne comprends pas... Au fait, je vais me coucher - il est cinq heures et demie du matin...