Okay I managed to build a workaround! Below is the updated Heiken Ashi.mq4.
Now, we have a savable preference. When using the updated Heiken Ashi.mq4, consider this:
Do not use the 'Colors' tab. This isn't working anymore since the last MT4 update.
Looking at it today I realized all HA preferences are defined in the <inputs> block of *.chr files. So the bar width wasn't a savable preference yet.
I entered
input int ExtWidth[1-4] = *;in the .mq4 file and replaced the constant value in the so called "indicator lines" section on the SetIndexStyle line before ExtColor with a variable.
Now, we have a savable preference. When using the updated Heiken Ashi.mq4, consider this:
Do not use the 'Colors' tab. This isn't working anymore since the last MT4 update.
The color and the new savable width value are to be found on the 'Inputs' tab. (A restart of MT4 might be needed to affect these changes.)
Also I removed the lines
#property indicator_color[1-4] * #property indicator_width[1-4] *
because I don't see a use for it. (Maybe this is wrong.)
Now for my curiosity: Where does this 'Colors' tab come from? And also the 'Visualization' tab?
And for the real experts: This is a workaround, is there a easy way to make the bars scale with window zoom?
Here the new Heiken Ashi.mq4:
//+------------------------------------------------------------------+ //| Heiken Ashi NS.mq4 | //| Copyright 2006-2014, MetaQuotes Software Corp. | //| https://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2006-2014, MetaQuotes Software Corp." #property link "https://www.mql4.com" #property description "We recommend next chart settings (press F8 or select menu 'Charts'->'Properties...'):" #property description " - on 'Color' Tab select 'Black' for 'Line Graph'" #property description " - on 'Common' Tab disable 'Chart on Foreground' checkbox and select 'Line Chart' radiobutton" #property description " " #property description "Modified by MQL4 forum member SaturnusDJ to enable saving of bar width" #property strict #property indicator_chart_window #property indicator_buffers 4 //--- input color ExtColor1 = Red; // Shadow of bear candlestick input color ExtColor2 = White; // Shadow of bull candlestick input color ExtColor3 = Red; // Bear candlestick body input color ExtColor4 = White; // Bull candlestick body input int ExtWidth1 = 1; // Width of shadow of bear candlestick input int ExtWidth2 = 1; // Width of shadow of bull candlestick input int ExtWidth3 = 2; // Width of Bear candlestick body input int ExtWidth4 = 2; // Width of Bull candlestick body //--- buffers double ExtLowHighBuffer[]; double ExtHighLowBuffer[]; double ExtOpenBuffer[]; double ExtCloseBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //|------------------------------------------------------------------| void OnInit(void) { IndicatorShortName("Heiken Ashi"); IndicatorDigits(Digits); //--- indicator lines SetIndexStyle(0,DRAW_HISTOGRAM,0,ExtWidth1,ExtColor1); SetIndexBuffer(0,ExtLowHighBuffer); SetIndexStyle(1,DRAW_HISTOGRAM,0,ExtWidth2,ExtColor2); SetIndexBuffer(1,ExtHighLowBuffer); SetIndexStyle(2,DRAW_HISTOGRAM,0,ExtWidth3,ExtColor3); SetIndexBuffer(2,ExtOpenBuffer); SetIndexStyle(3,DRAW_HISTOGRAM,0,ExtWidth4,ExtColor4); SetIndexBuffer(3,ExtCloseBuffer); //--- SetIndexLabel(0,"Low/High"); SetIndexLabel(1,"High/Low"); SetIndexLabel(2,"Open"); SetIndexLabel(3,"Close"); SetIndexDrawBegin(0,10); SetIndexDrawBegin(1,10); SetIndexDrawBegin(2,10); SetIndexDrawBegin(3,10); //--- indicator buffers mapping SetIndexBuffer(0,ExtLowHighBuffer); SetIndexBuffer(1,ExtHighLowBuffer); SetIndexBuffer(2,ExtOpenBuffer); SetIndexBuffer(3,ExtCloseBuffer); //--- initialization done } //+------------------------------------------------------------------+ //| Heiken Ashi | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i,pos; double haOpen,haHigh,haLow,haClose; //--- if(rates_total<=10) return(0); //--- counting from 0 to rates_total ArraySetAsSeries(ExtLowHighBuffer,false); ArraySetAsSeries(ExtHighLowBuffer,false); ArraySetAsSeries(ExtOpenBuffer,false); ArraySetAsSeries(ExtCloseBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false); //--- preliminary calculation if(prev_calculated>1) pos=prev_calculated-1; else { //--- set first candle if(open[0]<close[0]) { ExtLowHighBuffer[0]=low[0]; ExtHighLowBuffer[0]=high[0]; } else { ExtLowHighBuffer[0]=high[0]; ExtHighLowBuffer[0]=low[0]; } ExtOpenBuffer[0]=open[0]; ExtCloseBuffer[0]=close[0]; //--- pos=1; } //--- main loop of calculations for(i=pos; i<rates_total; i++) { haOpen=(ExtOpenBuffer[i-1]+ExtCloseBuffer[i-1])/2; haClose=(open[i]+high[i]+low[i]+close[i])/4; haHigh=MathMax(high[i],MathMax(haOpen,haClose)); haLow=MathMin(low[i],MathMin(haOpen,haClose)); if(haOpen<haClose) { ExtLowHighBuffer[i]=haLow; ExtHighLowBuffer[i]=haHigh; } else { ExtLowHighBuffer[i]=haHigh; ExtHighLowBuffer[i]=haLow; } ExtOpenBuffer[i]=haOpen; ExtCloseBuffer[i]=haClose; } //--- done return(rates_total); } //+------------------------------------------------------------------+
Thanks very much. exactly what I needed. :)
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
Apparently the width value is not saved to a profile/template.
After the last MT4 upgrade, the colors of this indicator didn't load from profile anymore, so I looked up the profile (C:\Users\me\AppData\Roaming\MetaQuotes\Terminal\serial\profiles\profile1\) and fixed the color in the .chr files.
I noticed more parameters being there. Draw and Weight for example. So I played with those pars, also added Width, Indicator_Width and some variants...but this didn't work. It really looks like Weight is the one, but even after editing and marking the .chr file as read only, no result.
How/where can I save the Heiken Ashi width value so it's loaded on start-up of MT4?
The Heiken Ashi indicator I'm talking about is the 'standard one' 2006-2014, MetaQuotes Software Corp.
This are the indicator parameters saved in the .chr file:
Also for reference, the mq4 file content: