Setting TP/SL on gold

 

I wrote this simple gold script to set a stop and tp on gold at Alpari for an open long position. I set the values to 1,000 pips away - it still won't let me set, even though it will allow me to set the same values manually. How do I fix this?

#property show_inputs

extern   int   Stop  =  1000;
extern   int   TP    =  1000;
extern   int   ticket = 160197468;

int init() {

   if( Digits == 3 || Digits == 5 ) {
   
      Stop *= 10;
      TP *= 10;
   }
}

int start()
  {
   OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES);
   
   double sl = OrderOpenPrice() - Stop * Point;
   double tp = OrderOpenPrice() + TP * Point;
   
   Print(StringConcatenate("Open price: ", OrderOpenPrice(), ", sl: ", DoubleToStr( sl, Digits), ", tp: ", DoubleToStr( tp, Digits) ) );
   
   if(OrderModify(ticket, OrderTicket(), sl, tp, 0, Blue) )
      Print("Success setting stops!");
   else
      Print("Error " + GetLastError() );
   
   return(0);
  }
 

check the correct use of OrderModify()

bool OrderModify(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)

//z

 

Not OrderModify(ticket,ticket...)


if( Digits == 3 || Digits == 5 ) { Stop *= 10; TP *= 10;

Don't to that. Init can be called multiple times (refresh, change period/pair) so TP becomes 10X 100X...

Also you must modify TP, SL, and slippage.

//++++ These are adjusted for 5 digit brokers.
double  pips2points,    // slippage  3 pips    3=points    30=points
        pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int init(){
    if (Digits == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
Reason: