Author: Yuriy Tokman (YTG)
Indicators Used
Relative strength indexIndicator of the average true range
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt sends emails
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 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 ---