tpehep
Miscellaneous
It issuies visual alerts to the screenUses files from the file systemIt writes information to file
2 Views
0 Downloads
0 Favorites
tpehep
//+------------------------------------------------------------------+
//|                                                       TPEHEP.mq4 |
//|                                                   Copyright 2016.|
//+------------------------------------------------------------------+
#property link      "Fedor10_10@mail.ru"
#property version   "1.01"
#property strict
#property indicator_chart_window
#property description "Èíäèêàòîð TPEHEP ïðåäíàçíà÷åí äëÿ òåñòèðîâàíèÿ ñòðàòåãèè"
#property description "íà èñòîðèè â ïîøàãîâîì ðåæèìå ñ àâòîìàòè÷åñêèì êîíòðîëåì"
#property description "èñïîëíåíèÿ ïðèêàçîâ, îøèáîê, è ñîçàíèåì îò÷åòà äëÿ Excel."
#property description "  Ãîðÿ÷èå êëàâèøè:  'B'- BUY,  'S'- SELL,  'C'- CLOSE"
#property description "                                   F12 èëè Step- ñäâèã ãðàôèêà íà 1 øàã"
#property description "                                   '<'- Îáëàñòü âëåâî, '>'- Îáëàñòü âïðàâî"
#property description "                                   'P'- ñîõðàíåíèå ôàéëà îò÷åòà"
extern string K="+:+:+:+";//Ïàðàìåòðû èñïîëíåíèÿ ïðèêàçîâ
input bool Traid=true;//Òîðãîâëÿ/Ðàçìåòêà
input double Lots   =1.0;//Âåëè÷èíà ëîòà
input int StopLoss  =100;//StopLoss (â 5-çíà÷íîì)
input int TakeProfit=40;//TakeProfit (â 5-çíà÷íîì)
input double Spread=0.0;   //Ñïðåä (â 5-çíà÷íîì) 0 - èç èñòîðèè
input double Freeze=0.0;   //Óðîâåíü çàìîðîçêè (â 5-çíà÷íîì)
extern string L="+:+:+:+";//Ðàçðåøåíèå íà ïðîðèñîâêó
input bool Vertical =true;//ðèñîâàíèå/íåò âåðòèêàëüíûõ ëèíèé
input color OpBUY=clrLightSkyBlue;//öâåò ëèíèè BUY
input color OpSELL=clrLightPink;//öâåò ëèíèè SELL
input color ClsAll=clrWhite;    //öâåò ëèíèè çàêðûòèÿ ðó÷íîãî
input color TakePr=clrPaleGreen;//öâåò ëèíèè çàêðûòèÿ ïî TakeProfit
input color StopLs=clrYellow;   //öâåò ëèíèè çàêðûòèÿ ïî StopLoss
extern string M="+:+:+:+";//ðàçíîå
input color Zone=clrDarkViolet;    //öâåò âûäåëåíèÿ ðàññìàòðèâàåìîãî áàðà
input bool Metka=false;//ðèñîâàíèå/íåò öåíîâûõ ìåòîê
input bool Alerts=false;//çàïðåò ïðåäóïðåæäåíèé
input int Step=110;//Êëàâèøà ñäâèãà ãðàôèêà íà 1 øàã
int    n,bar0,Ordr,Tr,SH,file;
double Ask0,Ask1,Bid0,Bid1,SL,TP,SP,Zm,Lev,LevOrd,LevUp,LevDn,Sum;
string FileName,FileNamo,Namo,Uplev,Oplev,Dnlev;
long   result,resold;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   FileName=Symbol()+"."+IntegerToString(Period())+" ";//âðåìåííûé ôàéë äëÿ çàïèñè ñäåëîê
   if(Traid)//ïðîïóñê ïðè îòêàçå îò ðàñ÷åòà
     {
      if(Spread==0.0) SP=MarketInfo(Symbol(),MODE_SPREAD);//Ñïðåä
      else SP=Spread;
      if(Freeze==0.0) Zm=MarketInfo(Symbol(),MODE_FREEZELEVEL);//óðîâåíü çàìîðîçêè
      else Zm=Freeze;
      Lev=MarketInfo(Symbol(),MODE_STOPLEVEL);//ìèíèìàëüíûé ñòîï
      Lev=NormalizeDouble((Lev*Point),Digits);//ìèíèìàëüíûé ñòîï
      SL=NormalizeDouble((StopLoss*Point),Digits);//StopLoss
      if(SL<Lev) {SL=Lev; Alert("StopLoss=",SL/Point);}
      TP=NormalizeDouble((TakeProfit*Point),Digits);//TakeProfit
      if(TP<Lev) {TP=Lev; Alert("TakeProfit=",TP/Point);}
      SP=NormalizeDouble((SP*Point),Digits);//ñïðåä
      Zm=NormalizeDouble((Zm*Point),Digits);//óðîâåíü çàìîðîçêè
      if(Digits==3 || Digits==5)//ïåðåñ÷åò ïîä èíñòðóìåíò
        {
         if(SL>1000) Alert("StopLoss äëÿ 5-çíàêà íå áîëüøå 1000");
         if(TP>1000) Alert("TakeProfit äëÿ 5-çíàêà íå áîëüøå 1000");
        }
      else
        {
         if(SL>100) Alert("StopLoss äëÿ 4-çíàêà íå áîëüøå 100");
         if(TP>100) Alert("TakeProfit äëÿ 4-çíàêà íå áîëüøå 100");
        }
      ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result);//êîëè÷åñòâî ïèêñåëåé ïî Õ
      ObjectCreate("Show1",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
      ObjectSet("Show1",OBJPROP_XDISTANCE,result/2-50);
      ObjectSet("Show1",OBJPROP_YDISTANCE,0);
      ObjectSet("Show1",OBJPROP_CORNER,0);
      ObjectSetText("Show1","ÁÀËÀÍÑ:",14,"Arial",clrDarkGray);//íàäïèñü ÁÀËÀÍÑ
      ObjectCreate("Show2",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
      ObjectSet("Show2",OBJPROP_XDISTANCE,result/2+40);
      ObjectSet("Show2",OBJPROP_YDISTANCE,0);
      ObjectSet("Show2",OBJPROP_CORNER,0);
      ObjectSetText("Show2",DoubleToString(0.0,1),14,"Arial",clrBlueViolet);//ðåçóëüòàò òðåéäåðà
      resold=result;
      file=FileOpen(FileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT);
      FileWrite(file,"  Íîìåð\t  Âðåìÿ\t    Öåíà\t  Ïðèêàç\t  Âðåìÿ\t    Öåíà\t  Ïðîôèò\t     Èòîã");
     }
   ObjectCreate("Zona",OBJ_VLINE,0,Time[0],Close[0]);//âûäåëÿåì îáëàñòü ðàññìàòðèâàåìîãî áàðà
   ObjectSet("Zona",OBJPROP_STYLE,DRAW_LINE);
   ObjectSet("Zona",OBJPROP_WIDTH,8);
   ObjectSet("Zona",OBJPROP_COLOR,Zone);
   ObjectSet("Zona",OBJPROP_BACK,true);
   ObjectSet("Zona",OBJPROP_TIME1,Time[0]);//óòî÷íèì ðàññìàòðèâàåìûé áàð
   ChartRedraw(); //ïåðåðèñóåì
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(Traid) FileClose(file);//ñîõðàíåíèå ïîñëå ðàñ÷åòà
   ObjectDelete("Zona");
   ObjectDelete("Show1");
   ObjectDelete("Show2");
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   return(rates_total);//ïóñòûøêà
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // èäåíòèôèêàòîð ñîáûòèÿ
                  const long& lparam,   // ïàðàìåòð ñîáûòèÿ òèïà long
                  const double& dparam, // ïàðàìåòð ñîáûòèÿ òèïà double
                  const string& sparam) // ïàðàìåòð ñîáûòèÿ òèïà string
  {
//+------------------------------------------------------------------+
//| ïðîâåðêà íàæàòèÿ êëàâèøè èëè ìûøêè                               |
//+------------------------------------------------------------------+
   if(CHARTEVENT_CHART_CHANGE)
     {
      ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result);//êîíòðîëü çà ðàçìåðîì ýêðàíà
      if(result!=resold) Show(result);
     }
   if(Traid && Ordr!=0 && id==CHARTEVENT_OBJECT_DRAG)
     {
      if(sparam==Uplev)//ïðîâåðêà âåðõíåãî óðîâíÿ
         if(LevUp!=ObjectGet(Uplev,OBJPROP_PRICE1))
            LevUp=MouseUp();//ïðè èçìåíåíèè óðîâíÿ
      if(sparam==Dnlev)//ïðîâåðêà íèæíåãî óðîâíÿ
         if(LevDn!=ObjectGet(Dnlev,OBJPROP_PRICE1))
            LevDn=MouseDn();//ïðè èçìåíåíèè óðîâíÿ
     }
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case 37: Alert("Ïîïûòêà ïîâòîðèòü èñòîðèþ"); break;//KEY_LEFT_ARROW
         case 39: Alert("Ïîøàãîâàÿ ïðîêðóòêà ïî F12"); break;//KEY_RIGHT_ARROW ïî F12
         case 66: if(Traid)
           {
            if(Ordr==0)//KEY_BUY
              {
               Ordr=bar0;
               Levl("BUY");//ðèñóåì ëèíèè îòêðûòèÿ è ñòîïû
               if(Vertical) Vert("BUY",OpBUY);//ðèñóåì âåðòèêàëüíóþ ëèíèþ BUY
               if(Metka) Metca("BUY",0,OpBUY);//ðèñóåì öåíîâóþ ìåòêó
              }
            else Alert("Ñäåëêà óæå îòêðûòà");
           }
         else if(Tr!=1){Tr=1; Vert("BUY",OpBUY);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ BUY
         else Alert("Òðåíä ââåðõ óæå îòìå÷åí");
         n++; if(n==1) Namo=TimeToString(Time[Bar()],TIME_DATE);
         break;
         case 67: if(Traid)
           {
            if(Ordr!=0)//KEY_CLOSE
              {
               if(Freez()) break;//ïðîâåðêà íà çàìîðîçêó
               Trend("CL",Ordr,ClsAll);//ðèñóåì ëèíèþ
               if(Vertical) Vert("CL",ClsAll);//ðèñóåì âåðòèêàëüíóþ ëèíèþ Clîså
               if(Metka) Metca("CL",Ordr,ClsAll);//ðèñóåì öåíîâóþ ìåòêó
               Prof("CL",Ordr);//ïîäñ÷èòàåì èòîã
               Ordr=0; if(Traid) Delet();//óäàëåíèå óðîâíåé
              }
            else Alert("Íåò ñäåëêè");
           }
         else if(Tr!=0) {Tr=0; Vert("CL",ClsAll);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ Clîså
         else Alert("Òðåíä íå îòìå÷åí");
         break;
         case 80:
            if(n<1)//÷èñòûé øàáëîí
              {
               if(ChartSaveTemplate(0,FileName+"."))
                  Alert("øàáëîí ",FileName," ñîõðàíåí"); break;
              }
            else
              {
               if(Traid)//ñîõðàíåíèå ôàéëà îò÷åòà
                 {
                  FileFlush(file); FileClose(file);
                  FileNamo=FileName+Namo+"-"+TimeToString(Time[Bar()],TIME_DATE)+".xls";
                  if(FileMove(FileName,0,FileNamo,FILE_REWRITE))
                     Alert("îò÷åò ",FileNamo," ñîõðàíåí"); break;
                 }
               else//øàáëîí ñ ðàçìåòêîé
                 {
                  FileNamo=FileName+Namo+"-"+TimeToString(Time[Bar()],TIME_DATE)+".";
                  if(ChartSaveTemplate(0,FileNamo))
                     Alert("ðàçìåòêà ",FileNamo," ñîõðàíåíà"); break;
                 }
              }
         case 83: if(Traid)
           {
            if(Ordr==0)//KEY_SELL
              {
               Ordr=-bar0;
               Levl("SEL");//ðèñóåì ëèíèè îòêðûòèÿ è ñòîïû
               if(Vertical) Vert("SEL",OpSELL);//ðèñóåì âåðòèêàëüíóþ ëèíèþ SELL
               if(Metka) Metca("SEL",0,OpSELL);//ðèñóåì öåíîâóþ ìåòêó
              }
            else Alert("Ñäåëêà óæå îòêðûòà");
           }
         else if(Tr!=-1) {Tr=-1; Vert("SEL",OpSELL);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ SELL
         else Alert("Òðåíä âíèç óæå îòìå÷åí");
         n++; if(n==1) Namo=TimeToString(Time[Bar()],TIME_DATE);
         break;
         case 188: SH++;//KEY_LEFT
         if(SH>WindowBarsPerChart()){Alert("Îáëàñòü íà ãðàíèöå ñëåâà"); SH=WindowBarsPerChart();}
         break;//óâåëè÷èì íîìåð ðàññìàòðèâàåìîãî áàðà
         case 190: SH--;//KEY_RIGHT
         if(SH<0){Alert("Îáëàñòü íà ãðàíèöå ñïðàâà"); SH=0;}
         break;//óìåíüøèì íîìåð ðàññìàòðèâàåìîãî áàðà 
         default: if(lparam==Step) {ChartNavigate(0,CHART_CURRENT_POS,1); break;}//KEY_Shift
         else Alert("Íàæàòà íå òà êëàâèøà",(lparam));
        }
     }
   if(Bar()<=0) {if(n>0) Alert("Ïðîðèñîâàí ïîñëåäíèé áàð"); return;}//êîíòðîëü îêîí÷àíèÿ èñòîðèè
   bar0=Bar()+SH;//íîìåð íóæíîãî áàðà íà ãðàôèêå
   if(Time[bar0]!=ObjectGet("Zona",OBJPROP_TIME1))//ïðîâåðèì ðàññìàòðèâàåìûé áàð
     {
      Bid0=Close[bar0]; Ask0=Close[bar0]+SP;//öåíà çàêðûòèÿ ðàññìàòðèâàåìîãî áàðà
      Bid1=Open[bar0-1]; Ask1=Open[bar0-1]+SP;//öåíà îòêðûòèÿ áóäóùåãî áàðà
      LevStop();//àâòîìàòè÷åñêàÿ ïðîâåðêà ñðàáàòûâàíèÿ óðîâíåé
      ObjectSet("Zona",OBJPROP_TIME1,Time[bar0]);//óòî÷íèì ðàññìàòðèâàåìûé áàð
      ChartRedraw();//ïåðåðèñóåì
     }
  }
//+------------------------------------------------------------------+
//| ïðèëîæåíèÿ                                                       |
//+------------------------------------------------------------------+
void Vert(string cmd,color clr)//ðèñóåì âåðòèêàëüíóþ ëèíèþ
  {
   cmd+=IntegerToString(n);
   ObjectCreate(cmd,OBJ_VLINE,0,Time[bar0],0);
   ObjectSet(cmd,OBJPROP_STYLE,STYLE_DASH);
   ObjectSet(cmd,OBJPROP_COLOR,clr);
   ObjectSet(cmd,OBJPROP_BACK,true);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
void Levl(string cmd)//ðèñóåì ãîðèçîíòàëüíûå ëèíèè ïðèêàçîâ
  {
   Oplev=cmd;
   if(cmd=="BUY")
     {
      LevOrd=Ask1;//óðîâåíü Ask îòêðûòèÿ
      Uplev="TakeProfit"; LevUp=LevOrd+TP;//óðîâåíü Bid StopLoss îò îòêðûòèÿ
      Dnlev="StopLoss"; LevDn=LevOrd-SL;//óðîâåíü Bid TakeProfit îò îòêðûòèÿ
     }
   if(cmd=="SEL")
     {
      LevOrd=Bid1;//óðîâåíü Bid îòêðûòèÿ
      Uplev="StopLoss"; LevUp=LevOrd+SL;//óðîâåíü Ask TakeProfit îò îòêðûòèÿ
      Dnlev="TakeProfit"; LevDn=LevOrd-TP;//óðîâåíü Ask StopLoss îò îòêðûòèÿ
     }
   ObjectCreate(Uplev,OBJ_HLINE,0,0,LevUp);
   ObjectSet(Uplev,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet(Uplev,OBJPROP_COLOR,clrOrangeRed);
   ObjectSetInteger(0,Uplev,OBJPROP_BACK,true);
   ObjectSetInteger(0,Uplev,OBJPROP_SELECTED,true);
   ObjectCreate(Oplev,OBJ_HLINE,0,0,LevOrd);
   ObjectSet(Oplev,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet(Oplev,OBJPROP_COLOR,clrLimeGreen);
   ObjectSetInteger(0,Oplev,OBJPROP_BACK,true);
   ObjectCreate(Dnlev,OBJ_HLINE,0,0,LevDn);
   ObjectSet(Dnlev,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet(Dnlev,OBJPROP_COLOR,clrOrangeRed);
   ObjectSetInteger(0,Dnlev,OBJPROP_BACK,true);
   ObjectSetInteger(0,Dnlev,OBJPROP_SELECTED,true);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
void Metca(string cmd,int ord,color clr)//ðèñóåì öåíîâóþ ìåòêó
  {
   if(ord==0)//îòêðûòèå îðäåðà
     {
      if(cmd=="BUY") Met("Ask"+IntegerToString(n),Time[bar0-1],LevOrd,clr);//Open BUY
      if(cmd=="SEL") Met("Bid"+IntegerToString(n),Time[bar0-1],LevOrd,clr);//Open SELL
     }
   if(ord>0)//îòêðûò îðäåð BUY
     {
      if(cmd=="CL") Met("Bid"+IntegerToString(n),Time[bar0-1],Bid1,clr);//ZERO
      if(cmd=="SL") Met("Bid"+IntegerToString(n),Time[bar0],LevDn,clr);//SL
      if(cmd=="TP") Met("Bid"+IntegerToString(n),Time[bar0],LevUp,clr);//TP
     }
   if(ord<0)
     {
      if(cmd=="CL") Met("Ask"+IntegerToString(n),Time[bar0-1],Ask1,clr);//ZERO
      if(cmd=="SL") Met("Ask"+IntegerToString(n),Time[bar0],LevUp,clr);//SL
      if(cmd=="TP") Met("Ask"+IntegerToString(n),Time[bar0],LevDn,clr);//TP
     }
  }
//+------------------------------------------------------------------+
void Met(string nm,datetime tm,double pr,color clr)//ðèñóåì öåíîâóþ ìåòêó
  {
   ObjectCreate(nm,OBJ_ARROW_LEFT_PRICE,0,tm,pr);
   ObjectSet(nm,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSet(nm,OBJPROP_COLOR,clr);
   ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
void Trend(string cmd,int ord,color clr)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
  {
   string name="Tr"+IntegerToString(n);
   if(ord>0)//Ask-Bid
     {
      if(cmd=="CL") Tr(name,ord,Bid1,Time[bar0-1],clr);//Man
      if(cmd=="SL") Tr(name,ord,LevDn,Time[bar0],clr);//SL
      if(cmd=="TP") Tr(name,ord,LevUp,Time[bar0],clr);//TP
     }
   if(ord<0)//Bid-Ask
     {
      if(cmd=="CL") Tr(name,-ord,Ask1,Time[bar0-1],clr);//Man
      if(cmd=="SL") Tr(name,-ord,LevUp,Time[bar0],clr);//SL
      if(cmd=="TP") Tr(name,-ord,LevDn,Time[bar0],clr);//TP
     }
  }
//+------------------------------------------------------------------+
void Tr(string name,int ord,double pr,datetime tm,color clr)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
  {
   ObjectCreate(name,OBJ_TREND,0,Time[ord-1],LevOrd,tm,pr);
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);//îòêëþ÷èì (false) îòîáðàæåíèå ëèíèè âïðàâî
   ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(name,OBJPROP_COLOR,clr);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
bool Freez()
  {
   if(Ordr>0)
     {
      if(LevUp<=Bid0+Zm)
        {
         Alert("TakeProfit â çîíå çàìîðîçêè");
         return(true);
        }
      if(LevDn>=Bid0-Zm)
        {
         Alert("StopLoss â çîíå çàìîðîçêè");
         return(true);
        }
     }
   if(Ordr<0)
     {
      if(LevUp<=Ask0+Zm)
        {
         Alert("StopLoss â çîíå çàìîðîçêè");
         return(true);
        }
      if(LevDn>=Ask0-Zm)
        {
         Alert("TakeProfit â çîíå çàìîðîçêè");
         return(true);
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
void LevStop()
  {
   if(Ordr>0)//êîíòðîëü BUY
     {
      if(Low[bar0]<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
        {
         if(Vertical) Vert("SL",StopLs);
         if(Metka) Metca("SL",Ordr,StopLs);
         if(Traid) {Trend("SL",Ordr,StopLs); Prof("SL",Ordr); Delet();}
         if(Alerts) Alert("Ñðàáîòàë StopLoss");
         Ordr=0;
        }
      if(High[bar0]>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
        {
         if(Vertical) Vert("TP",TakePr);
         if(Metka) Metca("TP",Ordr,TakePr);
         if(Traid) {Trend("TP",Ordr,TakePr); Prof("TP",Ordr); Delet();}
         if(Alerts) Alert("ñðàáîòàë TakeProfit");
         Ordr=0;
        }
     }
   if(Ordr<0)//êîíòðîëü SELL
     {
      if(High[bar0]+SP>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
        {
         if(Vertical) Vert("SL",StopLs);
         if(Metka) Metca("SL",Ordr,StopLs);
         if(Traid) {Trend("SL",Ordr,StopLs); Prof("SL",Ordr); Delet();}
         if(Alerts) Alert("Ñðàáîòàë StopLoss");
         Ordr=0;
        }
      if(Low[bar0]+SP<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
        {
         if(Vertical) Vert("TP",TakePr);
         if(Metka) Metca("TP",Ordr,TakePr);
         if(Traid) {Trend("TP",Ordr,TakePr); Prof("TP",Ordr); Delet();}
         if(Alerts) Alert("ñðàáîòàë TakeProfit");
         Ordr=0;
        }
     }
  }
//+------------------------------------------------------------------+
void Prof(string cmd,int ord)//áóõãàëòåðèÿ
  {
   if(ord>0)//áûë BUY   Bid-Ask
     {
      if(cmd=="CL") Write(ord,"CL_BUY",Time[bar0-1],Bid1,NormalizeDouble(Bid1-LevOrd,Digits));//Man
      if(cmd=="SL") Write(ord,"SL_BUY",Time[bar0],LevDn,NormalizeDouble(LevDn-LevOrd,Digits));//SL
      if(cmd=="TP") Write(ord,"TP_BUY",Time[bar0],LevUp,NormalizeDouble(LevUp-LevOrd,Digits));//TP
     }
   if(ord<0)//áûë SELL Ask-Bid
     {
      if(cmd=="CL") Write(ord,"CL_SEL",Time[bar0-1],Ask1,NormalizeDouble(LevOrd-Ask1,Digits));//Man
      if(cmd=="SL") Write(ord,"SL_SEL",Time[bar0],LevUp,NormalizeDouble(LevOrd-LevUp,Digits));//SL
      if(cmd=="TP") Write(ord,"TP_SEL",Time[bar0],LevDn,NormalizeDouble(LevOrd-LevDn,Digits));//TP
     }
  }
//+------------------------------------------------------------------+
void Write(int ord,string nm,datetime tm,double clr,double pr)//çàïèñü â ôàéë
  {
   Sum+=NormalizeDouble(pr*Lots/(10*Point),2);//îáùèé èòîã
   color Cl=clrBlueViolet; if(Sum<0.0) Cl=clrCrimson;//öâåò ÁÀËÀÍÑÀ
   datetime T0=Time[fabs(ord)-1];//âðåìÿ îòêðûòèÿ îðäåðà
   FileWrite(file,n,"\t",TimeToStr(T0,TIME_MINUTES),"\t",Rus(DoubleToString(LevOrd,Digits)),"\t",nm,"\t",
             TimeToStr(tm,TIME_MINUTES),"\t",Rus(DoubleToString(clr,Digits)),"\t",
             IntegerToString(int(pr/Point)),"\t",Rus(DoubleToString(Sum,2)));
   ObjectSetText("Show2",DoubleToString(Sum,2),14,"Arial",Cl);//èçìåíåíèå ðåçóëüòàòà òðåéäåðà
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
string Rus(string ru)//Ôóíêöèÿ çàìåíÿåò(.)íà(,)äëÿ ðóññêîé Excel
  {
   StringReplace(ru,".",",");
   return ru;
  }
//+------------------------------------------------------------------+
int Bar()//íîìåð ïåðâîãî âèäèìîãî áàðà íà ãðàôèêå.
  {
   long res=0;// ïîäãîòîâèì ïåðåìåííóþ
   res+=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0,res);//çàïðîñèì íîìåð ëåâîãî áàðà 
   res-=WindowBarsPerChart()+1;//íàéäåì íîìåð ïðàâîãî áàðà
   return(int(res));//--- âåðíåì íîìåð íóæíîãî áàðà
  }
//+------------------------------------------------------------------+
void Show(long res)//êîíòðîëü çà ðàçìåðîì ýêðàíà
  {
   ObjectSet("Show1",OBJPROP_XDISTANCE,res/2-50);
   ObjectSet("Show2",OBJPROP_XDISTANCE,res/2+40);
   ChartRedraw();//ïåðåðèñóåì
   resold=result;
  }
//+------------------------------------------------------------------+
void Delet()//ïðîâåðêà óðîâíåé
  {
   ObjectDelete(Uplev);//óäàëåíèå âåðõíåãî óðîâíÿ
   ObjectDelete(Oplev);//óäàëåíèå óðîâíÿ îòêðûòèÿ
   ObjectDelete(Dnlev);//óäàëåíèå íèæíåãî óðîâíÿ
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
double MouseUp()
  {
   if(Freez()) ObjectSet(Uplev,OBJPROP_PRICE1,LevUp);//âîçâðàùàåì ëèíèþ íà ñòàðîå ìåñòî
   else
     {
      if(Ordr>0 && ObjectGet(Uplev,OBJPROP_PRICE1)<=Ask0+Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
        {
         Alert("TakeProfit= ",Lev,"+1");
         ObjectSet(Uplev,OBJPROP_PRICE1,(Ask0+Lev+Point));//îòâîäèì TakeProfit çà ìèíèìóì
        }
      if(Ordr<0 && ObjectGet(Uplev,OBJPROP_PRICE1)<=Bid0+Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
        {
         Alert("StopLoss= ",Lev,"+1");
         ObjectSet(Uplev,OBJPROP_PRICE1,(Bid0+Lev+Point));//îòâîäèì StopLoss çà ìèíèìóì
        }
     }
   ChartRedraw();//ïåðåðèñóåì
   return(ObjectGet(Uplev,OBJPROP_PRICE1));//âîçâðàùàåì âåðõíèé âûñòàâëåííûé óðîâåíü
  }
//+------------------------------------------------------------------+
double MouseDn()
  {
   if(Freez()) ObjectSet(Dnlev,OBJPROP_PRICE1,LevDn);//âîçâðàùàåì ëèíèþ íà ñòàðîå ìåñòî
   else
     {
      if(Ordr>0 && ObjectGet(Dnlev,OBJPROP_PRICE1)>=Ask0-Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
        {
         Alert("StopLoss= ",Lev,"+1");
         ObjectSet(Dnlev,OBJPROP_PRICE1,(Ask0-Lev-Point));//îòâîäèì StopLoss çà ìèíèìóì
        }
      if(Ordr<0 && ObjectGet(Dnlev,OBJPROP_PRICE1)>=Bid0-Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
        {
         Alert("StopLoss= ",Lev,"+1");
         ObjectSet(Dnlev,OBJPROP_PRICE1,(Bid0-Lev-Point));//îòâîäèì TakeProfit çà ìèíèìóì
        }
     }
   ChartRedraw();//ïåðåðèñóåì
   return(ObjectGet(Dnlev,OBJPROP_PRICE1));//âîçâðàùàåì íèæíèé âûñòàâëåííûé óðîâåíü
  }
//+------------------------------------------------------------------+

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