JoeChalhoub_HeikenAshiSwingSignal





//+------------------------------------------------------------------+
//|                            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;
   }
  
}






Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_NONE


Indicators Used:




Custom Indicators Used:
Heiken Ashi
wininet

Order Management characteristics:

Other Features: