Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1338

 

Porrò la domanda in modo più corretto.

C'è un blocco di codice che spiega all'Expert Advisor quanti trade deve aprire. Si presenta così

int OPEN=1;

se(Totale ordini())

OPEN=0; // non possono essere aperti altri ordini

se(OPEN==1)

{

//aprire qui

}

Il problema è che apre il numero richiesto di mani (1 in questo esempio) per tutti i simboli. E devo spiegargli

che ha bisogno di aprire questo numero di operazioni sullo strumento CORRENTE . Qualcosa come _Symbol o Symbol (). Come si può fare? Penso che la soluzione sia semplice.

 
sibiriyak73:

Porrò la domanda in modo più corretto.

C'è un blocco di codice che spiega all'Expert Advisor quanti trade deve aprire. Si presenta così

int OPEN=1;

se(Totale ordini())

OPEN=0; // non possono essere aperti altri ordini

se(OPEN==1)

{

//aprire qui

}

Il problema è che apre il numero richiesto di mani (1 in questo esempio) per tutti i simboli. E devo spiegargli

che ha bisogno di aprire questo numero di operazioni sullo strumento CORRENTE . Qualcosa come _Symbol o Symbol (). Come si può fare? Penso che la soluzione sia semplice.

if(!isTradeToDay(Symbol()))
 {
  //Здесь открываем
 }
 
Iurii Tokman:
Ci vuole un casino di accordi, e in una vendita
 
sibiriyak73:
Fa saltare un sacco di accordi, e in una vendita

Beh, ci sono due opzioni:
1. mostrare tutto il codice
2. unirsi al club dei telepati

 
Iurii Tokman:

Beh, ci sono due opzioni:
1. mostrare l'intero codice
2. unirsi al club dei telepati:)

:)

Ho capito come aprire sia l'acquisto che la vendita. Ma il numero di accordi non si apre ad ogni spunta

int start()

{

double a=iOpen(NULL,PERIOD_D1,0);

doppio d=_ORDER*0,00001;

doppio c=d+1;

doppio s=c*a;

double limit= NormalizeDouble(s,_Digits);

// Stampa("livello limite= ",limite);

doppio e=_STOP*0,00001;

doppio n=e+1;

doppio m=n*a;

double SL= NormalizeDouble(m,_Digits);

//Print("livello di stop= ",SL);

doppio p=_TP*0,00001;

doppio f=p+1;

doppio z=f*a;

double TP= NormalizeDouble(z,_Digits);

double w=iOpen(NULL,PERIOD_D1,0);

doppio q=_ORDER*0,00001;

doppio j=q+1;

doppio v=w/j;

double limit1= NormalizeDouble(v,_Digits);

// Stampa("livello limite= ",limite);

doppio k=_STOP*0,00001;

doppio y=k+1;

doppio u=w/y;

double SL1= NormalizeDouble(u,_Digits);

//Print("livello di stop=",SL);

doppio g=_TP*0,00001;

doppio _f=g+1;

doppio _m=w/_f;

double TP1= NormalizeDouble(_m,_Digits);


se(Ora()==Nac)

{

se(iOpen(NULL,PERIOD_D1,0)<iOpen(NULL,PERIOD_D1,1))

{

if(!isTradeToDay(Symbol())

{

int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,3,SL1,TP1,NULL,0,0,clrRed); //apri qui

}

}

se(iOpen(NULL,PERIOD_D1,0)>iOpen(NULL,PERIOD_D1,1))

{

if(isTradeToDay(Symbol()))

{

int ticket=OrderSend(Symbol(),OP_BUYSTOP,1.5,limit,3,SL,TP,NULL,0,0,0,clrBlueViolet); // apri qui

}

}

}

se(Ora()==Kon)

{

risultato bool;

errore int;

//----

mentre(OrdiniTotali()>0)

{

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY)

result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE);

if(OrderType()==OP_SELL)

result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);

if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)

OrderDelete(OrderTicket());

se(risultato!=TRUE)

{

error=GetLastError();

Print("LastError = ",error, ",Symbol());

}

else

errore=0;

}

else

Print("Errore durante la selezione dell'ordine ", GetLastError());

}

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

ritorno(0);

}

Ecco il codice senza variabili dichiarate.

 
sibiriyak73:

il codice dovrebbe essere inserito Alt+S
e dov'è la funzione?
come l'hai compilato? nessun errore?

 
Iurii Tokman:

il codice dovrebbe essere inserito Alt+S
e dov'è la funzione?
come l'hai compilato? nessun errore?

La funzione è in basso. La compilazione è senza errori. Sell side è riuscito a regolare le aperture di un trade su uno specifico strumento anche se ci sono aperture su altri

strumenti. Ma il lato della baia spara scambi su ogni tick e questo è tutto

 
Iurii Tokman:

il codice deve essere inserito Alt+S
e dov'è la funzione?
come l'hai compilato? nessun errore?

Al momento il codice è così. Lato vendita tutto ok ma lato acquisto ogni tick è un affare
 
sibiriyak73:
Al momento il codice è così. Lato vendita tutto ok, ma lato acquisto ogni tick è un trade

sul lato dell'acquisto si dovrebbe fare la stessa cosa

 
Iurii Tokman:

la stessa cosa dovrebbe essere fatta sul lato dell'acquisto

Non riesco a capire cosa dovrebbe essere cambiato nella funzione isTradeToDay per renderla uguale sia sul lato di acquisto che su quello di vendita. Ancora il lato di acquisto non funziona :(

Motivazione: