Здравствуйте ... безуспешно искал советник по выставлению сетки виртуальных ордеров. Может кто поможет. Спасибо.
Может кто то подскажет как выставить единичный виртуальный отложенный ордер?
Для этого надо написать простенький советник на 30 строчек. Это если ордер один.
Alexey Volchanskiy:
Для этого надо написать простенький советник на 30 строчек. Это если ордер один.
Для этого надо написать простенький советник на 30 строчек. Это если ордер один.
написал по принципу
if (Ask == NormalizeDouble(GlobalVariableGet("Ask_"),Digits) + NormalizeDouble(1*Point,Digits) && F_Open()){ // F_Open() проверяет или есть на этом уровне раньше установленный ордер Alert ("Try to open BUY 0.04"); NewLevelOrder(OP_BUY, 0.04); // открываю } bool F_Open() { bool OpenNewOrder = true; for (int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) if(OrderOpenPrice() == Bid || OrderOpenPrice() == Ask) OpenNewOrder = false; //break; } Alert ("Order already exist Pirce ",OrderOpenPrice()," OrderType ",OrderType()," OrderLots ",OrderLots()); return(OpenNewOrder); }
но он пропускает некоторые ордера... не выставив их в нужном месте :) алгоритм ошибки не прослеживается :)
protr:
написал по принципу
но он пропускает некоторые ордера... не выставив их в нужном месте :) алгоритм ошибки не прослеживается :)
Ask == А если не будет такой котировки? первая котировка 1,1234 Вторая 1,1237 А нам нужно купить по 1,1235. Поэтому и пропускает
Evgeny Belyaev:
Ask == А если не будет такой котировки? первая котировка 1,1234 Вторая 1,1237 А нам нужно купить по 1,1235. Поэтому и пропускает
Верно. Приведу код из своего скальпера, он близок к теме. Смысл - не открывать кучу ордеров с близкими ценами открытия.
// функция ищет открытые ордера вблизи текущей цены, нужна для того, чтобы не открывать несколько ордеров рядом с ценой // если ордер найден - возвращает true, иначе false bool NearOrderExist(string symbol, int cmd, int magic, double price = 0) { if(price==0) { if(OP_BUY == cmd) price = MarketInfo(symbol, MODE_ASK); if(OP_SELL == cmd) price = MarketInfo(symbol, MODE_BID); } int total = OrdersTotal(); for(int n = 0; n < total; n++) if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) { if(OrderMagicNumber() == magic && OrderSymbol() == symbol && OrderType() == cmd) { if(MathAbs(OrderOpenPrice() - price) < m_priceStep) // m_priceStep - поле класса return true; } } return false; }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь