Скачать MetaTrader 5

Сетка виртуальных ордеров

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
protr
358
protr  
Здравствуйте ... безуспешно искал советник по выставлению сетки виртуальных ордеров. Может кто поможет. Спасибо.
Vladimir Karputov
Модератор
61419
Vladimir Karputov  
protr:
Здравствуйте ... безуспешно искал советник по выставлению сетки виртуальных ордеров. Может кто поможет. Спасибо.
Может не там искали? Поиск по слову "сетка".
protr
358
protr  
Karputov Vladimir:
Может не там искали? Поиск по слову "сетка".
Спасибо Вам за ответ. я искал там но к сожалению не нашел версии выставляющей виртуальные ордера которые открываются по достижении цены заданного уровня. 
protr
358
protr  
Может кто то подскажет как выставить единичный виртуальный отложенный ордер?
Alexey Volchanskiy
21012
Alexey Volchanskiy  
protr:
Может кто то подскажет как выставить единичный виртуальный отложенный ордер?
Для этого надо написать простенький советник на 30 строчек. Это если ордер один. 
protr
358
protr  
Alexey Volchanskiy:
Для этого надо написать простенький советник на 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);
} 

 но он пропускает некоторые ордера... не выставив их в нужном месте :) алгоритм ошибки не прослеживается :) 

Evgeny Belyaev
17478
Evgeny Belyaev  
protr:

написал по принципу 

 но он пропускает некоторые ордера... не выставив их в нужном месте :) алгоритм ошибки не прослеживается :) 

Ask == А если не будет такой котировки? первая котировка 1,1234   Вторая 1,1237   А нам нужно купить по 1,1235. Поэтому и пропускает
Alexey Volchanskiy
21012
Alexey Volchanskiy  

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;
    }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий