Ciao WHRoeder, sono riuscito a compilare l'indicatore e ho allegato qui l'immagine del grafico. La linea dell'indicatore in rosso forma una linea retta in alto ed è scesa a Bar0. Ho allegato qui gli ultimi codici gentilmente consigliare dove migliorare il codice in modo che l'indicatore tracci i valori di M1 incrociati. Grandi ringraziamenti in anticipo.
#property indicator_separate_window// Indicator is drawn in the main window#property indicator_buffers1// Number of buffers#property indicator_color1 Red // Color of the 1st linedouble Buf_0[]; // Declaring indicator arrays//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].//--------------------------------------------------------------------int init() // Special function init()
{
//--------------------------------------------------------------------SetIndexBuffer(0,Buf_0); // Assigning an array to a bufferSetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------// SetIndexBuffer(1,Buf_1); // Assigning an array to a buffer//SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Line style//--------------------------------------------------------------------return(0); // Exit the special funct.init()
}
//--------------------------------------------------------------------int start() // Special function start()
{
int i=0, iCht, Counted_bars;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted barsfor(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart barsint iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]);
double openD1 = iOpen(NULL, PERIOD_D1, iD1);
int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
iM1End = -1;
if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
lM1 = iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
}
}
//--------------------------------------------------------------------return(0); // Exit the special funct. start()
}
//--------------------------------------------------------------------
#property indicator_separate_window// Indicator is drawn in the main window#property indicator_buffers1// Number of buffers#property indicator_color1 Red // Color of the 1st linedouble Buf_0[]; // Declaring indicator arrays//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].//--------------------------------------------------------------------int init() // Special function init()
{
//--------------------------------------------------------------------SetIndexBuffer(0,Buf_0); // Assigning an array to a bufferSetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------// SetIndexBuffer(1,Buf_1); // Assigning an array to a buffer//SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Line style//--------------------------------------------------------------------return(0); // Exit the special funct.init()
}
//--------------------------------------------------------------------int start() // Special function start()
{
int i=0, iCht, Counted_bars;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted barsfor(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart barsint iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]);
double openD1 = iOpen(NULL, PERIOD_D1, iD1);
int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
iM1End = -1;
if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
lM1 = iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
}
}
//--------------------------------------------------------------------return(0); // Exit the special funct. start()
}
//--------------------------------------------------------------------
La linea di codice evidenziata darà lo spostamento corretto solo se l'indi è collegato al grafico giornaliero.
Come ho già detto nel mio post precedente
"Quindi hai bisogno del valore datetime per l'apertura della candela D1. Puoi farlo? "
La linea di codice evidenziata darà lo spostamento corretto solo se l'indi è collegato al grafico giornaliero.
Come ho già detto nel mio post precedente
"Quindi hai bisogno del valore datetime per l'apertura della candela D1. Puoi farlo? "
Ciao GumRai, ho provato molte volte ma non sono nemmeno riuscito a compilarlo, è oltre la mia comprensione. La cosa migliore è se qualcuno può mostrarmi come allora imparerò da esso, ho notato che imparo rapidamente se ci sono esempi. In questo momento l'indicatore sta contando le barre M1 all'interno della Bar1 che incrociano il prezzo Open[1]. Tuttavia il conteggio si ferma da lì e non progredisce per completare il grafico. Ho provato a collegare l'indicatore a un EA ma anche l'EA non può inviare il segnale durante il back testing. Per favore mostra qualche codice che completi questo indicatore per bene. Grazie.
Ciao GumRai, ho provato molte volte ma non sono nemmeno riuscito a compilarlo, è oltre la mia comprensione. La cosa migliore è se qualcuno può mostrarmi come allora imparerò da esso, ho notato che imparo rapidamente se ci sono esempi. In questo momento l'indicatore sta contando le barre M1 all'interno della Bar1 che incrociano il prezzo Open[1]. Tuttavia il conteggio si ferma da lì e non progredisce per completare il grafico. Ho provato a collegare l'indicatore a un EA ma anche l'EA non può inviare il segnale durante il back testing. Per favore mostra qualche codice che completi questo indicatore per bene. Grazie.
Non compilato o testato, ma potrebbe aiutarti
Counted_bars=IndicatorCounted(); // Number of counted barsfor(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart barsint iD1 = iBarShift(Symbol(), PERIOD_D1, Time[iCht]);
//----find the datetime of iD1. ie the Time[]datetime daystarttime = iTime(Symbol(),PERIOD_D1,iD1);
double openD1 = iOpen(Symbol(), PERIOD_D1, iD1);
//----find BarShift of daystarttime on current chart and take the nearest following bar if it doesn't existint iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,true);
if(iM1Beg<0)
iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,false)+1;
//----find BarShift for end of day on current chart and take the nearest following bar if it doesn't existif(iD1>0)
{
datetime nextday = iTime(Symbol(),PERIOD_D1,iD1-1);
int iM1End = iBarShift(Symbol(),PERIOD_M1,nextday-1,true);
if(iM1End<0)
iM1End = iBarShift(Symbol(),PERIOD_M1,nextday,false);
for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
double hM1 = iHigh(Symbol(), PERIOD_M1, iM1Beg),
lM1 = iLow(Symbol(), PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
}
}
Sono riuscito a inserire Buf_0[iCht] = EMPTY; nel codice WHRoeder e in qualche modo l'indicatore ha funzionato. Tuttavia, quando l'ho collegato al mio EA, continuava a caricarlo e scaricarlo come un ubriacone che vomitava latte. Gli altri indicatori collegati allo stesso EA hanno funzionato bene. Questo è il messaggio che ho ricevuto:
#property indicator_separate_window// Indicator is drawn in the main window#property indicator_buffers1// Number of buffers#property indicator_color1 Red // Color of the 1st line//#property indicator_color2 Yellow // Color of the 2nd lineexternint Multiplier=2;
double Buf_0[];// Buf_1[]; // Declaring indicator arrays//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].//--------------------------------------------------------------------int init() // Special function init()
{
//--------------------------------------------------------------------SetIndexBuffer(0,Buf_0); // Assigning an array to a bufferSetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------// SetIndexBuffer(1,Buf_1); // Assigning an array to a buffer// SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Line style//--------------------------------------------------------------------return(0); // Exit the special funct.init()
}
//--------------------------------------------------------------------int start() // Special function start()
{
int i=0, iCht, Counted_bars;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted barsfor(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart barsint iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]);
double openD1 = iOpen(NULL, PERIOD_D1, iD1);
int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
iM1End = -1;
if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
Buf_0[iCht] = EMPTY; // <<<<<<<<<<<< This is the magic code that gjol inserted and it worked. for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
lM1 = iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
// Buf_1[iCht]= Multiplier*Buf_0[iCht];
}
}
//--------------------------------------------------------------------return(0);//
}
//--------------------------------------------------------------------
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Ha la storia di M1?
Sì, ce l'ho.
La linea di codice evidenziata darà lo spostamento corretto solo se l'indi è collegato al grafico giornaliero.
Come ho già detto nel mio post precedente
"Quindi hai bisogno del valore datetime per l'apertura della candela D1. Puoi farlo? "
La linea di codice evidenziata darà lo spostamento corretto solo se l'indi è collegato al grafico giornaliero.
Come ho già detto nel mio post precedente
"Quindi hai bisogno del valore datetime per l'apertura della candela D1. Puoi farlo? "
Ciao GumRai, ho provato molte volte ma non sono nemmeno riuscito a compilarlo, è oltre la mia comprensione. La cosa migliore è se qualcuno può mostrarmi come allora imparerò da esso, ho notato che imparo rapidamente se ci sono esempi. In questo momento l'indicatore sta contando le barre M1 all'interno della Bar1 che incrociano il prezzo Open[1]. Tuttavia il conteggio si ferma da lì e non progredisce per completare il grafico. Ho provato a collegare l'indicatore a un EA ma anche l'EA non può inviare il segnale durante il back testing. Per favore mostra qualche codice che completi questo indicatore per bene. Grazie.
Buf_0[iCht] = EMPTY;Ciao GumRai, ho provato molte volte ma non sono nemmeno riuscito a compilarlo, è oltre la mia comprensione. La cosa migliore è se qualcuno può mostrarmi come allora imparerò da esso, ho notato che imparo rapidamente se ci sono esempi. In questo momento l'indicatore sta contando le barre M1 all'interno della Bar1 che incrociano il prezzo Open[1]. Tuttavia il conteggio si ferma da lì e non progredisce per completare il grafico. Ho provato a collegare l'indicatore a un EA ma anche l'EA non può inviare il segnale durante il back testing. Per favore mostra qualche codice che completi questo indicatore per bene. Grazie.
Non compilato o testato, ma potrebbe aiutarti
Sono riuscito a inserire Buf_0[iCht] = EMPTY; nel codice WHRoeder e in qualche modo l'indicatore ha funzionato. Tuttavia, quando l'ho collegato al mio EA, continuava a caricarlo e scaricarlo come un ubriacone che vomitava latte. Gli altri indicatori collegati allo stesso EA hanno funzionato bene. Questo è il messaggio che ho ricevuto:
2014.02.25 17:17:08.806 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: rimosso
2014.02.25 17:17:08.799 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: caricato con successo
2014.02.25 17:17:08.794 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: rimosso
2014.02.25 17:17:08.787 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: caricato con successo
2014.02.25 17:17:08.783 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: rimosso
2014.02.25 17:17:08.774 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: caricato con successo
2014.02.25 17:17:08.768 2014.01.02 07:48 Indicatore personalizzato MamaMaryII EURPLN,Daily: rimosso