| / | Forum |
|
AR78
2006.12.18 20:26
Can you please help me? |
|
How to Develop a Reliable and Safe Trade Robot in MQL 4 The article deals with the most common errors that occur in developing and using of an Expert Advisor. An exemplary safe automated trading system is described, as well. |
|
AR78
2006.12.18 22:26
extern int SlowPeriod=21; #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Red //---- buffers double U[]; double D[]; //Arrays instead of indicator buffers as many as you like double Price[]; double H[]; int indexbegin = 0; static datetime CurrTime; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,U); SetIndexLabel(0, "UpTrend"); SetIndexEmptyValue(0, NULL); SetIndexStyle( 0, DRAW_LINE); SetIndexBuffer(1,D); SetIndexLabel(1, "DownTrend"); SetIndexEmptyValue(0, NULL); SetIndexStyle( 1, DRAW_LINE); //All of the arrays must be initiated: ArrayResize(Price,Bars); ArraySetAsSeries(Price,true); ArrayResize(H,Bars); ArraySetAsSeries(H,true); for (int i = Bars-1; i >= 0; i--) { Price[i]=Close[i]; } indexbegin = Bars - 20; if (indexbegin < 0) indexbegin = 0; return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,j; //Shifting all arays one cell because of new bar if(CurrTime != Time[0]) { for (i = Bars-2; i > 0; i--) { Price[i+1]=Price[i]; H[i+1]=H[i]; } //Initializing values for new bar Price[0]=Close[0]; H[0]=0; S[0]=0; } //For every thick these values must be renewed Price[0]=Close[0]; CurrTime=Time[0]; //rest of code like an Ordinary indicator. you can use H , S , other arrays the same way as indicator buffers int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars < 0) counted_bars = 0; //---- last counted bar will be recounted if (counted_bars > 0) counted_bars--; if (counted_bars > indexbegin) counted_bars = indexbegin; for (i = indexbegin-counted_bars; i >= 0; i--) { //Ordinary indicator } return(0); }
|