0
votes

I am trying to close my trades based on 2 separate types of criteria,

  1. Regardless of what the profit is, close the trade after 1020 seconds.

  2. If my import value changes from -1 to 1 or vice versa, close it regardless of any other variables.

So far, my code works fine with 1 criteria, however when I add 2 if statements, MT4 does this thing where it opens and closes the trades very quickly, within every half a second, it doesn't look like its working properly.

If somebody could let me know what's making it do it, I would be grateful.

My code is below,

//Global Variables
//int Value = ReadCSVFile and get cell value(Either -1 or 1)
int Ticket;
int TicketBuy;
datetime SwitchBuy
datetime SwitchSell

void OnTick()
  {
    //Open Trades based on Value from CSV and if No other buy orders open
    if(Value == 1){
    if(getBuyOrderCount(Symbol(),magic) < 1){
    Ticket == OrderSend(NULL,OP_BUY,0.01,Ask,2,0,0,NULL,magic,0,clrAliceBlue);
    SwitchBuy = TimeCurrent();
    }}

    if(Value == (-1)){
    if(SellOrderCount(Symbol(),magic) < 1){
     TicketSell = OrderSend(NULL,OP_SELL,0.01,Bid,2,0,0,NULL,magic,0,clrAliceBlue);
     SwitchSell = TimeCurrent();
    }}

    //Close Trades based on value in CSV file changing
    if(Ticket > 0){
     if(Value == (-1)||(TimeCurrent()>(SwitchBuy+60))){
    CloseAllTradesBuy();
     Ticket = 0;
    Alert("Buy Trade Closed Because Probabilities Changed to -1!");
      } 
    }                

    if(TicketSell > 0){
     if(Value == 1||(TimeCurrent()>(SwitchBuy+60))){
    CloseAllTradesSell();
    TicketSell = 0;
    Alert("Sell Trade Closed Because Probabilities Changed to 1!");
     }
    }

    //Second Independent Criteria
    if((SwitchBuy+1020) < TimeCurrent()){
     if(OrderType() == OP_BUY){
     CloseAllTradesBuy();
      }
    }
 
     if((SwitchSell+1020) < TimeCurrent()){
     if(OrderType() == OP_SELL){
     CloseAllTradesSell();
      }
    }

  }

//Functions to Close Trades
double CloseAllTradesBuy(){
 for (int i =OrdersTotal(); i>=0;i--)
 {
   if(OrderSelect(i,SELECT_BY_POS)==true)
   if(OrderType()==OP_BUY)
   if (OrderSymbol()==Symbol())
   {
   OrderClose(Ticket,OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,clrRed);
   }
 }
}

double CloseAllTradesSell(){
 for (int i =OrdersTotal(); i>=0;i--)
 {
   if(OrderSelect(i,SELECT_BY_POS)==true)
   if(OrderType()==OP_SELL)
   if (OrderSymbol()==Symbol())
   {
   OrderClose(TicketSell,OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,clrRed);
   }
 }
}