Wiseman Horizon

Author: Copyright � 2005, Pavel Kulko
Indicators Used
Bill Williams Alligator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Wiseman Horizon
//+------------------------------------------------------------------+
//|                                              Wiseman Horizon.mq4 |
//|                             Bill Williams Wiseman Divergent bars |
//|                                  Copyright © 2007, GwadaTradeBoy |
//|                                           gwadatradeboy@yahoo.fr |
//+------------------------------------------------------------------+
//|                                             Author: David Thomas |
//|                                      MQ4 Conversion: Pavel Kulko |
//|                                                  polk@alba.dp.ua |
//+------------------------------------------------------------------+
//|                                     Shape Drawing: GwadaTradeBoy |
//|                                           gwadatradeboy@yahoo.fr |
//+------------------------------------------------------------------+

/*[[
	Name := Wiseman 1
	Author := David Thomas, Basileus@Moneytec
	Notes := Bill Williams Wiseman 1 Divergent bars.  ver. 3.
	Notes := the changes of Basileus@Moneytec have been corrected and simplified.
	Separate Window := No
	First Color := LimeGreen
	First Draw Type := Histogram
	First Symbol := 217
	Use Second Data := Yes
	Second Color := Red
	Second Draw Type := Histogram
	Second Symbol := 218
]]*/
#property copyright "Copyright © 2007, GwadaTradeBoy"
#property link      "gwadatradeboy@yahoo.fr"
#property copyright "David Thomas"
#property link      "Basileus@Moneytec"
#property copyright "Copyright © 2005, Pavel Kulko"
#property link      "polk@alba.dp.ua"

#define Buy "Buy"
#define Sell "Sell"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 GreenYellow
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Red

//---- Variables Externes
extern int     Method         = 1;
extern bool    Debug = True;

//---- Variables
//--- Methode 1
int            LastTradeTime;
double         PriceHighSell,PriceHighBuy,PriceLowSell,PriceLowBuy;
int            shift = 0;
double         prevbars = 0;
bool           first = True;
double         lips = 0;
double         teeth = 0;
double         loopbegin = 0;
double         median = 0;
double         jaws = 0;
//--- Methode 2
int            result, counted_bars, limit, i;
int            nShift;

//---- Shapes
extern int     NumberOfDays = 50; //Ammener à disparaitre counted_bars
extern color   BuyColor     = MediumAquamarine;       
extern color   SellColor    = Tomato;       
datetime       DateTrade;
datetime       TimeBeginObject, TimeEndObject;
datetime       TimeBeginBuySignal, TimeBeginSellSignal, TimeEndBuySignal, TimeEndSellSignal;
datetime       TimeBeginBuyShape, TimeBeginSellShape, TimeEndBuyShape, TimeEndSellShape;
double         PriceHighObject, PriceLowObject;
double         ShapePriceHighSell,ShapePriceHighBuy,ShapePriceLowSell,ShapePriceLowBuy;
double         SignalPriceHighSell,SignalPriceHighBuy,SignalPriceLowSell,SignalPriceLowBuy;
int            BarBegin, BarEnd;
      
//---- Buffers
double         ExtHistoBuffer[];
double         ExtHistoBuffer2[];
double         ExtMapBuffer3[];
double         ExtMapBuffer4[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
   {
//---- indicators
      SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID);
      SetIndexBuffer(0, ExtHistoBuffer);
      SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID);
      SetIndexBuffer(1, ExtHistoBuffer2);
//---- Styles et couleur des Fleches      
      SetIndexStyle(2, DRAW_ARROW, 0, 1);    // Fleche vers le haut
      SetIndexArrow(2, 233);
      SetIndexBuffer(2, ExtMapBuffer3);
      SetIndexStyle(3, DRAW_ARROW, 0, 1);    // Fleche vers le bas
      SetIndexArrow(3, 234);
      SetIndexBuffer(3, ExtMapBuffer4);
//---  Shapes
/* Before Drawing Object, you have to Create It */
      //DeleteObjects();
      //for (int i=0; i<NumberOfDays; i++) 
      for (i = Bars - 5 ;shift >= 0 ; shift--)
         {
            //CreateObjects("Buy"+shift, BuyColor);
            //CreateObjects("Sell"+shift, SellColor);
            ObjectDelete("Buy"+shift);
            ObjectDelete("Sell"+shift);
         }  
//----       
      switch(Period())
         {
            case     1: nShift = 1;   break;
            case     5: nShift = 3;   break;
            case    15: nShift = 5;   break;
            case    30: nShift = 10;  break;
            case    60: nShift = 15;  break;
            case   240: nShift = 20;  break;
            case  1440: nShift = 80;  break;
            case 10080: nShift = 100; break;
            case 43200: nShift = 200; break;
         }
//----
      return(0);
   }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
   {
//----
      for (i = Bars - 5 ;shift >= 0 ; shift--)
         {
            ObjectDelete("Buy"+shift);
            ObjectDelete("Sell"+shift);
         }
//----
      return(0);
   }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
      DateTrade = TimeCurrent();
//--- Methode 1
      if (Method ==1)
         {
//            SetLoopCount(0);
// check conditions are ok.
            if( Bars < 3 || Bars == prevbars ) 
               return(0);
// check for additional bars loading or total reloading
            if( Bars < prevbars || Bars-prevbars>1 ) 
               first = True;
            prevbars = Bars;
            if( first ) 
               { 
// loopbegin prevent counting of counted bars exclude current
	              loopbegin = Bars-2;
	              first = False;
               } 
// loop from first bar to current bar (with shift=0)
            for(shift=Bars-5;shift>=0 ;shift--)
               { 
                  result = 0;
                  median = (High[shift]+Low[shift])/2;
                  lips = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, shift);
                  teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, shift);
                  jaws = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, shift);
//---- Test for BUY Signal Bar : test for bullish divergent bar : 
                  if( ((Close[shift] >= median)                                     // close is in lower half of bar
                  && (High[shift] < MathMin(MathMin(lips,teeth),jaws))              // bar is completely below alligator
                  && (Low[shift] < Low[shift+1]) && (Low[shift] < Low[shift+2])     // low is moving down
                  && (Low[shift] < Low[shift+3]) && (Low[shift] < Low[shift+4])     // ...
                  && (iAO(NULL, 0, shift) < iAO(NULL, 0, shift+1))                  // checking if it's right AO signal
                  ) ) 
                     {
                        result = 1;
                        PriceHighBuy = High[shift];
                        PriceLowBuy = Low[shift];
                        
                     }
//---- Test for SELL Signal Bar : test for bearish divergent bar :
                  if( ((Close[shift] <= median)                                     // close is upper half of bar
                  && (Low[shift] > MathMax(MathMax(lips,teeth),jaws))               // bar is completely above alligator
                  && (High[shift] > High[shift+1]) && (High[shift] > High[shift+2]) // high is moving up
                  && (High[shift] > High[shift+3]) && (High[shift] > High[shift+4]) // ...
                  && (iAO(NULL, 0, shift) > iAO(NULL, 0, shift+1))                  // checking if it's right AO signal
                  ) ) 
                     {
                        result = -1;
                        PriceHighSell = High[shift];
                        PriceLowSell = Low[shift];
                        TimeBeginSellSignal = Time[shift];
                     }
//---- 
// Portion de code ou il faudra chercher la validité du signal
                  if(( result == 0 )
                  &&(High[shift]>PriceHighSell))
                     {
                        PriceHighSell=0;
                        PriceLowSell=0;
                        //TimeEndSellSignal = TimeCurrent();
                     }
                  if(( result == 0 )
                  &&(Low[shift]>PriceHighBuy))
                     {
                        PriceHighBuy=0;
                        PriceLowBuy=0;
                        //TimeEndBuySignal = TimeCurrent();
                     }
//---- BUY : GREEN bar.
                  if(result > 0)
                     {
                        ExtHistoBuffer[shift] = PriceHighBuy;
                        ExtHistoBuffer2[shift] = PriceLowBuy;
                        ExtMapBuffer3[shift] = Low[shift] - nShift*Point;
//---- First Parameters for the BUY Shape (TimeBeginBuyShape, ShapePriceHighBuy, ShapePriceLowBuy)
                        TimeBeginBuyShape = TimeBeginBuySignal;
                        ShapePriceHighBuy = PriceHighBuy;
                        ShapePriceLowBuy = PriceLowBuy;
                     }
//---- SELL : RED bar.
                  if(result < 0)
                     {
                        ExtHistoBuffer[shift] = PriceLowSell;
                        ExtHistoBuffer2[shift] = PriceHighSell;
                        ExtMapBuffer4[shift] = High[shift] + nShift*Point;
//---- First Parameters for the SELL Shape (TimeBeginSellShape, ShapePriceHighSell, ShapePriceLowSell)
                        TimeBeginSellShape = TimeBeginSellSignal;
                        ShapePriceHighSell = PriceHighSell;
                        ShapePriceLowSell = PriceLowSell;
                     }
//---- Test des conditions de validité du signal
//---  Buy
                  if (
                  (TimeCurrent() != TimeBeginBuySignal)
                  //&& ( Ask < PriceHighBuy)
                  )
                     //{
                        //if ( Ask < PriceHighBuy) //|| (
                           TimeEndBuyShape = Time[0];
                        else
                           TimeEndBuyShape = Time[1];
                     //}
//---  Sell
                  if ( Bid < PriceLowSell)
                     TimeEndSellShape = Time[0];
                  else
                     TimeEndSellShape = Time[1];   

//---- Dessin du rectangle
//---  Buy
                  
                  //TimeEndBuyShape = TimeEndBuySignal;
                  if (Debug)
                     {
                        Print("TimeBeginBuyShape ", TimeToStr(TimeBeginBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceHighBuy ", ShapePriceHighBuy);
                        Print("TimeEndBuyShape ", TimeToStr(TimeEndBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceLowBuy ", ShapePriceLowBuy);
                     }  
                  //DrawObjects(DateTrade, "Buy"+i, TimeBeginBuyShape, TimeEndBuyShape);
                  //ObjectCreate("Buy"+shift, OBJ_RECTANGLE, 0, TimeBeginBuyShape, ShapePriceHighBuy, Time[0], ShapePriceLowBuy);
                  ObjectCreate("Buy"+shift, OBJ_RECTANGLE, 0, TimeBeginBuyShape, ShapePriceHighBuy, TimeEndBuyShape, ShapePriceLowBuy);
                  ObjectSet("Buy"+shift, OBJPROP_COLOR, BuyColor);
//---  Sell
                  
                  TimeEndSellShape = TimeEndSellSignal;
/*                  if (Debug)
                     {
                        Print("TimeBeginBuyShape ", TimeToStr(TimeBeginBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceHighBuy ", ShapePriceHighBuy);
                        Print("TimeEndBuyShape ", TimeToStr(TimeEndBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceLowBuy ", ShapePriceLowBuy);
                     } 
                  //DrawObjects(DateTrade, "Sell"+i, TimeBeginSellShape, TimeEndSellShape);
                  ObjectCreate("Sell"+shift, OBJ_RECTANGLE, 0, TimeBeginSellShape, ShapePriceHighSell, TimeEndSellShape, ShapePriceLowSell);
                  ObjectSet("Sell"+shift, OBJPROP_COLOR, SellColor);
//---- 
/*                  DateTrade=decDateTradeDay(DateTrade);
                  while (TimeDayOfWeek(DateTrade)>5) 
                     DateTrade=decDateTradeDay(DateTrade); */
               }
         }
//--- Methode 2
      if (Method ==2)
         {
            counted_bars=IndicatorCounted();
            limit = Bars-counted_bars-1;
            for(i=limit; i>=0; i--) 
               {
                  result = 0;
                  median = (High[i]+Low[i])/2;
                  if((Low[i] < Low[i+1]) 
                  && (Close[i] > median)) 
                     result = -1;
                  if((High[i] > High[i+1]) 
                  && (Close[i] < median)) 
                     result = 1;
//---- BUY : GREEN bar.
                  if(result > 0) 
                     {
                        ExtHistoBuffer[i] = Low[i];
                        ExtHistoBuffer2[i] = High[i];
                        TimeBeginBuyShape = TimeCurrent();
                     }
//---- SELL : RED bar.
                  if(result < 0) 
                     {
                        ExtHistoBuffer[i] = High[i];
                        ExtHistoBuffer2[i] = Low[i];
                        TimeBeginSellShape = TimeCurrent();
                     }
//---- Test des conditions de validité du signal
/*
//---  Buy
                  if ( Ask < PriceHighBuy)
                     TimeEndBuyShape = Time[0];
                  else
                     TimeEndBuyShape = Time[1];

//---  Sell
                  if ( Bid > PriceLowSell)
                     TimeEndSellShape = Time[0];
                  else
                     TimeEndSellShape = Time[1];   
*/
//---- Dessin du rectangle
//---  Buy
                  TimeBeginBuyShape = TimeBeginBuySignal;
                  TimeEndBuyShape = TimeEndBuySignal;
                  if (Debug)
                     {
                        Print("TimeBeginBuyShape ", TimeToStr(TimeBeginBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceHighBuy ", ShapePriceHighBuy);
                        Print("TimeEndBuyShape ", TimeToStr(TimeEndBuyShape,TIME_DATE|TIME_SECONDS));
                        Print("ShapePriceLowBuy ", ShapePriceLowBuy);
                     }  
                  //DrawObjects(DateTrade, "Buy"+i, TimeBeginBuyShape, TimeEndBuyShape);
                  ObjectCreate("Buy"+i, OBJ_RECTANGLE, 0, TimeBeginBuyShape, ShapePriceHighBuy, TimeEndBuyShape, ShapePriceLowBuy);
                  ObjectSet("Buy"+i, OBJPROP_COLOR, BuyColor);
//---  Sell
                  TimeBeginSellShape = TimeBeginSellSignal;
                  TimeEndSellShape = TimeEndSellSignal;
/*                  if (Debug)
                     {
                        Print("TimeBeginBuyShape ", TimeBeginBuyShape);
                        Print("ShapePriceHighBuy ", ShapePriceHighBuy);
                        Print("TimeEndBuyShape ", TimeEndBuyShape);
                        Print("ShapePriceLowBuy ", ShapePriceLowBuy);
                     } 
                  //DrawObjects(DateTrade, "Sell"+i, TimeBeginSellShape, TimeEndSellShape);
                  ObjectCreate("Sell"+i, OBJ_RECTANGLE, 0, TimeBeginSellShape, ShapePriceHighSell, Time[0], ShapePriceLowSell);
                  ObjectSet("Sell"+i, OBJPROP_COLOR, SellColor);
//---- 
/*                  DateTrade=decDateTradeDay(DateTrade);
                  while (TimeDayOfWeek(DateTrade)>5) 
                     DateTrade=decDateTradeDay(DateTrade); */
               }
         }
//----
      return(0);
   }
//+------------------------------------------------------------------+
/*
//---- IsNewBar
bool NewBar()
   {
      dt = 0;
      if (dt != Time[0])
         {
            dt = Time[0];
            return(true);
         }
      return(false);
   }
   
//---- CreateObjects
void CreateObjects(string NameObject, color cl) 
   {
      ObjectCreate(NameObject, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
      ObjectSet(NameObject, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(NameObject, OBJPROP_COLOR, cl);
      ObjectSet(NameObject, OBJPROP_BACK, True);
   }

//---- DeleteObjects
void DeleteObjects() 
   {
      for (int i=0; i<NumberOfDays; i++) 
         {
            ObjectDelete("Buy"+i);
            ObjectDelete("Sell"+i);
         }
   }

//---- 
//void DrawObjects(datetime DateTrade, string NameObject, string TimeBegin, string TimeEnd)
void DrawObjects(string NameObject, datetime TimeBegin, datetime TimeEnd)
//void DrawObjects(string NameObject, string TimeBegin, string TimeEnd, double PriceHigh, double PriceLow)
//void DrawObjects(string NameObject, datetime TimeBegin, datetime TimeEnd, double PriceHigh, double PriceLow)
   {
//      TimeBeginObject = StrToTime(TimeToStr(DateTrade, TIME_DATE)+" "+TimeBegin);
//      TimeEndObject = StrToTime(TimeToStr(DateTrade, TIME_DATE)+" "+TimeEnd);
      TimeBeginObject = TimeBegin;
//      TimeEndObject = TimeEnd;
      TimeEndObject = TimeCurrent();
      BarBegin = iBarShift(NULL, 0, TimeBeginObject);
      BarEnd = iBarShift(NULL, 0, TimeEndObject);
//      PriceHighObject = High[iHighest(NULL, 0, MODE_HIGH, BarBegin - BarEnd, BarEnd)];
//      PriceLowObject = Low [iLowest (NULL, 0, MODE_LOW , BarBegin - BarEnd, BarEnd)];
// Prendre les valeur High et Low de la barre signal, et ensuite faire une comparaisont avec les barres suivante
      PriceHighObject = High [BarBegin];
      PriceLowObject = Low [BarBegin];
//      PriceHighObject = PriceHigh;
//      PriceLowObject = PriceLow;
      if (Debug)
         {
            Print("TimeBeginObject ", TimeBeginObject);
            Print("PriceHighObject ", PriceHighObject);
            Print("TimeEndObject ", TimeEndObject);
            Print("PriceLowObject ", PriceLowObject);
         }
//---- Dessin proprement parlé
      ObjectSet(NameObject, OBJPROP_TIME1 , TimeBeginObject);  // type datetime
      ObjectSet(NameObject, OBJPROP_PRICE1, PriceHighObject);  // type double
      ObjectSet(NameObject, OBJPROP_TIME2 , TimeEndObject);    // type datetime
      ObjectSet(NameObject, OBJPROP_PRICE2, PriceLowObject);   // type double
   }
/*

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---