i need to know how to show standard or custom indicators on a chart when an ea attached to the chart . can u guys help me out ...
- How to attach a custom indicator in EA code
- how to edit an indicator code
- How to attach a indicator to a chart from an EA ?
it's easy..
standar indicator like this:
double stoch=iStochastic(NULL,0,5,3,3,MODE_SMA, 1, MODE_MAIN,1); // for stoch indicator
custom indicator like this:
double stochh=iCustom(NULL,0,"indicator name",1,1); // 1 first is buffer, 1 end is shift
for more complete to some indicator, u can learn from this:
https://book.mql4.com/samples/shared
thx..
I think the examples above are not supposed to show the indicator on the chart
oh.. hehe..
maybe can drag indicator to a chart..
but i feel that he want show the indicator from ea..
maybe like that, like my first mission in study ea..
hardyyanto:
oh.. hehe..
maybe can drag indicator to a chart..
but i feel that he want show the indicator from ea..
maybe like that, like my first mission in study ea..
you got my point ..
- Attach the indicator to the chart for your use. The EA doesn't care, it uses the results from iCustom/iRSI/etc.
- Have the EA display the results
//+------------------------------------------------------------------+ //| EA equivalent of indicator buffers | //+------------------------------------------------------------------+ /* Example 1: * if (...) Ordermodify(...); * Polyline("SL"+(ticket%99), SL, Color.SL, 0); * * Example 2: * double ELineCurr = iMA(NULL,0, ELine.Length, 0, MODE_EMA, PRICE_CLOSE, 1); * Polyline("ELine", ELineCurr, Color.ELine, 1); ******************************************************************************/ #define POLYLINE_MAX 20 // Must match priceMM double price00[], price01[], price02[], price03[], price04[], // \ Export price05[], price06[], price07[], price08[], price09[], // \ from price10[], price11[], price12[], price13[], price14[], // | Polyline price15[], price16[], price17[], price18[], price19[]; // | int LRU[POLYLINE_MAX]; // > Import to string lineName[POLYLINE_MAX]; // _/ PLHelper void Polyline(string name, double price, color clr, int shift){ if (!Show.Objects) return; for (int idx=0; idx < POLYLINE_MAX; idx++){ LRU[idx]++; } for (idx=0; idx < POLYLINE_MAX; idx++){ bool new = lineName[idx] != name; if (!new) break; } if (new) idx=ArrayMaximum(LRU); switch (idx){ case 0: PLHelper(name, price, clr, idx, new, shift, price00); return; case 1: PLHelper(name, price, clr, idx, new, shift, price01); return; case 2: PLHelper(name, price, clr, idx, new, shift, price02); return; case 3: PLHelper(name, price, clr, idx, new, shift, price03); return; case 4: PLHelper(name, price, clr, idx, new, shift, price04); return; case 5: PLHelper(name, price, clr, idx, new, shift, price05); return; case 6: PLHelper(name, price, clr, idx, new, shift, price06); return; case 7: PLHelper(name, price, clr, idx, new, shift, price07); return; case 8: PLHelper(name, price, clr, idx, new, shift, price08); return; case 9: PLHelper(name, price, clr, idx, new, shift, price09); return; case 10: PLHelper(name, price, clr, idx, new, shift, price10); return; case 11: PLHelper(name, price, clr, idx, new, shift, price11); return; case 12: PLHelper(name, price, clr, idx, new, shift, price12); return; case 13: PLHelper(name, price, clr, idx, new, shift, price13); return; case 14: PLHelper(name, price, clr, idx, new, shift, price14); return; case 15: PLHelper(name, price, clr, idx, new, shift, price15); return; case 16: PLHelper(name, price, clr, idx, new, shift, price16); return; case 17: PLHelper(name, price, clr, idx, new, shift, price17); return; case 18: PLHelper(name, price, clr, idx, new, shift, price18); return; case 19: PLHelper(name, price, clr, idx, new, shift, price19); return; } } void PLHelper( string name, double price, color clr, int idx, bool new , int shift, double& mem[] ){ datetime t0 = Time[shift]; int firstBar = ArraySize(mem)-1; if (new){ t0 += 60*Period(); firstBar = -1; lineName[idx]=name; static int segNo[POLYLINE_MAX]; segNo[idx]++; static datetime time1[POLYLINE_MAX]; time1[idx] = Time[shift]; } LRU[idx] = 0; string objName=name+"-"+segNo[idx]; static datetime time0[POLYLINE_MAX]; if (new || t0 != time0[idx]){ ArraySetAsSeries(mem, true); // Shift values m[2]=m[1]; m[1]=m[0] firstBar=ArrayResize(mem, firstBar+2)-1; if (firstBar < 0){ Alert( "ArrayResize failed: ",GetLastError()); return;} ArraySetAsSeries(mem, false); time0[idx]=t0; mem[0]=price; } /**/ if(ObjectMove(objName, 1, t0, price)) ObjectMove(objName, 0, time1[idx], mem[firstBar]); // New or tmplt. else if (!ObjectCreate( objName, OBJ_TREND, WINDOW_MAIN , time1[idx], mem[firstBar], t0, price )){ Alert( "ObjectCreate(", objName, "Trend) [1] failed: ",GetLastError());return;} else if (!ObjectSet( objName, OBJPROP_COLOR, clr )) Alert( "ObjectSet(", objName, "Color) [3] failed: ", GetLastError()); else if (!ObjectSet( objName, OBJPROP_RAY, false )) Alert( "ObjectSet(", objName, "Ray) [1] failed: ", GetLastError()); double maxError=0; int maxBar; for (int pos=1; pos < firstBar; pos++){ double error=MathAbs(ObjectGetValueByShift(objName, pos+shift)-mem[pos]); if (error > maxError){ maxError=error; maxBar=pos; } } if (maxError >= pips2dbl){ // Split the line into two segments at the max. if (!ObjectMove(objName, 1, Time[shift+maxBar], mem[maxBar])) Alert( "ObjectMove(", objName, "Trend) failed: ", GetLastError()); segNo[idx]++; objName=name+"-"+segNo[idx]; ArrayResize(mem, maxBar+1); // Drop firstBar..(maxBar+1) time1[idx] = Time[shift+maxBar]; /**/ if(ObjectMove(objName, 0, time1[idx], mem[maxBar])) ObjectMove(objName, 1, t0, price); else if (!ObjectCreate( objName, OBJ_TREND, WINDOW_MAIN , time1[idx], mem[maxBar], t0, price )){ Alert( "ObjectCreate(", objName, "Trend) [2] failed: ",GetLastError()); } else if (!ObjectSet( objName, OBJPROP_COLOR, clr )) Alert( "ObjectSet(", objName, "Color) [4] failed: ", GetLastError()); else if (!ObjectSet( objName, OBJPROP_RAY, false )) Alert( "ObjectSet(", objName, "Ray) [3] failed: ", GetLastError()); } // Split the line into two segments at the max. } // PLHelper
See updated code https://www.mql5.com/en/forum/130907 Updated to allow color changes, external modification, deletion
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register