Your code as posted above is too wide
This is more readable
for(i=numberbars-1; i>=1;i--) { d1bar_0 = iBarShift(Symbol(), H1, Time[i]); d1bar_1 = iBarShift(Symbol(), H1, Time[i]) + 1; d1bar_2 = iBarShift(Symbol(), H1, Time[i]) + 2; d1bar_3 = iBarShift(Symbol(), H1, Time[i]) + 3; d1bar_4 = iBarShift(Symbol(), H1, Time[i]) + 4; //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if( (iMACD(NULL,D1,20,50,11,0,0,d1bar_2)>iMACD(NULL,D1,20,50,11,0,0,d1bar_3) && iMACD(NULL,D1,20,50,11,0,0,d1bar_2)>iMACD(NULL,D1,20,50,11,0,0,d1bar_1) && iCustom(NULL,0,"H_trend_on3MA",5,15,50,0,i)==-3 && iMA(NULL,D1,15,0,MODE_EMA,0,d1bar_1)>iMA(NULL,D1,50,0,MODE_EMA,0,d1bar_1)) || (iCustom(NULL,D1,"H_trend_ontrend_3MA",5,15,50,1,d1bar_2)==3 && iADX(NULL,0,14,0,1,i+2)<iADX(NULL,0,14,0,2,i+2) && iADX(NULL,0,14,0,1,i+1)>iADX(NULL,0,14,0,2,i+1) && 20<iADX(NULL,0,14,0,0,i) && iADX(NULL,0,14,0,0,i)<=27) ) }
I don't understand the point of this
d1bar_0 = iBarShift(Symbol(), H1, Time[i]); d1bar_1 = iBarShift(Symbol(), H1, Time[i]) + 1; d1bar_2 = iBarShift(Symbol(), H1, Time[i]) + 2; d1bar_3 = iBarShift(Symbol(), H1, Time[i]) + 3; d1bar_4 = iBarShift(Symbol(), H1, Time[i]) + 4;
If on an H4 chart, depending on the time, d1bar_0 could be 0,1,2 or 3 so 4 possible different sets of values
Sorry, let me clean the code a bit.
Right now I use this indicator on H4 chart. So the D1 of the previous day will be used to make sure that this D1 is totally closed.
int counted_bars=IndicatorCounted(); int i; int numberbars=Bars - counted_bars; double d1bar_0,d1bar_1,d1bar_2,d1bar_3,d1bar_4,h4bar_0,h4bar_1,h4bar_2,h4bar_3,h1bar_0,h1bar_1,h1bar_2,h1bar_3; ; if(counted_bars<5) counted_bars=5; //---- for(i=numberbars-1; i>=1;i--) { d1bar_0 = iBarShift(Symbol(), D1, Time[i]); //this one is for checking purpose on D1 only d1bar_1 = iBarShift(Symbol(), D1, Time[i]) + 1; // D1 Bars of H4 d1bar_2 = iBarShift(Symbol(), D1, Time[i]) + 2; // D1_1 Bars see the first condition d1bar_3 = iBarShift(Symbol(), D1, Time[i]) + 3; d1bar_4 = iBarShift(Symbol(), D1, Time[i]) + 4; h4bar_0 = iBarShift(Symbol(), H4, Time[i]); h4bar_1 = iBarShift(Symbol(), H4, Time[i]) + 1; h4bar_2 = iBarShift(Symbol(), H4, Time[i]) + 2; h4bar_3 = iBarShift(Symbol(), H4, Time[i]) + 3; //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if( //set3-start ------------------------------------------------------------------------------------------------------------------------------; //D1Hist_M_change_D_color_0=-1 trend6_3MA=-3 D1MA15_50=1 ( iMACD(NULL,D1,20,50,11,0,0,d1bar_2)>iMACD(NULL,D1,20,50,11,0,0,d1bar_3) && iMACD(NULL,D1,20,50,11,0,0,d1bar_2)>iMACD(NULL,D1,20,50,11,0,0,d1bar_1) && iCustom(NULL,0,"H_trend_on3MA",5,15,50,0,i)==-3 && iMA(NULL,D1,15,0,MODE_EMA,0,d1bar_1)>iMA(NULL,D1,50,0,MODE_EMA,0,d1bar_1) ) || //D1ma3_2dtrend_1=3 adx_cut_D_1=1 adx_main_level=2 ( iCustom(NULL,D1,"H_trend_ontrend_3MA",5,15,50,1,d1bar_2)==3 && iADX(NULL,0,14,0,1,i+2)<iADX(NULL,0,14,0,2,i+2) && iADX(NULL,0,14,0,1,i+1) > iADX(NULL,0,14,0,2,i+1) && 20<iADX(NULL,0,14,0,0,i)&& iADX(NULL,0,14,0,0,i)<=27 ) || //D1ma3_1dtrend=3 and adxcode=4 and macd3_2dtrend_2=2 ( iCustom(NULL,D1,"H_trend_ontrend_3MA",5,15,50,0,d1bar_1)==3 && iADX(NULL,0,14,0,1,i)>iADX(NULL,0,14,0,2,i) && iADX(NULL,0,14,0,0,i)>iADX(NULL,0,14,0,1,i) && iCustom(NULL,0,"H_trend_ontrend_3macd",5,15,50,1,i+2)==2 ) ... ... ) filter[i]=1;
I still don't get it
Why
d1bar_0 = iBarShift(Symbol(), D1, Time[i]); //this one is for checking purpose on D1 only d1bar_1 = iBarShift(Symbol(), D1, Time[i]) + 1; // D1 Bars of H4 d1bar_2 = iBarShift(Symbol(), D1, Time[i]) + 2; // D1_1 Bars see the first condition d1bar_3 = iBarShift(Symbol(), D1, Time[i]) + 3; d1bar_4 = iBarShift(Symbol(), D1, Time[i]) + 4;
Why not
d1bar_0 = iBarShift(Symbol(), D1, Time[i]); //this one is for checking purpose on D1 only d1bar_1 = d1bar_0 + 1; // D1 Bars of H4 d1bar_2 = d1bar_0 + 2; // D1_1 Bars see the first condition d1bar_3 = d1bar_0 + 3; d1bar_4 = d1bar_0 + 4;
Seems silly to keep calculating the same function when you have the result stored as a variable
Same goes for H4 calculations
int counted_bars=IndicatorCounted(); int numberbars=Bars - counted_bars; if(counted_bars<5) counted_bars=5; <<< This line does nothing. Therefor: for(i=numberbars-1; i>=1;i--) iADX(NULL,0,14,0,2,i+2) <<< This looks back before start of chart.
int counted_bars=IndicatorCounted(); if(counted_bars<2) counted_bars=2; // Handle look back of 2 for(i=Bars - 1 - counted_bars; i>=1;i--) iADX(NULL,0,14,0,2,i+2)
- GumRai: Seems silly to keep calculating the same function when you have the result stored as a variableAgree. Also silly to use variables named varX where it contains var0 + X
- Your if statement is unreadable. You need to organize so you can read it.
Unreadable Self documenting if(
//set3-start --------------------------------------------------------------
//D1Hist_M_change_D_color_0=-1 trend6_3MA=-3 D1MA15_50=1
( iMACD(NULL,D1,20,50,11,0,0,d1bar_2) > iMACD(NULL,D1,20,50,11,0,0,d1bar_3) && iMACD(NULL,D1,20,50,11,0,0,d1bar_2) > iMACD(NULL,D1,20,50,11,0,0,d1bar_1)
&& iCustom(NULL,0,"H_trend_on3MA",5,15,50,0,i)==-3
&& iMA(NULL,D1,15,0,MODE_EMA,0,d1bar_1)>iMA(NULL,D1,50,0,MODE_EMA,0,d1bar_1) )
||
//D1ma3_2dtrend_1=3 adx_cut_D_1=1 adx_main_level=2
double d1Macd[4], trendOn = iCustom(NULL,0,"H_trend_on3MA",5,15,50,0,i), D1EmaFast = iMA(NULL,D1,15,0,MODE_EMA,0,d1bar_1), D1EmaSlow = iMA(NULL,D1,50,0,MODE_EMA,0,d1bar_1); d1Mad[3] = iMACD(NULL,D1,20,50,11,0,0,d1bar_3); d1Mad[2] = iMACD(NULL,D1,20,50,11,0,0,d1bar_2); d1Mad[1] = iMACD(NULL,D1,20,50,11,0,0,d1bar_1); bool isD1ColorChange = d1Macd[3]) < d1Macd[2] && d1Macd[2] > d1Macd[1], isTrendOn = trendOn == -3 , isD1UpTrend = D1EmaFast > D1EmaSlow, isCondition1 = isD1ColorChange && isTrendOn && isD1UpTrend if( isCondition1 || //D1ma3_2dtrend_1=3 adx_cut_D_1=1 adx_main_level=2
First, thank you both for pointing these silly problem.
I don't know how to 'import' the D1 value on to H4/H1, so someone tell me the trick and I just follow it. "Unfortunately" it works, so I just follow until today you point out the better way.
That counted_bar=5, I think there are condition looking back 5 bar. So I put it there.
That self-documenting is so great, I didn't know that and I will do it that way.
Many thanks,
SCFX
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi Everyone,
I wrote an indicator to filter undesirable condition. So it use a lot of iCustom.
When I do backtest, it show different value from real trade. On the visual chart after backtest, the indicator show up (automatically). Then I attach the indicator to that visual chart to make comparison, the value are not the same!
On the same live chart, I attach this indicator few minutes apart and the value are not the same.
The discrepancy is in recent and past bars.
My indicator use D1 iCustome value on H4, and iCustom H4 on H4 as below.
Can you help me with that problem?
Is this caused by the for(I=numberbars-1; I>=1; I--)?
I appreciate your help.
SCFX