Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 375

 
Falx:

Всем доброго дня!

Подскажите пожалуйста команду для робота что бы на 1 свечу он не открывал больше 1-го ордера.

Даже если он забрал свой тэйк на этой свече - не открывать следующий ордер на этой же свече.

Сейчас так выходит что если условия индикаторов выполнены - открыть сделку.

После того как сделка по тэйку закрыта он на этой же свече сразу же открывает новую сделку и вот она уже не нужна мне и создает проблемы.

Ну или может подскажите где про это прочитать что бы самому разобраться.

Нужно строго так 1 свеча - 1 сделка.

Заранее благодарен!

Время открытия позиции, время закрытия позиции - свеча, на которой это время и время открытия этой свечи.
 
Falx:

Всем доброго дня!

Подскажите пожалуйста команду для робота что бы на 1 свечу он не открывал больше 1-го ордера.

Даже если он забрал свой тэйк на этой свече - не открывать следующий ордер на этой же свече.

Сейчас так выходит что если условия индикаторов выполнены - открыть сделку.

После того как сделка по тэйку закрыта он на этой же свече сразу же открывает новую сделку и вот она уже не нужна мне и создает проблемы.

Ну или может подскажите где про это прочитать что бы самому разобраться.

Нужно строго так 1 свеча - 1 сделка.

Заранее благодарен!

Ещё можно использовать флаг.

Объявить static bool переменную или переменную глобального уровня, пусть будет flag. Ордер открыли - flag = true, открылась новая свеча - flag = false и этот flag добавить к условию открытия ордера.

 
Alexey Viktorov:

Ещё можно использовать флаг.

Объявить static bool переменную или переменную глобального уровня, пусть будет flag. Ордер открыли - flag = true, открылась новая свеча - flag = false и этот flag добавить к условию открытия ордера.

Флаг нужно сохранять в глобальных терминала и восстанааливать при его перезапуске.
 
Artyom Trishkin:
Флаг нужно сохранять в глобальных терминала и восстанааливать при его перезапуске.

Это смотря на каком периоде торговля и возможность перезапуска терминала в течении одного бара открыть ордер и перезапустить терминал.

Не люблю я GV и стараюсь обходиться без них. При запуске советника, всё-равно надо собрать всю информацию по открытым ордерам, так почему-бы не восстановить значение флага при запуске? Это один вариант. Второй вариант начальное значение флага запрещает открытие ордеров и открывается разрешение только на следующем баре. Так получится, что даже если на текущем баре было открытие и перезапуск советника, то флаг по любому будет запрещать открытие ордеров до следующего бара.

Просто если давать совет с такими тонкостями, то самому думать ни о чём не надо будет. Соответственно не исключено возрастание количества вопросов... Зачем самому что-то решать... спроси на форуме и тебе дадут рабочий вариант. И останется только разместить продукт в маркете...

 
Alexey Viktorov:

Это смотря на каком периоде торговля и возможность перезапуска терминала в течении одного бара открыть ордер и перезапустить терминал.

Не люблю я GV и стараюсь обходиться без них. При запуске советника, всё-равно надо собрать всю информацию по открытым ордерам, так почему-бы не восстановить значение флага при запуске? Это один вариант. Второй вариант начальное значение флага запрещает открытие ордеров и открывается разрешение только на следующем баре. Так получится, что даже если на текущем баре было открытие и перезапуск советника, то флаг по любому будет запрещать открытие ордеров до следующего бара.

Просто если давать совет с такими тонкостями, то самому думать ни о чём не надо будет. Соответственно не исключено возрастание количества вопросов... Зачем самому что-то решать... спроси на форуме и тебе дадут рабочий вариант. И останется только разместить продукт в маркете...

:)
Привычка у меня - сразу глядеть в будущее.
По мне, именно из-за того, что всё равно флаги восстанавливать, уж лучше глянуть бар открытия позиции, и от него плясать, и не заморачиваться с флагами и их хранением.
 
Artyom Trishkin:
:)
Привычка у меня - сразу глядеть в будущее.
По мне, именно из-за того, что всё равно флаги восстанавливать, уж лучше глянуть бар открытия позиции, и от него плясать, и не заморачиваться с флагами и их хранением.

Именно по этой-же причине и женщины нам нравятся разные.

А какая разница, флаг или время открытия позиции??? Хоть как ни крути, а всё-равно что-то надо проверять...
 

Здравствуйте! Подскажите как возвращать количество последних убыточных ордеров, после профитных?

Вот моя часть кода что не правильно?

int GetProfitLoss()// Убыток по закрытым ордерам (количество последних убыточных ордеров)

{

    int Loss = 0;

    datetime lastCloseTime = 0;

    int cnt = OrdersHistoryTotal();

    for(int i=0; i < cnt; i++)

    { 

        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

        { 

        if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

        {

            lastCloseTime = OrderCloseTime();    

       }

        if (OrderProfit()<0)

        {        

        Loss ++; 

        }              

        if(OrderProfit()>0) 

        {   

             break;   // Выход из цикла на первом встретившемся прибыльном             }

         }

        }

      }

    }

    return(Loss);

}

 
Falx:

Всем доброго дня!

Подскажите пожалуйста команду для робота что бы на 1 свечу он не открывал больше 1-го ордера.

Даже если он забрал свой тэйк на этой свече - не открывать следующий ордер на этой же свече.

Сейчас так выходит что если условия индикаторов выполнены - открыть сделку.

После того как сделка по тэйку закрыта он на этой же свече сразу же открывает новую сделку и вот она уже не нужна мне и создает проблемы.

Ну или может подскажите где про это прочитать что бы самому разобраться.

Нужно строго так 1 свеча - 1 сделка.

Заранее благодарен!

Функция NumberOfBarCloseLastPos().

Эта функция возвращает номер бара закрытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULLозначает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

Функция NumberOfBarOpenLastPos().

Эта функция возвращает номер бара открытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULLозначает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

Дальше используя эти функции проверяйте нужное вам условие.

 

Пожалуйста помогите.

Нужно прикрутить к роботу следующую функцию:

После открытия сделки, через 40 секунд если прибыль больше 15 пунктов, то сделка закрывается моментально, если меньше, то тейкпрофит перемещается на уровень прибыли 15 пунктов.

Заранее благодарю.

 
Vladimir Zubov:

Функция NumberOfBarCloseLastPos().

Эта функция возвращает номер бара закрытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULLозначает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

Функция NumberOfBarOpenLastPos().

Эта функция возвращает номер бара открытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULLозначает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

Дальше используя эти функции проверяйте нужное вам условие.


Большое вам человеческое Аригато!

Буду вникать!! 

Причина обращения: