//+------------------------------------------------------------------+
//| BIAS.mq5|
//| Submarine |
//| WeChart:ExpertAdvisorTrader |
//+------------------------------------------------------------------+
#property copyright "Submarine"
#property link "https://www.mql5.com/en/users/carllin000"
#property version "3.00"
#property indicator_buffers 3
#property indicator_plots 3
#property indicator_separate_window
#define EMPTY -1
double LongBuffer[];
double MidBuffer[];
double ShortBuffer[];
ENUM_TIMEFRAMES InPeriod = PERIOD_CURRENT;
input int InLong = 6;
input color ClrLong = clrRed;
input int InMid = 12;
input color ClrMid = clrYellow;
input int InShort = 24;
input color ClrShort= clrGreen;
int ControlBars = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
EventSetTimer(1);
//--- indicator buffers mapping
SetIndexBuffer(0,LongBuffer,INDICATOR_DATA);
SetIndexBuffer(1,MidBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ShortBuffer,INDICATOR_DATA);
SetIndexStyleMQL4(0,DRAW_LINE,0,1,ClrLong);
SetIndexStyleMQL4(1,DRAW_LINE,0,1,ClrMid);
SetIndexStyleMQL4(2,DRAW_LINE,0,1,ClrShort);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
ArraySetAsSeries(time,true);
ArraySetAsSeries(open,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
ArraySetAsSeries(tick_volume,true);
ArraySetAsSeries(volume,true);
ArraySetAsSeries(spread,true);
ArraySetAsSeries(LongBuffer,true);
ArraySetAsSeries(MidBuffer,true);
ArraySetAsSeries(ShortBuffer,true);
//---
//RefreshRates();
ChartRedraw();
int BarsWind;
if (ControlBars!=0) BarsWind=ControlBars; else BarsWind=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
for(int i=BarsWind; i>=0; i--)
{
LongBuffer[i] = ((close[i]-iMAMQL4(NULL,InPeriod,InLong,0,0,0,i)) / (iMAMQL4(NULL,InPeriod,InLong,0,0,0,i)) *100);
MidBuffer[i] = ((close[i]-iMAMQL4(NULL,InPeriod,InMid,0,0,0,i)) / (iMAMQL4(NULL,InPeriod,InMid,0,0,0,i)) *100);
ShortBuffer[i] = ((close[i]-iMAMQL4(NULL,InPeriod,InShort,0,0,0,i))/ (iMAMQL4(NULL,InPeriod,InShort,0,0,0,i))*100);
/*
BIAS1 : (CLOSE-MA(close,L1))/MA(close,L1)*100;
BIAS2 : (CLOSE-MA(close,L2))/MA(close,L2)*100;
BIAS3 : (CLOSE-MA(close,L3))/MA(close,L3)*100;
*/
}
//--- return value of prev_calculated for next call
return(rates_total);
}
void SetIndexStyleMQL4(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)
{
if(width>-1)
PlotIndexSetInteger(index,PLOT_LINE_WIDTH,width);
if(clr!=CLR_NONE)
PlotIndexSetInteger(index,PLOT_LINE_COLOR,clr);
switch(type)
{
case 0:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE);
case 1:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_SECTION);
case 2:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);
case 3:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ARROW);
case 4:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
case 12:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_NONE);
default:
PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE);
}
switch(style)
{
case 0:
PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_SOLID);
case 1:
PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASH);
case 2:
PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DOT);
case 3:
PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOT);
case 4:
PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOTDOT);
default: return;
}
}
double iMAMQL4(string symbol,
int tf,
int period,
int ma_shift,
int method,
int price,
int shift)
{
ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
ENUM_MA_METHOD ma_method=MethodMigrate(method);
ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
int handle=iMA(symbol,timeframe,period,ma_shift,
ma_method,applied_price);
if(handle<0)
{
Print("The iMA object is not created: Error",GetLastError());
return(-1);
}
else
return(CopyBufferMQL4(handle,0,shift));
}
ENUM_TIMEFRAMES TFMigrate(int tf)
{
switch(tf)
{
case 0: return(PERIOD_CURRENT);
case 1: return(PERIOD_M1);
case 5: return(PERIOD_M5);
case 15: return(PERIOD_M15);
case 30: return(PERIOD_M30);
case 60: return(PERIOD_H1);
case 240: return(PERIOD_H4);
case 1440: return(PERIOD_D1);
case 10080: return(PERIOD_W1);
case 43200: return(PERIOD_MN1);
case 2: return(PERIOD_M2);
case 3: return(PERIOD_M3);
case 4: return(PERIOD_M4);
case 6: return(PERIOD_M6);
case 10: return(PERIOD_M10);
case 12: return(PERIOD_M12);
// case 16385: return(PERIOD_H1);
case 16386: return(PERIOD_H2);
case 16387: return(PERIOD_H3);
case 16388: return(PERIOD_H4);
case 16390: return(PERIOD_H6);
case 16392: return(PERIOD_H8);
case 16396: return(PERIOD_H12);
case 16408: return(PERIOD_D1);
case 32769: return(PERIOD_W1);
case 49153: return(PERIOD_MN1);
default: return(PERIOD_CURRENT);
}
}
double CopyBufferMQL4(int handle,int index,int shift)
{
double buf[];
switch(index)
{
case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
return(buf[0]); break;
case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
return(buf[0]); break;
case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
return(buf[0]); break;
case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
return(buf[0]); break;
case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
return(buf[0]); break;
default: break;
}
return(EMPTY_VALUE);
}
ENUM_MA_METHOD MethodMigrate(int method)
{
switch(method)
{
case 0: return(MODE_SMA);
case 1: return(MODE_EMA);
case 2: return(MODE_SMMA);
case 3: return(MODE_LWMA);
default: return(MODE_SMA);
}
}
ENUM_APPLIED_PRICE PriceMigrate(int price)
{
switch(price)
{
case 1: return(PRICE_CLOSE);
case 2: return(PRICE_OPEN);
case 3: return(PRICE_HIGH);
case 4: return(PRICE_LOW);
case 5: return(PRICE_MEDIAN);
case 6: return(PRICE_TYPICAL);
case 7: return(PRICE_WEIGHTED);
default: return(PRICE_CLOSE);
}
}
ENUM_STO_PRICE StoFieldMigrate(int field)
{
switch(field)
{
case 0: return(STO_LOWHIGH);
case 1: return(STO_CLOSECLOSE);
default: return(STO_LOWHIGH);
}
}
enum ALLIGATOR_MODE { MODE_GATORJAW=1, MODE_GATORTEETH, MODE_GATORLIPS };
enum UP_LOW_MODE { MODE_BASE, MODE_UPPER, MODE_LOWER };
enum ICHIMOKU_MODE { MODE_TENKANSEN=1, MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum BASE_IND_MODE { _MODE_MAIN, MODE_PLUSDI, MODE_MINUSDI, MODE_SIGNAL };
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Deviation Rate BIAS MT4:
Stock trading indicators. BIAS.
Author: Hung Wen Lin