Author: Sergey Eroshenko
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
Specnaz1
ÿþ//+------------------------------------------------------------------+

//|                                                      Specnaz 1.0 |

//|                                 Copyright 2017, Sergey Eroshenko |

//|                                      Skype: sergey_eroshenko_nsk |

//+------------------------------------------------------------------+

#property copyright "Sergey Eroshenko"

#property description "Skype: sergey_eroshenko_nsk"



int T=8,ticket,count_sell,count_buy,day_trig=1;

double lots,TP_sell,TP_buy;

double Mas_Sell[100][4],Mas_Buy[100][4];

datetime H;

input double TakeProfit=200;  // Take Profit (pips)

input double risk=1;          // Relative volume

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTick()

  {

   lots=MathFloor(AccountBalance()/1000)/(100/risk);

   H=TimeHour(TimeCurrent());



//////////////;>: >B:@KB8O 8 :>@@5:B8@>2:8 >@45@>2. 654=52=> 2> 2@5<O T ///////////////////////////////



   if(H==T-1 && day_trig==1) day_trig=0; //"@8335@ =>2>3> 4=O

   if(H==T && day_trig==0)               //A;8 2@5<O " 8 =>2K9 45=L =0ABC?8; >B:@K205< Buy 8 Sell ?> B5:CI8< F5=0< 

     {

      ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"",0,0,Red);

      if(ticket>0)

        {

         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

            Print("SELL order opened : ",OrderOpenPrice());

        }

      else

         Print("Error opening SELL order : ",GetLastError());



      ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"",0,0,Red);

      if(ticket>0)

        {

         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

            Print("BUY order opened : ",OrderOpenPrice());

        }

      else

         Print("Error opening SELL order : ",GetLastError());

      Counter();

      TP_calc();

      TP_corr();

      day_trig=1;

     }

//////////////;>: >B:@KB8O 8 :>@@5:B8@>2:8 >@45@>2 '//////////////////////////////////////////////

  }

//////////////$C=:F8O >?@545;5=8O :>;8G5AB20 >B:@KBKE A45;>: 8 8E F5=, ?> B8?0< Sell  Buy. !>7405B 420 <0AA820 

void Counter()

  {

   count_sell=0;                       // 1=C;5=85 AGQBG8:0 >@45@>2

   count_buy=0;                        // 1=C;5=85 AGQBG8:0 >@45@>2

   ArrayInitialize(Mas_Sell,0);        // 1=C;5=85 <0AA820 Sell

   ArrayInitialize(Mas_Buy,0);         // 1=C;5=85 <0AA820 Buy



   for(int i=0; i<=OrdersTotal(); i++) // >4AG5B >@45@>2 Sell

     {

      if((OrderSelect(i,SELECT_BY_POS)==true)         // A;8 5ABL A;54CNI.

         && (OrderType()==OP_SELL))                   // 8 5A;8 >@45@ Sell

        {

         count_sell++;                                // >;8G. >@45@>2 Sell

         Mas_Sell[count_sell][1]=OrderOpenPrice();    // &5=0 A45;:8

         Mas_Sell[count_sell][2]=OrderTicket();       // ><5@ >@45@0

         Mas_Sell[count_sell][3]=OrderMagicNumber();  // 038G5A:>5 G8A;> 

        }

     }



   for(int j=0; j<=OrdersTotal(); j++) // >4AG5B >@45@>2 Buy

     {

      if((OrderSelect(j,SELECT_BY_POS)==true)       // A;8 5ABL A;54CNI.

         && (OrderType()==OP_BUY))                  // 8 5A;8 >@45@ Buy

        {

         count_buy++;                               // >;8G. >@45@>2 Buy

         Mas_Buy[count_buy][1]=OrderOpenPrice();    // &5=0 A45;:8

         Mas_Buy[count_buy][2]=OrderTicket();       // ><5@ >@45@0

         Mas_Buy[count_buy][3]=OrderMagicNumber();  // 038G5A:>5 G8A;> 

        }

     }

  }

//////////////$C=:F8O @0AAG5B0 TakeProfit 4;O A45;>: Sell 8 Buy//////////////////////////   

void TP_calc()

  {

   double summ_sell_price,

   summ_buy_price;



   summ_sell_price=0;

   summ_buy_price=0;



   for(int i=0; i<=count_sell; i++) // !C<<8@>20=85 F5= Sell

     {

      summ_sell_price=summ_sell_price+Mas_Sell[i][1];

     }



   for(int j=0; j<=count_buy; j++) // !C<<8@>20=85 F5= Buy

     {

      summ_buy_price=summ_buy_price+Mas_Buy[j][1];

     }



   TP_sell=summ_sell_price/count_sell-TakeProfit*Point;

   TP_buy=summ_buy_price/count_buy+TakeProfit*Point;

  }

//////////////$C=:F8O <>48D8:0F88 TakeProfit ?> 2A5< >@45@0</////////////////////////////   

void TP_corr()

  {

   for(int i=0; i<=OrdersTotal(); i++) // 7<5=5=85 TakeProfit >@45@>2 Sell

     {

      if((OrderSelect(i,SELECT_BY_POS)==true)    // A;8 5ABL A;54CNI.

         && (OrderType()==OP_SELL))              // 8 5A;8 >@45@ Sell

        {

         bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP_sell,0,Blue);

         if(!res)

            Print("H81:0 <>48D8:0F88 >@45@0. >4 >H81:8=",GetLastError());

        }

     }



   for(int j=0; j<=OrdersTotal(); j++) // 7<5=5=85 TakeProfit >@45@>2 Buy

     {

      if((OrderSelect(j,SELECT_BY_POS)==true)    // A;8 5ABL A;54CNI.

         && (OrderType()==OP_BUY))               // 8 5A;8 >@45@ Buy

        {

         bool res2=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP_buy,0,Blue);

         if(!res2)

            Print("H81:0 <>48D8:0F88 >@45@0. >4 >H81:8=",GetLastError());

        }

     }

  }

//+------------------------------------------------------------------+

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