TPEHEP_MM
Miscellaneous
It issuies visual alerts to the screenUses files from the file systemIt writes information to file
2 Views
0 Downloads
0 Favorites
TPEHEP_MM
//+------------------------------------------------------------------+
//|                                                    TPEHEP_MM.mq4 |
//|                                                   Copyright 2016.|
//+------------------------------------------------------------------+
#property link      "Fedor10_10@mail.ru"
#property version   "1.02"
#property strict
#property indicator_chart_window
#property description "Èíäèêàòîð TPEHEP_MM ïðåäíàçíà÷åí äëÿ òåñòèðîâàíèÿ ñòðàòåãèè"
#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=0.01;       //Ëîò Ôèêñèðîâàííûé èëè Ìèíèìàëüíûé
extern double Risk=0.0;        //ÌÌ %Ðèñêà îò StopLoss. 0- Ôèêñèðîâàííûé Ëîò
input double  LotsMax=10.0;    //ìàêñèìàëüíûé Ëîò
extern double StopLoss=100.0;  //StopLoss (â 5-çíà÷íîì)
extern double TakeProfit=100.0;//TakeProfit (â 5-çíà÷íîì)
extern double Money=100.0;     //Íà÷àëüíûå ñðåäñòâà
extern double Spread=0.0;      //Ñïðåä (â 5-çíà÷íîì) 0 - èç èñòîðèè
extern double Freeze=0.0;      //Çàìîðîçêà (â 5-çíà÷íîì) 0 - èç èñòîðèè
extern string M="+:+:+:+";     //ðàçíîå
input bool    Color=true;      //ôîí áåëûé/÷åðíûé
input bool    Vertical=true;   //ðèñîâàíèå/íåò âåðòèêàëüíûõ ëèíèé
input bool    Alerts=false;    //çàïðåò ïðåäóïðåæäåíèé
input bool    Gluk=false;      //óñòðàíåíèå êîíôëèêòà ñ Exel
input int     Step=46;         //Êëàâèøà ñäâèãà ãðàôèêà íà 1 øàã
color  Zone,OpBUY,OpSELL,ClsAll,TakePr,StopLs;
int    tik,bar0,Ordr,Tr,SH,file;
double Ask0,Ask1,Bid0,Bid1,Lev,LevOrd,LevUp,LevDn,lott,MaxLot,MinLot;
string FileName,FileNamo,Namo,Uplev,Oplev,Dnlev;
long   result,resold;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Color)//ôîí áåëûé
     {
      Zone=clrSilver;      //öâåò âûäåëåíèÿ ðàññìàòðèâàåìîãî áàðà
      OpBUY=clrSteelBlue;  //öâåò ëèíèè BUY
      OpSELL=clrPlum;      //öâåò ëèíèè SELL
      ClsAll=clrDarkOrange;//öâåò ëèíèè çàêðûòèÿ ðó÷íîãî
      TakePr=clrLimeGreen; //öâåò ëèíèè çàêðûòèÿ ïî TakeProfit
      StopLs=clrYellow;    //öâåò ëèíèè çàêðûòèÿ ïî StopLoss
        }else{//ôîí ÷åðíûé
      Zone=clrDimGray;     //öâåò âûäåëåíèÿ ðàññìàòðèâàåìîãî áàðà
      OpBUY=clrLightSkyBlue;//öâåò ëèíèè BUY
      OpSELL=clrLightPink; //öâåò ëèíèè SELL
      ClsAll=clrKhaki;     //öâåò ëèíèè çàêðûòèÿ ðó÷íîãî
      TakePr=clrPaleGreen; //öâåò ëèíèè çàêðûòèÿ ïî TakeProfit
      StopLs=clrYellow;    //öâåò ëèíèè çàêðûòèÿ ïî StopLoss
     }
   FileName=Symbol()+"."+IntegerToString(Period())+" ";//âðåìåííûé ôàéë äëÿ çàïèñè ñäåëîê
   if(Traid)//ïðîïóñê ïðè îòêàçå îò ðàñ÷åòà
     {
      if(Spread==0.0) Spread=MarketInfo(Symbol(),MODE_SPREAD);//Ñïðåä
      if(Spread==0.0) Alert("Spread ","íå îïðåäåëåí");
      Spread=NormalizeDouble((Spread*Point),Digits);//ñïðåä
      if(Freeze==0.0) Freeze=MarketInfo(Symbol(),MODE_FREEZELEVEL);//óðîâåíü çàìîðîçêè
      if(Freeze==0.0) Alert("Óðîâåíü çàìîðîçêè ","íå îïðåäåëåí");
      Freeze=NormalizeDouble((Freeze*Point),Digits);//óðîâåíü çàìîðîçêè
      Lev=NormalizeDouble((MarketInfo(Symbol(),MODE_STOPLEVEL)*Point),Digits);//ìèíèìàëüíûé ñòîï
      if(Lev==0.0) Alert("STOPLEVEL ","íå îïðåäåëåí");
      else
        {
         if(StopLoss<Lev) {StopLoss=Lev; Alert("StopLoss=",StopLoss/Point);}
         if(TakeProfit<Lev) {TakeProfit=Lev; Alert("TakeProfit=",TakeProfit/Point);}
        }
      TakeProfit=NormalizeDouble((TakeProfit*Point),Digits);//TakeProfit
      StopLoss=NormalizeDouble((StopLoss*Point),Digits);//StopLoss
      Risk=(Risk/100)/(StopLoss/Point);//ïåðåâîä â êîýôôèöèåíò MM
      MinLot=NormalizeDouble((MarketInfo(Symbol(),MODE_MINLOT)),Digits);//ìèíèìàëüíûé ñòîï
      if(MinLot>0.0) MinLot=fmax(Lots,MinLot); else MinLot=Lots;
      MaxLot=NormalizeDouble((MarketInfo(Symbol(),MODE_MAXLOT)),Digits);//ìèíèìàëüíûé ñòîï
      if(MaxLot>0.0) MaxLot=fmin(LotsMax,MaxLot); else MaxLot=LotsMax;
      lott=Lot();
      Comment("Spread=",IntegerToString(int(Spread/Point)),"\n","Freeze=",IntegerToString(int(Freeze)),"\n",
              "StopLoss=",IntegerToString(int(StopLoss/Point)),"\n","TakeProfit=",
              IntegerToString(int(TakeProfit/Point)),"\n","MINLOT=",MinLot,"\n","MAXLOT=",MaxLot);
      ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result);//êîëè÷åñòâî ïèêñåëåé ïî Õ
      ObjectCreate("Show1",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
      ObjectSet("Show1",OBJPROP_XDISTANCE,result/2-200);
      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-155);
      ObjectSet("Show2",OBJPROP_YDISTANCE,0);
      ObjectSet("Show2",OBJPROP_CORNER,0);
      ObjectSetText("Show2",DoubleToString(lott,2),14,"Arial",clrBlueViolet);//ËÎÒ
      ObjectCreate("Show3",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
      ObjectSet("Show3",OBJPROP_XDISTANCE,result/2-15);
      ObjectSet("Show3",OBJPROP_YDISTANCE,0);
      ObjectSet("Show3",OBJPROP_CORNER,0);
      ObjectSetText("Show3",DoubleToString(0.0,2),14,"Arial",clrBlueViolet);//ÏÐÎÔÈÒ
      ObjectCreate("Show4",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
      ObjectSet("Show4",OBJPROP_XDISTANCE,result/2+140);
      ObjectSet("Show4",OBJPROP_YDISTANCE,0);
      ObjectSet("Show4",OBJPROP_CORNER,0);
      ObjectSetText("Show4",DoubleToString(Money,2),14,"Arial",clrBlueViolet);//ÁÀËÀÍÑ
      resold=result;
      file=FileOpen(FileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT);
      FileWrite(file,"  Ticket\tOpnDate\tOpnTime\t    Type\t    Size\t   Item\t  Price\tClsDate\tClsTime\t  Price\tTradeP/L\t  Equity");
     }
   ObjectCreate("Zona",OBJ_TREND,0,Time[0],(Close[0]-StopLoss),Time[0],(Close[0]+StopLoss));//âûäåëÿåì îáëàñòü ðàññìàòðèâàåìîãî áàðà
   ObjectSet("Zona",OBJPROP_STYLE,DRAW_LINE);
   ObjectSet("Zona",OBJPROP_WIDTH,8);
   ObjectSet("Zona",OBJPROP_COLOR,Zone);
   ObjectSet("Zona",OBJPROP_BACK,true);
   ObjectSet("Zona",OBJPROP_RAY_RIGHT,false);
   ObjectSet("Zona",OBJPROP_TIME1,Time[0]);//óòî÷íèì
   ObjectSet("Zona",OBJPROP_PRICE1,(Close[0]-StopLoss));//óòî÷íèì
   ObjectSet("Zona",OBJPROP_TIME2,Time[0]);//óòî÷íèì
   ObjectSet("Zona",OBJPROP_PRICE2,(Close[0]+StopLoss));//óòî÷íèì
   ChartRedraw(); //ïåðåðèñóåì
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(Traid) FileClose(file);//ñîõðàíåíèå ïîñëå ðàñ÷åòà
   ObjectDel();
  }
