Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 419

 
-Aleks-:
Due anni - in tester :) Beh, è stato in funzione per un anno sulla demo... Un sacco di bug lì, quando ho dovuto collegarlo a causa di classi esterne... E ora c'è un tale bug, che non so come risolvere - aumenterò solo la dimensione dell'array di una cifra, per ora. Perché non c'è un auto-size, come per un buffer grafico, o c'è?

Prova così.

Inizializza l'array OrderBU[1].

Prima si aumenta la dimensione dell'array ( ArrayResize(OrderBU,NorderBU+1) ), poi OrderBU[NorderBU]=OrderTicket();NorderBU++;

 
new-rena:

Prova così.

Inizializza l'array OrderBU[1].

Prima si aumenta la dimensione dell'array ( ArrayResize(OrderBU,NorderBU+1) ), poi OrderBU[NorderBU]=OrderTicket();NorderBU++;

Grazie - sperimenterò a mio piacimento.
 
Per favore consigliate come implementare la seguente cosa nel codice.
C'è una variabile di base A, se è inferiore a zero, allora usiamo altre cinque variabili - i valori sono assegnati dalla funzione di chiamata dell'indicatore - iCustom.
Avendo ricevuto i valori, dovremmo classificarli - trovare i valori sopra e sotto la variabile A e definire dai due gruppi - massimo, minimo, valore medio.
Penso che sia necessario usare un array, ma non capisco bene come.
 

Potrebbe per favore consigliarci su questo punto?

Per esempio, abbiamo un indicatore Williams Percent Range (%R) su un grafico e trasciniamo l'indicatore On Balance Volume (OBV) nella sua finestra dal navigatore.

https://charts.mql5.com/8/675/xauusd-h4-metaquotes-software-corp.png

Il %R lavora nell'intervallo 0 -100%, l'OBV non ha un riferimento specifico.

Quando l'OBV è nella finestra %R, vediamo visivamente che va oltre -20 o -80%.

Come possiamo ottenere l'OBV sopra il -20% o sotto il -80% nel nostro EA?

Come legare l'OBV nell'indicatore personalizzato alla gamma di 0 -100%? Normalizzarlo ad esso (gamma)? Come si può fare?

Capisco che non sia necessario normalizzare l'OBV alla %R (l'immagine sarà diversa).

Forse è elementare, solo che non l'ho incontrato.

 
-Aleks-:
Per favore consigliate come implementare la seguente cosa nel codice.
C'è una variabile di base A, se è inferiore a zero, allora usiamo altre cinque variabili - i valori sono assegnati dalla funzione di chiamata dell'indicatore - iCustom.
Avendo ricevuto i valori, dovremmo classificarli - trovare i valori sopra e sotto la variabile A e definire dai due gruppi - massimo, minimo, valore medio.
Penso che dovremmo usare l'array ma non capisco bene come.

se (p1>p2&&p1>p3) , se (p2>p1&&p2>p3) , se (p3>p2&&p3>p1)

Io lo faccio in questo modo,

 

Ho bisogno di un parametro di lotto fluttuante, il primo lotto è impostato dall'utente, poi questo parametro non è più indirizzabile, e l'EA lavora da solo e in caso di perdita viene aumentato del lotto massimo specificato nel programma (o una variabile esterna), in caso di profitto viene ridotto dell'importo specificato.

Se scrivo il parametro in "Init ", l'EA smetterà di accedere al lotto di variabili esterne?

o come faccio?

questa è un'espressione approssimativa.

 
Salve. Puoi per favore dirmi come usare i dati delle notizie nel mio EA? Ho bisogno di un indicatore per questo, o l'EA può trovare da solo le notizie importanti?
 
Leanid Aladzyeu:

se (p1>p2&&p1>p3) , se (p2>p1&&p2>p3) , se (p3>p2&&p3>p1)

Io lo faccio in questo modo,

Non è conveniente, specialmente con un gran numero di parametri...

La soluzione via array è interessante. Particolarmente interessante come trovare il valore più vicino di una variabile quando si fa la media del numero totale di valori.

 
first_may:

Buona sera. Sto cercando di scrivere un semplice EA sull'incrocio di tenkan e kinjun. Ecco il codice:

void OnTick()

void OnTick()

{

Segnale commerciale_20();

}


int TradeSignal_20()

{

int sig=0;


se(h_ich==INVALID_HANDLE)

{

h_ich=iIchimoku(Simbolo(),Periodo(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);

ritorno(0);

}

else

{

if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE

se (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE

if (!ArraySetAsSeries(ich1_buffer,true)) return(0);

if (!ArraySetAsSeries(ich2_buffer,true)) return(0);

}

//--- controlla la condizione e imposta il valore per il sig

if(ich1_buffer[1]>ich2_buffer[1]) sig=1;

else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;

altrimenti sig=0;

if (ich1_buffer[1]>ich2_buffer[1])

if (ich1_buffer[2]<ich2_buffer[2])

Alert(Symbol()+": purchase");

if (ich1_buffer[1]<ich2_buffer[1])

if (ich1_buffer[2]>ich2_buffer[2])

Alert(Symbol()+": sale");

//--- ritorno del segnale commerciale

ritorno (sig);

}

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

Come posso fare in modo che l'allarme sia chiamato solo una volta e non costantemente?

Eseguitelo non ad ogni spunta, ma secondo necessità.
 
Vasiliy Smirnov:
Eseguire non ogni zecca, ma come necessario.
E come dovrebbe essere? Quando si apre una nuova barra - poi fare un controllo per una nuova barra...