Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Установил MetaTrader 5? Узнай о нем подробно!
protr
358
protr 2015.11.26 18:56 
Здравствуйте ... безуспешно искал советник по выставлению сетки виртуальных ордеров. Может кто поможет. Спасибо.
Vladimir Karputov
Модератор
45584
Vladimir Karputov 2015.11.26 19:05  
protr:
Здравствуйте ... безуспешно искал советник по выставлению сетки виртуальных ордеров. Может кто поможет. Спасибо.
Может не там искали? Поиск по слову "сетка".
protr
358
protr 2015.11.26 22:12  
Karputov Vladimir:
Может не там искали? Поиск по слову "сетка".
Спасибо Вам за ответ. я искал там но к сожалению не нашел версии выставляющей виртуальные ордера которые открываются по достижении цены заданного уровня. 
protr
358
protr 2015.11.26 23:40  
Может кто то подскажет как выставить единичный виртуальный отложенный ордер?
Alexey Volchanskiy
16755
Alexey Volchanskiy 2015.11.27 02:12  
protr:
Может кто то подскажет как выставить единичный виртуальный отложенный ордер?
Для этого надо написать простенький советник на 30 строчек. Это если ордер один. 
protr
358
protr 2015.11.27 09:43  
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
12974
Evgeny Belyaev 2015.11.27 11:16  
protr:

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

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

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

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