//+------------------------------------------------------------------+
//| 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)
     {
      if(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
              }
            else Alert("Ñäåëêà óæå îòêðûòà");
           }
         else if(Tr!=1){Tr=1; Vert("BUY",OpBUY);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ BUY
         else Alert("Òðåíä ââåðõ óæå îòìå÷åí");
         tik++; if(tik==1) {Namo=TimeToString(Time[Bar()],TIME_DATE); Comment("");}
         break;
         case 67: if(Traid)
           {
            if(Ordr!=0)//KEY_CLOSE
              {
               if(Freez()) break;//ïðîâåðêà íà çàìîðîçêó
               if(Vertical) Vert("CL",ClsAll);//ðèñóåì âåðòèêàëüíóþ ëèíèþ Clîså
               Profit("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(tik<1)//÷èñòûé øàáëîí
              {
               ObjectsDeleteAll();  Comment("");
               if(ChartSaveTemplate(0,FileName+"."))
                  Alert("øàáëîí ",FileName," ñîõðàíåí"); break;
              }
            else
              {
               ObjectDel();
               FileNamo=FileName+Namo+"-"+TimeToString(Time[Bar()],TIME_DATE);
               if(Traid)//ñîõðàíåíèå ôàéëà îò÷åòà
                 {
                  FileFlush(file); FileClose(file);
                  if(FileMove(FileName,0,FileNamo+".xls",FILE_REWRITE))
                     Alert("îò÷åò ",FileNamo," ñîõðàíåí");
                  if(ChartSaveTemplate(0,FileNamo+"."))//øàáëîí ñ ðàçìåòêîé
                     Alert("ðàçìåòêà ",FileNamo," ñîõðàíåíà"); break;
                 }
               else//øàáëîí ñ ðàçìåòêîé
                 {
                  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
              }
            else Alert("Ñäåëêà óæå îòêðûòà");
           }
         else if(Tr!=-1) {Tr=-1; Vert("SEL",OpSELL);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ SELL
         else Alert("Òðåíä âíèç óæå îòìå÷åí");
         tik++; if(tik==1) {Namo=TimeToString(Time[Bar()],TIME_DATE); Comment("");}
         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(tik>0) Alert("Ïðîðèñîâàí ïîñëåäíèé áàð"); return;}//êîíòðîëü îêîí÷àíèÿ èñòîðèè
   bar0=Bar()+SH;//íîìåð íóæíîãî áàðà íà ãðàôèêå
   if(Time[bar0]!=ObjectGet("Zona",OBJPROP_TIME1))//ïðîâåðèì ðàññìàòðèâàåìûé áàð
     {
      Bid0=Close[bar0]; Ask0=Close[bar0]+Spread;//öåíà çàêðûòèÿ ðàññìàòðèâàåìîãî áàðà
      Bid1=Open[bar0-1]; Ask1=Open[bar0-1]+Spread;//öåíà îòêðûòèÿ áóäóùåãî áàðà
      LevStop();//ïðîâåðêà àâòîìàòè÷åñêîãî ñðàáàòûâàíèÿ óðîâíåé 
      Prof();//ïðîâåðêà ñðåäñòâ
      ObjectSet("Zona",OBJPROP_TIME1,Time[bar0]);//èçìåíåíèå ïðèâÿçêè ðàññìàòðèâàåìîãî áàðà
      ObjectSet("Zona",OBJPROP_PRICE1,(Close[bar0]-StopLoss+Spread));//èçìåíåíèå íèæíåãî óðîâíÿ ðàññìàòðèâàåìîãî áàðà
      ObjectSet("Zona",OBJPROP_TIME2,Time[bar0]);//èçìåíåíèå ïðèâÿçêè ðàññìàòðèâàåìîãî áàðà
      ObjectSet("Zona",OBJPROP_PRICE2,(Close[bar0]+StopLoss-Spread));//èçìåíåíèå âåðõíåãî óðîâíÿ ðàññìàòðèâàåìîãî áàðà
      ChartRedraw();//ïåðåðèñóåì
     }
  }
//+------------------------------------------------------------------+
//| ïðèëîæåíèÿ                                                       |
//+------------------------------------------------------------------+
void LevStop()//ïðîâåðêà àâòîìàòè÷åñêîãî ñðàáàòûâàíèÿ ïðèêàçîâ
  {
   if(Ordr>0)//êîíòðîëü BUY
     {
      if(Low[bar0]<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
        {
         if(Vertical) Vert("SL",StopLs);
         if(Traid) {Profit("SL",Ordr); Delet();}
         if(Alerts) Alert("Ñðàáîòàë StopLoss");
         Ordr=0;
        }
      if(High[bar0]>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
        {
         if(Vertical) Vert("TP",TakePr);
         if(Traid) {Profit("TP",Ordr); Delet();}
         if(Alerts) Alert("ñðàáîòàë TakeProfit");
         Ordr=0;
        }
     }
   if(Ordr<0)//êîíòðîëü SELL
     {
      if(High[bar0]+Spread>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
        {
         if(Vertical) Vert("SL",StopLs);
         if(Traid) {Profit("SL",Ordr); Delet();}
         if(Alerts) Alert("Ñðàáîòàë StopLoss");
         Ordr=0;
        }
      if(Low[bar0]+Spread<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
        {
         if(Vertical) Vert("TP",TakePr);
         if(Traid) {Profit("TP",Ordr); Delet();}
         if(Alerts) Alert("ñðàáîòàë TakeProfit");
         Ordr=0;
        }
     }
  }
//+------------------------------------------------------------------+
double Lot()//MoneyManagement
  {
   if(Risk>0.0)
     {
      double LotResult=Money*Risk;//ðàñ÷åò ëîòà
      LotResult=fmax(LotResult,MinLot);//íå ìåíüøå
      LotResult=fmin(LotResult,MaxLot);//è íå áîëüøå
      return(LotResult);//×òî ïîëó÷èëîñü
     }
   else return(MinLot);
  }
//+------------------------------------------------------------------+
void Profit(string cmd,int ord)//áóõãàëòåðèÿ
  {
   if(ord>0)//áûë BUY   Bid-Ask
     {
      if(cmd=="CL") Write("CL_BUY",ord,Time[bar0-1],Bid1,NormalizeDouble(Bid1-LevOrd,Digits));//Man
      if(cmd=="SL") Write("SL_BUY",ord,Time[bar0],LevDn,NormalizeDouble(LevDn-LevOrd,Digits));//SL
      if(cmd=="TP") Write("TP_BUY",ord,Time[bar0],LevUp,NormalizeDouble(LevUp-LevOrd,Digits));//TP
     }
   if(ord<0)//áûë SELL  Ask-Bid
     {
      if(cmd=="CL") Write("CL_SEL",ord,Time[bar0-1],Ask1,NormalizeDouble(LevOrd-Ask1,Digits));//Man
      if(cmd=="SL") Write("SL_SEL",ord,Time[bar0],LevUp,NormalizeDouble(LevOrd-LevUp,Digits));//SL
      if(cmd=="TP") Write("TP_SEL",ord,Time[bar0],LevDn,NormalizeDouble(LevOrd-LevDn,Digits));//TP
     }
  }
//+------------------------------------------------------------------+
void Write(string cmd,int ord,datetime tm,double cls,double pip)//çàïèñü â ôàéë
  {
   Money+=NormalizeDouble(lott*(pip/Point),2);//îáùèé èòîã â öåíòàõ
   FileWrite(file,tik,"\t",Dat(TimeToStr(Time[fabs(ord)],TIME_DATE)),"\t",TimeToStr(Time[fabs(ord)],TIME_SECONDS),
             "\t",cmd,"\t",Rus(DoubleToString(lott,2)),"\t",Symbol(),"\t",Rus(DoubleToString(LevOrd,Digits)),
             "\t",Dat(TimeToStr(tm,TIME_DATE)),"\t",TimeToStr(tm,TIME_SECONDS),"\t",Rus(DoubleToString(cls,Digits)),
             "\t",Rus(DoubleToString(lott*(pip/Point),2)),"\t",Rus(DoubleToString(Money,2)));
   lott=Lot();//íîâûé ËÎÒ
   ObjectSetText("Show2",DoubleToString(lott,2),14,"Arial",clrBlueViolet);
   Trend(cmd,ord,pip); Metca(cmd,ord);//ðèñóåì ðåçóëüòàò
  }
//+------------------------------------------------------------------+
void Trend(string cmd,int ord,double pip)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
  {
   string name="Trl"+IntegerToString(tik);
   color clr=clrBlue; if(pip<0) clr=clrRed;
   if(cmd=="CL_BUY") Tr(name, ord,Bid1,Time[bar0-1],clr);//Man
   if(cmd=="SL_BUY") Tr(name, ord,LevDn,Time[bar0], clr);//SL
   if(cmd=="TP_BUY") Tr(name, ord,LevUp,Time[bar0], clr);//TP
   if(cmd=="CL_SEL") Tr(name,-ord,Ask1,Time[bar0-1],clr);//Man
   if(cmd=="SL_SEL") Tr(name,-ord,LevUp,Time[bar0], clr);//SL
   if(cmd=="TP_SEL") Tr(name,-ord,LevDn,Time[bar0], clr);//TP
  }
//+------------------------------------------------------------------+
void Tr(string cmd,int ord,double pr,datetime tm,color clr)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
  {
   ObjectCreate(cmd,OBJ_TREND,0,Time[ord-1],LevOrd,tm,pr);
   ObjectSetInteger(0,cmd,OBJPROP_RAY_RIGHT,false);//îòêëþ÷èì (false) îòîáðàæåíèå ëèíèè âïðàâî
   ObjectSet(cmd,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(cmd,OBJPROP_COLOR,clr);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
void Metca(string cmd,int ord)//ðèñóåì öåíîâóþ ìåòêó
  {
   if(cmd=="CL_BUY")
     {
      Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
      Met("CL_BUY"+IntegerToString(tik),Bid1+5*Point,Time[bar0-1],ClsAll);//Man BUY
     }
   if(cmd=="SL_BUY")
     {
      Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
      Met("SL_BUY"+IntegerToString(tik),LevDn+5*Point,Time[bar0],StopLs);//SL BUY
     }
   if(cmd=="TP_BUY")
     {
      Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
      Met("TP_BUY"+IntegerToString(tik),LevUp+5*Point,Time[bar0],TakePr);//TP BUY
     }
   if(cmd=="CL_SEL")
     {
      Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
      Met("CL_SELL"+IntegerToString(tik),Ask1+5*Point,Time[bar0-1],ClsAll);//Man SELL
     }
   if(cmd=="SL_SEL")
     {
      Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
      Met("SL_SELL"+IntegerToString(tik),LevUp+5*Point,Time[bar0],StopLs);//SL SELL
     }
   if(cmd=="TP_SEL")
     {
      Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
      Met("TP_SELL"+IntegerToString(tik),LevDn+5*Point,Time[bar0],TakePr);//TP SELL
     }
  }
//+------------------------------------------------------------------+
void Met(string cmd,double pr,datetime tm,color clr)//ðèñóåì öåíîâóþ ìåòêó
  {
   ObjectCreate(cmd,OBJ_ARROW_LEFT_PRICE,0,tm,pr);
   ObjectSet(cmd,OBJPROP_ARROWCODE,119);
   ObjectSet(cmd,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSet(cmd,OBJPROP_COLOR,clr);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
void Vert(string cmd,color clr)//ðèñóåì âåðòèêàëüíóþ ëèíèþ
  {
   cmd+=IntegerToString(tik);
   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+TakeProfit;//óðîâåíü Bid StopLoss îò îòêðûòèÿ
      Dnlev="StopLoss"; LevDn=LevOrd-StopLoss;//óðîâåíü Bid TakeProfit îò îòêðûòèÿ
     }
   if(cmd=="SEL")
     {
      LevOrd=Bid1;//óðîâåíü Bid îòêðûòèÿ
      Uplev="StopLoss"; LevUp=LevOrd+StopLoss;//óðîâåíü Ask TakeProfit îò îòêðûòèÿ
      Dnlev="TakeProfit"; LevDn=LevOrd-TakeProfit;//óðîâåíü 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);
   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);
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+
string Rus(string ru)//Ôóíêöèÿ çàìåíÿåò(.)íà(,)äëÿ ðóññêîé Excel
  {
   if(Gluk) StringReplace(ru,".",",");
   return ru;
  }
//+------------------------------------------------------------------+
string Dat(string dt)//Ôóíêöèÿ çàìåíÿåò(.)íà(,)äëÿ ðóññêîé Excel
  {
   if(Gluk) StringReplace(dt,"."," ");
   return dt;
  }
//+------------------------------------------------------------------+
void Prof()//ïðîðèñîâêà ïðîôèòà
  {
   double rezalt;
   if(Ordr>0)
     {
      rezalt=lott*(Bid1-LevOrd)/Point;//ïðè âîçìîæíîì çàêðûòèè ôèêñàöèÿ íà ýòîì óðîâíå
      if(Money+rezalt<0.0 || Money+lott*(Low[bar0]-LevOrd)/Point<0.0) End();//êîí÷èëèñü ñðåäñòâà
     }
   else if(Ordr<0)
     {
      rezalt=lott*(LevOrd-Ask1)/Point;//ïðè âîçìîæíîì çàêðûòèè ôèêñàöèÿ íà ýòîì óðîâíå
      if(Money+rezalt<0.0 || Money+lott*(LevOrd-High[bar0]+Spread)/Point<0.0) End();//êîí÷èëèñü ñðåäñòâà
     }
   else rezalt=0.0;
   color Cl=clrBlueViolet; if(rezalt<0.0) Cl=clrCrimson;//öâåò ÏÐÎÔÈÒÀ
   ObjectSetText("Show3",DoubleToString(rezalt,2),14,"Arial",Cl);//ÏÐÎÔÈÒ
   ObjectSetText("Show4",DoubleToString((Money+rezalt),2),14,"Arial",clrBlueViolet);//èçìåíåíèå ðåçóëüòàòà
  }
//+------------------------------------------------------------------+
bool Freez()//çàìîðîçêà
  {
   if(Ordr>0)
     {
      if(LevUp<=Bid0+Freeze)
        {
         Alert("TakeProfit â çîíå çàìîðîçêè");
         return(true);
        }
      if(LevDn>=Bid0-Freeze)
        {
         Alert("StopLoss â çîíå çàìîðîçêè");
         return(true);
        }
     }
   if(Ordr<0)
     {
      if(LevUp<=Ask0+Freeze)
        {
         Alert("StopLoss â çîíå çàìîðîçêè");
         return(true);
        }
      if(LevDn>=Ask0-Freeze)
        {
         Alert("TakeProfit â çîíå çàìîðîçêè");
         return(true);
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
int Bar()//íîìåð ïåðâîãî âèäèìîãî áàðà íà ãðàôèêå.
  {
   long res=0;// ïîäãîòîâèì ïåðåìåííóþ
   res+=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0,res);//çàïðîñèì íîìåð ëåâîãî áàðà 
   res-=WindowBarsPerChart()+1;//íàéäåì íîìåð ïðàâîãî áàðà
   return(int(res));//--- âåðíåì íîìåð íóæíîãî áàðà
  }
//+------------------------------------------------------------------+
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 çà ìèíèìóì
        }
     }
// ObjectSetInteger(0,Uplev,OBJPROP_SELECTED,false);//çàêðîåì
   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 çà ìèíèìóì
        }
     }
//ObjectSetInteger(0,Dnlev,OBJPROP_SELECTED,false);//çàêðîåì
   ChartRedraw();//ïåðåðèñóåì
   return(ObjectGet(Dnlev,OBJPROP_PRICE1));//âîçâðàùàåì íèæíèé âûñòàâëåííûé óðîâåíü
  }
//+------------------------------------------------------------------+
void Show(long res)//êîíòðîëü çà ðàçìåðîì ýêðàíà
  {
   ObjectSet("Show1",OBJPROP_XDISTANCE,res/2-200);
   ObjectSet("Show2",OBJPROP_XDISTANCE,res/2-155);
   ObjectSet("Show3",OBJPROP_XDISTANCE,res/2-15);
   ObjectSet("Show4",OBJPROP_XDISTANCE,res/2+140);
   ChartRedraw();//ïåðåðèñóåì
   resold=result;
  }
//+------------------------------------------------------------------+
void End()//êîíåö
  {
   ObjectDel();
   ObjectCreate("Show7",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
   ObjectSet("Show7",OBJPROP_XDISTANCE,result/2-275);
   ObjectSet("Show7",OBJPROP_YDISTANCE,350);
   ObjectSet("Show7",OBJPROP_CORNER,0);
   ObjectSetText("Show7","ÑÎÕÐÀÍÈÒÅ ÎÒ×ÅÒ (Ð)  È ÏÅÐÅÓÑÒÀÍÎÂÈÒÅ ÑÒÐÀÒÅÃÈÞ!",14,"Arial",clrDarkGray);//íàäïèñü GAME OVER
   ObjectCreate("Show8",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
   ObjectSet("Show8",OBJPROP_XDISTANCE,result/2-500);
   ObjectSet("Show8",OBJPROP_YDISTANCE,50);
   ObjectSet("Show8",OBJPROP_CORNER,0);
   ObjectSetText("Show8","GAME OVER",125,"Arial",clrBrown);//íàäïèñü GAME OVER
  }
//+------------------------------------------------------------------+
void ObjectDel()
  {
   ObjectDelete("Zona");
   ObjectDelete("Show1");
   ObjectDelete("Show2");
   ObjectDelete("Show3");
   ObjectDelete("Show4");
   ObjectDelete("Show5");
   ObjectDelete("Show6");
   ChartRedraw();//ïåðåðèñóåì
  }
//+------------------------------------------------------------------+

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