First attempt to code mql5 migrating from mql4. Issues.
Is this the wrong place for such requests?
No, just ... either lazy or busy ... being lazy to reply.
I haven't check the code, but you may want to assign the return of iClose, iHigh, iLOw, and especially iOpen function to a variable. That way if those function fails and give return value of -1, you don't have to process it.
Forget one thing if do get -1 return value, find out what error is that.
the function already returns -1 if it fails. It hasn't done it yet but it just gives me back wrong values.
- 2010.05.17
- Sergey Pavlov
- www.mql5.com
It is not a migrated code from mql4. I am just migrating from mt5 ;). But I can write it pretty quickly. It draws a red bar when the candle open < the close and vice versa of multiple currency pairs.
//+------------------------------------------------------------------+ //| HEDGE.mq4 | //| | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "xxx" #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 110 #property indicator_level1 0 #property indicator_buffers 8 extern string Pair1 = "EURUSD"; //extern bool Mirror1 = false; extern string Pair2 = "USDCHF"; extern bool Mirror2 = true; extern string Pair3 = "EURJPY"; //extern bool Mirror3 = false; extern string Pair4 = "GBPUSD"; //extern bool Mirror4 = false; double Pair1Up[],Pair1Down[],Pair2Up[],Pair2Down[],Pair3Up[],Pair3Down[],Pair4Up[],Pair4Down[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int arrowCode = 110; SetIndexBuffer(0,Pair1Up); SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3,Lime); SetIndexArrow(0,110); SetIndexLabel(0,Pair1); SetIndexBuffer(1,Pair1Down); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3,Green); SetIndexArrow(1,110); SetIndexLabel(1,Pair1); SetIndexBuffer(2,Pair2Up); SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,3,DarkOrange); SetIndexArrow(2,110); SetIndexLabel(2,Pair2); SetIndexBuffer(3,Pair2Down); SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,3,OrangeRed); SetIndexArrow(3,110); SetIndexLabel(3,Pair2); SetIndexBuffer(4,Pair3Up); SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID,3,DodgerBlue); SetIndexArrow(4,110); SetIndexLabel(4,Pair3); SetIndexBuffer(5,Pair3Down); SetIndexStyle(5,DRAW_ARROW,STYLE_SOLID,3,Blue); SetIndexArrow(5,110); SetIndexLabel(5,Pair3); SetIndexBuffer(6,Pair4Up); SetIndexStyle(6,DRAW_ARROW,STYLE_SOLID,3,Gold); SetIndexArrow(6,110); SetIndexLabel(6,Pair4); SetIndexBuffer(7,Pair4Down); SetIndexStyle(7,DRAW_ARROW,STYLE_SOLID,3,SaddleBrown); SetIndexArrow(7,110); SetIndexLabel(7,Pair4); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(),i,shift,Swing; //---- TODO: add your code here i=(Bars-counted_bars)-1; //---- for(shift=i; shift>=0;shift--) { if(iClose(Pair1,0,shift) > iOpen(Pair1,0,shift)){Pair1Up[shift] = 5; Pair1Down[shift] = EMPTY_VALUE;} else{Pair1Up[shift] = EMPTY_VALUE; Pair1Down[shift] = 5;} if(iClose(Pair2,0,shift) > iOpen(Pair2,0,shift)) { if(Mirror2) {Pair2Up[shift] = EMPTY_VALUE; Pair2Down[shift] = 38;} else {Pair2Up[shift] = 38; Pair2Down[shift] = EMPTY_VALUE;} } else { if(Mirror2) {Pair2Up[shift] = 38; Pair2Down[shift] = EMPTY_VALUE;} else {Pair2Up[shift] = EMPTY_VALUE; Pair2Down[shift] = 38;} } if(iClose(Pair3,0,shift) > iOpen(Pair3,0,shift)){Pair3Up[shift] = 71; Pair3Down[shift] = EMPTY_VALUE;} else{Pair3Up[shift] = EMPTY_VALUE; Pair3Down[shift] = 71;} if(iClose(Pair4,0,shift) > iOpen(Pair4,0,shift)){Pair4Up[shift] = 105; Pair4Down[shift] = EMPTY_VALUE;} else{Pair4Up[shift] = EMPTY_VALUE; Pair4Down[shift] = 105;} } return(0); } //+------------------------------------------------------------------+

This is my first attempt to write a code in mql5 and there are a few issues I am facing.
I wanted to write a simple indicator that displays a red block if Pair1 bar is bullish and a green block if it is bearish.
Problem #1: the label and arrow settings are not applied to the 2nd pair buffer. it shows a little circle instead of a square.
#2 : my iClose and iOpen return wrong values.
I must have made some rudimentary mistakes but I am not able to find them myself. Can someone please help me out here.