Help Adding Indicator To Expert

 

Just curious as to how, I can add an indicator (i-trend) to an expert and create settings that if the indicator passes certain values in I-trend , to not enter a trade.

If can help or point me in right direction.

Thank you

 
jpsdyb:
Just curious as to how, I can add an indicator (i-trend) to an expert and create settings that if the indicator passes certain values in I-trend , to not enter a trade.

If can help or point me in right direction.

Thank you

You may look at Brainwashing EAs (1c or 1c1 or 1d versions) as an example. Beluck added this i_Trend with changable value.

 

iCustom is for you!

jpsdyb:
Just curious as to how, I can add an indicator (i-trend) to an expert and create settings that if the indicator passes certain values in I-trend , to not enter a trade.

If can help or point me in right direction.

Thank you

jpsdyb,

I think the best way is iCustom function:

Read this piece of one of my articles:

There are two kinds of indicators you can use in your code (Expert advisors, Custom indicators and scripts):

Built-in indicators:The MQL4 has a number of built-in indicators which you can use them in your code directly as a function for example:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

The above code calculates the moving average indicator and returns its value.

double iATR( string symbol, int timeframe, int period, int shift)

The above code calculates the average true range indicator and returns its value.

Any other indicator:To use any other indicator in your code (I-Trend for example) you have to duplicate the code of this indicator in your code (it the hell way) or you can use the iCustom function:

double iCustom( string symbol, int timeframe, string name, ... , int mode, int shift)

What's iCustom anyway?

iCustom is a MQL4 function enables you to use external indicators in your expert advisor or custom indicator code without re-writing the code from scratch.

If you didn't have the code of the external indicator you want to use in your code iCustom is the only way to use the indicator in your code because iCustom works with the already compiled indicator (.exe4 format).

 

great! thank you

 
codersguru:
jpsdyb,

I think the best way is iCustom function:

Read this piece of one of my articles:

There are two kinds of indicators you can use in your code (Expert advisors, Custom indicators and scripts):

Built-in indicators:The MQL4 has a number of built-in indicators which you can use them in your code directly as a function for example:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

The above code calculates the moving average indicator and returns its value.

double iATR( string symbol, int timeframe, int period, int shift)

The above code calculates the average true range indicator and returns its value.

Any other indicator:To use any other indicator in your code (I-Trend for example) you have to duplicate the code of this indicator in your code (it the hell way) or you can use the iCustom function:

double iCustom( string symbol, int timeframe, string name, ... , int mode, int shift)

What's iCustom anyway?

iCustom is a MQL4 function enables you to use external indicators in your expert advisor or custom indicator code without re-writing the code from scratch.

If you didn't have the code of the external indicator you want to use in your code iCustom is the only way to use the indicator in your code because iCustom works with the already compiled indicator (.exe4 format).

Hi Coder's Guru,

and how can I use the iMA function, not with a price, as the media of another indicator? like for example the media of RSI...

Thank you

 

CodersGuru

Hi

Thank you for all the free info, it really helps a newbie like me a lot. I will appreciate it if you can explain the I icustom-function a bit more in detail. I try to put a function together for the attached indicators but must do something wrong. You will see that these two indicators do not have the same amount of info to be use in the icustom-function which still confuse me .I am not sure in what sequence to build the function . If possible can you post the icustom- function here and explain how you get to them.

Regards

Chris

 

CodersGuru

I could not get the indicators to attached.I will post them here:

1)

//| ZeroLag MACD.mq4 |

//| RD |

//| marynarz15@wp.pl |

//+------------------------------------------------------------------+

#property copyright "RD"

#property link "marynarz15@wp.pl"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Magenta

#property indicator_color2 Orange

//---- input parameters

extern int FastEMA=12;

extern int SlowEMA=24;

extern int SignalEMA=9;

//---- buffers

double MACDBuffer[];

double SignalBuffer[];

double FastEMABuffer[];

double SlowEMABuffer[];

double SignalEMABuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

IndicatorBuffers(5);

SetIndexBuffer(0,MACDBuffer);

SetIndexBuffer(1,SignalBuffer);

SetIndexBuffer(2,FastEMABuffer);

SetIndexBuffer(3,SlowEMABuffer);

SetIndexBuffer(4,SignalEMABuffer);

SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexDrawBegin(0,SlowEMA);

SetIndexDrawBegin(1,SlowEMA);

IndicatorShortName("ZeroLag MACD("+FastEMA+","+SlowEMA+","+SignalEMA+")");

SetIndexLabel(0,"MACD");

