//+------------------------------------------------------------------+
//| JoeChalhoub_HeikenAshiSwingSignal.mq4 |
//| www.Rpchost.com |
//| webmaster@rpchost.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, JoeChalhoub_HeikenAshiSwingSignal"
#property link "webmaster@rpchost.com"
//----
#property indicator_chart_window
#property indicator_buffers 10
#property indicator_color1 LimeGreen
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Red
#include <WinUser32.mqh>
#import "wininet.dll"
extern string Symbol1 = "";
extern string Symbol2 = "";
extern int TimeFrame=0;
extern int HzShift =0;
extern int mtfHzShift=0;
extern int VrtShift =0;
extern int maxbars =2000;
int ticket;
extern string TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double HeikenLowH1, HeikenHighH1,HeikenOpenH1,HeikenCloseH1;
double HeikenLowM5, HeikenHighM5,HeikenOpenM5,HeikenCloseM5;
double HeikenCloseH4_1,HeikenCloseH4_0;
double HeikenOpenH4_1,HeikenOpenH4_0;
double HeikenLowH1shift, HeikenHighH1shift,HeikenOpenH1shift,HeikenCloseH1shift;
double HeikenLowH4shift, HeikenHighH4shift;
double HeikenLowM5shift, HeikenHighM5shift,HeikenOpenM5shift,HeikenCloseM5shift;
double HeikenCloseH4_1shift,HeikenCloseH4_0shift;
double HeikenOpenH4_1shift,HeikenOpenH4_0shift;
string CurrShift;
//---- input parameters
extern string separator1 = "*** OSMA Settings ***";
extern int fastEMA = 12;
extern int slowEMA = 26;
extern int signal = 9;
extern string separator2 = "*** Indicator Settings ***";
extern bool drawDivergenceLines = true;
extern bool displayAlert = true;
//---- buffers
extern int period=10;
extern int price=0; // 0 or other = (H+L)/2
extern bool Mode_Fast= False;
extern bool Signals= False;
extern int MA1period=9, MA2period=45;
extern string TypeHelp="SMA- 0, EMA - 1, SMMA - 2, LWMA- 3";
extern string TypeHelp2="John Hyden settings TypeMA1=0, TypeMA2=3";
extern int TypeMA1=0;
extern int TypeMA2=3;
static int cc,cc1;
static string strH4Trend;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//---- buffers
double upOsMA[500];
double downOsMA[500];
double bullishDivergence[500];
double bearishDivergence[500];
double bullishDiverg[500];
double bearishDiverg[500];
static bool isBuy = false;
static bool isSell = false;
bool isBuySet, isSellSet;
double OsMA[500];
double upMA[500];
double downMA[500];
double bullishDivergenceMA[500];
double bearishDivergenceMA[500];
double point;
double bullishDivergenceMADeviation[500];
double bearishDivergenceMADeviation[500];
double MA[500];
double SLShort,SLLong, strTargetLong,strTargetShort,C0,C1,C2;
string Target,ask,SL,bid , strSell,strBuy;
extern bool Debug = false;
#define CHART_CMD_UPDATE_DATA 33324
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int InternetAttemptConnect (int x);
int InternetOpenA(string sAgent, int lAccessType,
string sProxyName = "", string sProxyBypass = "",
int lFlags = 0);
int InternetOpenUrlA(int hInternetSession, string sUrl,
string sHeaders = "", int lHeadersLength = 0,
int lFlags = 0, int lContext = 0);
int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead,
int& lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
extern bool lines = true; // ïîêàçûâàòü âåðòèêàëüíûå ëèíèè â ìîìåíòû âûõîäà íîâîñòåé
extern bool texts = true; // ïîêàçûâàòü òåêñòîâûå íàäïèñè ñ îïèñàíèÿìè íîâîñòåé
extern bool comments = true; // ïîêàçûâàòü ñïèñîê áëèæàéøèõ áóäóùèõ è ïðîøåäøèõ íîâîñòåé
extern int total_in_list = 10; // êîëè÷åñòâî íîâîñòåé â ñïèñêå
extern bool high = true; // ïîêàçûâàòü âàæíûå íîâîñòè
extern bool medium = true; // ïîêàçûâàòü íîâîñòè ñðåäíåé âàæíîñòè
extern bool low = true; // ïîêàçûâàòü íîâîñòè ìàëîé âàæíîñòè
extern int update = 15; // îáíîâëÿòü ñïèñîê íîâîñòåé êàæäûå 15 ìèíóò
extern bool auto = true; // àâòî-âûáîð íîâîñòåé, ïîäõîäÿùèõ äëÿ âàëþòíîé ïàðû ãðàôèêà
extern bool eur = true; // ïîêàçûâàòü íîâîñòè äëÿ îïðåäåëåííûõ âàëþò
extern bool usd = true;
extern bool jpy = true;
extern bool gbp = true;
extern bool chf = true;
extern bool cad = true;
extern bool aud = true;
extern bool nzd = true;
extern color high_color = Maroon; // öâåò âàæíûõ íîâîñòåé
extern color medium_color = Sienna; // öâåò îáû÷íûõ íîâîñòåé
extern color low_color = DarkSlateGray; // öâåò íåçíà÷èòåëüíûõ íîâîñòåé
extern bool russian = true; // èñïîëüçîâàòü ôàéë ïåðåâîäà äëÿ ðóññèôèêàöèè íîâîñòåé
extern int server_timezone = 2; // ÷àñîâîé ïîÿñ ñåðâåðà (Alpary - GMT+2)
extern int show_timezone = 4; // ïîêàçûâàòü âðåìÿ äëÿ ÷àñîâîãî ïîÿñà (Ìîñêâà - GMT+4)
extern bool alerts = true; // ïðåäóïðåæäàòü î âûõîäå íîâîñòåé çâóêîâûìè ñèãíàëàìè
extern int alert_before = 5; // ïðåäóïðåæäàòü çà 5 ìèíóò äî âûõîäà íîâîñòåé
extern int alert_every = 30; // çâóêîâûå ñèãíàëû êàæäûå 30 ñåêóíä
datetime NextTime;
datetime TTime[1000];
// -----------------------------------------------------------------------------------------------------------------------------
int TotalNews = 0;
string News[1000][10];
datetime LastUpdate = 0;
int NextNewsLine = 0;
int LastAlert = 0;
string Translate[1000][2];
int TotalTranslate = 0;
static string str;
string Filter1 = "";
string Filter2 = "";
static datetime time;
static bool resume = false;
double LPeak, LTrough;
// -----------------------------------------------------------------------------------------------------------------------------
int init()
{
//---- indicators
// SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
// SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexStyle(2, DRAW_ARROW);
SetIndexStyle(3, DRAW_ARROW);
SetIndexStyle(4, DRAW_NONE);
SetIndexStyle(5, DRAW_ARROW);
SetIndexStyle(6, DRAW_ARROW);
SetIndexStyle(7, DRAW_NONE);
// SetIndexStyle(8, DRAW_ARROW);
// SetIndexStyle(9, DRAW_ARROW);
//---- SetIndexStyle(3, DRAW_LINE, EMPTY, 2, Violet);
//SetIndexBuffer(0, upMA);
//SetIndexBuffer(1, downMA);
SetIndexBuffer(2, bullishDivergenceMA);
SetIndexBuffer(3, bearishDivergenceMA);
SetIndexBuffer(4, MA);
SetIndexBuffer(5, bullishDivergence);
SetIndexBuffer(6, bearishDivergence);
//SetIndexBuffer(7, OsMA);
// SetIndexBuffer(8, SELLMA);
// SetIndexBuffer(9, BUYMA);
//----
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexArrow(5, 233);
SetIndexArrow(6, 234);
SetIndexArrow(8, 233);
SetIndexArrow(9, 234);
SetIndexArrow(10, 233);
SetIndexArrow(11, 234);
SetIndexArrow(15, 233);
SetIndexArrow(16, 234);
ObjectCreate("Symbol1",OBJ_LABEL,0,0,0,0,0);
ObjectCreate("Symbol2",OBJ_LABEL,0,0,0,0,0);
//----
//---- indicators
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
for(int i = ObjectsTotal() - 1; i >= 0; i--)
{
string label = ObjectName(i);
if(StringSubstr(label, 0, 14) != "DivergenceLine")
continue;
ObjectDelete(label);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
string Symbol_1 = " ";
string Symbol_2 = "JOE CHALHOUB - Rpchost.com";
ObjectSetText("Symbol1",Symbol_1,"7","Arial Black",Lime);
ObjectSet("Symbol1",OBJPROP_XDISTANCE,3);
ObjectSet("Symbol1",OBJPROP_YDISTANCE,30);
ObjectSet("Symbol1",OBJPROP_COLOR,Blue);
ObjectSet("Symbol1",OBJPROP_CORNER,"111");
ObjectSetText("Symbol2",Symbol_2,"7","Arial Black",Lime);
ObjectSet("Symbol2",OBJPROP_XDISTANCE,3);
ObjectSet("Symbol2",OBJPROP_YDISTANCE,50);
ObjectSet("Symbol2",OBJPROP_COLOR,Red);
ObjectSet("Symbol2",OBJPROP_CORNER,"111");
if(Symbol() == "GBPUSD" || Symbol() == "EURUSD")
point = 0.0001;
if(Symbol() == "USDJPY")
point = 0.01;
int countedBars = IndicatorCounted();
if(countedBars < 0)
countedBars = 0;
countedBars = IndicatorCounted();
CalculateIndicator(countedBars);
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| M5 Indicator |
//+------------------------------------------------------------------+
void CalculateIndicator(int countedBars)
{
for(int i = 2000; i >= 0; i--)
{
setSignals(i);
}
}
void setSignals(int shift)
{
//SSSS
if (shift < 2000)
{
setHeiken();
int iH0 = iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_M5,shift),false);
int iH1 = iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_M5,shift),false)+1;
int iH4 = iBarShift(Symbol(),PERIOD_H4,iTime(Symbol(),PERIOD_M5,shift),false);
HeikenCloseH1 = iCustom(NULL,PERIOD_H1,"Heiken Ashi",3,1);
HeikenOpenH1 = iCustom(NULL,PERIOD_H1,"Heiken Ashi",2,1);
HeikenCloseM5 = iCustom(NULL,PERIOD_H1,"Heiken Ashi",3,0);
HeikenOpenM5 = iCustom(NULL,PERIOD_H1,"Heiken Ashi",2,0);
HeikenCloseH4_0 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",3,0);
HeikenOpenH4_0 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",2,0);
HeikenCloseH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",3,iH1);
HeikenOpenH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",2,iH1);
HeikenCloseM5shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",3,iH0);
HeikenOpenM5shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",2,iH0);
HeikenCloseH4_0shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",3,iH4);
HeikenOpenH4_0shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",2,iH4);
HeikenCloseH4_1shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",3,iH4+1);
HeikenOpenH4_1shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",2,iH4+1);
if(HeikenCloseH1shift < HeikenOpenH1shift)
{
HeikenLowH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",1,iH1);
HeikenHighH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",0,iH1);
}
if(HeikenCloseH1shift > HeikenOpenH1shift)
{
HeikenLowH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",0,iH1);
HeikenHighH1shift = iCustom(NULL,PERIOD_H1,"Heiken Ashi",1,iH1);
}
if(HeikenCloseH4_1shift < HeikenOpenH4_1shift)
{
HeikenLowH4shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",1,iH4+1);
HeikenHighH4shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",0,iH4+1);
}
if(HeikenCloseH4_1shift > HeikenOpenH4_1shift)
{
HeikenLowH4shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",0,iH4+1);
HeikenHighH4shift = iCustom(NULL,PERIOD_H4,"Heiken Ashi",1,iH4+1);
}
if(isBuy == true && shift > 1)
{
DrawPriceTrendLine(Time[shift], Time[shift], Low[shift],High[shift], Green, STYLE_SOLID);
}
if((isBuy == true) && shift <= 1)
{
DrawPriceTrendLine(Time[1], Time[1], Low[1],High[1], Green, STYLE_SOLID);
DrawPriceTrendLine(Time[0], Time[0], Low[0],High[0], Green, STYLE_SOLID);
}
if(isSell == true && shift > 1 )
{
DrawPriceTrendLine(Time[shift], Time[shift], High[shift], High[shift], Red, STYLE_SOLID);
}
if((isSell == true) && shift <= 1 )
{
DrawPriceTrendLine(Time[1], Time[1], High[1], High[1], Red, STYLE_SOLID);
DrawPriceTrendLine(Time[0], Time[0], High[0], High[0], Red, STYLE_SOLID);
}
}
//CLOSE BUY
if(iClose(Symbol(),PERIOD_M5,shift+1) < HeikenLowH4shift)
{
isBuy = false;
}
//CLOSE SELL
if(iClose(Symbol(),PERIOD_M5,shift+1) > HeikenHighH4shift)
{
isSell = false;
}
H4Trend(shift);
//BUY
if( strH4Trend == "up" && iClose(Symbol(),PERIOD_M5,shift+1) < HeikenOpenH1shift && HeikenCloseH1shift > HeikenOpenH1shift)
{
isBuy = true;
isSell = false;
DrawPriceTrendLine(Time[shift+1], Time[shift+1], Low[shift+1],High[shift+1], Green, STYLE_SOLID);
}
//SELL
if(isBuy == false && strH4Trend == "down" && iClose(Symbol(),PERIOD_M5,shift+1) > HeikenOpenH1shift && HeikenCloseH1shift < HeikenOpenH1shift)
{
isBuy = false;
isSell = true;
DrawPriceTrendLine(Time[shift+1], Time[shift+1], High[shift+1], High[shift+1], Red, STYLE_DASHDOTDOT);
}
}
void DrawPriceTrendLine(datetime x1, datetime x2, double y1,
double y2, color lineColor, double style)
{
string label = "DivergenceLine2.1# " + DoubleToStr(x1, 0);
//ObjectDelete(label);
ObjectCreate(label, OBJ_ARROW, 0, x2, y1, x1, y2, 0, 0);
ObjectSet(label,OBJPROP_COLOR,lineColor);
ObjectSet(label,OBJPROP_SCALE,500);
ObjectSet(label,OBJPROP_RAY, true);
ObjectSet(label,OBJPROP_WIDTH,2);
if(lineColor == Red)
ObjectSet(label,OBJPROP_ARROWCODE,234);
if(lineColor == Green)
ObjectSet(label,OBJPROP_ARROWCODE,233);
}
void H4Trend(int shift)
{
int iH0 = iBarShift(Symbol(),PERIOD_H4,iTime(Symbol(),PERIOD_M5,shift),false);
HeikenCloseH4_1 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",3,iH0+1);
HeikenOpenH4_1 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",2,iH0+1);
HeikenCloseH4_0 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",3,iH0);
HeikenOpenH4_0 = iCustom(NULL,PERIOD_H4,"Heiken Ashi",2,iH0);
if(iClose(Symbol(),PERIOD_M5,shift+1) < HeikenLowH4shift)
{
strH4Trend = "down";
}
else if(iClose(Symbol(),PERIOD_M5,shift+1) > HeikenHighH4shift)
{
strH4Trend = "up";
}
}
void setHeiken()
{
datetime TimeArray[];
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
int i, limit,y=0,counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit= Bars-counted_bars;
limit= MathMax(limit,TimeFrame/Period());
limit=MathMin(limit,maxbars);
for(i=0,y=0;i<limit;i++)
{
if (Time[i]<TimeArray[y]) y++;
/***********************************************************
Add your main indicator loop below. You can add the full
indicator code or you can just reference an existing
indicator with its iValue or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
**********************************************************/
ExtMapBuffer1[i]=iCustom(NULL,TimeFrame,"Heiken Ashi",0,y)+VrtShift*Point;
ExtMapBuffer2[i]=iCustom(NULL,TimeFrame,"Heiken Ashi",1,y)+VrtShift*Point;
ExtMapBuffer3[i]=iCustom(NULL,TimeFrame,"Heiken Ashi",2,y)+VrtShift*Point;
ExtMapBuffer4[i]=iCustom(NULL,TimeFrame,"Heiken Ashi",3,y)+VrtShift*Point;
}
}
Comments