Полезные функции от KimIV - страница 73

 
Функция возвращает фрактал по его номеру. Нумерация для верхних и нижних фракталов раздельная. Может пригодиться при разработке советников, которые для принятия решения о входе в рынок анализируют взаимное расположение какого то количества последних фракталов. Сделана путём переделки функции KimIV.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) {
    if(mode==MODE_LOWER){
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iLow(sy,tf,i));
     } 
    }
    if(mode==MODE_UPPER){
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iHigh(sy,tf,i));
      }
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
 

Здравствуйте Игорь!

Пытаюсь изучить язык MQL4 и, за недостаточностью описания операторов языка, одна проблема поставила меня просто в тупик. Есть индикатор, в нем 8 буферов накопления данных, мне нужно чтобы на выбранном мной таймфрейме он отображался с периодом следующего таймфрейма. Для этого служит оператор iCustom(). Но он возвращает значение double, и я никак не могу понять как возможно,и возможно ли, в данном случае использовать iCustom. 

Очень надеюсь на Вашу помощь.

 

Здравствуйте Игорь! И всем Добрый день!

Меня интересует какой код нужно внести чтобы советник при закрытии сделки в этот день больше не совершал никаких сделок...


Нашел такой, но он не работает в тестере стратегий, хотелось бы потестить, каким кодом можно заменить?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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;
  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));
}

Тогда в условия входа нужно вставть

if (NumberOfBarCloseLastPos(NULL, 1440,-1, Magic)  !=0) {
                                                      }
 
LeoV писал(а) >>

Здравствуйте Игорь!

Есть ли у Вас скрипт, который модифицирует все открытые позиции по объёму(лотам) на всех инструментах на определённое колличество процентов? Как в сторону увеличения, так и в сторону уменьшения с сохранением Мэджик Номера для каждой позиции?

Здравствуйте, Леонид!

Не было... написал... ChangeLots

 
KimIV писал(а) >>

Здравствуйте, Леонид!

Не было... написал... ChangeLots

Игорь! Большое спасибо! Мне это очень пригодится для моего памма. )))))
 

Здравствуйте Игорь!

При использовании Вашего советника "e-SampleCase",при установке стопа

меньше 100(10 пунктов),у меня тестер выдаёт ошибку 130.Если увеличить

стоп,всё работает нормально.Почему?

Ответьте пожалуйста!

 
6232 >>:

При использовании Вашего советника "e-SampleCase",при установке стопа

меньше 100(10 пунктов),у меня тестер выдаёт ошибку 130.Если увеличить

стоп,всё работает нормально.Почему?

Расширил ДЦ мин. коридор для установки стопов и тейков

 
BARS писал(а) >>

Расширил ДЦ мин. коридор для установки стопов и тейков

Спасибо!Всё понял.

 
6232 >>:

Здравствуйте Игорь!

При использовании Вашего советника "e-SampleCase",при установке стопа

меньше 100(10 пунктов),у меня тестер выдаёт ошибку 130.Если увеличить

стоп,всё работает нормально.Почему?

Ответьте пожалуйста!

это, вероятно, из-за введения пятого знака, на альпари кстати уведомляли что нужно увеличить размеры стопов в 10 раз, т.к. вашт 100 пунктов становятся 10-ю отсюда и ошибки на большенстве пар..

 
stalkervr писал(а) >>

Если вам не трудно обьясите как при помощи вашей функции

определить наличие и обьём открытой позиции, а также наличие и обьём установленных отложенных ордеров

Евгений, я нахожу постановку Вашего вопроса несколько избыточной, потому что ненулевой объём автоматически будет означать наличие.

Посмотрите функции:

  • GetAmountLotFromOpenPos(). Возвращает сумму лотов открытых позиций.
  • ExistOrdersByLot(). Возвращает флаг существования ордера по размеру лота.

Возможно, из них Вам удастся смастерить что-нибудь для себя и под себя.