![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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
Fallo in questo modo:
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:
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).
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,
TzumanNon 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![](https://c.mql5.com/forextsd/smiles/smile.png)
Non volevo interrompere le vostre recenti discussioni
si prega di dare un'occhiata a questo nuovo thread
https://www.mql5.com/en/forum/182212Tzuman,
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 :
;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![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
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.
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):
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.