AssistantNetworkerSell

Author: Copyright 2025, MetaQuotes Ltd.
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open orders
0 Views
0 Downloads
0 Favorites
AssistantNetworkerSell
ÿþ//+------------------------------------------------------------------+

//|                                       AssistantNetworkerSell.mq4 |

//|                                  Copyright 2025, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

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

#property copyright "Copyright 2025, MetaQuotes Ltd."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

#property show_inputs



extern double Lots      = 0.1;

extern int Magic        = 1234;

extern int Slippage     = 50;      

extern int Number       = 5; 

extern int Step         = 50;

extern int StepPrice    = 50; 

extern int StepTwo      = 100;

extern int steptwo      = 10;

extern bool Ladder      = false;

extern int ladder       = 10;

extern int ladder2      = 3;

extern bool Limit       = false;



bool flag1=true,flag2=true;



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

//| Script program start function                                    |

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

void OnStart()

  {

      int j=0;

               double lot=Lots;

               int number=Number;

               int step = StepPrice;

               int step2 = StepTwo;

               int size=Step;              

               int ticket;//,i=0;

               int m=ladder;

               int m2=ladder2;

               int a=steptwo;

               

               if(Limit==true)

               {

                  while(j<number)

                  {

                     ticket=OrderSend(Symbol(),OP_SELLLIMIT,lot,

                     NormalizeDouble((double)Bid+step*Point,Digits),

                     Slippage,0/*NormalizeDouble((double)Ask+StopLoss*Point,Digits)*/,

                     0,"",Magic,0);

                     

                     ticket=OrderSend(Symbol(),OP_SELLLIMIT,lot,

                     NormalizeDouble((double)Bid+step2*Point,Digits),

                     Slippage,0/*NormalizeDouble((double)Ask+StopLoss*Point,Digits)*/,

                     0,"",Magic,0);

                     

                     lot=NormalizeDouble(lot+(lot/2),2);

                     

                     if(Ladder==true)

                     {

                        step=step+size+m;

                        m+=m;

                        

                        step2+=a+m2;

                        m2+=m2;

                     }

                     else

                     {

                        step=step+size;

                        step2+=a;

                     }

                     

                     j++;

                  }

               }

               else

               while(j<number)

               {

                  ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,

                  NormalizeDouble((double)Bid-step*Point,Digits),

                  Slippage,0/*NormalizeDouble((double)Ask+StopLoss*Point,Digits)*/,

                  0,"",Magic,0);

                  

                  ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,

                  NormalizeDouble((double)Bid-step2*Point,Digits),

                  Slippage,0/*NormalizeDouble((double)Ask+StopLoss*Point,Digits)*/,

                  0,"",Magic,0);

                  

                  lot=NormalizeDouble(lot+(lot/2),2);

                  

                  if(Ladder==true)

                  {

                     step=step+size+m;

                     m+=m;

                     

                     step2+=a+m2;

                     m2+=m2;

                  }

                  else

                  {

                     step=step+size;

                     step2+=a;

                  }

                  

                  j++;

               }

   

  }

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

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

//|  @>25@O5B >1J5< >@45@0 =0 :>@@5:B=>ABL                          |

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

bool CheckVolumeValue(double volume,string &description)//export

  {

    description="  ";  

//--- <8=8<0;L=> 4>?CAB8<K9 >1J5< 4;O B>@3>2KE >?5@0F89

   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);

   if(volume<min_volume)

     {

      //description=StringFormat("The volume is less than the minimum allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);

      return(false);

     }



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

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);

   if(volume>max_volume)

     {

      //description=StringFormat("The volume is greater than the maximum allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);

      return(false);

     }



//--- ?>;CG8< <8=8<0;L=CN 3@040F8N >1J5<0

   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);



   int ratio=(int)MathRound(volume/volume_step);

   if(MathAbs(ratio*volume_step-volume)>0.0000001)

     {

      //description=StringFormat("The volume is not a multiple of the minimum gradation SYMBOL_VOLUME_STEP=%.2f, the nearest correct volume %.2f",

                               //volume_step,ratio*volume_step);

      return(false);

     }

   description="The correct volume value";

   return(true);

  }

//-------------------@>25@:0 A@54AB2------------------------------- 

 

bool CheckMoneyForTrade(string symb, double lot,int type)//export

  {

   double free_margin=AccountFreeMarginCheck(symb,type,lot);

   //-- 5A;8 45=53 =5 E20B05B

   if(free_margin<0)

     {

      string oper=(type==OP_BUY)? "Buy":"Sell";

      //Print("Not enough money for ", oper," ",lot, " ", symb, " Error code=",GetLastError(), " Top up your account!");

      return(false);

     }

   //-- ?@>25@:0 ?@>H;0 CA?5H=>

   return(true);

  }

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

bool MyManyError(string symb, double lot,int type)

{

   string a="";

   bool vse=true;

         if(CheckVolumeValue(lot,a)==false ||

         CheckMoneyForTrade(Symbol(),lot,type)==false)

            vse=false;

         else

            vse=true;

   return vse;

}

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

//--------------------------------------------------------------

//

// Launch - 0?CA:

//

// -B>B :;0AA 70?CA:05B >@45@0 =0 8A?>;=5=85

//

//--------------------------------------------------------------



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

//|                                                                  |

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



   int               MainBuy(string symb,int mag);

   int               MainBuyLimit(string symb,int mag);

   int               MainBuyStop(string symb,int mag);

   int               MainSell(string symb,int mag);

   int               MainSellLimit(string symb,int mag);

   int               MainSellStop(string symb,int mag);            



   int               Buy(string symb,double lot,int slip,double sl,double tp,int mag);

   int               BuyStop(string symb,double lot,double plus,int slip,double sl,double tp,int mag);

   int               BuyLimit(string symb,double lot,double plus,int slip,double sl,double tp,int mag);

   int               Sell(string symb,double lot,int slip,double sl,double tp,int mag);

   int               SellStop(string symb,double lot,double minus,int slip,double sl,double tp,int mag);

   int               SellLimit(string symb,double lot,double minus,int slip,double sl,double tp,int mag);





//--------------------------------------------------------------

// 5B>4K :;0AA0

//--------------------------------------------------------------

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

// 1. >4AG5B >B:@KB89 >@45@0 BUY

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

//int Launch::

int MainBuy(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_BUY &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

// 2. >4AG5B >B:@KB89 >@45@0 SELL

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

//int Launch::

int MainSell(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_SELL &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

// 3. >4AG5B >B:@KB89 >@45@0 BUYLIMIT

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

//int Launch::

int MainBuyLimit(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_BUYLIMIT &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

// 4. >4AG5B >B:@KB89 >@45@0 SELLLIMIT

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

//int Launch::

int MainSellLimit(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_SELLLIMIT &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

// 5. >4AG5B >B:@KB89 >@45@0 BUYSTOP

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

//int Launch::

int MainBuyStop(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_BUYSTOP &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

// 6. >4AG5B >B:@KB89 >@45@0 SELLSTOP

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

//int Launch::

int MainSellStop(string symb,int mag)

  {

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==OP_SELLSTOP &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

  }

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

int Main(string symb,int typ,int mag)

{

   int cout=0;

   for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderType()==typ &&

         OrderSymbol()==symb &&

         OrderMagicNumber()==mag)

           {

            cout++;

           }

        }

     }

   return cout;

}

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

// 7. 5B>4K @01>BK A DC=:F859 | OrderSend =0 70?CA:

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

//int Launch::

int Buy(string symb,double lot,int slip,double sl,double tp,int mag)

  {

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(Bid+tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(Bid-sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_BUY,lot,

                 Ask,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//int Launch::

int BuyStop(string symb,double lot,double plus,int slip,double sl,double tp,int mag)

  {

   plus=NormalizeDouble(Ask+plus*Point,Digits);

   

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(plus+tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(plus-sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_BUYSTOP,lot,

                 plus,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//int Launch::

int BuyLimit(string symb,double lot,double plus,int slip,double sl,double tp,int mag)

  {

   plus=NormalizeDouble(Ask-plus*Point,Digits);

   

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(plus+tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(plus-sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_BUYLIMIT,lot,

                 plus,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//int Launch::

int Sell(string symb,double lot,int slip,double sl,double tp,int mag)

  {

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(Bid-tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(Bid+sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_SELL,lot,

                 Bid,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//int Launch::

int SellStop(string symb,double lot,double minus,int slip,double sl,double tp,int mag)

  {

   minus=NormalizeDouble(Bid-minus*Point,Digits);

   

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(minus-tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(minus+sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_SELLSTOP,lot,

                 minus,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//int Launch::

int SellLimit(string symb,double lot,double minus,int slip,double sl,double tp,int mag)

  {

   minus=NormalizeDouble(Bid+minus*Point,Digits);

   

   if(tp==0)

      tp=0;

   else

   tp=NormalizeDouble(minus-tp*Point,Digits);

   

   if(sl==0)

      sl=0;

   else

   sl=NormalizeDouble(minus+sl*Point,Digits);



   int ticket=OrderSend(

                 symb,OP_SELLLIMIT,lot,

                 minus,slip,sl,tp,"",mag,0);



   return ticket;

  }

//--------------------------------------------------------------

//  close  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

//--------------------------------------------------------------

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