Нужно найти и выбрать позицию, ближайшую к текущей цене. Поделитесь
заготовкой у кого есть. Или, может, ссылочкой. Спасибо.
- Как сделать из индикатора советник
- FOREX - Тенденции, прогнозы и следствия (Эпизод № 24: Апрель 2013) Продолжение следует...
- EURUSD - Тенденции, прогнозы и следствия (Часть № 2)
Не понял вопроса, откуда выбрать?
Или вопрос как узнать минимальный отступ от рыночной цены для установки отлож ордера?
Или вопрос как узнать минимальный отступ от рыночной цены для установки отлож ордера?
KimIV:По какому критерию искать позиции? На выбор предлагаю три:
1. Цена открытия позиции
2. Уровень стопа
3. Уровень тейка
Вам какой критерий нужен?
1. Цена открытия позиции
2. Уровень стопа
3. Уровень тейка
Вам какой критерий нужен?
автор понял, просто отошел поужинать :)
Хорошо, подробнее:
1. имеем несколько открытых позиций и отложенных ордеров
2. нужно найти (узнать номер тикета OrderTicket) именно той открытой позиции, OrderOpenPrice которой находится ближе всех к текущей цене Bid или Ask, соответственно.
vimac писал (а):
угу... ясно. Вот, держите...нужно найти (узнать номер тикета OrderTicket) именно той открытой позиции, OrderOpenPrice которой находится ближе всех к текущей цене Bid или Ask, соответственно.
//+----------------------------------------------------------------------------+ //| Возвращает тикет ближайшей к рынку позиции по цене открытия или 0 | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int TicketNearPosOnOpen(string sym="", int op=-1, int mn=-1) { double di=10000, pp; int i, k=OrdersTotal(), t=0; if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn<0 || OrderMagicNumber()==mn) { if (OrderType()==OP_BUY) pp=MarketInfo(sym, MODE_BID); if (OrderType()==OP_SELL) pp=MarketInfo(sym, MODE_ASK); if (di>MathAbs(OrderOpenPrice()-pp)) { di=MathAbs(OrderOpenPrice()-pp); t=OrderTicket(); } } } } } } return(t); }
vimac писал (а):
1. имеем несколько открытых позиций и отложенных ордеров
2. нужно найти (узнать номер тикета OrderTicket) именно той открытой
позиции, OrderOpenPrice которой находится ближе всех к текущей цене
Bid или Ask, соответственно.
int NearestOrder() { int i, iCnt = OrdersTotal(), iType, iTicket = -1; double dif = 0.0, dCurrPrice; for(i = 0; i < iCnt; i++) { if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { Print("Error! MQL Function OrderSelect(", i, ") fail. - ", ErrorDescription(GetLastError()), "."); return(-1);// not all orders scanned } iType = OrderType(); if(iType == ORDER_BUY) dCurrPrice = Bid; else if(iType == ORDER_SELL) dCurrPrice = Ask; else continue; if(!dif || MathAbs(dCurrPrice - OrderOpenPrice()) < dif) { dif = MathAbs(dCurrPrice - OrderOpenPrice()); iTicket = OrderTicket(); } if(!dif) break; } return(iTicket); }
Всем огромное спасибо, пока разбираюсь.
KimIV , интересный у Вас стиль записи. Строки экономятся, получается компактно. Надо взять на вооружение :).
KimIV , интересный у Вас стиль записи. Строки экономятся, получается компактно. Надо взять на вооружение :).
Еще раз всем спасибо. Проверил оба кода - работают. Все Ok, правда,
компилятор задал пару простых вопросов. А я сидел, голову ломал.
.. оказывается, все так просто :).
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь