Ma il codice lì è solo fino al momento di controllare e ottenere i dati dell'indicatore negli array di buffer, inoltre non c'è nessun esempio di come lavorare con i dati dell'indicatore ricevuti. Ho guardato il libro di riferimento, ci sono principalmente esempi di codice per gli indicatori, ho preso setindexbuffer da esso. Voglio sapere da che parte "scavare". Mi sono stancato ieri, ho passato mezza giornata qui.
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
Già provato. Ma nel wizard si genera lì con le classi. Vorrei almeno capire il codice in modo semplice - il codice lo capisco almeno un po'. Potreste consigliarmi come correggere il codice per ottenere i valori dell'indicatore nell'EA?
Esempio: come ottenere i valori dell'indicatore iEnvelopes dall'EA
//+------------------------------------------------------------------+//| Example iEnvelopes values on a chart.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//--- input parametersinputint Input1=9;
//---int handle_iEnvelopes; // variable for storing the handle of the iEnvelopes indicator//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create handle of the indicator iEnvelopes
handle_iEnvelopes=iEnvelopes(Symbol(),Period(),3,0,MODE_LWMA,PRICE_OPEN,0.03);
//--- if the handle is not createdif(handle_iEnvelopes==INVALID_HANDLE)
{
//--- tell about the failure and output the error codePrintFormat("Failed to create handle of the iEnvelopes indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped earlyreturn(INIT_FAILED);
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---string text="";
double upper[],lower[];
ArraySetAsSeries(upper,true);
ArraySetAsSeries(lower,true);
int start_pos=0,count=3;
if(!iGetArray(handle_iEnvelopes,UPPER_LINE,start_pos,count,upper) ||
!iGetArray(handle_iEnvelopes,LOWER_LINE,start_pos,count,lower))
{
return;
}
string text_upper="",text_lower="";
for(int i=count-1; i>=0; i--)
{
text_upper = text_upper + "Upper"+"["+IntegerToString(i)+"]"+" "+DoubleToString(upper[i],Digits()+1) +" | ";
text_lower = text_lower + "Lower"+"["+IntegerToString(i)+"]"+" "+DoubleToString(lower[i],Digits()+1) +" | ";
}
Comment(text_upper+"\n"+text_lower);
}
//+------------------------------------------------------------------+//| Get value of buffers |//+------------------------------------------------------------------+bool iGetArray(constint handle,constint buffer,constint start_pos,
constint count,double &arr_buffer[])
{
bool result=true;
if(!ArrayIsDynamic(arr_buffer))
{
PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
return(false);
}
ArrayFree(arr_buffer);
//--- reset error codeResetLastError();
//--- fill a part of the iBands array with values from the indicator bufferint copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
if(copied!=count)
{
//--- if the copying fails, tell the error codePrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
__FILE__,__FUNCTION__,count,copied,GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculatedreturn(false);
}
return(result);
}
//+------------------------------------------------------------------+
Vladimir, per favore dimmi: da dove prende UPPER_LINE e LOWER_LINE? Se abbiamo solo la maniglia dell'indicatore, l'abbiamo presa direttamente dalla maniglia?
Vladimir, per favore dimmi: da dove prende UPPER_LINE e LOWER_LINE? Se abbiamo ottenuto solo la maniglia dell'indicatore, abbiamo ottenuto anche la maniglia in una volta sola?
Non capisco la sua domanda. È un insieme di lettere senza significato. Per favore riformuli la sua domanda - non abbia fretta di scrivere, pensi alla sua domanda e scriva con calma.
Non capisco la sua domanda. Un insieme di lettere senza significato. Per favore riformuli la sua domanda - non si affretti a scrivere, pensi alla sua domanda e scriva con calma.
Pomeriggio. Quando si esegue un EA sulla valuta GBPUSD, ho impostato un indicatore nel codice per EURUSD, l'EA si blocca all'avvio. Tuttavia, se eseguo l'EA su EURUSD e specifico GBPUSD come indicatore, tutto funziona. A cosa può essere collegato?
Pomeriggio. Quando si esegue l'EA sulla valuta GBPUSD, ho impostato l'indicatore nel codice per EURUSD, l'EA si blocca all'avvio. Tuttavia, se eseguo l'EA su EURUSD e specifico GBPUSD come indicatore, tutto funziona. A cosa può essere dovuto?
1. Genera un EA usando Wizard MQL5 - per esempio, specifica 'GBPUSD' per l'EA e 'EURUSD' per il modulo di segnali. Otterrete un codice di esempio GIUSTO. Studiate il codice. In futuro, basta evitare la modifica manuale e generare il codice usando la procedura guidata MQL5.
2. Se hai specificato "GBPUSD" per un EA, devi eseguire questo EA SOLO su "GBPUSD".
1. Genera un EA usando Wizard MQL5 - specifica per esempio 'GBPUSD' per l'EA e 'EURUSD' per il modulo del segnale. Otterrete un codice di esempio GIUSTO. Studiate il codice. In futuro, basta evitare la modifica manuale e generare il codice usando la procedura guidata MQL5.
2. Se hai specificato "GBPUSD" per un Expert Advisor, allora devi eseguire questo Expert Advisor SOLO su "GBPUSD".
Vladimir, ho generato il codice usando MQL5 Wizard. Ho provato il tuo EA, anche per me non funziona quando lo eseguo sulla valuta GBPUSD.
Nel registro c'è scritto quanto segue:
2020.08.16 13:01:20.793 Core 1 EURUSD: symbol to be synchronized
2020.08.16 13:01:20.793 Core 1 EURUSD: symbol synchronized already, 18 bytes received
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 cannot load indicator 'Accelerator Oscillator' [4804]
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 CSignalAC::InitAC: error initializing object
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 CExpert::InitIndicators: error initialization indicators of signal object
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 OnInit: error initializing indicators
2020.08.16 13:01:20.793 Core 1 tester stopped because OnInit returns non-zero code 1
Inizialmente mi sono basato su questo articolo:https://www.mql5.com/ru/articles/43
Ma il codice lì è solo fino al momento di controllare e ottenere i dati dell'indicatore negli array di buffer, inoltre non c'è nessun esempio di come lavorare con i dati dell'indicatore ricevuti. Ho guardato il libro di riferimento, ci sono principalmente esempi di codice per gli indicatori, ho preso setindexbuffer da esso. Voglio sapere da che parte "scavare". Mi sono stancato ieri, ho passato mezza giornata qui.
Già provato. Ma nel wizard si genera lì con le classi. Vorrei almeno capire il codice in modo semplice - il codice lo capisco almeno un po'. Potreste consigliarmi come correggere il codice per ottenere i valori dell'indicatore nell'EA?
Esempio: come ottenere i valori dell'indicatore iEnvelopes dall'EA
Risultato:
Esempio: come ottenere i valori dell'indicatore iEnvelopes da un EA
Grazie mille! Ci darò un'occhiata!
Vladimir, per favore dimmi: da dove prende UPPER_LINE e LOWER_LINE? Se abbiamo solo la maniglia dell'indicatore, l'abbiamo presa direttamente dalla maniglia?
Vladimir, per favore dimmi: da dove prende UPPER_LINE e LOWER_LINE? Se abbiamo ottenuto solo la maniglia dell'indicatore, abbiamo ottenuto anche la maniglia in una volta sola?
Non capisco la sua domanda. È un insieme di lettere senza significato. Per favore riformuli la sua domanda - non abbia fretta di scrivere, pensi alla sua domanda e scriva con calma.
Non capisco la sua domanda. Un insieme di lettere senza significato. Per favore riformuli la sua domanda - non si affretti a scrivere, pensi alla sua domanda e scriva con calma.
Nell'argomento della funzione:
iGetArray(handle_iEnvelopes,UPPER_LINE,start_pos,count,upper)hai usato UPPER_LINE.
Da dove viene questo valore di parametro, dall'handle che avete ricevuto prima:
?
Nell'argomento della funzione:
hai usato UPPER_LINE.
Da dove viene questo valore di parametro, dall'handshake ricevuto in precedenza:
?
No. Questo valore è preso dall'aiuto di iEnvelopes
Pomeriggio. Quando si esegue un EA sulla valuta GBPUSD, ho impostato un indicatore nel codice per EURUSD, l'EA si blocca all'avvio. Tuttavia, se eseguo l'EA su EURUSD e specifico GBPUSD come indicatore, tutto funziona. A cosa può essere collegato?
Pomeriggio. Quando si esegue l'EA sulla valuta GBPUSD, ho impostato l'indicatore nel codice per EURUSD, l'EA si blocca all'avvio. Tuttavia, se eseguo l'EA su EURUSD e specifico GBPUSD come indicatore, tutto funziona. A cosa può essere dovuto?
1. Genera un EA usando Wizard MQL5 - per esempio, specifica 'GBPUSD' per l'EA e 'EURUSD' per il modulo di segnali. Otterrete un codice di esempio GIUSTO. Studiate il codice. In futuro, basta evitare la modifica manuale e generare il codice usando la procedura guidata MQL5.
2. Se hai specificato "GBPUSD" per un EA, devi eseguire questo EA SOLO su "GBPUSD".
1. Genera un EA usando Wizard MQL5 - specifica per esempio 'GBPUSD' per l'EA e 'EURUSD' per il modulo del segnale. Otterrete un codice di esempio GIUSTO. Studiate il codice. In futuro, basta evitare la modifica manuale e generare il codice usando la procedura guidata MQL5.
2. Se hai specificato "GBPUSD" per un Expert Advisor, allora devi eseguire questo Expert Advisor SOLO su "GBPUSD".
Vladimir, ho generato il codice usando MQL5 Wizard. Ho provato il tuo EA, anche per me non funziona quando lo eseguo sulla valuta GBPUSD.
Nel registro c'è scritto quanto segue: