[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 1127

 
drknn:
Grazie mille per il vostro aiuto =)
 
Alexandr24:
Grazie mille per il vostro aiuto =)


Non dimenticate che nel tester l'indicatore non lancia la finestra di avviso, ma scrive invece messaggi di avviso nei log. È meglio fare il debug di questi pezzi di codice con gli script - è più veloce.

Inoltre, i messaggi dell'indicatore, stranamente, non sono scritti nel tester nei log del tester, ma nei log del tempo reale.

 
Come si considerano le commissioni quando si testa un EA nel tester?
 
Sembra essere preso in considerazione come il tester utilizza tutte le impostazioni di un particolare broker. Una ricerca vi dirà con più precisione.
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
 
Abzasc:

"Non è un compito semplice.

Si potrebbe fare in questo modo.

Oppure ho trovato anche questo


Grazie!
 

Non capisco bene come funzionano le condizioni.

Ho deciso di scoprire come funziona un indicatore frattale, qual è la differenza tra MODE_UPPER e MODE_LOWER, e ho scritto il seguente codice

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
if (up>=1|down>=1){
Alert("Previous upper fractal is:", su, " Il frattale inferiore precedente è:", giù);Alert ("y",y);}}

WindowFirstVisibleBar() dà il numero di barre sul grafico, questa cosa funziona se si cancella se (up>=1||down>=1) dall'EA, dà una bella serie di barre contate, solo che sono così tante.

È come un segno || o, l'operatore sembra fare le parentesi {} se almeno una delle condizioni è vera, o entrambe sono vere contemporaneamente, giusto?

Non è cambiato nulla per me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Penso di aver capito bene, aiutatemi!!!!!!!

 
Dimka-novitsek:

Non capisco bene come funzionano le condizioni.

Ho deciso di capire come funziona un indicatore frattale, qual è la differenza tra MODE_UPPER e MODE_LOWER.

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
per (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
se (su>=1||giù>=1){
Alert("Il frattale superiore precedente è:", su, " Il frattale inferiore precedente è:", giù);Alert ("y",y);}}

WindowFirstVisibleBar() dà il numero di barre sul grafico, questa cosa funziona se si incrocia se (up>=1|down>=1), dà una bella serie di barre calcolate, ma ce ne sono molte.

È come un segno || o, l'operatore sembra fare le parentesi {} se almeno una delle condizioni è vera, o entrambe sono vere contemporaneamente, giusto?

Non è cambiato nulla per me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Penso che tutto sia corretto. Aiutami!!!!!!!



posto codice normale via contro-alt - M - risposta più veloce... niente esclamazioni.
 
via contro-alt - M - E altri dettagli?
 
Dimka-novitsek:

È come se...

https://docs.mql4.com/ru/basis/operations/bool

Un'operazione OR logica.

Zy counter-alt - M è come il pulsante SRC e il codice attraverso di esso.

 
drknn:

Ho provato il codice che hai suggerito. Il risultato è sempre lo stesso: continua ad aprire trade durante il giorno. Di nuovo, vorrei mantenere l'opzione on/off.

Ecco le varianti provate:

extern bool WaitForNewDay = true;

void init()

{

SMB=Simbolo();

ritorno;

}

void start()

{

bool Trade=true;

if(WaitForNewDay){if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); return;}

}

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

int HistoryBuy(int MAGICMA)

{int BuyOrders=0;

for (int i=OrdersHistoryTotal()-1;i>=0;i--) {

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i);

}

else {

if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ continua;}

se(OrderType()==OP_BUY){

se(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

BuyOrders++;

}

}

}

}

return(BuyOrders);

}

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

int HistorySell(int MAGICMA){

int SellOrders=0;

for (int i=OrdersHistoryTotal()-1;i>=0;i--){

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i);

}

else {

if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ continua;}

se(OrderType()==OP_SELL){

se(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

SellOrders++;

}

}

}

}

return(SellOrders);

}

//////////////Altra opzione/////////////////////

extern bool WaitForNewDay = true;

Trade=true;

void init()

{

SMB=Simbolo();

if(WaitForNewDay) {Trade=false;}

ritorno;

}

void start()

{

if(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); Trade=false; return;}

}

Motivazione: