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

 
ALex2008 >> :

Prenez le temps de lire le fil de discussion !

J'écris ici sur l'option

même si le COURTIER donne une requote ...


le code d'erreur 138 et un compte réel.

 

Si vous voulez parler de cette option et qu'elle se réfère à OrderModify

YuraZ писал(а) >>

допустим

получен сигнал -

на тике бъем на вход раз 5

не пробили! вышли

на втором тике после сигнала входим и долбим далше!

..alors je n'ai pas encore grandi aux tiques)))) Comment les comptabiliser : 1er tic, 2ème tic ?

Sleep(2000) ; // c'est une attente de 2 secondes après une erreur.

Et attendre une nouvelle tique pendant combien de temps ?


 
Talex >> :
Essayez comme ça.

J'ai maintenant la tâche de fixer un stop via OrderModify immédiatement après OpenSend et de vérifier si ce stop existe.

Si cela n'a pas fonctionné, ne le tracez plus, sinon, quelle est l'erreur et essayez de mettre... mettre... et mettre...).

RefreshRates();   
           double SLS = Ask+ Stop*Point;   //стоп на продажу
           Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
              if ( Modify == false)
                  {
                      Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());
                      for (int j=0 ;; j++) //пытаемся пока ДЦ не умрет)
                             {
                                SLS = SLS+ j*Point;   //увеличиваем стоп на 1 пп 
                                RefreshRates();
                                Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                   if ( Modify==true)
                                       break;
                                   else   
                                       Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());        
                              }
                  }
 
Pouvez-vous me dire comment vérifier le statut de OrderModify, de sorte qu'après une modification réussie, vous n'essayez pas de modifier à nouveau et d'obtenir des erreurs inutiles ?
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

remplacer par ceci :

ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) break;

ici :

1. pourquoi définir inu inutilement le type d'une variable - c'est une erreur qui devrait apparaître au cours de la compilation

2. au lieu de continue - pour passer à une nouvelle itération (c'est-à-dire à une nouvelle tentative de modification), utilisez break - sortie de la boucle (et de l'infini, ce qui n'est pas bon)

 
Xupypr >> :

1. pourquoi définir inutilement le type d'une variable - il s'agit d'une erreur qui devrait apparaître au moment de la compilation.

fixe)

2. au lieu de continuer - itération sautant à une nouvelle itération (c'est-à-dire une nouvelle tentative de modification), utilisez break - sortie de la boucle

>> Merci !

...et c'est sans fin, ce qui n'est pas bon...

infini parce qu'il est nécessaire de l'arrêter...

Et si je fais quelques tentatives et qu'elle est rejetée pour une raison quelconque et que le prix va loin contre la position pendant ce temps... Que faire alors ?

 

Erreurs dans le journal :

open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss #1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0

saisissez VENDRE

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




modifier VENDRE





void ModifySL() 
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()==0) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
                               
            else
                  RefreshRates();   
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()== 0) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         } 
   }




 
ALex2008 >> :

Si vous voulez parler de cette option et qu'elle se réfère à OrderModify

..alors je n'ai pas encore grandi aux tiques)))) Comment les comptabiliser : 1er tic, 2ème tic ?

Sleep(2000) ; // il s'agit d'une attente de 2 secondes après une erreur.

Et combien de temps faut-il attendre pour une nouvelle tique ?


à chaque tic

s'appelle

START()

{

}

---

notez que si vous restez longtemps dans la fonction START

vous pouvez manquer un ou plusieurs tics

Par exemple, si vous entrez dans une fonction START et restez assis pendant 10 minutes, il est logique que des tiques apparaissent mais vous ne les attraperez pas.

bien que vous puissiez ne pas avoir de tique pendant une longue période de nuit.

---

donc rester longtemps dans la fonction START est mauvais pour la capture des tiques (si elles sont importantes pour vous)

écrire des programmes économiques avec un minimum de cycles et de délais

---

 
YuraZ >> :

...gardez à l'esprit que si vous êtes dans la fonction START pendant un long moment

vous pouvez très bien manquer une ou plusieurs tiques

Par exemple, si vous êtes entré dans la fonction START et que vous y êtes resté pendant 10 minutes, il est logique que des tics apparaissent mais que vous ne les attrapiez pas.

bien que vous puissiez ne pas avoir de tique la nuit pendant une longue période.

---

donc rester longtemps dans la fonction START est mauvais pour la capture des tiques (si elles sont importantes pour vous)

Écrire des programmes économiques avec un minimum de cycles et de délais.

---

Si vous utilisez la fonction RefreshRates() avant de modifier ou de définir un ordre, elle ne fait que mettre à jour l'état en dehors de Start(), c'est-à-dire les ticks ?

Est-ce que je comprends bien ?

 

Voici la version finale de l'ouverture et la modification de la pose pour la critique.

Les "+" et les "-" de cette option ?

vente d'ouverture

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




arrêt des modifications





void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  bool Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
            else
               {
                  RefreshRates();   
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         }     
   }
Raison: