//+------------------------------------------------------------------+
//| MA Chanel Arrows.mq4 |
//| Skype Gintaras2604 |
//|
[email protected] |
//+------------------------------------------------------------------+
#property copyright "Skype Gintaras2604"
#property link "
[email protected]"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_plots 12
//--- plot Up1
#property indicator_label1 "Up1"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrLightGreen
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot Up2
#property indicator_label2 "Up2"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrLightGreen
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- plot Up3
#property indicator_label3 "Up3"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrLightGreen
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
//--- plot Dn1
#property indicator_label4 "Dn1"
#property indicator_type4 DRAW_LINE
#property indicator_color4 clrDarkSalmon
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
//--- plot Dn2
#property indicator_label5 "Dn2"
#property indicator_type5 DRAW_LINE
#property indicator_color5 clrDarkSalmon
#property indicator_style5 STYLE_SOLID
#property indicator_width5 1
//--- plot Dn3
#property indicator_label6 "Dn3"
#property indicator_type6 DRAW_LINE
#property indicator_color6 clrDarkSalmon
#property indicator_style6 STYLE_SOLID
#property indicator_width6 1
//--- plot UpArrow
#property indicator_label7 "UpArrow1"
#property indicator_type7 DRAW_ARROW
#property indicator_color7 clrOliveDrab
#property indicator_style7 STYLE_SOLID
#property indicator_width7 1
//--- plot DnArrow
#property indicator_label8 "DnArrow1"
#property indicator_type8 DRAW_ARROW
#property indicator_color8 clrFireBrick
#property indicator_style8 STYLE_SOLID
#property indicator_width8 1
//--- plot UpArrow
#property indicator_label9 "UpArrow2"
#property indicator_type9 DRAW_ARROW
#property indicator_color9 clrOliveDrab
#property indicator_style9 STYLE_SOLID
#property indicator_width9 2
//--- plot DnArrow
#property indicator_label10 "DnArrow2"
#property indicator_type10 DRAW_ARROW
#property indicator_color10 clrFireBrick
#property indicator_style10 STYLE_SOLID
#property indicator_width10 2
//--- plot UpArrow
#property indicator_label11 "UpArrow3"
#property indicator_type11 DRAW_ARROW
#property indicator_color11 clrOliveDrab
#property indicator_style11 STYLE_SOLID
#property indicator_width11 3
//--- plot DnArrow
#property indicator_label12 "DnArrow3"
#property indicator_type12 DRAW_ARROW
#property indicator_color12 clrFireBrick
#property indicator_style12 STYLE_SOLID
#property indicator_width12 3
//--- input parameters
input int MA_Per =9;
input int MA_Method =2;
input int MA_Price =0;
input double MA_Y1_shift =74.6;
input double MA_Y2_shift =131.8;
input double MA_Y3_shift =200;
input double v_shift1 =5;
input double v_shift2 =10;
input double v_shift3 =15;
//--- indicator buffers
double Up1Buffer[];
double Up2Buffer[];
double Up3Buffer[];
double Dn1Buffer[];
double Dn2Buffer[];
double Dn3Buffer[];
double UpArrowBuffer1[];
double DnArrowBuffer1[];
double UpArrowBuffer2[];
double DnArrowBuffer2[];
double UpArrowBuffer3[];
double DnArrowBuffer3[];
double MaBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,Up1Buffer);
SetIndexBuffer(1,Up2Buffer);
SetIndexBuffer(2,Up3Buffer);
SetIndexBuffer(3,Dn1Buffer);
SetIndexBuffer(4,Dn2Buffer);
SetIndexBuffer(5,Dn3Buffer);
SetIndexBuffer(6,UpArrowBuffer1);
SetIndexBuffer(7,DnArrowBuffer1);
SetIndexBuffer(8,UpArrowBuffer2);
SetIndexBuffer(9,DnArrowBuffer2);
SetIndexBuffer(10,UpArrowBuffer3);
SetIndexBuffer(11,DnArrowBuffer3);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(4,PLOT_ARROW,241);
PlotIndexSetInteger(5,PLOT_ARROW,242);
//---
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 counted_bars=IndicatorCounted();
int limit;
limit=Bars-counted_bars;
/*
ArraySetAsSeries(Up1Buffer,true);
ArraySetAsSeries(Up2Buffer,true);
ArraySetAsSeries(Up3Buffer,true);
ArraySetAsSeries(Dn1Buffer,true);
ArraySetAsSeries(Dn2Buffer,true);
ArraySetAsSeries(Dn3Buffer,true);
ArraySetAsSeries(UpArrowBuffer1,true);
ArraySetAsSeries(DnArrowBuffer1,true);
ArraySetAsSeries(UpArrowBuffer2,true);
ArraySetAsSeries(DnArrowBuffer2,true);
ArraySetAsSeries(UpArrowBuffer3,true);
ArraySetAsSeries(DnArrowBuffer3,true);
*/
for(int i=0;i<limit;i++)
{
Up1Buffer
= MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up2Buffer= MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Up3Buffer= MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn1Buffer=-MA_Y1_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn2Buffer=-MA_Y2_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
Dn3Buffer=-MA_Y3_shift+iMA(NULL,0,MA_Per,0,MA_Method,MA_Price,i);
}
for(int i=0;i<limit;i++)
{
UpArrowBuffer1=EMPTY_VALUE;
DnArrowBuffer1=EMPTY_VALUE;
UpArrowBuffer2=EMPTY_VALUE;
DnArrowBuffer2=EMPTY_VALUE;
UpArrowBuffer3=EMPTY_VALUE;
DnArrowBuffer3=EMPTY_VALUE;
if(Up1Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer1=v_shift1*Point+High;
if(Up2Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer2=v_shift2*Point+High;
if(Up3Buffer[i+2]<High[i+2] && Open[i+1]>Close[i+1])UpArrowBuffer3=v_shift3*Point+High;
if(Dn1Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer1=v_shift1*Point-Low;
if(Dn2Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer2=v_shift2*Point-Low;
if(Dn3Buffer[i+2]>Low[i+2] && Open[i+1]<Close[i+1])DnArrowBuffer3=v_shift3*Point-Low;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+