Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Николай
11
Николай  

Добрый день, написал простейший скрипт открытия отложенного ордера на бай. Скрипт успешно работает на ДЕМО счете, а на реальном счете выдает ошибку: 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);
}//±
Alexey Viktorov
20864
Alexey Viktorov  
koliane555:

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



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

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

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

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

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

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

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.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий