Simple_High_Low_Day_Pending_Order

Author: Copyright 2022, MrBrooklin
0 Views
0 Downloads
0 Favorites
Simple_High_Low_Day_Pending_Order
ÿþ//+------------------------------------------------------------------+

//|                            Simple_High_Low_Day_Pending_Order.mq5 |

//|                                       Copyright 2022, MrBrooklin |

//|                         https://www.mql5.com/ru/users/mrbrooklin |

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

#property copyright "Copyright 2022, MrBrooklin"

#property link      "https://www.mql5.com/ru/users/mrbrooklin"

#property version   "1.00"

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

//| %+  " +                                                |

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

input ushort Indent=600;         //BABC? >B;>65==>3> >@45@0 >B High 8 Low ?@54K4CI53> 4=O

input ushort Stop_Loss=1000;     //!B>?-;>AA

input ushort Take_Profit=1000;   //"59:-?@>D8B

input ushort Magic_Number=7557;  //038G5A:89 =><5@ (;N1>5 G8A;> >B "0" 4> "65535")

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

//| ,+  +                                            |

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

MqlRates mql_rates[]; // >1JO28< <0AA82 4;O E@0=5=8O 8=D>@<0F88 > F5=0E

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

//| Expert initialization function                                   |

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

int OnInit() // DC=:F8O 8=8F80;870F88 A>25B=8:0

  {

   return(INIT_SUCCEEDED); // C40G=0O 8=8F80;870F8O

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason) // DC=:F8O 458=8F80;870F88 A>25B=8:0

  {

//---

  }

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

//| Expert tick function                                             |

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

void OnTick() // DC=:F8O 4;O 35=5@0F88 @01>BK A>25B=8:0 ?> :064><C B8:C

  {

   if(AccountInfoDouble(ACCOUNT_BALANCE)<3000) // 5A;8 10;0=A AGQB0 <5=LH5 3000 USD

      return; // 2KE>48<

   static datetime LastTime = 0; // >1JO28< AB0B8G5A:CN ?5@5<5==CN 4;O ?@54K4CI53> 2@5<5=8

   datetime NowTime = iTime(NULL, PERIOD_CURRENT, 0); // >1JO28< ?5@5<5==CN 4;O B5:CI53> 2@5<5=8

   if(LastTime != NowTime) // 5A;8 2@5<O ?@54K4CI53> 459AB28O =5 @02=> B5:CI5<C 2@5<5=8, 7=0G8B MB> =>2K9 L0@

     {

      ArraySetAsSeries(mql_rates,true); // 704048< =0?@02;5=85 8=45:A0F88 <0AA820 mql_rates

      CopyRates(_Symbol,PERIOD_D1,0,10,mql_rates); // :>?8@C5< 7=0G5=8O F5= ?>A;54=8E 10 10@>2 2 <0AA82 mql_rates

      if(!OrdersTotal() && !PositionSelect(_Symbol)) // 5A;8 =5B >B;>65==>3> >@45@0 8 >B:@KB>9 ?>78F88

        {

         //--- ?@>25@8< CA;>28O ?@8 :>B>@KE 2>7<>6=0 CAB0=>2:0 >B;>65==KE >@45@>2

         if(mql_rates[1].high+Indent*_Point>mql_rates[0].open-mql_rates[0].spread &&

            mql_rates[1].low-Indent*_Point<mql_rates[0].open+mql_rates[0].spread)

           {

            Set_Pending_Orders(ORDER_TYPE_BUY_STOP); // CAB0=>28< >B;>65==K9 >@45@ BUY STOP

            Set_Pending_Orders(ORDER_TYPE_SELL_STOP); // CAB0=>28< >B;>65==K9 >@45@ SELL STOP

           }

        }

     }

   LastTime = NowTime; // ?@54K4CI55 2@5<O @02=> =0AB>OI5<C 2@5<5=8, 7=0G8B MB> B5:CI89 10@

  }

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

//| Set Pending Orders function                                      |

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

void Set_Pending_Orders(ENUM_ORDER_TYPE type) // DC=:F8O 4;O CAB0=>2:8 >B;>65==KE >@45@>2

  {

   int k=type==ORDER_TYPE_BUY_STOP ? 1 : -1; // >1JO28< ?5@5<5==CN k 4;O >B;>65==KE >@45@>2 @07=KE B8?>2

   double price=type==ORDER_TYPE_BUY_STOP ?  // >1JO28< ?5@5<5==CN price 4;O >B;>65==KE >@45@>2 @07=KE B8?>2

                mql_rates[1].high+Indent*_Point : // F5=0 4;O CAB0=>2:8 >B;>65==>3> >@45@0 BUY STOP

                mql_rates[1].low-Indent*_Point; // F5=0 4;O CAB0=>2:8 >B;>65==>3> >@45@0 SELL STOP

   MqlTradeRequest request; // >1JO28< ?5@5<5==CN 4;O >B?@02:8 70?@>A0 B>@3>2><C A5@25@C

   MqlTradeResult result; // >1JO28< ?5@5<5==CN 4;O ?>;CG5=8O @57C;LB0B>2 >B25B0 B>@3>2>3> A5@25@0

   ZeroMemory(request); // >1=C;8< ?5@5<5==CN 70?@>A0

   ZeroMemory(result); // >1=C;8< ?5@5<5==CN @57C;LB0B0

//--- ?0@0<5B@K 70?@>A0 =0 >B:@KB85 ?>78F88

   request.action   =TRADE_ACTION_PENDING;       // B8? B>@3>2>9 >?5@0F88 (CAB0=>2:0 >B;>65==>3> >@45@0)

   request.symbol   =_Symbol;                    // A8<2>;

   request.volume   =GetLot();                   // >1JQ< 2 ;>B0E

   request.type     =type;                       // B8? >@45@0

   request.type_time=ORDER_TIME_DAY;             // >B;>65==K9 >45@ 1C45B C40;5= 2 :>=F5 B>@3>2>3> 4=O

   request.price    =price;                      // F5=0 4;O CAB0=>2:8 >B;>65==>3> >@45@0

   request.sl       =price-Stop_Loss*_Point*k;   // AB>?-;>AA

   request.tp       =price+Take_Profit*_Point*k; // B59:-?@>D8B

   request.deviation=20;                         // 4>?CAB8<>5 >B:;>=5=85 >B F5=K

   request.magic    =Magic_Number;               // Magic Number >@45@0

//--- >B?@02:0 70?@>A0

   if(!OrderSend(request,result)) // 5A;8 >B?@028BL 70?@>A =5 C40;>AL

      PrintFormat("OrderSend error %d",GetLastError()); // 2K25AB8 :>4 >H81:8

//--- 8=D>@<0F8O >1 >?5@0F88

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

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

//| GetLot function                                                  |

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

double GetLot() // DC=:F8O 4;O ?@>25@:8 >1JQ<0 >@45@0 =0 :>@@5:B=>ABL

  {

   double volume=0.0; // >1JO28< ?5@5<5==CN >1JQ<0 ;>B0

//--- <8=8<0;L=> 4>?CAB8<K9 >1JQ< ;>B0 4;O A>25@H5=8O B>@3>2KE >?5@0F89

   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); // >1JO28< ?5@5<5==CN 4;O min >1JQ<0

   if(volume<min_volume) // 5A;8 >1JQ< ;>B0 <5=LI5 <8=8<0;L=> 4>?CAB8<>3>

      volume=min_volume; // ?@8=8<05< 7=0G5=85 <8=8<0;L=> 4>?CAB8<>3> >1JQ< ;>B0

//--- <0:A8<0;L=> 4>?CAB8<K9 >1J5< ;>B0 4;O A>25@H5=8O B>@3>2KE >?5@0F89

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); // >1JO28< ?5@5<5==CN 4;O max >1JQ<0

   if(volume>max_volume) // 5A;8 >1JQ< ;>B0 1>;LH5 <0:A8<0;L=> 4>?CAB8<>3>

      volume=max_volume; // ?@8=8<05< 7=0G5=85 <0:A8<0;L=> 4>?CAB8<>3> >1JQ< ;>B0

   return(volume); // 2>72@0I05< 7=0G5=85 >1JQ<0 ;>B0

  }

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

Comments