CanalTrenager

Author: Copyright � 2009, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
CanalTrenager
//+------------------------------------------------------------------+
//|                                                CanalTrenager.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//---- input parameters
extern double    Risk=3;
//extern double    HandRisk=3
extern int       Magic=22;
extern double    Lot=0.1 ;
extern double    HandLot=0.5 ;
//---------------------------------------------------------------------
int FSize=14;//ïàðàìåòðû ïàíåëè
color NClr1=Blue;
int NomX=160,PYL=2,LossX=115,ProfitX=80,DirX=45,TrallX=10; // øàïêà íàçâàíèé ñòîëáöîâ êîîðäèíàòû 
int Pos0X=165,Pos0Y=23,Loss0X=115,Profit0X=80,Dir0X=45,Trall0X=10 ;// ïåðâàÿ ñòðîêà òàáëèöû
int ChangeX=80,ChangeY=400 ;//êîîðäèíàòû äëÿ ñòðîêè èçìåíåíèÿ ïðèíÿòû 
int Change=0 ; // ñ÷åò÷èê òèêîâ â òå÷åíèè êîòîðûõ áóäåò âèñåòü ñòðîêà èçìåíåíèÿ ïðèíÿòû 
int LotX=90,LotY=300 ;//êîîðäèíàòû äëÿ ëàáåë ëîò 

string Pr="Training ";
int K=1 ; // êîýôôèöèåíò äëÿ ïÿòèçíàêà
int VedPos[10] ; //ìàññèâ îðäåðîâ â òàáëèöå äëÿ ñîðòèðîâêè 
int StopLoss[10];//ìàññèâ äëÿ ó÷åòà âåäåíèÿ ñòîïîâ íà êàêîì ðàññòîÿíèè âûñòàâèòü ñòîï îò òåê öåíû 
int TeikProfit[10];//ìàññèâ äëÿ ó÷åòà âåäåíèÿ ïðîôèòîâ íà êàêîì ðàññòîÿíèè âûñòàâèòü ïðîôèò îò òåê öåíû
int Direction[10];//ìàññèâ äëÿ ó÷åòà íàïðàâëåíèÿ ïîçèöèå ëèìèò åñëè=1 , ñòîï åñëè =0
int Tralling[10];//ìàññèâ äëÿ óòåòà âåäåíèÿ òðàëà ==1 òðàë ðàçðåøåí =0 òðàë çàïðåùåí
bool FistModifi[10];// ìàññèâ äëÿ ó÷åòà ïåðâîé ìîäèôèêàöèè îðäåðà 
//=====================================================================
int init()
  {
   if (Digits==5 || Digits==3 ) K=10 ;//êîýôôèöèåíò äëÿ ïÿòèçíàêà
   // ðèñóåì òàáëèöó
   InitVedPos () ;
   FirstTabl() ;
   TablPos() ;
   // ðèñóåì ëèíèè ïîääåðæêè ñîïðîòèëåíèÿ 
   DrawLine(Pr+"UpLine",Ask+10*K*Point,Red,0) ;
   DrawLine(Pr+"DownLine",Ask-10*K*Point,Blue,0) ;
   return(0);
  }
//======================================================================
void FirstTabl()
   {// ïåðâîíà÷àëüíî çàïîëíÿåòñÿ òàáëèöà 
      int Win=0 ,i,j,k,Error,pos;
      string  aaa ;
      double SL,TP,Dir,Trall=1;
      DrawLabels(Pr+"Nom", 1, NomX, PYL, "Nn/n", NClr1,0);
      DrawLabels(Pr+"Loss", 1,LossX, PYL, "SL", NClr1,0);
      DrawLabels(Pr+"Profit", 1,ProfitX, PYL, "TP", NClr1,0);
      DrawLabels(Pr+"Dir", 1,DirX, PYL, "Dir", NClr1,0);
      DrawLabels(Pr+"Trall", 1,TrallX, PYL, "Trall", NClr1,0);
      DrawLabels(Pr+"Lot", 1,LotX,LotY, "Lot", Red,0,16);
      DrawLabels(Pr+"LotChange", 1,LotX-50,LotY, DoubleToStr(Lot,2), Red,0,16);
//----------------------------------------------------------------------------------------------
   for (i=0;i<=9 ;i++)
   {
      aaa=DoubleToStr(i,0) ;
      Error=ObjectFind(Pr+"stroka"+aaa+"0");// Çàïðîñ 
      if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò 
         {// òî ìû åãî ñîçäàåì  óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè 
            if (VedPos[i] < 0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
            if (VedPos[i] > 1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
            if (VedPos[i] ==0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Buy", Red,0); 
            if (VedPos[i] ==1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Sell", Green,0);
         } 
   }     
//----------------------------------------------------------------------------------------------      
      for (i=0; i<=9 ;i++)
         {// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ ñòîï ëîñè îòêðûòûòõ èëè âûñòàâëåííûõ ïîçèöèé 
            aaa=DoubleToStr(i,0) ;
            SL=0;
            Error=ObjectFind(Pr+"stroka"+aaa+"1");// Çàïðîñ 
            if (Error!=Win)// Åñëè ëàáåë ñòîï ëîññà íåò òî ñîçäàåì åãî çàïîëíÿåì =SL ïåðâîíà÷àëüíî
            {// òî ìû åãî ñîçäàåì  óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè 
               for (pos=OrdersTotal()-1; pos>=0 ;pos--)
                  {// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé 
                     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
                     if(OrderSymbol()!=Symbol() ) continue; 
                     if(Magic != ReturnMagic(pos) ) continue ;
                     if (i!=ReturnPosition(pos) ) continue;
                  //SL=ReturnSL(pos);   
                  }
              DrawLabels(Pr+"stroka"+aaa+"1", 1, Pos0X-55, Pos0Y+i*23, DoubleToStr(SL,0), NClr1,0);     
            }
         }
//-----------------------------------------------------------------------------------------------         
      for (i=0; i<=9 ;i++)
         {// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ òåéê ïðîôèòû  îòêðûòûõ èëè âûñòàâëåííûõ ïîçèöèé 
            aaa=DoubleToStr(i,0) ;
            TP=0 ;
            Error=ObjectFind(Pr+"stroka"+aaa+"2");// Çàïðîñ 
            if (Error!=Win)// Åñëè ëàáåë òåéê ïðîôèòà íåò òî ñîçäàåì åãî çàïîëíÿåì =TP ïåðâîíà÷àëüíî
            {// òî ìû åãî ñîçäàåì  óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
            for (pos=OrdersTotal()-1; pos>=0 ;pos--)
                  {// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé 
                     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
                     if(OrderSymbol()!=Symbol() ) continue; 
                     if(Magic != ReturnMagic(pos) ) continue ;
                     if (i!=ReturnPosition(pos) ) continue;
                  //SL=ReturnTP(pos);   
                  } 
               DrawLabels(Pr+"stroka"+aaa+"2", 1, Pos0X-90, Pos0Y+i*23, DoubleToStr(TP,0), NClr1,0);
            }
         }
//------------------------------------------------------------------------------------------------- 
       for (i=0; i<=9 ;i++)
         {// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ Dir íàïðàâëåíèå âûñòàâëåííûõ îðäåðîâ Îòëîæåííûé îðäåð BUY LIMIT
         // SELL LIMIT åñëè Dir=1. Îòëîæåííûé îðäåð BUY STOP  SELL STOP åñëè Dir=0 
            aaa=DoubleToStr(i,0) ;
            Dir=0 ;
            Error=ObjectFind(Pr+"stroka"+aaa+"3");// Çàïðîñ 
            if (Error!=Win)// Åñëè ëàáåë òåéê ïðîôèòà íåò òî ñîçäàåì åãî çàïîëíÿåì =Dir ïåðâîíà÷àëüíî
            {// òî ìû åãî ñîçäàåì  óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
            for (pos=OrdersTotal()-1; pos>=0 ;pos--)
                  {// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé 
                     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
                     if(OrderSymbol()!=Symbol() ) continue; 
                     if(Magic != ReturnMagic(pos) ) continue ;
                     if (i!=ReturnPosition(pos) ) continue;
                  //Dir=ReturnDir(pos);   
                  } 
              DrawLabels(Pr+"stroka"+aaa+"3", 1, Pos0X-115, Pos0Y+i*23, DoubleToStr(Dir,0), NClr1,0);
            }
         }
//---------------------------------------------------------------------------------------------------
      for (i=0; i<=9 ;i++)
         {// çäåñü ïåðâîíà÷àëüíî çàïîëíÿþòÿ ôëàã Trall ðàçðåøàþùèé òðàëë ïîçèöèé 
         // òðàë ïðèìåíÿåòñÿ â ñòàíäàðòíîì âàðèàíòå ,åñëè òåêóùàÿ ïðèáûëü áîëüøå ÷åì ñòîï ëîññ
         // òî ïåðâûé ñòîï ëîññ ïåðåíîñèòñÿ íà óðîâåíü áåçóáûòêà + 2 ïóíêòà äàëüøå òðàëë ÷åðåç
         // 5 ïóíêòîâ ïðèáûëè 
            aaa=DoubleToStr(i,0) ;
            Trall=0 ;
            Error=ObjectFind(Pr+"stroka"+aaa+"4");// Çàïðîñ 
            if (Error!=Win)// Åñëè ëàáåë Trall íåò òî ñîçäàåì åãî çàïîëíÿåì =TRall ïåðâîíà÷àëüíî
            {// òî ìû åãî ñîçäàåì  óñòàíàâëèâàåì ëàáåë â ñîîòâåòñòâèè ñ îòêðûòûìè ïîçèöèÿìè
            for (pos=OrdersTotal()-1; pos>=0 ;pos--)
                  {// â ýòîì öèêëå èùåòñÿ ñòîï ëîññ â ñîîòâåòñòâèè ñ ïîçèöèåé 
                     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
                     if(OrderSymbol()!=Symbol() ) continue; 
                     if(Magic != ReturnMagic(pos) ) continue ;
                     if (i!=ReturnPosition(pos) ) continue;
                  //Trall=ReturnTrall(pos);   
                  } 
               DrawLabels(Pr+"stroka"+aaa+"4", 1, Pos0X-145, Pos0Y+i*23, DoubleToStr(Trall,0), NClr1,0);
            }
         }
      return(0) ;
   }
//======================================================================
void InitVedPos ()
   {// ôóíêöèÿ èíèöèàëèçèðóåò ìàññèâ äëÿ âåäåíèÿ ïîçèöèé -1 â òåêóùåé ïîçèöèè íåò îòêðûòûõ èëè îòëîæåííûõ îðäåðîâ 
    //è óäàëÿåò îòëîæåííûå îðäåðà åñëè íà ïðîòèâîïîëîæíîé ñòîðîíå îðäåð ñðàáîòàë 
      int position ;//íîìåð ïîçû â ñïèñêå
      ArrayInitialize(VedPos,-1) ;
      for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
      {// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
         if(OrderSymbol()!=Symbol() ) continue; 
         if(Magic != ReturnMagic(pos) ) continue ;
         position=ReturnPosition(pos) ;
         if (OrderType() >1 && (VedPos[position]==1 ||VedPos[position]==0)) continue ;
         VedPos[position]=OrderType() ;    
      }
      for (int i=0; i<=9 ;i++)
         {// â ýòîì öèêëå ïðîâåðÿåòñÿ ìàññèâ VedPos íà ïðåäìåò ñðàáîòàâøèõ îðäåðîâ 
            if (VedPos[i]==0 || VedPos[i]==1 )
               {
                for ( pos=OrdersTotal()-1; pos>=0 ;pos--)
                  {
                     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
                     if(OrderSymbol()!=Symbol() ) continue; 
                     if(Magic != ReturnMagic(pos) ) continue ;
                     position=ReturnPosition(pos) ;
                     if (position == i && OrderType()>1 ) OrderDelete(OrderTicket()) ;    
                  // è åñëè åñòü âñòðå÷íûå îòëîæåííûå îðäåðà òî îíè óäàëÿþòñÿ
                  }
               }
         }
      return(0) ;
   }
//====================================================================
int ReturnMagic(int posa)
   {// âîçâðàùàåò ìàãèê âûáðàííîãî îðäåðà 
      int mag ;//ìàãèê âûáðàííîãî îðäåðà 
      mag=OrderMagicNumber()/10000000 ;
      if (mag > 100) mag-=100 ;
      return(mag);
   }
//====================================================================
int ReturnPosition(int posa)
   {//âîçâðàùàåò íîìåð ïîçèöèè â âñïèñêå 
      int posret,aaa ;
      aaa=OrderMagicNumber()/10 ;
      posret=OrderMagicNumber()-aaa*10 ;
      return (posret) ;
   }   
//====================================================================
void TablPos ()
   { 
   int Win=0 ,i,j,k,Error,pos,bbb;
   string  aaa ;
   double SL=0,TP=0,Dir=1,Trall=1;
   DrawLabels(Pr+"Nom", 1, NomX, PYL, "Nn/n", NClr1,0);
   DrawLabels(Pr+"Loss", 1,LossX, PYL, "SL", NClr1,0);
   DrawLabels(Pr+"Profit", 1,ProfitX, PYL, "TP", NClr1,0);
   DrawLabels(Pr+"Dir", 1,DirX, PYL, "Dir", NClr1,0);
   DrawLabels(Pr+"Trall", 1,TrallX, PYL, "Trall", NClr1,0);
   for (i=0;i<=9 ;i++)
   {
   aaa=DoubleToStr(i,0) ;
         if (VedPos[i] < 0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
         if (VedPos[i] > 1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
         if (VedPos[i] ==0) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Buy", Red,0); 
         if (VedPos[i] ==1) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, "Sell", Green,0);
      // åñëè ñìåùàåì ëàáåë Nn/n âëåâî òî óñòàíàâëèâàåì îðäåð
         if (VedPos[i] < 0 && ObjectGet(Pr+"stroka"+aaa+"0",OBJPROP_XDISTANCE) > Pos0X )
            {
               if (SendOrders(i)) DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X+25, Pos0Y+i*23, aaa, NClr1,0);
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
            }
         if (ObjectGet(Pr+"stroka"+aaa+"0",OBJPROP_XDISTANCE) < Pos0X )
            {// åñëè âïðàâî çàêðûâàåì îðäåð 
               DelCloseOrders(i) ;
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
               DrawLabels(Pr+"stroka"+aaa+"0", 1, Pos0X, Pos0Y+i*23, aaa, NClr1,0);
            }     
    }   
//----------------------------------------------------------------------------------------------      
      for (i=0; i<=9 ;i++)
         {// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë SL è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
          // StopLoss[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà 
            aaa=DoubleToStr(i,0) ;
            if (ObjectGet(Pr+"stroka"+aaa+"1",OBJPROP_XDISTANCE) != Pos0X-55 )
            {//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð 
              if(ObjectFind(Pr+"stroka"+aaa+"1")>-1) 
               StopLoss[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"1") );
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
               //ìîäèôèöèðîâàòü îðäåð 
            } 
              DrawLabels(Pr+"stroka"+aaa+"1", 1, Pos0X-55, Pos0Y+i*23, "none", NClr1,0);     
         }
//-----------------------------------------------------------------------------------------------         
      for (i=0; i<=9 ;i++)
         {// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë TP è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
          // TeikProfit[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà 
            aaa=DoubleToStr(i,0) ;
            if (ObjectGet(Pr+"stroka"+aaa+"2",OBJPROP_XDISTANCE) != Pos0X-90 )
            {//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð 
              if(ObjectFind(Pr+"stroka"+aaa+"2")>-1) 
               TeikProfit[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"2") );
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
               //ìîäèôèöèðîâàòü îðäåð 
            } 
              DrawLabels(Pr+"stroka"+aaa+"2", 1, Pos0X-90, Pos0Y+i*23, "none", NClr1,0);     
         }
//------------------------------------------------------------------------------------------------- 
       for (i=0; i<=9 ;i++)
         {// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë Dir è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
          // Direction[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà 
            aaa=DoubleToStr(i,0) ;
            if (ObjectGet(Pr+"stroka"+aaa+"3",OBJPROP_XDISTANCE) != Pos0X-115 )
            {//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð 
              if(ObjectFind(Pr+"stroka"+aaa+"3")>-1) 
               Direction[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"3") );
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
               //ìîäèôèöèðîâàòü îðäåða 
            } 
              DrawLabels(Pr+"stroka"+aaa+"3", 1, Pos0X-115, Pos0Y+i*23, "none", NClr1,0);     
         }
//---------------------------------------------------------------------------------------------------
      for (i=0; i<=9 ;i++)
         {// çäåñü ïðîâåðÿåòñÿ ñìåùåíèå ëàáåë Trall è åñëè îíà ñìåùåíà çíà÷åíèå çàïèñûâàåòñÿ â ìàññèâ
          // Tralling[10] äëÿ ïîñëåäóþùåé ìîäèôèêàöèè îðäåðà 
            aaa=DoubleToStr(i,0) ;
            if (ObjectGet(Pr+"stroka"+aaa+"4",OBJPROP_XDISTANCE) != Pos0X-145 )
            {//ñòðîêà ñìåùåíà íóæíî çàïîëíèòü ìàññèâ è ìîäèôèöèðîâàòü îðäåð 
              if(ObjectFind(Pr+"stroka"+aaa+"4")>-1) 
               Tralling[i]=StrToInteger( ObjectDescription(Pr+"stroka"+aaa+"4") );
               DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, "Èçìåíåíèÿ ïðèíÿòû", Red,0,16);
               Change=0 ;
               //ìîäèôèöèðîâàòü îðäåða 
            } 
              DrawLabels(Pr+"stroka"+aaa+"4", 1, Pos0X-145, Pos0Y+i*23, "none", NClr1,0);     
         }
      return (0) ;
   }
//====================================================================
int DrawLabels(string name, int corn, int X, int Y, string Text="none", color Clr=Green, int Win=0, int FSize=12)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Ñîçäàíèå îáúåêòà
    }
     
     ObjectSet(name, OBJPROP_CORNER, corn);     // Ïðèâÿçêà ê óãëó   
     ObjectSet(name, OBJPROP_XDISTANCE, X);  // Êîîðäèíàòà Õ   
     ObjectSet(name,OBJPROP_YDISTANCE,Y);// Êîîðäèíàòà Y
     if (Text!="none") ObjectSetText(name,Text,FSize,"Arial",Clr);
   }
//=====================================================================
int MagicSend(int nambepos)
   {// ôóíêöèÿ ðàñ÷èòûâàåò ìàãèê äëÿ óñòàíîâêè ïîçèöèè ,ìàãèê èìååò ñëîæíóþ ñòðóêòóðó
    // äëÿ ñèíõðîíèçàöèè ñîâåòíèêà ñ ðàçíûõ òîðãîâûõ òåðìèíàëîâ ðàçðÿä 0- íîìåð îðäåðà ïî ïîðÿäêó 
    // ðàçðÿäû 1-3 ñòîï ëîññ ðàçðÿäû 4-6 òåéê ïðîôèò ,ðàçðÿäû 7-8 ìàãèê èç âõîäíûõ ïåðåìåííûõ
    // ðàçðÿä 9 òðàë 
    int Nom,SL,TP,Mag,TR,Mg ;
    Mg=nambepos+StopLoss[nambepos]*10+TeikProfit[nambepos]*10000+Magic*10000000+
       Direction[nambepos]*1000000000 ;
      return(Mg) ;
   }
//=====================================================================
bool SendOrders (int nambepos)
   {//ôóíêöèÿ âûñòàâëÿåòîðäåðà îòëîæåííèêè åñëè öåíà íèæå êðàñíîé ëèíèè è âûøå ñèíåé ñ íàïðàâëåíèåì
    //ñîãëàñíî =Dir òëîæåííûé îðäåð BUY LIMIT
    // SELL LIMIT åñëè Dir=1. Îòëîæåííûé îðäåð BUY STOP  SELL STOP åñëè Dir=0 
    //ïîêóïàåì ïî ðûíêó åñëè öåíà âûøå êðàñíîé ëèíèè ïðîäàåì ïî ðûíêó åñëè íèæå ñèíåé 
    //åñëè öåíà âûøå êðàñíîé è íèæå ñèíåé îðäåð íå îòêðûâàåòñÿ â êîìåíòû âûâîäèòñÿ îøèáêà 
    double Up,Down ,SL,TP,Mg,Stop=0,Teik=0,Lotes;
    //int Stop,Taik ;
    Up=NormalizeDouble(ObjectGet(Pr+"UpLine",OBJPROP_PRICE1),Digits) ;
    Down=NormalizeDouble(ObjectGet(Pr+"DownLine",OBJPROP_PRICE1),Digits) ;
    if (Bid < Down && Bid > Up ) {Comment("Íå ïðàâèëüíî óñòàíîâëåíû ëèíèè ïîääåðæêè ñîïðîòèâëåíèÿ") ; return(false);}
    Mg=MagicSend(nambepos) ;
    if ( StopLoss[nambepos]== 0) SL=0 ;
            else  SL=NormalizeDouble(StopLoss[nambepos]*Point*K,Digits) ;
    if ( TeikProfit[nambepos]== 0) TP=0 ;
            else  TP=NormalizeDouble(TeikProfit[nambepos]*Point*K,Digits) ;
//------------------------------------------------------------------------------------------      
    if (Bid > Down && Bid < Up )
      {//óñòàíàâëèâàåì îòëîæåííûå îðäåðà
         switch (Direction[nambepos])
            {
               case 1:// óñòàíàâëèâàåì ëèìèò îðäåðà ðàáîòà âíóòðü êàíàëà \
                  if ( TP!=0) Teik=Down+TP ;
                  if ( SL!=0) Stop=Down-SL ;
                  Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
                  OrderSend(Symbol(),OP_BUYLIMIT,Lotes,Down,50,Stop,Teik,0,Mg,0,CLR_NONE) ;
                  Stop=0;Teik=0; 
                  if ( TP!=0) Teik=Up-TP ;
                  if ( SL!=0) Stop=Up+SL ;
                  Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
                  OrderSend(Symbol(),OP_SELLLIMIT,Lotes,Up,50,Stop,Teik,0,Mg,0,CLR_NONE) ;   
               break ;
               case 0:// óñòàâëèâàåì ñòîï îðäåðà ðàáîòà íà ïðîáîé êàíàëà 
                  if ( TP!=0) Teik=Up+TP ;
                  if ( SL!=0) Stop=Up-SL ;
                  Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
                  OrderSend(Symbol(),OP_BUYSTOP,Lotes,Up,50,Stop,Teik,0,Mg,0,CLR_NONE);
                  Stop=0;Teik=0; 
                  if ( TP!=0) Teik=Down-TP ;
                  if ( SL!=0) Stop=Down+SL ;
                  Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
                  OrderSend(Symbol(),OP_SELLSTOP,Lotes,Down,50,Stop,Teik,0,Mg,0,CLR_NONE) ;
               break ;
            }
      }
//------------------------------------------------------------------------------------------      
    if (Bid < Down && Bid < Up )
      {// îòêðûâàåì Sell ïî ðûíêó
         //Print(" Stop Loss= " ,StopLoss[nambepos],"  TeikProfit= ",TeikProfit[nambepos] ) ;
         if ( TP!=0) Teik=Bid-TP ;
         if ( SL!=0) Stop=Bid+SL ;
         Lotes=LotSize( OP_SELL, Risk, StopLoss[nambepos]) ;
         if (OrderSend(Symbol(),OP_SELL,Lotes,Bid,50,Stop,Teik,0,Mg,0,CLR_NONE) < 0) return(false) ;
      }
//------------------------------------------------------------------------------------------
    if (Bid > Down && Bid > Up )
      {//îòêðûâàåì Buy ïî ðûíêó 
         //Print(" Stop Loss= " ,StopLoss[nambepos],"  TeikProfit= ",TeikProfit[nambepos] ) ;
         if ( TP!=0) Teik=Bid+TP ;
         if ( SL!=0) Stop=Bid-SL ;
         Lotes=LotSize( OP_BUY, Risk, StopLoss[nambepos]) ;
         if (OrderSend(Symbol(),OP_BUY,Lotes,Bid,50,Stop,Teik,0,Mg,0,CLR_NONE) < 0) return(false) ;
      }  
      return(true) ;
   }
//=====================================================================
void DelCloseOrders (int nambepos)
   {//åñëè ëàáåë Nn/n ñìåùåíà ïîëüçîâàòåëåì âïðàâî òî îòëîæêè óäàëÿþòñÿ 
    // îòêðûòûå ïîçèöèè çàêðûâàþòñÿ ïî ðûíêó 
      for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
      {// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
         if(OrderSymbol()!=Symbol() ) continue; 
         if(Magic != ReturnMagic(pos) ) continue ;
         if (nambepos!=ReturnPosition(pos)) continue ;
         if (OrderType()>1) OrderDelete(OrderTicket()) ;
         if (OrderType()<2) OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE) ;          
      }
      return(0) ;
   }
//=====================================================================
void TrallPosition() 
   {// òðàëëèíã îòêðûòûõ ïîçèöèé ïåðâûö ïåðåíîñ ïîçèöèè åñëè öåíà óøëà â ïëþñ íà ñòîï ëîññ 
    //  ñòîï ïåðåíîñèòñÿ â áåçóáûòîê ïëþñ 2 ïóíêòà òðàëë ÷åðåç êàæäûå 5 ïóíêòîâ 
    int nambepos ;
    double SL ;
    for (int pos=OrdersTotal()-1; pos>=0 ;pos--)
      {// â ýòîì öèêëå çàïîëíÿåòñÿ ìàññèâ VedPos
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; 
         if(OrderSymbol()!=Symbol() ) continue; 
         if(Magic != ReturnMagic(pos) ) continue ;
         nambepos=ReturnPosition(pos);
         if (Tralling[nambepos]!= 1 ) continue ;
         if (OrderType() > 1  ) continue ;
         SL=NormalizeDouble(StopLoss[nambepos]*Point*K,Digits) ;
//---------------------------------------------------------------------------------------------------         
             if (Bid-OrderOpenPrice() > SL && FistModifi[nambepos]==false  && SL!=0 && OrderType()==OP_BUY)
              {// ïåðâàÿ ìîäèôèêàöèÿ îðäåðà íà ïîêóïêó ïåðåíîñ â áåçóáûòîê + 3 ïóíêòà ïðèáûëè
                OrderModify(OrderTicket(),0,OrderOpenPrice()+3*K*Point,
                              OrderTakeProfit(),0,CLR_NONE);               
                FistModifi[nambepos]=true ; continue ;
              }
             if (OrderOpenPrice()-Bid > SL && FistModifi[nambepos]==false  && SL!=0 && OrderType()==OP_SELL)
              {// ïåðâàÿ ìîäèôèêàöèÿ îðäåðà íà ïðîäàæó ïåðåíîñ â áåçóáûòîê + 3 ïóíêòà ïðèáûëè
                OrderModify(OrderTicket(),0,OrderOpenPrice()-3*K*Point,
                              OrderTakeProfit(),0,CLR_NONE);                          
                FistModifi[nambepos]=true ;  continue ;
              }
//-----------------------------------------------------------------------------------------------------
      if (Bid-OrderStopLoss() > (SL+5*K*Point) && FistModifi[nambepos]  && SL!=0 && OrderType()==OP_BUY)          
        {// ïîñëåäóþùèå ìîäèôèêàöèè îðäåðà 
         OrderModify(OrderTicket(),0,Bid-SL,OrderTakeProfit(),0,CLR_NONE); 
         continue ;       
        }
      if (OrderStopLoss()-Bid > (SL+5*K*Point) && FistModifi[nambepos]  && SL!=0 && OrderType()==OP_SELL)
        {// ïîñëåäóþùèå ìîäèôèêàöèè îðäåðà 
         OrderModify(OrderTicket(),0,Bid+SL,OrderTakeProfit(),0,CLR_NONE);  
         continue ;       
        }          
      }
      return(0) ;
   }
//=====================================================================
void InitFestModifi()
   {// ôóíêöèÿ èíèöèàëèçèðóåò ìàññèâ ïåðâûõ ìîäèôèêàöèé îðäåðà 
    // ñáðàñûâàåò ôëàã ïåðâîé ìîäèôèêàöèè åñëè íåò îòêðûòûõ îðäåðîâ â Nn/n
   for (int j =0;j<=9 ;j++)
   {
    if (VedPos[j]!= 0 && VedPos[j]!=1 )FistModifi[j]=false ;
   }   
      return(0) ;
   }
//=====================================================================
double LotSize( int type, double LotRisk, int SL  )
{   //    int znakov_lot=0;
         if(ObjectFind(Pr+"LotChange")>-1) 
               Lot=StrToDouble( ObjectDescription(Pr+"LotChange") );
        if (NormalizeDouble(Lot,Digits)!=0) return(Lot) ;
        
        double  lot_min         = MarketInfo( Symbol(), MODE_MINLOT  ); 
        double  lot_max         = MarketInfo( Symbol(), MODE_MAXLOT  ); 
        double  lot_step        = MarketInfo( Symbol(), MODE_LOTSTEP ); 
        double  lotcost         = MarketInfo( Symbol(), MODE_TICKVALUE );       
                
        double  lot             = 0.0;
        double  dollarsPerPip   = 0.0;
        if (SL==0) return(HandLot) ;
        SL=SL*K ;
        
        lot = AccountBalance()*LotRisk/100.0;
        dollarsPerPip = lot/SL;
     //   if (lot_min<2) {znakov_lot=0;  if (lot_min<0.2) {znakov_lot=1;  if (lot_min<0.02) {znakov_lot=3;  if (lot_min<0.002) {znakov_lot=4; }}}}      
        lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
        
        if ( lot < lot_min ) lot = lot_min;
        if ( lot > lot_max ) lot = lot_max;
        
        if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) 
        { 
                Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
                return(-1);
        }

        return( lot );
}
//=====================================================================   
int DrawLine(string name, double Y, color Clr=Red ,int Win=0 )
   {
      int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name,OBJ_HLINE,Win, 0,Y); // Ñîçäàíèå îáúåêòà
    }
    ObjectSet(name,OBJPROP_COLOR,Clr) ;
    ObjectSet(name,OBJPROP_STYLE,STYLE_DASHDOT) ;
   }
