Breakthrough_BB1_2

Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
Breakthrough_BB1_2
extern int Period_MA_Long1 = 260;// Ïåðèîä ñðåäíåé, íåîáõîäèìîé äëÿ îïðåäåëåíèÿ òðåíäà
extern int Period_BB1 = 25; // Ïåðèîä ñðåäíåé áîëèíäæåðà
extern double deviation1 = 1;

extern int Period_MA_Long2 = 20;// Ïåðèîä ñðåäíåé, íåîáõîäèìîé äëÿ îïðåäåëåíèÿ òðåíäà
extern int Period_BB2 = 25; // Ïåðèîä ñðåäíåé áîëèíäæåðà
extern double deviation2 = 1.6;

extern int Ïåðèîä_ATR1=20;
extern double Êîýôôèöèåíò1=3;
extern int Êîëè÷åñòâî_Áàðîâ1=10;

extern int Ïåðèîä_ATR2=20;
extern double Êîýôôèöèåíò2=3;
extern int Êîëè÷åñòâî_Áàðîâ2=10;

extern int ðåæèì=0; //âûáîð ðåæèìà 1-äëèííûå 2-êîðîòêèå 0-îáå
extern double Loss = 0.02;    // Âåëè÷èíà óáûòêà â ïðîöåíòàõ íà îäíó ñäåëêó

extern int ðåæèìÌÌ=0; //âûáîð ðåæèìà 0-íåò ÌÌ 1-óáûòîê % îò êàïèòàëëà 2- âåëè÷èíà ïîçèöèè % îò áàëàíñà
extern double Lots = 0.01; // Âåëè÷èíà ëîòà

int tmp, tc, st, et, dtmp,tiket;

//----------------------------------------------------------------------------------------------------------//
int start()
  {
   int cnt, total,x;
   double a;// ïåðåìåííûå à-óáûòîê â ïèïñàõ
//------------------------------------------Çàùèòà îò îøèáîê è êîñÿêîâ--------------------------------------//   
   if(Bars<Period_MA_Long1 || Bars<Period_MA_Long2) 
   {
      Print("Êîëè÷åñòâî áàðîâ ñëèøêîì ìàëî");
      return(0); 
   }
   if (Volume[0] < 1.0) // Åñëè òîðãè èäóò çíà÷èò îáüåì áîëåå 0
   {
      Comment("Òîðãîâ íåò.. Æäåì íîâûé áàð..");
      return(0);
   }
   if (AccountFreeMargin()<(1000*Lots)) 
   {
      Comment("Íåäîñòàòî÷íî äåíåã. Óðîâåíü ìàðæè ìåíåå ...");
      return(0);
   }
   if(Digits==3 || Digits==5) x=10;
   if(Digits==2 || Digits==4) x=1 ;

//-----------------------------------------Êîíåö çàùèòû îò êîñÿêîâ-----------------------------------------//   
      double MA_1_Long1=iMA(NULL,0,Period_MA_Long1,0,MODE_SMA,PRICE_CLOSE,1);
      double MA_2_Long1=iMA(NULL,0,Period_MA_Long1,0,MODE_SMA,PRICE_CLOSE,4);
      double BB_MA1=iCustom(NULL,0,"Bands",Period_BB1,0,deviation1,0,1);
      double BB_n_MA1=iCustom(NULL,0,"Bands",Period_BB1,0,deviation1,0,4);
      double BB_Up1=iCustom(NULL,0,"Bands",Period_BB1,0,deviation1,1,1);
      double BB_Low1=iCustom(NULL,0,"Bands",Period_BB1,0,deviation1,2,1);
      
      double MA_1_Long2=iMA(NULL,0,Period_MA_Long2,0,MODE_SMA,PRICE_CLOSE,1);
      double MA_2_Long2=iMA(NULL,0,Period_MA_Long2,0,MODE_SMA,PRICE_CLOSE,4);
      double BB_MA2=iCustom(NULL,0,"Bands",Period_BB2,0,deviation2,0,1);
      double BB_n_MA2=iCustom(NULL,0,"Bands",Period_BB2,0,deviation2,0,4);
      double BB_Up2=iCustom(NULL,0,"Bands",Period_BB2,0,deviation2,1,1);
      double BB_Low2=iCustom(NULL,0,"Bands",Period_BB2,0,deviation2,2,1);
      
      double Ëþñòðà_Íèç11=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,Êîëè÷åñòâî_Áàðîâ1,1,1);
      double Ëþñòðà_Íèç21=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,Êîëè÷åñòâî_Áàðîâ1,1,2);
      double Ëþñòðà_Âåðõ11=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,Êîëè÷åñòâî_Áàðîâ1,2,1);
      double Ëþñòðà_Âåðõ21=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,Êîëè÷åñòâî_Áàðîâ1,2,2); 
   
      double Ëþñòðà_Íèç12=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,Êîëè÷åñòâî_Áàðîâ2,1,1);
      double Ëþñòðà_Íèç22=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,Êîëè÷åñòâî_Áàðîâ2,1,2);
      double Ëþñòðà_Âåðõ12=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,Êîëè÷åñòâî_Áàðîâ2,2,1);
      double Ëþñòðà_Âåðõ22=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,Êîëè÷åñòâî_Áàðîâ2,2,2); 
   total=OrdersTotal();
//----------------------------ïîäòÿãèâàíèå ñòîïîâ---------------------------------------------------------------
for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
              if(Ëþñòðà_Íèç11>OrderStopLoss() && Ëþñòðà_Íèç11<Low[1] && MathAbs(Close[1]-Ëþñòðà_Íèç11)>50*x*Point)
                {
                 OrderModify(OrderTicket(),OrderOpenPrice(),Ëþñòðà_Íèç11,OrderTakeProfit(),0,Red);
                 return(0); // exit
                }    
                    
           }
         if(OrderType()==OP_SELL) // go to short position
           {
            if(Ëþñòðà_Âåðõ12<OrderStopLoss() && Ëþñòðà_Âåðõ12>High[1] && MathAbs(Ëþñòðà_Âåðõ12-Close[1])>50*x*Point)
                {
                 OrderModify(OrderTicket(),OrderOpenPrice(),Ëþñòðà_Âåðõ12,OrderTakeProfit(),0,Red);
                 return(0); // exit
                }    
           }
        }
     }

   total=OrdersTotal();   
//-----------------------------------------------Îòêðûòèå ïîçèöèè åñëè åñòü ñäåëêà------------------------------------
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&    
         OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY && total<=1)   
            {
           if(Close[2]>BB_Low2 && Close[1]<BB_Low2 && MA_1_Long2<MA_2_Long2 && (ðåæèì==2 || ðåæèì==0))
            {
            if(High[1]>Ëþñòðà_Âåðõ12) Ëþñòðà_Âåðõ12=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,1,2,1)+50*x*Point;
            if(High[1]<=Ëþñòðà_Âåðõ12 && (Ëþñòðà_Âåðõ12-Close[1])<100*x*Point) Ëþñòðà_Âåðõ12=Close[1]+100*x*Point;
            a=MathAbs(Ëþñòðà_Âåðõ12-Close[1]);
            Lots=ValueLot(a);
            tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*x,Ëþñòðà_Âåðõ12,0,"Êîðîòêàÿ ïîçèöèÿ",16384,0,Red);
            return(0);
            }
            }
         if(OrderType()==OP_SELL && total<=1)   
            {
            if(Close[2]<BB_Up1 && Close[1]>BB_Up1 && MA_1_Long1>MA_2_Long1 && (ðåæèì==1 || ðåæèì==0))
            {
            if(Low[1]<Ëþñòðà_Íèç11) Ëþñòðà_Íèç11=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,1,1,1)-50*x*Point;
            if(Low[1]>=Ëþñòðà_Íèç11 && (Close[1]-Ëþñòðà_Íèç11)<100*x*Point) Ëþñòðà_Íèç11=Close[1]-100*x*Point;
            a=MathAbs(Close[1]-Ëþñòðà_Íèç11);
            Lots=ValueLot(a);
            tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*x,Ëþñòðà_Íèç11,0,"Äëèííàÿ ïîçèöèÿ",16384,0,Green);
            return(0);
            }
            }
         }
      }   
   
  
   if(total==0) // åñëè íåò ïîçèöèé
     {
      // îòêðûòèå äëèííîé ïîçèöèè
      if(Close[2]<BB_Up1 && Close[1]>BB_Up1 && MA_1_Long1>MA_2_Long1 && (ðåæèì==1 || ðåæèì==0))
        {
        if(Low[1]<Ëþñòðà_Íèç11) Ëþñòðà_Íèç11=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR1,Êîýôôèöèåíò1,1,1,1)-100*x*Point;
        if(Low[1]>=Ëþñòðà_Íèç11 && (Close[1]-Ëþñòðà_Íèç11)<100*x*Point) Ëþñòðà_Íèç11=Close[1]-100*x*Point;
        a=MathAbs(Close[1]-Ëþñòðà_Íèç11);
        Lots=ValueLot(a);
        tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*x,Ëþñòðà_Íèç11,0,"Äëèííàÿ ïîçèöèÿ",16384,0,Green);
        return(0);
        }
      
      // îòêðûòèå êîðîòêîé ïîçèöèè
      if(Close[2]>BB_Low2 && Close[1]<BB_Low2 && MA_1_Long2<MA_2_Long2 && (ðåæèì==2 || ðåæèì==0))
        {
         if(High[1]>Ëþñòðà_Âåðõ12) Ëþñòðà_Âåðõ12=iCustom(NULL,0,"Ëþñòðà ×èæåâñêîãî",Ïåðèîä_ATR2,Êîýôôèöèåíò2,1,2,1)+100*x*Point;
         if(High[1]<=Ëþñòðà_Âåðõ12 && (Ëþñòðà_Âåðõ12-Close[1])<100*x*Point) Ëþñòðà_Âåðõ12=Close[1]+100*x*Point;
         a=MathAbs(Ëþñòðà_Âåðõ12-Close[1]);
         Lots=ValueLot(a);
         tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*x,Ëþñòðà_Âåðõ12,0,"Êîðîòêàÿ ïîçèöèÿ",16384,0,Red);
         return(0);
        }
     }
        
     
return(0);
}
double ValueLot (double A)
   {
   RefreshRates();
   double ticvalue=MarketInfo(Symbol(),MODE_TICKVALUE);
   double minlot=MarketInfo(Symbol(),MODE_MINLOT);   
   double maxlot=MarketInfo(Symbol(),MODE_MAXLOT);
   double standartlot=MarketInfo(Symbol(),MODE_LOTSIZE);
   double x=0;
   if (ðåæèìÌÌ==0) x=Lots;
   if(ðåæèìÌÌ==1) x=MathFloor((AccountFreeMargin()*Loss*Point)/(ticvalue*A*minlot))*minlot;
   if(ðåæèìÌÌ==2) x=NormalizeDouble(minlot*((AccountFreeMargin()*Loss)/(1000*minlot)),2);
   if(ðåæèìÌÌ==3)
   {
   double bb=MathSqrt(AccountFreeMargin()/1000);
   x=NormalizeDouble(bb*Loss,2);
   }
   if(x>=maxlot) x=maxlot;
   if(x<=minlot) x=minlot;   
   return(x);
   }                               

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