Error lots constant cannot be modified.... I need help with this code

Nafisat Lateef
14
//+------------------------------------------------------------------+
//|                                            Trade Manager Test.mq4 |
//|                                                                 . |
//|                                                                   |
//+------------------------------------------------------------------+
//#property copyright "Copyright 2020, MetaQuotes Software Corp."
//#property link      "mystik5551@gmail.com"
#property version   "1.00"
#property strict

input double lots =0.1;
input int stoploss= 30;
input int takeprofit= 40;
input int magic1=302;
input int slippage= 3;
input double lotfactor= 0.50;
input int totalorders=8;
input int EnterHour =4;

//+------------------------------------------------------------------+
void openbuy()
   {
   OrderSend(Symbol(), OP_BUY,lots,Ask, slippage, Ask-stoploss*Point,Ask+takeprofit*Point,"Buy Trade",magic1,0,Blue);
   lots+=lotfactor;
   }
void openbuystop()
   {
   int ticket, expiration;
   double point;
   //----
   point=MarketInfo(Symbol(),MODE_POINT);
   expiration=NULL;
   double price = Ask+50*Point;
   //----
   while(true)
     {
      ticket= OrderSend(Symbol(), OP_BUYSTOP,lots,price,0, 0,price+takeprofit*Point,"BuyStop Trade",magic1,expiration,Green);
      if(ticket<=0)Print("Error = ", GetLastError());
      else{Print("ticket = ", ticket); break; }
      //---- 10 seconds wait
      Sleep(10000);  
     }
   lots+=lotfactor;
   }
  
void opensell()
   {
    OrderSend(Symbol(), OP_SELL,lots,Bid-50*Point, slippage, Bid+stoploss*Point,Bid-takeprofit*Point,"Sell Trade",magic1,Red);
   lots+=lotfactor;
   }
void opensellstop()
   {
   int ticket, expiration;
   double point;
   //----
   point=MarketInfo(Symbol(),MODE_POINT);
   expiration=NULL;
   double price = Bid-50*Point;
   //----
   while(true)
     {
      ticket= OrderSend(Symbol(), OP_SELLSTOP,lots,price,0, 0,price-takeprofit*Point,"SellStop Trade",magic1,expiration,Pink);
      if(ticket<=0)Print("Error = ", GetLastError());
      else{Print("ticket = ", ticket); break; }
      //---- 10 seconds wait
      Sleep(10000);  
     }
  lots+=lotfactor;
   }
   
int countpending()
   {
      int s=0;
      for(int i=0;i<OrdersTotal();i++)
        {
         OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
         if(OrderType() > OP_SELL)
           {
            s++;
           }
         
        }
      return(s);
   }
   void closeallorders()
   {
      for(int i=0;i<OrdersTotal();i++)
        {
             OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
            if(OrderType()==OP_BUY || OrderType() == OP_SELL)
            {
               int j=0;
               while(j!=5)//try 5 times to ensure execution
               {
               OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Pink);
               j++;
               }
            }
        }
   }
Files:
complain1.txt  3 kb
Abubakar Saidu
12119

use extern instead

extern double lots =0.1;
Fernando Morales
4961
Nafisat Lateef:

Is not a good practise changing the input parameters because once changed you cannot reset the value until the EA is restarted.

input double inplots =0.1;
input int stoploss= 30;
input int takeprofit= 40;
input int magic1=302;
input int slippage= 3;
input double lotfactor= 0.50;
input int totalorders=8;
input int EnterHour =4;

double lots = inplots;

//+------------------------------------------------------------------+
void openbuy()
   {
   OrderSend(Symbol(), OP_BUY,lots,Ask, slippage, Ask-stoploss*Point,Ask+takeprofit*Point,"Buy Trade",magic1,0,Blue);
   lots+=lotfactor;
   }
void openbuystop()
   {
   int ticket, expiration;
   double point;
   //----
   point=MarketInfo(Symbol(),MODE_POINT);
   expiration=NULL;
   double price = Ask+50*Point;
   //----
   while(true)
     {
      ticket= OrderSend(Symbol(), OP_BUYSTOP,lots,price,0, 0,price+takeprofit*Point,"BuyStop Trade",magic1,expiration,Green);
      if(ticket<=0)Print("Error = ", GetLastError());
      else{Print("ticket = ", ticket); break; }
      //---- 10 seconds wait
      Sleep(10000);  
     }
   lots+=lotfactor;
   }
  
void opensell()
   {
    OrderSend(Symbol(), OP_SELL,lots,Bid-50*Point, slippage, Bid+stoploss*Point,Bid-takeprofit*Point,"Sell Trade",magic1,Red);
   lots+=lotfactor;
   }
void opensellstop()
   {
   int ticket, expiration;
   double point;
   //----
   point=MarketInfo(Symbol(),MODE_POINT);
   expiration=NULL;
   double price = Bid-50*Point;
   //----
   while(true)
     {
      ticket= OrderSend(Symbol(), OP_SELLSTOP,lots,price,0, 0,price-takeprofit*Point,"SellStop Trade",magic1,expiration,Pink);
      if(ticket<=0)Print("Error = ", GetLastError());
      else{Print("ticket = ", ticket); break; }
      //---- 10 seconds wait
      Sleep(10000);  
     }
  lots+=lotfactor;
   }
Pocrovsky
9
Pocrovsky  
Fernando Morales #:

Is not a good practise changing the input parameters because once changed you cannot reset the value until the EA is restarted.

So easy!Thank you so much, amigo!)
William Roeder
26723
William Roeder  
OrderSend(Symbol(), OP_BUY,lots,Ask, slippage, Ask-stoploss*Point,Ask+takeprofit*Point,"Buy Trade",magic1,0,Blue);

You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit and open at the Ask.

  1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

  2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close to a specific Bid price, add the average spread.
              MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

  3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)
    Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes. My GBPJPY shows average spread = 26 points, but average maximum spread = 134 (your broker will be similar).