Sto imparando a scrivere un consigliere... - pagina 6

 
ALex2008 >> :

Prendetevi il tempo per leggere il thread!

Sto scrivendo lì sull'opzione

anche se il BROKER dà un requote ...


codice di errore 138 e un conto reale.

 

Se intendete questa opzione e si riferisce a OrderModify

YuraZ писал(а) >>

допустим

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

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

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

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

...allora non sono ancora cresciuto fino alle zecche))) Come contabilizzarli 1a spunta, 2a spunta?

Sleep(2000); // è un'attesa di 2 secondi dopo un errore

E aspettare una nuova zecca per quanto tempo?


 
Talex >> :
Prova così.

Ora ho il compito di impostare uno stop tramite OrderModify immediatamente dopo OpenSend e controllare se questo stop esiste.

Se non ha funzionato, non tracciarlo più, se no, qual è l'errore e prova a mettere... mettere... e mettere...)

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());        
                              }
                  }
 
Puoi dirmi come controllare lo stato di OrderModify, in modo che dopo una modifica riuscita non si provi a modificare di nuovo e si ottengano errori inutili?
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

sostituire con questo:

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

qui:

1. perché definire il tipo di variabile inutilmente - questo è un errore che dovrebbe apparire durante la compilazione

2. invece di continue - per passare a una nuova iterazione (cioè a un nuovo tentativo di modifica), usare break - uscita dal ciclo (e infinito, che non è buono)

 
Xupypr >> :

1. perché definire il tipo di variabile inutilmente - questo è un errore che dovrebbe apparire al momento della compilazione

fisso)

2. Invece di continue - iterazione che salta a una nuova iterazione (cioè un nuovo tentativo di modifica), usate break - uscita dal ciclo

>> Grazie!

...ed è senza fine, il che non è buono...

infinito perché è necessario fermarlo...

E se faccio un paio di tentativi e viene respinto per qualche motivo e il prezzo va molto contro la posizione durante questo tempo... Cosa fare allora?

 

Errori nel registro:

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

inserire VENDERE

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());             
               }
         }




modificare SELL





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 >> :

Se intendete questa opzione e si riferisce a OrderModify

...allora non sono ancora cresciuto a zecche))) Come contabilizzarli 1a spunta, 2a spunta?

Sleep(2000); // questo è un'attesa di 2 secondi dopo un errore

E quanto tempo aspettare per una nuova zecca?


ad ogni tick

si chiama

INIZIO()

{

}

---

notate che se state nella funzione START per molto tempo

potresti perdere una o più zecche

Per esempio, se entrate in una funzione START e rimanete lì per 10 minuti, è logico che le zecche arriveranno ma non le prenderete

anche se non si può avere una zecca per un bel po' di tempo durante la notte

---

così seduto in funzione START per un lungo periodo è male per la cattura delle zecche (se sono importanti per voi)

scrivere programmi economici con un minimo di cicli e ritardi

---

 
YuraZ >> :

...tenete presente che se state nella funzione START per molto tempo

si può anche perdere una o più zecche

Per esempio, siete entrati nella funzione START e siete stati lì per 10 minuti, è logico che le zecche arriveranno ma non le prenderete

anche se non si può avere una zecca di notte per molto tempo

---

quindi stare seduti nella funzione START per molto tempo è male per la cattura delle zecche (se sono importanti per voi)

Scrivere programmi economici con un minimo di cicli e ritardi.

---

Se usi la funzione RefreshRates() prima di modificare o impostare un ordine, aggiorna solo lo stato al di fuori di Start(), cioè i tick?

Ho capito bene?

 

Ecco la versione finale dell'apertura e la modifica della posa per la critica.

Il "+" e il "-" di questa opzione?

apertura vendita

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());             
               }
         }




fermare la modifica





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());
               }
         }     
   }