SetIndexLabel(1,"Signal");

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

double EMA,ZeroLagEMAp,ZeroLagEMAq;

for(int i=0; i<limit; i++)

{

FastEMABuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);

SlowEMABuffer=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

}

for(i=0; i<limit; i++)

{

EMA=iMAOnArray(FastEMABuffer,Bars,FastEMA,0,MODE_EMA,i);

ZeroLagEMAp=FastEMABuffer+FastEMABuffer-EMA;

EMA=iMAOnArray(SlowEMABuffer,Bars,SlowEMA,0,MODE_EMA,i);

ZeroLagEMAq=SlowEMABuffer+SlowEMABuffer-EMA;

MACDBuffer=ZeroLagEMAp - ZeroLagEMAq;

}

for(i=0; i<limit; i++)

SignalEMABuffer=iMAOnArray(MACDBuffer,Bars,SignalEMA,0,MODE_EMA,i);

for(i=0; i<limit; i++)

{

EMA=iMAOnArray(SignalEMABuffer,Bars,SignalEMA,0,MODE_EMA,i);

SignalBuffer=SignalEMABuffer+SignalEMABuffer-EMA;

}

return(0);

}

//+------------------------------------------------------------------+

2)//+------------------------------------------------------------------+

//| Digital MACD.mq4 |

//| Digital MACD rewritten by CrazyChart |

//| |

//+------------------------------------------------------------------+

#property copyright "Digital MACD rewritten by CrazyChart"

#property link " "

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 YellowGreen

#property indicator_color2 White

//---- input parameters

extern int CountBars=300;

extern int SignalMAPeriod=5;

//---- buffers

double ExtGraph[];

double ExtSignal[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexBuffer(0,ExtGraph);

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1,ExtSignal);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//---- TODO: add your code here

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//---- TODO: add your code here

int shift,cnt,loop,AccountedBars;

double value1,value2,AVG;

bool firstTime=true;

if (firstTime) {

AccountedBars = Bars-CountBars;

loop = CountBars-SignalMAPeriod-1;

firstTime=false;

}

for (shift=Bars-2;shift>=0;shift--) {

value1 =

0.2149840610*Close[shift+0]

+0.2065763732*Close[shift+1]

+0.1903728890*Close[shift+2]

+0.1675422436*Close[shift+3]

+0.1397053150*Close[shift+4]

+0.1087951881*Close[shift+5]

+0.0768869405*Close[shift+6]

+0.0460244906*Close[shift+7]

+0.0180517395*Close[shift+8]

-0.0055294579*Close[shift+9]

-0.0236660212*Close[shift+10]

-0.0358140055*Close[shift+11]

-0.0419497760*Close[shift+12]

-0.0425331450*Close[shift+13]

-0.0384279507*Close[shift+14]

-0.0307917433*Close[shift+15]

-0.0209443384*Close[shift+16]

-0.0102335925*Close[shift+17]

+0.0000932767*Close[shift+18]

+0.0089950015*Close[shift+19]

+0.0157131144*Close[shift+20]

+0.0198149331*Close[shift+21]

+0.0211989019*Close[shift+22]

+0.0200639819*Close[shift+23]

+0.0168532934*Close[shift+24]

+0.0121825067*Close[shift+25]

+0.0067474241*Close[shift+26]

+0.0012444305*Close[shift+27]

-0.0037087682*Close[shift+28]

-0.0076300416*Close[shift+29]

-0.0102110543*Close[shift+30]

-0.0113306266*Close[shift+31]

-0.0110462105*Close[shift+32]

-0.0095662166*Close[shift+33]

-0.0072080453*Close[shift+34]

-0.0043494435*Close[shift+35]

-0.0013771970*Close[shift+36]

+0.0013575268*Close[shift+37]

+0.0035760416*Close[shift+38]

+0.0050946166*Close[shift+39]

+0.0058339574*Close[shift+40]

+0.0058160431*Close[shift+41]

+0.0051486631*Close[shift+42]

+0.0039984014*Close[shift+43]

+0.0025619380*Close[shift+44]

+0.0010531475*Close[shift+45]

-0.0003481453*Close[shift+46]

-0.0014937154*Close[shift+47]

-0.0022905986*Close[shift+48]

-0.0027000514*Close[shift+49]

-0.0027359080*Close[shift+50]

-0.0024543322*Close[shift+51]

-0.0019409837*Close[shift+52]

-0.0012957482*Close[shift+53]

-0.0006179734*Close[shift+54]

+0.0000057542*Close[shift+55]

+0.0005111297*Close[shift+56]

+0.0008605279*Close[shift+57]

+0.0010441921*Close[shift+58]

+0.0010775684*Close[shift+59]

+0.0009966494*Close[shift+60]

+0.0008537300*Close[shift+61]

+0.0007142855*Close[shift+62]

+0.0006599146*Close[shift+63]

-0.0008151017*Close[shift+64];

value2 =

0.0825641231*Close[shift+0]

+0.0822783080*Close[shift+1]

+0.0814249974*Close[shift+2]

+0.0800166909*Close[shift+3]

+0.0780735197*Close[shift+4]

+0.0756232268*Close[shift+5]

+0.0727009740*Close[shift+6]

+0.0693478349*Close[shift+7]

+0.0656105823*Close[shift+8]

+0.0615409157*Close[shift+9]

+0.0571939540*Close[shift+10]

+0.0526285643*Close[shift+11]

+0.0479025123*Close[shift+12]

+0.0430785482*Close[shift+13]

+0.0382152880*Close[shift+14]

+0.0333706133*Close[shift+15]

+0.0286021160*Close[shift+16]

+0.0239614376*Close[shift+17]

+0.0194972056*Close[shift+18]

+0.0152532583*Close[shift+19]

+0.0112682658*Close[shift+20]

+0.0075745482*Close[shift+21]

+0.0041980052*Close[shift+22]

+0.0011588603*Close[shift+23]

-0.0015292889*Close[shift+24]

-0.0038593393*Close[shift+25]

-0.0058303888*Close[shift+26]

-0.0074473108*Close[shift+27]

-0.0087203043*Close[shift+28]

-0.0096645874*Close[shift+29]

-0.0102995666*Close[shift+30]

-0.0106483424*Close[shift+31]

-0.0107374524*Close[shift+32]

-0.0105952115*Close[shift+33]

-0.0102516944*Close[shift+34]

-0.0097377645*Close[shift+35]

-0.0090838346*Close[shift+36]

-0.0083237046*Close[shift+37]

-0.0074804382*Close[shift+38]

-0.0065902734*Close[shift+39]

-0.0056742995*Close[shift+40]

-0.0047554314*Close[shift+41]

-0.0038574209*Close[shift+42]

-0.0029983549*Close[shift+43]

-0.0021924972*Close[shift+44]

-0.0014513858*Close[shift+45]

-0.0007848072*Close[shift+46]

-0.0001995891*Close[shift+47]

+0.0003009728*Close[shift+48]

+0.0007162164*Close[shift+49]

+0.0010478905*Close[shift+50]

+0.0012994016*Close[shift+51]

+0.0014755433*Close[shift+52]

+0.0015824007*Close[shift+53]

+0.0016272598*Close[shift+54]

+0.0016185271*Close[shift+55]

+0.0015648336*Close[shift+56]

+0.0014747659*Close[shift+57]

+0.0013569946*Close[shift+58]

+0.0012193896*Close[shift+59]

+0.0010695971*Close[shift+60]

+0.0009140878*Close[shift+61]

+0.0007591540*Close[shift+62]

+0.0016019033*Close[shift+63];

ExtGraph[shift]=value1-value2;

if (shift>0) AccountedBars=AccountedBars+1;

}

for (shift=loop;shift>=0;shift--) {

AVG = 0;

for (cnt=0;cnt<=SignalMAPeriod-1;cnt++) {

AVG = AVG + ExtGraph[shift+cnt];

}

ExtSignal[shift]=AVG/SignalMAPeriod;

if (shift>0) loop = loop-1;

}

//----

return(0);

}

//+------------------------------------------------------------------+

 

I can attach.

I did not check the indicators but I think it should be the same with yours.

Files:
 

newdigital

Hi

Yes it is the same indicators. Is there someone who can show me what the icustom-function of these indicators must be and a short explanation how to get there?

Thank you

 
user4001:
Hi

Yes it is the same indicators. Is there someone who can show me what the icustom-function of these indicators must be and a short explanation how to get there?

Thank you

I do not know.

I know icustom, I know MACD but it is nothing in this indicator concerning "PRICE_CLOSE, MODE_SIGNAL" and so on.

 

there are many custom indicators and I have not been able to learn how to get them to be used on icustom

http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/index.html

I would like to add a custom indicator to an EA and don't know how to do it without engaging someone who codes. I would love to be able to do it myself with some utility tool. any suggestions? instructions how to do it? I want to add the AutoCh indicator to these two EA's. So that it won't open positions if it gets too close to a support or resistance level.

Reason: