Energy_Market_v01

Author: Inkov Evgeni ew123@mail.ru
Miscellaneous
Implements a curve of type %1It plays sound alertsUses files from the file systemIt writes information to fileIt writes information to fileIt reads information from a fileIt reads information from a file
0 Views
0 Downloads
0 Favorites
Energy_Market_v01
//+------------------------------------------------------------------+
//|                                            Energy_Market_v01.mq4 |
//+------------------------------------------------------------------+
#property copyright "Inkov Evgeni ew123@mail.ru"
#property link      "8-918-600-11-33"
//+------------------------------------------------------------------+
#define    Max_Razm_Mas      10000
//+------------------------------------------------------------------+
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Green
#property  indicator_width1  2
#property  indicator_color2  Magenta
#property  indicator_width2  2
#property  indicator_color3  Red
#property  indicator_width3  2
//.....................................
extern int     n_bar_sum         = 5;
extern double  porog_sum         = 20.0;
extern double  porog_one         = 60.0;
extern int     sdvig_strel_up    = 5.0;
extern int     sdvig_strel_dw    = 15.0;
extern int     sdvig_strel_step  = 8.0;
extern bool    ust_strel         = true;
extern bool    sound             = true;
extern int     Razm_Mas          = 100;
extern color   Color_txt         = Black;
//.....................................
double   ExtBuffer0[];  // ìàññèâ ñóìì
double   ExtBuffer1[];  // ìàññèâ ìåòîê
double   ExtBuffer2[];  // ìàññèâ ïðåâûøåíèÿ
 
double   Buffer      [Max_Razm_Mas];   // ìàññèâ ñêîðîñòåé
double   Buffer_i    [Max_Razm_Mas];   // ìàññèâ (èìïóëüñîâ) ñêîðîñòåé, ïðåâûøàþùèéõ ïîðîã porog_one
double   Buffer1     [Max_Razm_Mas];   // ìàññèâ ìèíóòíûõ ìåòîê
double   Sum_Buffer  [Max_Razm_Mas];   // ìàññèâ ñóìì ñêîðîñòåé (ñðåäíåå çíà÷åíèå)
//+------------------------------------------------------------------+
int      kol_ms, pred_kol_ms;
double   delta_tick,delta_time;
double   pr, pred_pr, V, Sum_V;
datetime time_pred_met, time_tek_met;
string   name;
int      kol_izm;
string   name_file="EM_01";
 
//+------------------------------------------------------------------+
int init()
  {
   if (n_bar_sum<1)n_bar_sum=1;
   
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
   
   IndicatorDigits(1);
   
   SetIndexEmptyValue(0,0);
   ArrayInitialize(ExtBuffer0,0);
   ArrayInitialize(ExtBuffer1,0);
   ArrayInitialize(Buffer,    0);
   ArrayInitialize(Buffer1,   0);
   ArrayInitialize(Sum_Buffer,0);
   
   IndicatorShortName("EM_01 ( "+DoubleToStr(n_bar_sum,0)+", "+
                     DoubleToStr(porog_sum,1)+", "+
                     DoubleToStr(porog_one,1)+" )");
                     
   SetLevelValue(1, porog_sum);
   SetLevelValue(2,-porog_sum);
   SetLevelValue(3, porog_one);
   SetLevelValue(4,-porog_one);
   Get_File(); 
      
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   Save_File(); 
   return(0);
}
//+------------------------------------------------------------------+
int start()
{  // èçìåðèòü âðåìÿ ìåæäó òèêàìè
   pred_kol_ms=kol_ms;
   kol_ms=GetTickCount();
   if(kol_ms==pred_kol_ms)
     {
      kol_ms+=1000;
     }
   delta_time=kol_ms-pred_kol_ms;
   //...............................
      // îïðåäåëèòü âåëè÷èíó òèêà
   pred_pr=pr;
   pr=Bid;
   delta_tick=NormalizeDouble((pr-pred_pr)/Point,0);
   //...............................
   if (pred_pr==0 || pred_kol_ms==0)return(0);  // åñëè ïåðåìåííûå íå óñòàíîâëåíû, ïîâòîðèòü âõîä
   //...............................
   kol_izm=MathMin(Bars,MathMin(Razm_Mas,Max_Razm_Mas)); // îïðåäåëèòü äëèíó ãðàôèêà
   //...............................
      // âû÷èñëèòü ñêîðîñòü èçìåíåíèÿ òèêà
   V=delta_tick/delta_time/Point;
   //...............................
      // çàíåñòè ñêîðîñòü òèêà â ìàññèâ ñêîðîñòåé
   ArrayCopy(Buffer,Buffer,1,0,kol_izm-1);  // ïðåäâàðèòåëüíî ñäâèíóòü äàííûå âíóòðè ìàññèâà
   Buffer[0]=V;
   //...............................
      // âû÷èñëèòü ñðåäíþþ ñêîðîñòü çà "n_bar_sum" òèêîâ è çàíåñè â ìàññèâ ñðåäíèõ ñêîðîñòåé
   ArrayCopy(Sum_Buffer,Sum_Buffer,1,0,kol_izm-1);  // ïðåäâàðèòåëüíî ñäâèíóòü äàííûå âíóòðè ìàññèâà
   
   Sum_V=0;
   for (int i=0;i<n_bar_sum;i++)Sum_V+=Buffer[i];
   Sum_V=Sum_V/n_bar_sum;
   
   Sum_Buffer[0]=Sum_V;
   //...............................
      // åñëè ñêîðîñòü ïðåâûñèëà ïîðîã, çàíåñòè ñðåäíþþ ñêîðîñòü â ìàññèâ ïðåâûøåíèÿ ïîðîãà
   ArrayCopy(Buffer_i,Buffer_i,1,0,kol_izm-1);  // ïðåäâàðèòåëüíî ñäâèíóòü äàííûå âíóòðè ìàññèâà
   if (V >= porog_one || V <= -porog_one)
      Buffer_i[0]=Sum_V;
   else
      Buffer_i[0]=0;
   //...............................
         // ïðè íåîáõîäèìîñòè âûâåñòè ñòðåëêè è çâóê
   if (Sum_V >= porog_sum)
   {
      if (ust_strel)
      {
         strel_up(241,sdvig_strel_up+2*sdvig_strel_step);         // äâîéíàÿ ñòðåëêà ââåðõ
         txt_up(Sum_V,sdvig_strel_up+3*sdvig_strel_step,Color_txt);
      }
      if (sound)PlaySound("email.wav");
   }
   if (V >= porog_one)
   {
      if (ust_strel)
      {
         strel_up(225,sdvig_strel_up);       // îäèíî÷íàÿ ñòðåëêà ââåðõ
         txt_up(V,sdvig_strel_up+sdvig_strel_step,Color_txt);
      }
      if (sound)PlaySound("news.wav");
   }
   //....................................
   if (Sum_V <= -porog_sum)
   {
      if (ust_strel)
      {
         strel_dw(242,sdvig_strel_dw+2*sdvig_strel_step);         // äâîéíàÿ ñòðåëêà âíèç
         txt_dw(Sum_V,sdvig_strel_dw+3*sdvig_strel_step,Color_txt);
      }
      if (sound)PlaySound("timeout.wav");
   }
   if (V <= -porog_one)
   {
      if (ust_strel)
      {
         strel_dw(226,sdvig_strel_dw);       // îäèíî÷íàÿ ñòðåëêà âíèç
         txt_dw(V,sdvig_strel_dw+sdvig_strel_step,Color_txt);
      }
      if (sound)PlaySound("alert2.wav");
   }
   //...............................
      // â íà÷àëå  ìèíóòû, ïîñòàâèòü ìåòêó
   time_tek_met=TimeCurrent();
   if  (time_pred_met==0)time_pred_met=StrToTime(TimeToStr(time_tek_met,TIME_DATE)+" "+TimeToStr(time_tek_met,TIME_MINUTES));
   ArrayCopy(Buffer1,Buffer1,1,0,kol_izm-1);  // ïðåäâàðèòåëüíî ñäâèíóòü äàííûå âíóòðè ìàññèâà
   if (time_tek_met-time_pred_met>=60)
   {
      time_pred_met=StrToTime(TimeToStr(time_tek_met,TIME_DATE)+" "+TimeToStr(time_tek_met,TIME_MINUTES));
      Buffer1[0]=Sum_Buffer[0];
   }
   else
      Buffer1[0]=0;
   //...............................
      // âûâåñòè ìàññèâ ñðåäíèõ ñêîðîñòåé íà ýêðàí
   ArrayCopy(ExtBuffer0,Sum_Buffer,0,0,kol_izm-1);
   ExtBuffer0[Razm_Mas-1]=0;
   //...............................
      // âûâåñòè ìàññèâ ìèíóòíûõ ìåòîê íà ýêðàí
   ArrayCopy(ExtBuffer1,Buffer1,0,0,kol_izm-1);
   ExtBuffer1[Razm_Mas-1]=0;
   //...............................
      // âûâåñòè ìàññèâ ïðåâûøåíèÿ ñêîðîñòåé íà ýêðàí
   ArrayCopy(ExtBuffer2,Buffer_i,0,0,kol_izm-1);
   ExtBuffer2[Razm_Mas-1]=0;
   //...............................
 
   return(0);
}
//+------------------------------------------------------------------+
void strel_up(int kod, int sdv)
{
   name="up"+DoubleToStr(Minute(),0)+"_"+DoubleToStr(kod,0);
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_ARROW,0,Time[0],Bid-sdv*Point);
   ObjectSet(name,OBJPROP_TIME1,Time[0]);
   ObjectSet(name,OBJPROP_PRICE1,Bid-sdv*Point);
   ObjectSet(name,OBJPROP_ARROWCODE,kod);
   ObjectSet(name,OBJPROP_COLOR,Green);
}
//-------------------------
void strel_dw(int kod, int sdv)
{
   name="dw"+DoubleToStr(Minute(),0)+"_"+DoubleToStr(kod,0);
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_ARROW,0,Time[0],Ask+sdv*Point);
   ObjectSet(name,OBJPROP_TIME1,Time[0]);
   ObjectSet(name,OBJPROP_PRICE1,Ask+sdv*Point);
   ObjectSet(name,OBJPROP_ARROWCODE,kod);
   ObjectSet(name,OBJPROP_COLOR,Red);
}
//-------------------------
void txt_up(double n, int sdv, color col)
{
   name="txt_up"+DoubleToStr(Minute(),0)+DoubleToStr(sdv,0);
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_TEXT,0,Time[0],Bid-sdv*Point);
   ObjectSet(name,OBJPROP_TIME1,Time[0]);
   ObjectSet(name,OBJPROP_PRICE1,Bid-sdv*Point);
   ObjectSetText(name,DoubleToStr(n,0),10,"Times New Roman",col);
}
//-------------------------
void txt_dw(double n, int sdv, color col)
{
   name="txt_dw"+DoubleToStr(Minute(),0)+DoubleToStr(sdv,0);
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_TEXT,0,Time[0],Ask+sdv*Point);
   ObjectSet(name,OBJPROP_TIME1,Time[0]);
   ObjectSet(name,OBJPROP_PRICE1,Ask+sdv*Point);
   ObjectSetText(name,DoubleToStr(n,0),10,"Times New Roman",col);
}
//-------------------------
void Save_File()
{
   // ñîõðàíåíèå äûííûõ â ôàéëå 
   // ïåðâîå çíà÷åíèå - âðåìÿ çàïèñè (TimeCurrent())
   // âòîðîå çíà÷åíèå - êîë. äàííûõ â ãðóïïå (kol_izm)
   // 1-ÿ ãðóïïà - ñêîðîñòè (Buffer[])
   // 2-ÿ ãðóïïà - ìåòêè    (Buffer1[])
   // 3-ÿ ãðóïïà - èìïóëüñû (Buffer_i[])
   // 4-ÿ ãðóïïà - ñðåäíèå  (Sum_Buffer[])
   
   int file=FileOpen(name_file,  FILE_BIN|FILE_WRITE);
   
   FileWriteInteger(file, TimeCurrent());
   FileWriteInteger(file, kol_izm);
   
   FileWriteArray(file, Buffer,     0, kol_izm);
   FileWriteArray(file, Buffer1,    0, kol_izm);
   FileWriteArray(file, Buffer_i,   0, kol_izm);
   FileWriteArray(file, Sum_Buffer, 0, kol_izm);
   
   FileClose(file);
}
//-------------------------
void Get_File()
{
   // ÷òåíèå äûííûõ èç ôàéëå 
   // ïåðâîå çíà÷åíèå - âðåìÿ ïðåäûäóùåé çàïèñè 
   // âòîðîå çíà÷åíèå - êîë. äàííûõ â ãðóïïå (kol_izm)
   // 1-ÿ ãðóïïà - ñêîðîñòè (Buffer[])
   // 2-ÿ ãðóïïà - ìåòêè    (Buffer1[])
   // 3-ÿ ãðóïïà - èìïóëüñû (Buffer_i[])
   // 4-ÿ ãðóïïà - ñðåäíèå  (Sum_Buffer[])
   
   int file=FileOpen(name_file,  FILE_BIN|FILE_READ);
   
   datetime t=FileReadInteger(file);
   if (TimeCurrent()-t>60)
   {
      FileClose(file);
      FileDelete(name_file);
      return;
   }
   int kol=FileReadInteger(file);
   
   FileReadArray(file, Buffer,      0, kol);
   FileReadArray(file, Buffer1,     0, kol);
   FileReadArray(file, Buffer_i,    0, kol);
   FileReadArray(file, Sum_Buffer,  0, kol);
   
   FileClose(file);
}
//-------------------------

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 ---