Скрипт не работает на реальном счете, хотя на демо работает

 

Добрый день, написал простейший скрипт открытия отложенного ордера на бай. Скрипт успешно работает на ДЕМО счете, а на реальном счете выдает ошибку: 133, что означает торговля запрещена. Подскажите, в чем проблема? Из-за чего может выскакивать эта ошибка?


extern int orderSize = 50;
extern int SL = 20;
extern int TP = 20;

int start()
{
double correctPoint = 0.0001;
double priceOpen = iOpen( Symbol(), PERIOD_M5, 0 ); //записываем в переменную priceOpen цену открытия текущего пятиминутного бара

double priceBuy = priceOpen + (double)orderSize * correctPoint; //цена, на которую ставиться отложенный ордер
double priceTP = priceBuy + (double)TP * correctPoint;
double priceSL = priceBuy - (double)SL * correctPoint;

while( !IsTradeAllowed() )
Sleep( 100 );
int codeError = OrderSend( Symbol(), OP_BUYSTOP, 1.5, priceBuy, 100, priceSL, priceTP );
if( codeError == -1 )
Alert ( "Ошибка BuyStop: ", GetLastError() );

return(0);
}//±
 
koliane555:

Добрый день, написал простейший скрипт открытия отложенного ордера на бай. Скрипт успешно работает на ДЕМО счете, а на реальном счете выдает ошибку: 133, что означает торговля запрещена. Подскажите, в чем проблема? Из-за чего может выскакивать эта ошибка?



Означает что ты сам ответил на свой вопрос. Выясни в тех.поддержке ДЦ что со счётом.
 
AlexeyVik:

Означает что ты сам ответил на свой вопрос. Выясни в тех.поддержке ДЦ что со счётом.

Торговать вручную на реальном счете можно, впринципе скрипт выполняет те же действия, как если бы я это делал вручную(выставляет отоложенный ордер на покупку). В ДЦ не знают в чем проблема. Говорят торгуй без скриптов.
 
koliane555:

Торговать вручную на реальном счете можно, впринципе скрипт выполняет те же действия, как если бы я это делал вручную(выставляет отоложенный ордер на покупку). В ДЦ не знают в чем проблема. Говорят торгуй без скриптов.

Вам же ответили! Так зачем же спрашивать по всем веткам?
 
NormalizeDouble для всех параметров с типом double в функции OrderSend.
 

вообще, я бы переписал так:

extern int orderSize = 50;
extern int SL = 20;
extern int TP = 20;
int start()
{
/*  double correctPoint = 0.0001; */
  double priceOpen = iOpen (Symbol(), PERIOD_M5, 0); //записываем в переменную priceOpen цену открытия текущего пятиминутного бара

  double priceBuy = priceOpen + orderSize * Point; /*correctPoint;*/ //цена, на которую ставиться отложенный ордер
  double priceTP = priceBuy + TP * Point;
  double priceSL = priceBuy - SL * Point;

  if (!IsTradeAllowed()) 
    return (0);
    
  int codeError = OrderSend (Symbol(), OP_BUYSTOP, 1.50, NormalizeDouble (priceBuy, Digits), 100, NormalizeDouble (priceSL, Digits), NormalizeDouble (priceTP, Digits));
  if (codeError == -1) 
    Alert ("Ошибка BuyStop: ", GetLastError());

  return(0);
 }
Потому что double correctPoint = 0.0001 не годится, например, для йеновых пар.

Значения

extern int SL = 20;
extern int TP = 20;

соответственно увеличил бы, т.к. 20 пунктов для 5-знака - легко может оказаться меньше спреда или значения MODE_STOPLEVEL.

Причина обращения: