How to open a trade when price touches a object?

 

Hi All

I would like to open a trade when price touches a object(Buy/Sell). With the code below it will open in between the objects.

extern int MagicNumber=1;
int MaxTrades=0;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int CountTrades()
 {
  int Count=0;
  for(int a=OrdersTotal()-1;a>=0;a--)
   {
    if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
    if(OrderType()==OP_BUY||OrderType()==OP_SELL)
    Count++;
   }
  return(Count);
 }

void Buy()
 {
  double Price=ObjectGet("Demand",OBJPROP_PRICE1);
  double Price2=ObjectGet("Demand",OBJPROP_PRICE2);
  datetime Time1=(datetime)ObjectGet("Demand",OBJPROP_TIME1);
  datetime Time2=(datetime)ObjectGet("Demand",OBJPROP_TIME2);

  double OneHourTF=iClose(NULL,PERIOD_D1,1);
  double CurrentTF=iClose(NULL,0,1);
  
  if(OneHourTF<CurrentTF)
  {
   if(MaxTrades!=1)
   {
    if(Close[1]>Price&&Price2<Close[2])
    {
     MaxTrades=1;
     int BuyTrade=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,"JackBuda",MagicNumber,0,clrBlue);
    }
   }
   
  }
  
 }
 
void Sell()
 {
  double Price=ObjectGet("Supply",OBJPROP_PRICE1);
  double Price2=ObjectGet("Supply",OBJPROP_PRICE2);
  datetime Time1=(datetime)ObjectGet("Supply",OBJPROP_TIME1);
  datetime Time2=(datetime)ObjectGet("Supply",OBJPROP_TIME2);

  double OneHourTF=iClose(NULL,PERIOD_D1,1);
  double CurrentTF=iClose(NULL,0,1);
  
  if(CurrentTF>OneHourTF)
  {
   if(MaxTrades!=-1)
   {
    if(Close[1]<Price&&Price2>Close[2])
    {
     MaxTrades=-1;
     int SellTrade=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,"JackBuda",MagicNumber,0,clrRed);
    }
   }
  }
  
 } 

void OnTick()
 {
  int Demand200=iLowest(Symbol(),0,MODE_LOW,200,1);
  
  ObjectDelete("Demand200");
  ObjectCreate(0,"Demand200",OBJ_RECTANGLE,0,Time[Demand200],Close[Demand200],Time[0],Low[Demand200]);
  ObjectSetInteger(0,"Demand200",OBJPROP_COLOR,Green);
  
  int Supply200=iHighest(Symbol(),0,MODE_HIGH,200,1);
  
  ObjectDelete("Supply200");
  ObjectCreate(0,"Supply200",OBJ_RECTANGLE,0,Time[Supply200],Close[Supply200],Time[0],High[Supply200]);
  ObjectSetInteger(0,"Supply200",OBJPROP_COLOR,Red);
  
  if(AccountBalance()>10&&CountTrades()<1){Buy();}
  
  if(AccountBalance()>10&&CountTrades()<1){Sell();}
  
  for(int Loop2=OrdersTotal()-1;Loop2>=0;Loop2--)
  {
   if(OrderSelect(Loop2,SELECT_BY_POS,MODE_TRADES))
   if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
   { 
    bool CloseTrade=false;
    int Type=OrderType();
    double Profit=OrderLots()*100;
    switch(Type)
    {
     case OP_BUY:if(OrderProfit()>=Profit)CloseTrade=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrGreen);break;
     case OP_SELL:if(OrderProfit()>=Profit)CloseTrade=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrGreen);break;
     //Print("ErrorCode:",GetLastError());                         
    }
   }
  } 
   
 }
Reason: