Files
mql5_indicators_mt5_part3/PowerSystem - indicator for MetaTrader 5/powersystem.mq5
T

116 lines
8.8 KiB
Plaintext

//+------------------------------------------------------------------+
//| DLXT.mq5 |
//| Copyright 2018, MetaQuotes Software Corp.Xio |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp.Xio"
#property description "The index according to the EMA index and the trend of MACD indicators calculated signals,"
#property description "and adding color on candle charts, the default setting is: "
#property description "red column represents the rising trend, green column represents the downward trend,"
#property description "blue column represents no obvious signals."
#property copyright "Copyright 2018, MetaQuotes Software Corp.Jianye Xiong"
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 8
//--- plot Label1
#property indicator_label1 "P_Open;P_High;P_Low;P_Close"
#property indicator_plots 1
#property indicator_type1 DRAW_COLOR_CANDLES
#property indicator_width1 3
#include <MovingAverages.mqh>
//--- input parameters
input int macdfast=12;
input int macdslow=26;
input int macdsignal=9;
input int emaperiod=12;
input color Rise=clrDeepPink;
input color Drop=clrSpringGreen;
input color Noise=clrMediumSlateBlue;
int Handle_macd;
int Handle_ema;
//--- indicator buffers
double Power_buffer[];
double macd_main_buffer[];
double ema_buffer[];
double color_buffer[];
double buffer_open[],buffer_high[],buffer_low[],buffer_close[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,buffer_open,INDICATOR_DATA);
SetIndexBuffer(1,buffer_high,INDICATOR_DATA);
SetIndexBuffer(2,buffer_low,INDICATOR_DATA);
SetIndexBuffer(3,buffer_close,INDICATOR_DATA);
SetIndexBuffer(4,color_buffer,INDICATOR_COLOR_INDEX);
SetIndexBuffer(5,Power_buffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(6,ema_buffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(7,macd_main_buffer,INDICATOR_CALCULATIONS);
//---
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Drop);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Rise);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,Noise);
//---
Handle_macd=iMACD(_Symbol,0,macdfast,macdslow,macdsignal,PRICE_CLOSE);
Handle_ema=iMA(_Symbol,0,emaperiod,0,MODE_EMA,PRICE_CLOSE);
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[])
{
//---
int digits=Digits();
CopyBuffer(Handle_ema,0,0,rates_total,ema_buffer);
CopyBuffer(Handle_macd,0,0,rates_total,macd_main_buffer);
int start;
start=prev_calculated;
if(prev_calculated==0)
{
start=MathMax(emaperiod,macdslow)-1;
}
for(int i=start;i<=rates_total-1;i++)
{
buffer_open[i]=open[i]; //get open price
buffer_high[i]=high[i]; //get high price
buffer_low[i]=low[i]; //get low price
buffer_close[i]=close[i];//get close price
color_buffer[i]=2;
Power_buffer[i]=0;
if((macd_main_buffer[i]-macd_main_buffer[i-1])>0 && (ema_buffer[i]-ema_buffer[i-1])>0)
{
Power_buffer[i]=1;//rise signal
color_buffer[i]=1;
}
if((macd_main_buffer[i]-macd_main_buffer[i-1])<0 && (ema_buffer[i]-ema_buffer[i-1])<0)
{
Power_buffer[i]=-1;//drop signal
color_buffer[i]=0;
}
}
return(rates_total-1);
}
//+------------------------------------------------------------------+