J'apprends à écrire un conseiller... - page 4

 

Si votre Expert Advisor est multi-devises, vous devez.

D'autant plus que les valeurs Bid et Point sontprobablement déjà fixées (énoncées) par MarketInfo().

Une fois que j'ai commencé une branche sur le conseiller expert multi-devises. Jetez-y un coup d'œil et certaines questions s'éclairciront. ....

Question sur le conseiller expert multi-devises.

 

Et ici, spécifiquement sur la modification

Question sur les conseillers multidevises

 

J'ai fait cette variante... Immédiatement après l'ouverture, j'appelle ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

Stop - 20.

TakeProfit - 100

Message dans le journal - OrderModify error 130

 

Essayez une position d'achat pour les positions de prise

Ask+ TakeProfit*Point

Pensez-y ! Comment se fait-il que pour une position d'achat, le take profit soit soudainement inférieur au prix actuel?

Pas étonnant qu'une erreur soit générée

Et de même pour la position de vente...

Si vous n'avez pas besoin de modifier Take Profit, il est préférable de le faire :

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
De même, pour le sell-side
 
rid >> :

Pensez-y ! Comment se fait-il que votre prise de profit sur une position d'achat soit soudainement inférieure au prix actuel ?

Pas étonnant qu'une erreur soit générée !

Rid merci beaucoup !

Je ne faisais pas attention)... cela a fonctionné et a même fonctionné)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

La dernière erreur qui apparaît maintenant dans le journal pendant les tests est l'erreur 138 deOrderSend.

Cette erreur se produit sans interruption lorsqu'il n'y a pas de transactions, c'est-à-dire que cette erreur se produit à chaque tick.

Dès qu'un ordre est déclenché, l'erreur disparaît... l'ordre se ferme et l'erreur repart...

Il semble qu'il essaie d'envoyer un ordre sans aucun signal... Mais je ne comprends pas pourquoi, puisqu'il y a une condition(si) pour vendre et acheter

 
ALex2008 писал(а) >>

La dernière erreur qui apparaît maintenant dans le journal pendant les tests est l'erreur 138 de OrderSend.

Cette erreur se produit sans interruption lorsqu'il n'y a pas de transactions, c'est-à-dire que cette erreur se produit à chaque tick.

Dès qu'un ordre est déclenché, l'erreur disparaît... l'ordre se ferme et l'erreur repart...

Il semble qu'il essaie d'envoyer un ordre sans aucun signal... Mais je ne comprends pas pourquoi, puisque nous avons des conditions(si) pour vendre et acheter.

ne pas lire attentivement lire https://book.mql4.com/ru/content tout est là

 

Lire et comprendre sont des choses différentes... Je veux comprendre en pratique)

Il y a une condition pour entrer, après que ces conditions soient remplies le contrôle est passé à la fonction qui ouvre la commande...

Je ne comprends pas comment l'OrderSend essaie de fonctionner en contournant les conditions... et logiquement il génère une erreur... car il n'y a pas de conditions d'entrée

 
bool RefreshRates( )

Rafraîchit les données dans les variables prédéfinies et les tableaux de séries chronologiques. Cette fonction est utilisée lorsqu'un conseiller expert ou un script effectue des calculs depuis longtemps et a besoin de données actualisées. Elle renvoie VRAI si les données sont mises à jour, sinon FAUX. Les données ne peuvent pas être mises à jour uniquement parce qu'elles correspondent à l'état actuel du terminal client. Les conseillers experts et les scripts travaillent avec leur propre copie des données historiques. La copie des données sur le symbole actuel est créée au premier lancement du conseiller expert ou du script. À chaque nouveau lancement du conseiller expert (rappelons que le script est exécuté une fois et ne dépend pas des ticks entrants), la copie initialement créée est mise à jour. Au cours de l'exécution du conseiller expert ou du script, un ou plusieurs nouveaux ticks peuvent apparaître, de sorte que les données peuvent devenir obsolètes.

//------------------------------------------------------------------------------

Essayez d'insérer cette fonction avant d'exécuter OrderSend

Voir aussi : Ordonnances d'ouverture et de fixation 2008-05. :

Ordres d'ouverture et de fixation2008-05-05 14:26:13

"Pour que le programme fonctionne de manière régulière, avec un nombre minimal d'ordres de transaction rejetés, avant d'exécuter la fonction OrderSend(), les paramètres de l'environnement d'information utilisés par le programme doivent être mis à jour à l'aide des fonctions MarketInfo() et RefreshRates()."

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

n'aide pas...

Raison: