Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 113

 
Ciao!!! Voglio fare quanto segue:
Ho bisogno che il mio EA apra tutti gli ordini (Sell e Buy), anche se sono già aperti e che lo faccia non quando tutte le condizioni convergono, ma sulla candela successiva!!! Aiuto plz...... Sono grato in anticipo...

Al momento ho questo nel mio codice:

Codice PHP:
void start()
{
if(
NewBar())
{
// algoritmo stesso ecc.
}
}

bool NewBar()
{
static
datetimelastbar=0;
datetime curbar=iTime(Symbol(),0,0);
if(
lastbar!=curbar)
{
lastbar=curbar;
return(
true);
}
return(
false);
}
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize(_Mas, 0);
int Ticket=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Ticket=OrderTicket();
switch(OrderType()){
case 0:{_Mas[0]++;_Mas[6]++;break;}
case 1:{_Mas[1]++;_Mas[6]++;break;}
case 2:{_Mas[2]++;_Mas[7]++;break;}
case 3:{_Mas[3]++;_Mas[7]++;break;}
case 4:{_Mas[4]++;_Mas[7]++;break;}
case 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

Ecco la funzione.

Ho solo pensato che il problema non fosse nel codice, dato che non ci sono errori in modalità standard.

Comunque, nessuno sembra rispondere...

 
qroner:

Comunque, nessuno sembra rispondere...

Il terminale vi dice che l'errore è nella linea 69, ma voi mostrate il testo del programma, dove ci sono meno linee... Come vuoi rispondere?
 
qroner: Comunque, sembra che nessuno risponda...

Non sembrano esserci errori nella funzione che hai postato. Sono confuso dall'uso di OrderTicket()!=Ticket per setacciare gli ordini adiacenti con lo stesso ticket. Controlla e assicurati che non ci siano ordini di questo tipo. Se il (69,25) è specificato dal compilatore , guarda la posizione 25 della linea 69 - l'errore è lì. Scrivi questa riga.

 
Vladimir: Il terminale vi dice che l'errore è la linea 69, ma voi mostrate il testo del programma con meno linee... In base a cosa vuoi rispondere?

Mi chiedo davvero che cosa ha in linea 69

 

Uff, pensavo che nessuno avrebbe reagito.

Ecco quella parte di codice:

66 doppio Volatilità(int _periodo){

67 doppio summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Grazie per il suggerimento

 
qroner:

Uff, pensavo che nessuno avrebbe reagito.

Ecco quella parte di codice:

66 doppio Volatilità(int _periodo){

67 doppio summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Grazie per il suggerimento.

Tutto è chiaro. L'errore è nella linea summ+=MathAbs(High[i]-Low[i]); contando 25 posizioni dal bordo si ritorna probabilmente a High[i].

Ho scritto Alert(Low[-1]); il compilatore richiede un numero positivo. Ho scritto int n=-1; Alert(Low[n]); - quando si esegue Array out of rangre. Ma come può i<0?? forse è la mancanza di dati storici? controllare l'intervallo di date da ... a ...

 

SI PREGA DI CONSIGLIARE QUALE TRADER SCEGLIERE O IL NOME ESATTO DEL SERVER

 
qroner:

Uff, pensavo che nessuno avrebbe reagito.

Ecco quella parte di codice:

66 doppio Volatilità(int _periodo){

67 doppio summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Grazie per il suggerimento.

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

Sembra che _period a volte abbia un valore più grande degli elementi dell'array. Da qui il superamento dell'array.

Scegliere una delle opzioni.

 
Per esempio ho bisogno di questa condizione if(iClose(NULL,HTF,4)<BlueLine) se viene eseguita DayDown = 1 ! D: Come si può lasciare DayDown a 1 e non fare il polling fino al giorno successivo?