Hi WHRoeder, I managed to compile the indicator and attached here the image of the chart. The indicator line in red forms a straight line on top and dropped at Bar0. I attached here the latest codes kindly advise where to improve the code so that the indicator will plot the values of criss-crossing M1. Big thanks in advance.
#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()
}
//--------------------------------------------------------------------
Highlighted line of code will only give the correct shift if the indi is attached to the daily chart.
As I already said in my earlier post
"So you need the datetime value for the open of the D1 candle. Can you do this?"
Highlighted line of code will only give the correct shift if the indi is attached to the daily chart.
As I already said in my earlier post
"So you need the datetime value for the open of the D1 candle. Can you do this?"
Hi GumRai, I tried many times but I even couldn't compile it, it's beyond my understanding. Best is if someone can show me how then I will learn from it, i noticed I learn rapidly if there are examples. Right now the indicator is counting the M1 bars within the Bar1 that criss-cross the Open[1] price. However the counting stops from there and doesn't progress to complete the graph. I tried to link the indicator to an EA but even the EA cannot send the signal when back testing. Please show some codes that will complete this indicator for good. Thank you.
Hi GumRai, I tried many times but I even couldn't compile it, it's beyond my understanding. Best is if someone can show me how then I will learn from it, i noticed I learn rapidly if there are examples. Right now the indicator is counting the M1 bars within the Bar1 that criss-cross the Open[1] price. However the counting stops from there and doesn't progress to complete the graph. I tried to link the indicator to an EA but even the EA cannot send the signal when back testing. Please show some codes that will complete this indicator for good. Thank you.
Not compiled or tested, but may help you out
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]++;
}
}
I managed to insert Buf_0[iCht] = EMPTY; into WHRoeder code and somehow the indicator worked. Please check the image and the latest compiled codes.However when I linked it into my EA it kept loading and unloading it as if a drunkard spewing milk. The other indicators linked to the same EA worked fine. This is the message i received :
#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);//
}
//--------------------------------------------------------------------
Do you have M1 history?
Yes I have.
Highlighted line of code will only give the correct shift if the indi is attached to the daily chart.
As I already said in my earlier post
"So you need the datetime value for the open of the D1 candle. Can you do this?"
Highlighted line of code will only give the correct shift if the indi is attached to the daily chart.
As I already said in my earlier post
"So you need the datetime value for the open of the D1 candle. Can you do this?"
Hi GumRai, I tried many times but I even couldn't compile it, it's beyond my understanding. Best is if someone can show me how then I will learn from it, i noticed I learn rapidly if there are examples. Right now the indicator is counting the M1 bars within the Bar1 that criss-cross the Open[1] price. However the counting stops from there and doesn't progress to complete the graph. I tried to link the indicator to an EA but even the EA cannot send the signal when back testing. Please show some codes that will complete this indicator for good. Thank you.
Buf_0[iCht] = EMPTY;Hi GumRai, I tried many times but I even couldn't compile it, it's beyond my understanding. Best is if someone can show me how then I will learn from it, i noticed I learn rapidly if there are examples. Right now the indicator is counting the M1 bars within the Bar1 that criss-cross the Open[1] price. However the counting stops from there and doesn't progress to complete the graph. I tried to link the indicator to an EA but even the EA cannot send the signal when back testing. Please show some codes that will complete this indicator for good. Thank you.
Not compiled or tested, but may help you out
I managed to insert Buf_0[iCht] = EMPTY; into WHRoeder code and somehow the indicator worked. Please check the image and the latest compiled codes.However when I linked it into my EA it kept loading and unloading it as if a drunkard spewing milk. The other indicators linked to the same EA worked fine. This is the message i received :
2014.02.25 17:17:08.806 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: removed
2014.02.25 17:17:08.799 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: loaded successfully
2014.02.25 17:17:08.794 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: removed
2014.02.25 17:17:08.787 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: loaded successfully
2014.02.25 17:17:08.783 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: removed
2014.02.25 17:17:08.774 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: loaded successfully
2014.02.25 17:17:08.768 2014.01.02 07:48 Custom indicator MamaMaryII EURPLN,Daily: removed