Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 815

 
evillive:

E quando pensa che questo ciclo dovrebbe chiudersi?

?

Corretto:

if(R==0)

{

 while(true)

 {

  Sleep(30000);

  Alert("Ошибка!");

  DeleteBuy=OrderDelete(OrderTicketBuy);

  DeleteSell=OrderDelete(OrderTicketSell);

  return(1);

 }

}

Anche il calcolo del profitto.

Ho inserito un messaggio e la gestione degli errori nel ciclo while (true). Il ciclo funziona, il messaggio viene scritto, nessun errore. Ma non passa la condizione, i dati non sembrano essere aggiornati.

File:
test3_7.mq4  16 kb
 
CJIeCaPb:

Ho inserito un messaggio e la gestione degli errori nel ciclo while (true). Il ciclo funziona, il messaggio viene scritto, nessun errore. Ma non passa la condizione, i dati non vengono aggiornati.

Ecco qualche altro suggerimento.

Questo ciclo non considera tutti gli ordini; inoltre, se ci sono più di un ordine di un tipo (per esempio, tre ordini bystop), allora cosa succederà?

for(i=1;i<=OrdersTotal();i++)
{
 Alert(i);
 if(OrderSelect(i-1,SELECT_BY_POS)==true)
 {
  if(OrderSymbol()!=Symb)continue;
  if(OrderType()==OP_BUYSTOP)
  {
   OrderTicketBuy=OrderTicket();
   Alert("Buy");
   }
   if(OrderType()==OP_SELLSTOP)
   {
   OrderTicketSell=OrderTicket();
   Alert("Sell");
   }
  }
}


In realtà, dovrebbe essere il contrario: prima dovremmo scegliere un ordine, e solo se un ordine è scelto dovremmo controllare il suo tipo e fare ogni sorta di sciocchezze su di esso:

while(OrderType()==OP_BUY)//Buy
{
 RefreshRates();
 
 SelectBuy=OrderSelect(OrderTicketBuy,SELECT_BY_TICKET);
 ...
}
 
//--------------------------------------------------------------------------
//Sell
while(OrderType()==OP_SELL)
{
 RefreshRates();
  
 SelectSell=OrderSelect(OrderTicketSell,SELECT_BY_TICKET);
 ...
}
 


E nello "sweep-switch-which-type-traits-stoploss", perché esattamente? E quando sarà eseguita questa linea, in uno e nel secondo interruttore?

    CloseBuy=OrderClose(OrderTicketBuy,Lote,Bid,1); continue;//119
-----
    CloseSell=OrderClose(OrderTicketSell,Lote,Ask,1); continue;//119
 
evillive:


Qui si considera prima il tipo di ordine, e poi si seleziona l'ordine. In realtà dovrebbe essere il contrario, prima si seleziona l'ordine, e poi se l'ordine è selezionato si guarda il suo tipo e se ne fa ogni sorta di scherno:

quindi:

if(R==1)//238

{

 Alert("yes");

 R=0;

 SelectBuy=OrderSelect(OrderTicketBuy,SELECT_BY_TICKET);

}


if(R==2)//245

{

 Alert("yes");

 R=0;

 SelectSell=OrderSelect(OrderTicketSell,SELECT_BY_TICKET);

}

E nello "scroll-type-tralit-stoploss" ( =D. Cosa non ti piace? Penso che sia normale, è molto chiaro. ), perché proprio ovunque? E quando sarà eseguita questa linea, in uno e nel secondo interruttore?

In questo modo si romperà per condizione:

 Timen=OrderCloseTime();

 if(Timen>0)

 {

  DeleteSell=OrderDelete(OrderTicketSell);

  OldProfit=0;

  WarBuy=true;

  break;

 }

Beh, sì, break avrà un aspetto migliore nella stringa OrderClose. Poi dobbiamo aggiungere OrderDelete.

evillive:

Ecco qualche altro suggerimento.

Questo ciclo non considera tutti gli ordini. Inoltre, se ci sono più ordini di un tipo che uno (per esempio, tre ordini bystop), allora cosa succederà?

OrdersTotal parte da 1 e OrderSelect da 0.

C'è più di un ordine dello stesso tipo su 1 simbolo? No. Ma darò un'altra occhiata.

Abbiamo bisogno di una condizione vicina a questa: "Se MA==prezzo, allora".

Questo andrà bene:

if((MA>Open[0] && MA<Close[0]) || (MA<Open[0] && MA>Open[0]))

P.S.: Buon anno!

 
Per alcuni non è Capodanno. Buon anno!!!
 

Buon anno!

Ho recentemente iniziato a studiare MQL 4 e volevo fare una domanda:

Per esempio ho una condizione per aprire un ordine:

se (Bid>=SS+5*Point)

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

La domanda è: quale condizione deve essere specificata per aprire il secondo ordine nel caso in cui il primo ordine abbia un profitto di 10 punti o più?

 
lexdemon:

Buon anno!

Ho recentemente iniziato a studiare MQL 4 e volevo fare una domanda:

Per esempio ho una condizione per aprire un ordine:

se (Bid>=SS+5*Point)

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

La domanda è: quale condizione è necessario specificare per aprire il secondo ordine nel caso in cui il primo ordine abbia un profitto di 10 punti o più?

Guarda qui, ci sono molte funzioni per quasi tutti i casi.

https://www.mql5.com/ru/forum/131859

 
lexdemon:

Buon anno!

Ho recentemente iniziato a studiare MQL 4 e volevo fare una domanda:

Per esempio ho una condizione per aprire un ordine:

se (Bid>=SS+5*Point)

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

Ora la domanda, quali condizioni devono essere specificate per aprire il secondo ordine nel caso in cui il primo ordine abbia un profitto di 10 punti o più?

Preseleziona l'ordine OrderSelect (Ticket_first_order, SELECT_BY_TICKET);

se(OrderOpenPrice()+10*Point==Ask)

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

 
CJIeCaPb

 Нужно условие максимально приближенное к этому: "если MA==цене, то".

Такое  пойдет:

if((MA>Open[0] && MA<Close[0]) || (MA<Open[0] && MA>Open[0]))


Urrà, sembra funzionare. Ho inserito l'operatore return e "O" in ogni ciclo per evitare operazioni inutili.

Un problema: gli ordini sono scomodi - non so come formulare la condizione.

File:
test3.mq4  16 kb
 

Ho un trader chiamato forexstart, se fa differenza. il problema è che ho scritto un robot di trading che lavora su grafici a 1 minuto. analizza lo storico su molti grafici, lo storico è dato per circa un mese e mezzo e non più.

Ho un robot di trading che funziona su un grafico di un minuto. analizza la storia. su molti grafici la storia è data per circa un mese e mezzo e non più, anche se il grafico orario - giornaliero - annuale mostra la storia.

Come posso affrontarlo?


 
pycha:

Ho un trader chiamato forexstart, se fa differenza. il problema è che ho scritto un robot che lavora su grafici a 1 minuto. analizza la storia su molti grafici e non visualizza altro.

ho un robot di trading che funziona sul grafico di un minuto. visualizza lo storico. su molti grafici lo storico è dato per circa un mese e mezzo e non più, anche se il grafico orario - giornaliero - annuale visualizza lo storico. ci sono anche casi in cui ritorna ad una certa data e poi si interrompe, il gioco continua un paio di mesi fa, anche se i grafici superiori mostrano di nuovo tutto.

Come posso affrontarlo?


Se dopo alcuni cicli di cancellazione - scaricamento della storia dal server DC, le pause sono ancora lì, significa che vi daranno la storia. Cerca su Google Tickstory Lite e prepara un sacco di spazio su disco per la storia dei tick, poi dai in pasto questa storia al tester e avrai un M1 per un decennio o più.