[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 603

 
rigonich:

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


Спасибо за ответ, но он мне не очень помог, еще раз выкладываю проблему, может у кого-то еще есть какие-то мысли по этому поводу???

Добрый день! Помогите пожалуйста, не могу понять почему открываются ненужные ордера ((, на скрине обведены красным, код прилагается...

Файлы:
 
rigonich:

Если так, тогда это вопрос к разработчикам справки. 


разработчики тут оказались не причем. :__

вместо ( Hour()>=10 || Hour()<20 )  надо было сделать простое  Hour()>=10 && Hour()<20

 

и все заработало 

 
ребята, подскажите, как сделать так чтобы тестер вместе со сделками в окне визуализации прорисовывал еще и используемые в советнике индикаторы ?
 

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

т.е. учет уже закрытых (автоматом) сделок .

 
lottamer:

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

т.е. учет уже закрытых (автоматом) сделок .


https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page4#434230

Функция isCloseLastPosByTake().

Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
  • //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
    //+----------------------------------------------------------------------------+
    //|  Версия   : 19.05.2008                                                     |
    //|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
    //+----------------------------------------------------------------------------+
    //|  Параметры:                                                                |
    //|    sy - наименование инструмента   (""   - любой символ,                   |
    //|                                     NULL - текущий символ)                 |
    //|    op - операция                   (-1   - любая позиция)                  |
    //|    mn - MagicNumber                (-1   - любой магик)                    |
    //+----------------------------------------------------------------------------+
    bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
      datetime t;
      double   ocp, otp;
      int      dg, i, j=-1, k=OrdersHistoryTotal();
    
      if (sy=="0") sy=Symbol();
      for (i=0; i<k; i++) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
          if (OrderSymbol()==sy || sy=="") {
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
                if (mn<0 || OrderMagicNumber()==mn) {
                  if (t<OrderCloseTime()) {
                    t=OrderCloseTime();
                    j=i;
                  }
                }
              }
            }
          }
        }
      }
      if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
        dg=MarketInfo(sy, MODE_DIGITS);
        if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
        ocp=NormalizeDouble(OrderClosePrice(), dg);
        otp=NormalizeDouble(OrderTakeProfit(), dg);
        if (ocp==otp) return(True);
      }
      return(False);
    }

 
BeerGod:

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page4#434230

Функция isCloseLastPosByTake().

Эта функция возвращает флаг закрытия последней позиции по тейку. Флаг поднят - True - сработал TakeProfit. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:

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




Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...

 

вот только я еще не разу не пользовался # includ-ом.... 

 не поясните в двух словах?

сверху пишу   # include (имя файл mqh)

 

а вот в коде? просто где нужно вставить  польз.функ ? например 

GetTypeLastClosePos ();

а что дальше ?

вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?

 

int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}

 OrderType() ? 

т.е. дальше if (OrderType() ==TRUE )  сделать то-то и то-то... так?

 
а чем функции для тестера отличаются от таковых для он-лайн торговли?
 
Теоретически обработкой ошибок при взаимодействии с торговым сервером.
 
lottamer:


Спасибо, я тут сам наткнулся на Библиотеки КИМА..(товарищ Ким видимо как МАРКС форексного мира - написал КАПИТАЛ...и мы все его теперь цитируем (т.е.вставляем в свои советники)) ... там есть "флаги" последних сделок в разных вариациях...

 

вот только я еще не разу не пользовался # includ-ом.... 

 не поясните в двух словах?

сверху пишу   # include (имя файл mqh)

 

а вот в коде? просто где нужно вставить  польз.функ ? например 

GetTypeLastClosePos ();

а что дальше ?

вот из этого ЧТО ИМЕННО мне вернет ТИП позиции?

 

 OrderType() ? 

т.е. дальше if (OrderType() ==TRUE )  сделать то-то и то-то... так?

Функции нужно вставлять после return(0);

Функция GetTypeLastClosePos() вернет 0 если был бай и 1 если сэлл или -1 если в истории ничего нет.

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if (isCloseLastPosByTake()==true) Comment("Профит"); else Comment("ХЗ");   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
BeerGod:

Функции нужно вставлять после return(0);

Функция GetTypeLastClosePos() вернет 0 если был бай и 1 если сэлл или -1 если в истории ничего нет.



понял, спасибо.

 а все-таки, если функция находится в #include-файле, тогда как ею распорядиться? 

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