Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
JapCandle
//+------------------------------------------------------------------+
//| JapCandle.mq4 |
//| Yuriy Tokman (YTG) |
//| http://ytg.com.ua/ |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link "http://ytg.com.ua/"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrLime
#property indicator_color2 clrRed
input bool Alerts = true;
input string Text_BUY = "BUY signal text";
input string Text_SELL = "SELL signals text";
input bool Send_Mail = false;
input string subject = "subject text";
input bool Send_Notification = false;
input double amendment = 2;
input color colir_buy = clrLime;
//öâåò òåêñòà äëÿ îòîáðàæåíèÿ ñèãíàëà íà ïîêóïêó
input color colir_sell = clrRed;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
string _name="JapCandle";
double ame =0;
string text_ = "";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorShortName(_name);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,"BUY SIGNALS");
SetIndexDrawBegin(0,3);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,"SELL SIGNALS");
SetIndexDrawBegin(1,3);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
GetDell();
Comment("");
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
ame = amendment;
if(ame==0)ame=100;
double rsi;
//---
int limit=rates_total-prev_calculated-2;
if(prev_calculated==0)limit--;
else limit++;
for( int i=limit; i>=0 && !IsStopped(); i--)
{
rsi = iRSI(Symbol(),0,14,0,i+2);
if(Close[i+2]<Open[i+2] &&
Close[i+1]>Open[i+1] &&
Close[i+2]+(Open[i+2]-Close[i+2])/ame<Close[i+1] &&
rsi<30){ExtMapBuffer1[i] = Low[i] - iATR(Symbol(),0,21,i)/3;
ArrowLeftPriceCreate(0,"ytg_Price_BUY"+TimeToStr(Time[i]),0,Time[i],Open[i],colir_buy);
TextCreate(0,"ytg_Text_BUY"+TimeToStr(Time[i]),0,Time[i],High[i],
"Open BUY Price="+DoubleToStr(Open[i],Digits),"Arial",10,colir_buy,90,ANCHOR_LEFT);
}
if(Close[i+2]>Open[i+2] &&
Close[i+1]<Open[i+1] &&
Close[i+2]-(Close[i+2]-Open[i+2])/ame>Close[i+1] &&
rsi>70){ExtMapBuffer2[i] = High[i] + iATR(Symbol(),0,21,i)/3;
ArrowLeftPriceCreate(0,"ytg_Price_SELL"+TimeToStr(Time[i]),0,Time[i],Open[i],colir_sell);
TextCreate(0,"ytg_Text_SELL"+TimeToStr(Time[i]),0,Time[i],Low[i],
"Open SELL Price="+DoubleToStr(Open[i],Digits),"Arial",10,colir_sell,-90,ANCHOR_LEFT);
}
}
//---
string txt = WindowExpertName()+" "+Symbol()+" "+GetNameTF()+" ";
if(NewBar())
{
rsi = iRSI(Symbol(),0,14,0,2);
if(Close[2]<Open[2] &&
Close[1]>Open[1] &&
Close[2]+(Open[2]-Close[2])/ame<Close[1] &&
rsi<30){
text_= " Price Open = "+DoubleToStr(Ask,Digits);
if(Alerts)Alert(txt+Text_BUY+text_);
if(Send_Mail)SendMail(txt+subject,Text_BUY+text_);
if(Send_Notification)SendNotification(txt+Text_BUY+text_);
}
if(Close[2]>Open[2] &&
Close[1]<Open[1] &&
Close[2]-(Close[2]-Open[2])/ame>Close[1] &&
rsi>70){
text_= " Price Open = "+DoubleToStr(Bid,Digits);
if(Alerts)Alert(txt+Text_SELL+text_);
if(Send_Mail)SendMail(txt+subject,Text_SELL+text_);
if(Send_Notification)SendNotification(txt+Text_SELL+text_);
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Ñîçäàåò îáúåêò "Òåêñò" |
//+------------------------------------------------------------------+
bool TextCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="Text", // èìÿ îáúåêòà
const int sub_window=0, // íîìåð ïîäîêíà
datetime time=0, // âðåìÿ òî÷êè ïðèâÿçêè
double price=0, // öåíà òî÷êè ïðèâÿçêè
const string text="Text", // ñàì òåêñò
const string font="Arial", // øðèôò
const int font_size=10, // ðàçìåð øðèôòà
const color clr=clrRed, // öâåò
const double angle=0.0, // íàêëîí òåêñòà
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ñïîñîá ïðèâÿçêè
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
//---
if(ObjectFind(name)>=0)ObjectDelete(name);//åñëè text óæå ñîçäàí óäàëÿåì åãî, ââèäó ñëó÷àéíîãî ïåðåòàñêèâàíèÿ ìûøüþ
//--- ñáðîñèì çíà÷åíèå îøèáêè
ResetLastError();
//--- ñîçäàäèì îáúåêò "Òåêñò"
if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
{
Print(__FUNCTION__,
": íå óäàëîñü ñîçäàòü îáúåêò \"Òåêñò\"! Êîä îøèáêè = ",GetLastError());
return(false);
}
//--- óñòàíîâèì òåêñò
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- óñòàíîâèì øðèôò òåêñòà
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- óñòàíîâèì ðàçìåð øðèôòà
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- óñòàíîâèì óãîë íàêëîíà òåêñòà
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- óñòàíîâèì ñïîñîá ïðèâÿçêè
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- óñòàíîâèì öâåò
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- îòîáðàçèì íà ïåðåäíåì (false) èëè çàäíåì (true) ïëàíå
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- âêëþ÷èì (true) èëè îòêëþ÷èì (false) ðåæèì ïåðåìåùåíèÿ îáúåêòà ìûøüþ
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ñêðîåì (true) èëè îòîáðàçèì (false) èìÿ ãðàôè÷åñêîãî îáúåêòà â ñïèñêå îáúåêòîâ
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- óñòàíîâèì ïðèîðèòåò íà ïîëó÷åíèå ñîáûòèÿ íàæàòèÿ ìûøè íà ãðàôèêå
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- óñïåøíîå âûïîëíåíèå
return(true);
}
//+------------------------------------------------------------------+
//| Ñîçäàåò ëåâóþ öåíîâóþ ìåòêó |
//+------------------------------------------------------------------+
bool ArrowLeftPriceCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="LeftPrice", // èìÿ öåíîâîé ìåòêè
const int sub_window=0, // íîìåð ïîäîêíà
datetime time=0, // âðåìÿ òî÷êè ïðèâÿçêè
double price=0, // öåíà òî÷êè ïðèâÿçêè
const color clr=clrRed, // öâåò öåíîâîé ìåòêè
const ENUM_LINE_STYLE style=STYLE_DOT, // ñòèëü îêàéìëÿþùåé ëèíèè
const int width=1, // ðàçìåð öåíîâîé ìåòêè
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
//--- óñòàíîâèì êîîðäèíàòû òî÷êè ïðèâÿçêè, åñëè îíè íå çàäàíû
if(ObjectFind(name)>=0)ObjectDelete(name);//åñëè öåíîâàÿ ìåòêà óæå ñîçäàí óäàëÿåì åå, ââèäó ñëó÷àéíîãî ïåðåòàñêèâàíèÿ ìûøüþ
//--- ñáðîñèì çíà÷åíèå îøèáêè
ResetLastError();
//--- ñîçäàäèì öåíîâóþ ìåòêó
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price))
{
Print(__FUNCTION__,
": íå óäàëîñü ñîçäàòü ëåâóþ öåíîâóþ ìåòêó! Êîä îøèáêè = ",GetLastError());
return(false);
}
//--- óñòàíîâèì öâåò ìåòêè
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- óñòàíîâèì ñòèëü îêàéìëÿþùåé ëèíèè
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- óñòàíîâèì ðàçìåð ìåòêè
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- îòîáðàçèì íà ïåðåäíåì (false) èëè çàäíåì (true) ïëàíå
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- âêëþ÷èì (true) èëè îòêëþ÷èì (false) ðåæèì ïåðåìåùåíèÿ ìåòêè ìûøüþ
//--- ïðè ñîçäàíèè ãðàôè÷åñêîãî îáúåêòà ôóíêöèåé ObjectCreate, ïî óìîë÷àíèþ îáúåêò
//--- íåëüçÿ âûäåëèòü è ïåðåìåùàòü. Âíóòðè æå ýòîãî ìåòîäà ïàðàìåòð selection
//--- ïî óìîë÷àíèþ ðàâåí true, ÷òî ïîçâîëÿåò âûäåëÿòü è ïåðåìåùàòü ýòîò îáúåêò
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ñêðîåì (true) èëè îòîáðàçèì (false) èìÿ ãðàôè÷åñêîãî îáúåêòà â ñïèñêå îáúåêòîâ
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- óñòàíîâèì ïðèîðèòåò íà ïîëó÷åíèå ñîáûòèÿ íàæàòèÿ ìûøè íà ãðàôèêå
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- óñïåøíîå âûïîëíåíèå
return(true);
}
void GetDell( string name = "ytg_")
{
string vName;
for(int i=ObjectsTotal()-1; i>=0;i--)
{
vName = ObjectName(i);
if (StringFind(vName,name) !=-1) ObjectDelete(vName);
}
}
//----
bool NewBar(int TF = 0)
{
static datetime NewTime=0;
if(NewTime!=iTime(Symbol(),TF,0))
{
NewTime=iTime(Symbol(),TF,0);
return(true);
}
return(false);
}
//----
string GetNameTF(int TimeFrame=0) {
if (TimeFrame==0) TimeFrame=Period();
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//----
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
---