Chiedete! - pagina 176

 

PS: solo per ricordare - il 3° parametro nella chiamata iCustom() è il nome dell'indicatore. Il primo parametro è il simbolo e il 2° parametro è il time frame desiderato

mladen:
Fallo in questo modo:
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

Sto chiamando un indicatore personalizzato usando icustom in un ciclo per diverse coppie. Posso vedere nella scheda esperti che l'indicatore viene scaricato e poi ricaricato per la coppia successiva. Questo significa che la chiamata iCustom sta ricalcolando i valori per tutte le barre massime del grafico ogni volta che viene caricata? Inoltre, se la chiamate per la barra N e poi per la barra N+1 come chiamate successive separate, la seconda chiamata richiede un ricalcolo completo? E infine, se le chiamate successive sono per buffer diversi, ciascuna viene ricalcolata.

Ricordo che hai detto che ogni chiamata iCustom genera un'istanza separata, quindi la mia presunzione è che ciascuna venga ricalcolata nella sua interezza.

Grazie per la risposta,

Tzuman

 

Tzuman,

Metatrader crea una nuova istanza dell'indicatore per ogni nuova serie di valori dei parametri (fanno eccezione il numero di buffer e l'indice).

Un esempio - le seguenti due chiamate:

iCustom(NULL,0, "name",1,0,0);

iCustom(NULL,0, "name",2,0,0);

creerà due istanze di un indicatore (anche se usate per esempio "n" invece di 1 e 2 e assegnate valori diversi a n prima di una nuova chiamata a iCustom(), creerà istanze separate. Questo è il motivo per cui alcuni indicatori adattivi non possono essere scritti usando iCustom() ma deve essere fatto in una forma di funzioni)

Ora questo riguarda le istanze. Ma se l'indicatore viene caricato e poi scaricato di solito è un problema di parametri (la parte di scarico di solito lo indica). Se i tipi di parametri non corrispondono, allora farà l'acrobazia "carica - scarica". Controlla se per caso alcuni dei parametri passati a iCustom non sono del tipo previsto (o alcuni dei parametri sono stati accidentalmente omessi e questo potrebbe causare la confusione dei tipi di parametri).

Tzuman:
MLaden

Sto chiamando un indicatore personalizzato usando icustom in un ciclo per diverse coppie. Posso vedere nella scheda esperti che l'indicatore viene scaricato e poi ricaricato per la coppia successiva. Questo significa che la chiamata iCustom sta ricalcolando i valori per tutte le barre massime del grafico ogni volta che viene caricata? Inoltre, se la chiamate per la barra N e poi per la barra N+1 come chiamate successive separate, la seconda chiamata richiede un ricalcolo completo? E infine, se le chiamate successive sono per buffer diversi, ciascuna viene ricalcolata.

Ricordo che hai detto che ogni chiamata iCustom genera un'istanza separata, quindi la mia presunzione è che ciascuna venga ricalcolata nella sua interezza.

Grazie per la risposta,

Tzuman
 

Non volevo interrompere le vostre recenti discussioni

per favore date un'occhiata a questo nuovo thread

https://www.mql5.com/en/forum/182212

 

Come vedo, mrtools ha già risolto il problema

MaaTini:
Non volevo interrompere le vostre recenti discussioni

si prega di dare un'occhiata a questo nuovo thread

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman,

Metatrader crea una nuova istanza dell'indicatore per ogni nuova serie di valori dei parametri (fanno eccezione il numero di buffer e l'indice).

Un esempio - le seguenti due chiamate :

iCustom(NULL,0, "nome",1,0,0);

iCustom(NULL,0, "nome",2,0,0)

;

creerà due istanze di un indicatore (anche se si usa per esempio "n" invece di 1 e 2 e si assegnano valori diversi a n prima di una nuova chiamata a iCustom(), si creeranno istanze separate. Questo è il motivo per cui alcuni indicatori adattivi non possono essere scritti usando iCustom() ma deve essere fatto in una forma di funzioni)

Ora questo riguarda le istanze. Ma se l'indicatore viene caricato e poi scaricato, di solito è un problema di parametri (la parte di scarico di solito lo indica). Se i tipi di parametri non corrispondono, allora farà l'acrobazia "carica - scarica". Controlla se per caso alcuni dei parametri passati a iCustom non sono del tipo previsto (o alcuni dei parametri sono stati accidentalmente omessi e questo potrebbe causare la confusione dei tipi di parametri).

Grazie mille per la spiegazione. Ho supposto che il carico/scarico fosse causato dal Symbol che cambia ad ogni iterazione del ciclo, quindi doveva caricare tutti i nuovi valori dei dati,

ad esempio iCustom("EURUSD",0, "name" ,1,0,0); & iCustom("GBPUSD",0,name" ,1,0,0);

Controllerò attentamente i parametri, ma ho proceduto a scrivere le mie funzioni di media MA con un po' di plagio. Guardando solo l'utilizzo del processore nel Task Manager, sembra che il mio utilizzo della cpu sia diminuito del 90-95%. Sono felice

 

ciao guru im newbie in codifica puoi aiutarmi in "stop apertura ordine multiplo quando takeprofit hit" provo codice come questo ma non funziona. potresti aiutarmi per favore.

statico datetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

 

grazie mladen, proverò il tuo codice.

 
RBarias:
ciao guru im newbie in codifica puoi aiutarmi in "stop opening multiple order when takeprofit hit" provo un codice come questo ma non funziona. potresti aiutarmi per favore.

staticdatetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

Puoi provare qualcosa come questo (controllerà se l'ultimo ordine chiuso è chiuso su una barra corrente e se un take profit è stato colpito):

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Ciao mladen,

Il tuo script Symbols.mq4 ha funzionato perfettamente in MT4 build 509, ma lancia un errore di file in build 636 (quando si apre symbols.raw).

Potresti gentilmente condividere una versione aggiornata per MT4 build 636?

Grazie mille in anticipo.

Cordiali saluti,

Timo.