//=====================================================================
int deinit()
  {
   return(0);
  }
//====================================================================
int start()
  {
  double Up,Down ;
  Up=NormalizeDouble(ObjectGet(Pr+"UpLine",OBJPROP_PRICE1),Digits) ;
  Down=NormalizeDouble(ObjectGet(Pr+"DownLine",OBJPROP_PRICE1),Digits) ;      
  Comment("    Áàëàíñ ñ÷åòà = ",AccountBalance()," ; Ïðèáûëü = ", AccountProfit(),"\n",
  "    Âåðõíÿÿ ãðàíèöà êàíàëà = ",Up,"\n",
  "    Íèæíÿÿ ãðàíèöà êàíàëà = ",Down,"\n",
  "    Ñåðåäèíà êàíàëà â ïóíêòàõ = ",(Up-Down)/2/Point/K) ;
  InitVedPos () ;
  DrawLabels(Pr+"Lot", 1,LotX,LotY, "Lot", Red,0,16);
  DrawLabels(Pr+"LotChange", 1,LotX-50,LotY,"none", Red,0,16);
  TablPos() ;
  Change++ ;
  if (Change > 1) DrawLabels(Pr+"Change", 1, ChangeX, ChangeY, " ", Red,0,16);
  InitFestModifi() ;
  TrallPosition() ;
   return(0);
  }
//=====================================================================

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