Перед этим вызовите RefreshRates();
Если SL=0 и TP=0 не помогло, остается одно - попытка выставить отложенный ордер близко к рынку. Попробуйте:
int sym_digits = MarketInfo(Symbol(), MODE_DIGITS);
int sym_level = MarketInfo(Symbol(), MODE_STOPLEVEL); //Допустимое расстояние к рынку в pips
int sym_point = MarketInfo(Symbol(), MODE_POINT); //Цена 1 pips
if (High[1]-Ask<sym_level*sym_point) //Проверка возможности установки BUYSTOP
{
Comment("Близко к рынку!!!");
}
else
{
Comment("");
double loss = NormalizeDouble( Low[1]-(High[1]-Low[1])*Point, sym_digits);
double profit = High[1]+(High[1]-Low[1])*Point;
ticket=OrderSend( Symbol(), OP_BUYSTOP, 1 , High[1], 3, profit, loss, "My order #", 16384, 0, Green);
}
Кстати, проверка корректности SL и TP тоже нужна. Для OP_SELLSTOP в условии используется (Bid-Low[1]<sym_level*sym_point).
int sym_digits = MarketInfo(Symbol(), MODE_DIGITS);
int sym_level = MarketInfo(Symbol(), MODE_STOPLEVEL); //Допустимое расстояние к рынку в pips
int sym_point = MarketInfo(Symbol(), MODE_POINT); //Цена 1 pips
if (High[1]-Ask<sym_level*sym_point) //Проверка возможности установки BUYSTOP
{
Comment("Близко к рынку!!!");
}
else
{
Comment("");
double loss = NormalizeDouble( Low[1]-(High[1]-Low[1])*Point, sym_digits);
double profit = High[1]+(High[1]-Low[1])*Point;
ticket=OrderSend( Symbol(), OP_BUYSTOP, 1 , High[1], 3, profit, loss, "My order #", 16384, 0, Green);
}
Кстати, проверка корректности SL и TP тоже нужна. Для OP_SELLSTOP в условии используется (Bid-Low[1]<sym_level*sym_point).
Большое спасибо за ответы. Завтра с утра уже займусь этим.
double loss = NormalizeDouble( Low[1]-(High[1]-Low[1])*Point, sym_digits); double profit = High[1]+(High[1]-Low[1])* Point;И чему будет у Вас равен loss и profit?
High и Low уже дробные, а вы их ещё на один пипс умножаете, т. е., например, если Low[1] = 1.3, High = 1.31, Point = 0.0001, то loss в Вашем случае будет
1.3 - 1.31 * 0.0001 = 1,299869, что после NormalizeDouble даст 1,2999. Аналогично и с profit, но только ещё хуще - эту-то переменную Вы не нормализируете!
Наверное Point Вам вообще здесь не нужен.
будто заколдованная команда - ничего не помогает (понятно, я что-то не то делаю):
ни RefreshRates()
ни Проверка возможности установки BUYSTOP
написал максимально просто
double loss = Low[1]-(High[1]-Low[1]);
double profit = High[1]+(High[1]-Low[1]);
ticket=OrderSend(Symbol(),OP_BUYSTOP,1,High[1],3,profit,loss,"My order #", 16384, 0,Green);
if(ticket<0)
{
Print("OrderSend failed with error # ", GetLastError());
Print("профит # ",profit);
Print("цена открытия # ",High[1]);
Print("стоп # ",loss);
return(0);
}
******* один из результатов (они все подобны, пробую на 4-часовом графике)
2007.07.26 22:26:44 2006.04.12 14:50 1 GBPUSD,H4: OrderSend failed with error # 130
профит # 1.7666
цена открытия # 1.7572
стоп # 1.7384
даже когда эксперимента ради прибавляю 1 к профиту и , соответственно отнимаю одну от стопа - результат тот же - error # 130 (неверные стопы - ну чем же они неверны?!)
Тестирую на исторических данных - не в реальном времени. Не может быть в этом проблемы? - вдруг "трейдер" не работает с отложенными ордерами на исторических данных?
Спасибо.
ни RefreshRates()
ни Проверка возможности установки BUYSTOP
написал максимально просто
double loss = Low[1]-(High[1]-Low[1]);
double profit = High[1]+(High[1]-Low[1]);
ticket=OrderSend(Symbol(),OP_BUYSTOP,1,High[1],3,profit,loss,"My order #", 16384, 0,Green);
if(ticket<0)
{
Print("OrderSend failed with error # ", GetLastError());
Print("профит # ",profit);
Print("цена открытия # ",High[1]);
Print("стоп # ",loss);
return(0);
}
******* один из результатов (они все подобны, пробую на 4-часовом графике)
2007.07.26 22:26:44 2006.04.12 14:50 1 GBPUSD,H4: OrderSend failed with error # 130
профит # 1.7666
цена открытия # 1.7572
стоп # 1.7384
даже когда эксперимента ради прибавляю 1 к профиту и , соответственно отнимаю одну от стопа - результат тот же - error # 130 (неверные стопы - ну чем же они неверны?!)
Тестирую на исторических данных - не в реальном времени. Не может быть в этом проблемы? - вдруг "трейдер" не работает с отложенными ордерами на исторических данных?
Спасибо.
Так вы местами перепутали profit и лосс - сначала идёт стоп, потом
профит
meiciuc:
будто заколдованная команда - ничего не помогает (понятно, я что-то не то делаю):
При ошибке выводите еще и текущие Bid и Ask - тогда все поймете. В
свете вышенаписанного, очень жаль, что разработчики никак не
отреагировали на мое предложение: 'Неприятное поведение тестера в 207-м билде'
будто заколдованная команда - ничего не помогает (понятно, я что-то не то делаю):
bstone:
meiciuc:
будто заколдованная команда - ничего не помогает (понятно, я что-то не то делаю):
При ошибке выводите еще и текущие Bid и Ask - тогда все поймете. В
свете вышенаписанного, очень жаль, что разработчики никак не
отреагировали на мое предложение: 'Неприятное поведение тестера в 207-м билде' будто заколдованная команда - ничего не помогает (понятно, я что-то не то делаю):
Действительно, полезное предложение по уточнению причины неудачи
установки ордера. Ошибка 130 выдаётся не только, когда сами стопы
неправильны, но и когда сама цена открытия не соответствует
текущим Bid-Ask. Пока приходится обходиться установкой непосредственно
перед OrderSend(), Print() с выводом параметров ордера типа:
if (Info)Print("Ask=",Ask," BuyStop: OpenPrice=",OpenPrice," StopLoss=",Sl," TakeProfit=",Tp);
При ошибке выводите еще и текущие Bid и Ask - тогда все поймете. В
свете вышенаписанного, очень жаль, что разработчики никак не
отреагировали на мое предложение: 'Неприятное поведение тестера в 207-м билде'
добавил вот. Теперь все - мысли кончились (может, систему на ПК
переставить...).******* один из результатов (они все подобны, пробую на 4-часовом графике)
2007.07.26 22:26:44 2006.04.12 14:50 1 GBPUSD,H4: OrderSend failed with error # 130
профит # 1.7666
цена открытия # 1.7572
стоп # 1.7384
Bid # 1.7476
Ask # 1.7481
Тогда обратите внимание на вот это замечание:
notused писал (а):
Так вы местами перепутали profit и лосс - сначала идёт стоп, потом профит
Так вы местами перепутали profit и лосс - сначала идёт стоп, потом профит
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте.
Вопрос. Пытаюсь послать отложенный ордер. Выдает 130 ошибку - неправильные стопы. Подскажите, пожалуйста, в чем проблема. Спасибо.
int sym_digits = MarketInfo(Symbol(), MODE_DIGITS);
double loss = NormalizeDouble( Low[1]-(High[1]-Low[1])*Point, sym_digits);
double profit = High[1]+(High[1]-Low[1])*Point;
ticket=OrderSend( Symbol(), OP_BUYSTOP, 1 , High[1], 3, profit, loss, "My order #", 16384, 0, Green);
PS пробовал ставить
double loss = 0;
double profit = 0;
согласно документации - это правильно. Но ошибка все равно та же - 130.