Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---