Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не поставляешь сигналы и не продаешь приложения? Не проблема, заработать могут все!
Александр
18
Александр 2014.02.21 02:39 

Здравствуйте.

Помогите решить проблему

double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
     Alert("Minimum Stop Level=",minstoplevel," points");

ticket = OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble(Lot,2),Ask-dif*Point(),5,0,0,"");

Стоплевел равен 0,0.

Я так понял ошибка возникает т.к. близко к цене отложка, а не из за стопов?

Тогда как же узнать этот уровень?

SURA
47
SURA 2014.02.21 03:57  

Теперь ВСЁ прописывайте через MarketInfo и NormalizeDouble т.е. еще добавте MarketInfo(tool,MODE_POINT), где tool ваша валютная пара пара и стоп лосс в конечном итоге должен выглядеть вот так

NormalizeDouble (Ask-dif* MarketInfo(tool,MODE_POINT),Digits);

Artyom Trishkin
69037
Artyom Trishkin 2014.02.21 07:03  
wolfovik:

Здравствуйте.

Помогите решить проблему

Стоплевел равен 0,0.

Я так понял ошибка возникает т.к. близко к цене отложка, а не из за стопов?

Тогда как же узнать этот уровень?

Альпари? Если да, то у них стоплевел равен нулю, но вместо него используется двойной спред. Делайте так:

//---
   level=(int)MarketInfo(symbol,MODE_STOPLEVEL);
   if(level==0) level=(int)MarketInfo(symbol,MODE_SPREAD)*2;
//---
Artyom Trishkin
69037
Artyom Trishkin 2014.02.21 07:05  
Sura:

Теперь ВСЁ прописывайте через MarketInfo и NormalizeDouble т.е. еще добавте MarketInfo(tool,MODE_POINT), где tool ваша валютная пара пара и стоп лосс в конечном итоге должен выглядеть вот так

NormalizeDouble (Ask-dif* MarketInfo(tool,MODE_POINT),Digits);

Не нужно предлагать ерунду. Это не поможет избавиться от 130-й ошибки.
Александр
18
Александр 2014.02.21 15:22  

Спасибо большое. Да, альпари нестандартно подошел к этому вопросу)

void Start()
{
level=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(level==0) 
level=MarketInfo(Symbol(),MODE_SPREAD)*2;
Alert(level);
ticket = OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble(Lot,2),NormalizeDouble(Bid-(level)*Point(),5),5,0,0,"");
if (ticket<0)
Alert("Ошибка постановки 1 ордера ", GetLastError());
return;

Проблема решена

Артем
8
Артем 2014.03.05 09:27  

Уважаемый artmedia70!!

А я вот столкнулся с проблемой ещё хуже.

Советник отказывается (та же 130я) открывать позиции! Из журнала:

2014.03.04 16:43:58 '9462147': order sell 1.00 EURUSD opening at 0.00000 sl: 1.38192 tp: 1.37298 failed [Invalid S/L or T/P]

По Вашей рекомендации прикрутил level=...и т.д. Ноль реакции! (Кстати, на Евре через принт пишет level=12)

Может тогда и СЛ и ТП тоже по такому алгоритму считать? Через NormalizeDouble (Ask-dif*... Но стопы же он вроде считает правильно (см. из журнала).

Кроме того, я что-то не въезжаю. MODE_STOPLEVEL вроде как double. Почему у Вас int?

Vitalie Postolache
11096
Vitalie Postolache 2014.03.05 09:59  
Taper:

Уважаемый artmedia70!!

А я вот столкнулся с проблемой ещё хуже.

Советник отказывается (та же 130я) открывать позиции! Из журнала:

2014.03.04 16:43:58 '9462147': order sell 1.00 EURUSD opening at 0.00000 sl: 1.38192 tp: 1.37298 failed [Invalid S/L or T/P]

По Вашей рекомендации прикрутил level=...и т.д. Ноль реакции! (Кстати, на Евре через принт пишет level=12)

Может тогда и СЛ и ТП тоже по такому алгоритму считать? Через NormalizeDouble (Ask-dif*... Но стопы же он вроде считает правильно (см. из журнала).

Кроме того, я что-то не въезжаю. MODE_STOPLEVEL вроде как double. Почему у Вас int?

стопы только модификатором ставить, не надо пытаться ставить их при открытии позиции, выше ведь обьясняли уже. А стоплевел всегда целочисленный, как количество пипсов может быть дробным? Вот сама функция MarketInfo - double, это да.

SYMBOL_TRADE_STOPS_LEVEL

Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров

int

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