Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Робот дублирует сделки

    Мне нужно было создать робот для бинарных опционов по своему индикатору. Нашел шаблон и адаптировал его под индикатор, но есть проблема, он периодически дублирует ордера (то есть появляется сигнал на BUY, он открывает ордер на BUY и через несколько секунд открывает еще один BUY, а то и не один. то есть получается по два ордера на разных уровнях).

    Подскажите что не так, вроде лишнего то ни че нету...
    MQL код:
    //+------------------------------------------------------------------+
    //| Option.mq4 |
    //| Copyright 2015, AM2 |
    //| [url]http://www.forexsystems.biz[/url] |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2015, AM2"
    #property link "http://www.forexsystems.biz"
    #property description "Simple expert advisor"

    // Переменные индикатора
    int i;
    double order_line;

    //--- Inputs
    extern double Lot = 50.0; // ставка в валюте
    extern string Expiration = "1"; // время истечения в минутах
    extern int Magic = 1988; // магик
    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    Comment("");
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    Comment("");
    }

    //+------------------------------------------------------------------+
    //| OnTick function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    //################################################## ########

    // ТУТ ПРОПИСЫВАЮ КОД ИНДИКАТОРА ДЛЯ ОТКРЫТИЯ СДЕЛОК
    //Пример
    if(Close[i+1] > Open[i+1]) order_line = 5;
    else if(Close[i+1] < Open[i+1]) order_line = -5;
    else order_line = 0;
    //################################################## ########

    //+------------------------------------------------------------------+
    //| Система открытия ордеров |
    //+------------------------------------------------------------------+
    int res;
    double ask=MarketInfo(OrderSymbol(),MODE_ASK);
    double bid=MarketInfo(OrderSymbol(),MODE_BID);
    //--- buy
    if(order_line == 5)
    {
    res=OrderSend(Symbol(),OP_BUY,Lot,ask,0,0,0,Expira tion,Magic,0,Blue);
    return;
    }
    //--- sell
    if(order_line == -5)
    {
    res=OrderSend(Symbol(),OP_SELL,Lot,bid,0,0,0,Expir ation,Magic,0,Red);
    return;
    }

    //---
    }
    //+------------------------------------------------------------------+
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от UniFace Посмотреть сообщение
    ...
    MQL код:
    //+------------------------------------------------------------------+
    //| Система открытия ордеров |
    //+------------------------------------------------------------------+
    int res;
    double ask=MarketInfo(OrderSymbol(),MODE_ASK);
    double bid=MarketInfo(OrderSymbol(),MODE_BID);
    //--- buy
    if(order_line == 5)
    {
    res=OrderSend(Symbol(),OP_BUY,Lot,ask,0,0,0,Expira tion,Magic,0,Blue);
    return;
    }
    //--- sell
    if(order_line == -5)
    {
    res=OrderSend(Symbol(),OP_SELL,Lot,bid,0,0,0,Expir ation,Magic,0,Red);
    return;
    }

    //---
    }
    //+------------------------------------------------------------------+
    Цены не нормализованные передаёте на сервер!
    Сообщение от UniFace Посмотреть сообщение
    MQL код:
    //Пример 
    if(Close[i+1] > Open[i+1]) order_line = 5;
    else if(Close[i+1] < Open[i+1]) order_line = -5;
    else order_line = 0;
    Странно, что он вообще на каждом тике вам ордера не открывает?! Кроме проверки сигнала на открытие других проверок нет! Например на количество открытых ордеров!
     
    "Правила рынка" (с)

    Комментарий

    • #3 Свернуть

      Сообщение от Viktor1987 Посмотреть сообщение
      Цены не нормализованные передаёте на сервер!

      Странно, что он вообще на каждом тике вам ордера не открывает?! Кроме проверки сигнала на открытие других проверок нет! Например на количество открытых ордеров!
      Вообщето открывает на каждом тике, да это пример кода был, на деле код другой. Вообщем я решил проблему обнулением сигнала после его открытия...

      MQL код:
      //+------------------------------------------------------------------+
      //| Система открытия ордеров |
      //+------------------------------------------------------------------+
      int res;
      double ask=MarketInfo(OrderSymbol(),MODE_ASK);
      double bid=MarketInfo(OrderSymbol(),MODE_BID);
      //--- buy
      if(order_line == 5)
      {
      res=OrderSend(Symbol(),OP_BUY,Lot,ask,0,0,0,Expira tion,Magic,0,Blue);
      order_line = 0;
      return;
      }
      //--- sell
      if(order_line == -5)
      {
      res=OrderSend(Symbol(),OP_SELL,Lot,bid,0,0,0,Expir ation,Magic,0,Red);
      order_line = 0;
      return;
      }

      //---
      }
       

      Комментарий

      • #4 Свернуть

        Сообщение от UniFace Посмотреть сообщение
        Вообщето открывает на каждом тике, да это пример кода был, на деле код другой. Вообщем я решил проблему обнулением сигнала после его открытия...
        И что помогло??? А на следующем тике сигнал ведь сохраниться и опять будет открыт ордер!
        Короче говоря, грааль палит не охото, выложил левый код, авось разберутся!
           
        "Правила рынка" (с)

        Комментарий

        • #5 Свернуть

          Сообщение от Viktor1987 Посмотреть сообщение
          И что помогло??? А на следующем тике сигнал ведь сохраниться и опять будет открыт ордер!
          Короче говоря, грааль палит не охото, выложил левый код, авось разберутся!
          Да нет, сам код открытия ордеров такой как есть, я же написал что исправил код, при получении сигнала - открывается ордер, а сигнал обнуляется, дабы избежать дублирования...

          MQL код:
           //--- buy 
          if(order_line == 5)
          {
          res=OrderSend(Symbol(),OP_BUY,Lot,ask,0,0,0,Expira tion,Magic,0,Blue);
          order_line = 0; // ВОТ ОБНУЛЕНИЕ СИГНАЛА ################################################## ####
          return;
          }
             

          Комментарий

          • #6 Свернуть

            Сообщение от UniFace Посмотреть сообщение
            я же написал что исправил код, при получении сигнала - открывается ордер, а сигнал обнуляется, дабы избежать дублирования...
            И что? Если в рынке ситуация сохранилась, то на следующем же тике твоя конструкция
            MQL код:

            if(Close[i+1] > Open[i+1]) order_line = 5;
            else if(Close[i+1] < Open[i+1]) order_line = -5;
            else order_line = 0;

            снова выдаст сигнал на открытие ордера. И снова будет дубляж... Так что ты не исправил, а всего лишь вставил "костыль", для некоторых случаев.

            Комментарий

            • #7 Свернуть

              Сообщение от ir0407 Посмотреть сообщение
              И что? Если в рынке ситуация сохранилась, то на следующем же тике твоя конструкция
              MQL код:

              if(Close[i+1] > Open[i+1]) order_line = 5;
              else if(Close[i+1] < Open[i+1]) order_line = -5;
              else order_line = 0;

              снова выдаст сигнал на открытие ордера. И снова будет дубляж... Так что ты не исправил, а всего лишь вставил "костыль", для некоторых случаев.
              Нет, это зависит от вида обработки сигналов индикатора, у меня допустим именно в этом случае сигналы обрабатываются по закрытию бара и открытию нового бара, то есть тики на сигнал не будут влиять, а если на следующем баре получиться сигнал то откроется новый ордер. Мне так и нужно было поэтому в данном случае все подошло как надо, а вообще это конечно самодельщина....
               

              Комментарий

              • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
              • #8 Свернуть

                Сообщение от UniFace Посмотреть сообщение
                в данном случае все подошло как надо
                Я же говорю, выложен не весь код))) как можно понять что есть ещё какие-то условия на обработку сигнала? Если хотите адекватных ответов, не стесняйтесь выложить код целиком, без изменений, ни кому не нужен ваш грааль, а вот ответы будут гораздо более точные и быстрые!
                 
                "Правила рынка" (с)

                Комментарий

                Сейчас онлайн

                working...
                X