Miscellaneous
0
Views
0
Downloads
0
Favorites
gopal
//+------------------------------------------------------------------+
//| IchimokuAlert_v1.mq4 |
//| Copyright © 2006, Forex-TSD.com |
//| Written by IgorAD,igorad2003@yahoo.co.uk |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link "http://www.forex-tsd.com/"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 SandyBrown
#property indicator_color4 Thistle
#property indicator_color5 White
#property indicator_color6 SandyBrown
#property indicator_color7 Thistle
#property indicator_color8 Orange
//---- input parameters
extern int Tenkan=9;
extern int Kijun=26;
extern int Senkou=52;
extern int AlertMode=1;
// SAR
extern bool Sound.Alert = true ;
extern bool Show.PriceBox = true ;
extern int myBoxWidth = 3;
extern double Step=0.001;
extern int Diff=20; //ñäâèã íà÷àëà öåïî÷êè ïî âåðòèêàëè â ïîèíòàõ
extern int ilimit =144;
//---- buffers
double SarBuffer[];
//----
int save_lastreverse;
bool save_dirlong;
double save_start;
double save_last_high;
double save_last_low;
double save_ep;
double save_sar;
double save_delta;
string symbol, tChartPeriod, tShortName ;
int digits, period ;
bool Trigger ;
int OldBars = -1 ;
///sar
//---- buffers
double Tenkan_Buffer[];
double Kijun_Buffer[];
double SpanA_Buffer[];
double SpanB_Buffer[];
double Chinkou_Buffer[];
double SpanA2_Buffer[];
double SpanB2_Buffer[];
//----
int a_begin;
bool UptrendAlert1,DntrendAlert1,UptrendAlert2,DntrendAlert2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//AlertMode = 0 - no alert;
//AlertMode = 1 - Tenkan crosses Kijun;
//AlertMode = 2 - Chinkou crosses Price;
//AlertMode = 3 - both together.
//+------------------------------------------------------------------+
int init()
{
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Tenkan_Buffer);
SetIndexDrawBegin(0,Tenkan-1);
SetIndexLabel(0,"Tenkan Sen");
//----
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Kijun_Buffer);
SetIndexDrawBegin(1,Kijun-1);
SetIndexLabel(1,"Kijun Sen");
//----
a_begin=Kijun; if(a_begin<Tenkan) a_begin=Tenkan;
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(2,SpanA_Buffer);
SetIndexDrawBegin(2,Kijun+a_begin-1);
SetIndexShift(2,Kijun);
SetIndexLabel(2,NULL);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,SpanA2_Buffer);
SetIndexDrawBegin(5,Kijun+a_begin-1);
SetIndexShift(5,Kijun);
SetIndexLabel(5,"Senkou Span A");
//----
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(3,SpanB_Buffer);
SetIndexDrawBegin(3,Kijun+Senkou-1);
SetIndexShift(3,Kijun);
SetIndexLabel(3,NULL);
SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(6,SpanB2_Buffer);
SetIndexDrawBegin(6,Kijun+Senkou-1);
SetIndexShift(6,Kijun);
SetIndexLabel(6,"Senkou Span B");
//----
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,Chinkou_Buffer);
SetIndexShift(4,-Kijun);
SetIndexLabel(4,"Chinkou Span");
//----
//sar
string symbol, tChartPeriod, tShortName ;
int digits, period ;
bool Trigger ;
int OldBars = -1 ;
period = Period() ;
tChartPeriod = TimeFrameToString(period) ;
symbol = Symbol() ;
digits = Digits ;
tShortName = "wl3"+ symbol + tChartPeriod ;
//---- indicators
IndicatorDigits(Digits+1);
//----
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,159);
SetIndexBuffer(7,SarBuffer);
//sar
return(0);
}
//sar
int deinit()
{
ObjectDelete(tShortName+"01");
return(0);
}
void SaveLastReverse(int last,int dir,double start,double low,double high,double ep,double sar)
{
save_lastreverse=last;
save_dirlong=dir;
save_start=start;
save_last_low=low;
save_last_high=high;
save_ep=ep;
save_sar=sar;
}
//sar
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo |
//+------------------------------------------------------------------+
int start()
{
int i,ii,k;
int counted_bars=IndicatorCounted();
double high,low,price;
//----
if(Bars<=Tenkan || Bars<=Kijun || Bars<=Senkou) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=Tenkan;i++) Tenkan_Buffer[Bars-i]=0;
for(i=1;i<=Kijun;i++) Kijun_Buffer[Bars-i]=0;
for(i=1;i<=a_begin;i++) { SpanA_Buffer[Bars-i]=0; SpanA2_Buffer[Bars-i]=0; }
for(i=1;i<=Senkou;i++) { SpanB_Buffer[Bars-i]=0; SpanB2_Buffer[Bars-i]=0; }
}
//---- Tenkan Sen
i=Bars-Tenkan;
if(counted_bars>Tenkan) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Tenkan;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
Tenkan_Buffer[i]=(high+low)/2;
i--;
}
//---- Kijun Sen
i=Bars-Kijun;
if(counted_bars>Kijun) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Kijun;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
Kijun_Buffer[i]=(high+low)/2;
i--;
}
//---- Senkou Span A
i=Bars-a_begin+1;
if(counted_bars>a_begin-1) i=Bars-counted_bars-1;
while(i>=0)
{
price=(Kijun_Buffer[i]+Tenkan_Buffer[i])/2;
SpanA_Buffer[i]=price;
SpanA2_Buffer[i]=price;
i--;
}
//---- Senkou Span B
i=Bars-Senkou;
if(counted_bars>Senkou) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Senkou;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
price=(high+low)/2;
SpanB_Buffer[i]=price;
SpanB2_Buffer[i]=price;
i--;
}
//---- Chinkou Span
i=Bars-1;
if(counted_bars>1) i=Bars-counted_bars-1;
while(i>=0) { Chinkou_Buffer[i]=Close[i]; i--; }
//----
if (AlertMode == 1 || AlertMode == 3)
{
string Message1 = Symbol()+" M"+Period()+":Tenkan crosses Kijun";
if ( Tenkan_Buffer[0]>Kijun_Buffer[0] && Tenkan_Buffer[1]<Kijun_Buffer[1])
PlaySound("alert.wav");
if ( Tenkan_Buffer[0]<Kijun_Buffer[0] && Tenkan_Buffer[1]>Kijun_Buffer[1])
PlaySound("alert.wav");
if ( Tenkan_Buffer[1]>Kijun_Buffer[1] && Tenkan_Buffer[2]<Kijun_Buffer[2] && !UptrendAlert1)
{Alert(Message1+"Signal for BUY"); UptrendAlert1 = true; DntrendAlert1 = false;}
if ( Tenkan_Buffer[1]<Kijun_Buffer[1] && Tenkan_Buffer[2]>Kijun_Buffer[2] && !DntrendAlert1)
{Alert(Message1+"Signal for SELL"); UptrendAlert1 = false; DntrendAlert1 = true;}
}
if (AlertMode == 2 || AlertMode == 3)
{
string Message2 = Symbol()+" M"+Period()+":Chinkou (White) crosses Price";
if ( Close[0]>Close[0+Kijun] && Close[1]<Close[1+Kijun])
PlaySound("alert2.wav");
if ( Close[0]<Close[0+Kijun] && Close[1]>Close[1+Kijun])
PlaySound("alert2.wav");
if ( Close[1]>Close[1+Kijun] && Close[2]<Close[2+Kijun] && !UptrendAlert2)
{Alert(Message2+":Signal for BUY"); DntrendAlert2 = false; UptrendAlert2 = true;}
if ( Close[1]<Close[1+Kijun] && Close[2]>Close[2+Kijun] && !DntrendAlert2)
{Alert(Message2+":Signal for SELL"); DntrendAlert2 = true; UptrendAlert2 = false;}
}
if( Bars != OldBars ) { Trigger = True ; }
static bool first=false;
bool dirlong;
double start,last_high,last_low;
double ep,sar,price_low,price_high,pricesar;
// int counted_bars=IndicatorCounted();
int limit=ilimit;
// SetIndexDrawBegin(0,Bars-limit);
// SetIndexDrawBegin(1,Bars-limit);
//----
if(Bars<3) return(0);
dirlong=true;
start=Step;
//--------------------------------------------+
ii=Bars-2;
while(ii>=0)
{
price_low=Low[ii];
price_high=High[ii];
pricesar=SarBuffer[ii+1];//òåêóùàÿ öåíà ðàâíà SarBuffer ïðåäûäóùåãî áàðà
//sar ðàâåí öåíà ïðåäûäóùåãî áàðà ïëþñ øàã óìíîæèòü íà
//(ñòàðàÿ öåíà ìèíóñ çíà÷åíèå SarBuffer ïðåäûäóùåãî áàðà)
sar=pricesar+start*(ep-pricesar);
//----
if(dirlong)
{
start+=Step;
if(sar>price_low)
{
SaveLastReverse(ii,true,start,price_low,last_high,ep,sar);
start=Step;
dirlong=false;
ep=price_low;
last_low=price_low;
SarBuffer[ii]=last_high-Diff*Point;
if (SarBuffer[ii]<High[ii]&&SarBuffer[ii]>=Low[ii])
SarBuffer[ii]=High[ii]+Point;
if (SarBuffer[ii]<Low[i]) SarBuffer[ii]=Low[ii]-Point;
ii--;
continue;
}
if(ep<price_high) { last_high=price_high; ep=price_high; }
}
//----
else
{
start+=Step;
if(sar<price_high)
{
SaveLastReverse(ii,false,start,last_low,price_high,ep,sar);
start=Step;
dirlong=true;
ep=price_high;
last_high=price_high;
SarBuffer[ii]=last_low+Diff*Point;
if (SarBuffer[ii]>Low[i]&&SarBuffer[ii]<=High[ii])
SarBuffer[ii]=Low[ii]-Point;
if (SarBuffer[ii]>High[ii]) SarBuffer[ii]=High[ii]+Point;
ii--;
continue;
}
if(ep>price_low) { last_low=price_low; ep=price_low; }
}
SarBuffer[ii]=sar;
ii--;
}
//----
//+--------- TRO MODIFICATION ---------------------------------------+
// Print ("Buffer 0 : " + Tenkan_Buffer[0]) ;
// Print ("Buffer 1 : " + Kijun_Buffer[1]);
// Print ("Price is : " + Close[0]);
// Print (SarBuffer[0]);
/// for BUY
if ( Trigger && Sound.Alert )
{
if (Tenkan_Buffer[0] > Kijun_Buffer[1] && Close[0] > SarBuffer[0])
{
Trigger = False ;
Alert(Symbol(), " ", TimeFrameToString(Period()), " Buy at ",Close[0], " with stop-loss at ", SarBuffer[0]);
}
/// now book profit
if(Close[0] < SarBuffer[0] && Close[0] < SarBuffer[0])
{
Trigger = False ;
Alert(Symbol(), " ", TimeFrameToString(Period()), " Close Long Position at ",Close[0]);
}
// for short position
if (Tenkan_Buffer[0] < Kijun_Buffer[1] && Close[0] < SarBuffer[0])
{
Trigger = False ;
Alert(Symbol(), " ", TimeFrameToString(Period()), " Short Sell at ",Close[0], " with stop-loss at ", SarBuffer[0]);
}
/// now book profit
if(Close[0] > SarBuffer[0] && Close[0] > SarBuffer[0])
{
Trigger = False ;
Alert(Symbol(), " ", TimeFrameToString(Period()), " Close Short Position at ",Close[0]);
}
}
/*
if ( Trigger && Sound.Alert )
{
if( Close[0] > SarBuffer[0] && Close[1] < SarBuffer[1] )
{
Trigger = False ; Alert(symbol," ", tChartPeriod, " Price above PSAR "+ DoubleToStr(SarBuffer[0] ,digits));
}
if( Close[0] < SarBuffer[0] && Close[1] > SarBuffer[1] ) { Trigger = False ; Alert(symbol," ", tChartPeriod, " Price below PSAR "+ DoubleToStr(SarBuffer[0] ,digits)); }
}
*/
if(Show.PriceBox) { DoBox() ; }
OldBars = Bars ;
return(0);
}
//+------------------------------------------------------------------+
void DoBox()
{
if (ObjectFind(tShortName+"01") != 0)
{
ObjectCreate(tShortName+"01",OBJ_ARROW,0,Time[0],SarBuffer[0]);
ObjectSet(tShortName+"01",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(tShortName+"01",OBJPROP_COLOR,indicator_color8);
ObjectSet(tShortName+"01",OBJPROP_WIDTH,myBoxWidth);
}
else
{
ObjectMove(tShortName+"01",0,Time[0],SarBuffer[0]);
ObjectSet(tShortName+"01",OBJPROP_COLOR,indicator_color8);
}
return(0);
}
//+--------- TRO MODIFICATION ---------------------------------------+
string TimeFrameToString(int tf)
{
string tfs;
switch(tf) {
case PERIOD_M1: tfs="M1" ; break;
case PERIOD_M5: tfs="M5" ; break;
case PERIOD_M15: tfs="M15" ; break;
case PERIOD_M30: tfs="M30" ; break;
case PERIOD_H1: tfs="H1" ; break;
case PERIOD_H4: tfs="H4" ; break;
case PERIOD_D1: tfs="D1" ; break;
case PERIOD_W1: tfs="W1" ; break;
case PERIOD_MN1: tfs="MN";
}
return(tfs);
}
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
---