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

 

Функция IIFc().

Очень удобная функция в плане построения развилок. Если так, то такой цвет. А если не так, то другой цвет. Функция IIFc() принимает три обязательных параметра:

  • condition - Логическое выражение. Оно может быть истинным или ложным.
  • ifTrue - Цвет, который будет возвращён функцией IIFc(), если выражение condition истинно.
  • ifFalse - Цвет, который будет возвращён функцией IIFc(), если выражение condition ложно.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 18.07.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 

Функция IIFd().

Аналогичное удобство для вещественных чисел. Если так, то такое вещественное число. А если не так, то другое число. Функция IIFd() принимает три обязательных параметра:

  • condition - Логическое выражение. Оно может быть истинным или ложным.
  • ifTrue - Вещественное число, которое будет возвращено функцией IIFd(), если выражение condition истинно.
  • ifFalse - Вещественное число, которое будет возвращено функцией IIFd(), если выражение condition ложно.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
double IIFd(bool condition, double ifTrue, double ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 

Функция IIFi().

Аналогичное удобство для целых чисел. Если так, то такое целое число. А если не так, то другое число. Функция IIFi() принимает три обязательных параметра:

  • condition - Логическое выражение. Оно может быть истинным или ложным.
  • ifTrue - Целое число, которое будет возвращено функцией IIFi(), если выражение condition истинно.
  • ifFalse - Целое число, которое будет возвращено функцией IIFi(), если выражение condition ложно.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
int IIFi(bool condition, int ifTrue, int ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 

Функция IIFs().

Аналогичное удобство для строк. Если так, то такая строка. А если не так, то другая строка. Функция IIFs() принимает три обязательных параметра:

  • condition - Логическое выражение. Оно может быть истинным или ложным.
  • ifTrue - Строка, которая будет возвращена функцией IIFs(), если выражение condition истинно.
  • ifFalse - Строка, которая будет возвращена функцией IIFs(), если выражение condition ложно.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 

Пример использования функции IIFc().

Если заданный ценовой уровень выше текущего Bid, то на заданный ценовой уровень установить горизонтальную линию синего цвета, иначе красного.

extern double p1=1.36;
void start() {
  color cl=IIFc(p1>Bid, Blue, Red);
  SetHLine(cl, "", p1);
}

Без использования функции IIFc() вышеуказанный код выглядел бы следующим образом:

extern double p1=1.36;
void start() {
  color cl;
  if (p1>Bid) cl=Blue; else cl=Red;
  SetHLine(cl, "", p1);
}

P.S. Во вложении скрипт для тестирования функции IIFc().

Файлы:
test_iifc.mq4  3 kb
 

Пример использования функции IIFs().

Функцию IIFs() я в подавляющем большинстве случаев использую в блоке комментирования работы советника. Например, при выводе значений внешних параметров советника.

extern int StopLoss=50;
extern int TakeProfit=0;
void start() {
  Comment(IIFs(StopLoss<=0, "", "StopLoss="+DoubleToStr(StopLoss, 0)+"п.  ")
         ,IIFs(TakeProfit<=0, "", "TakeProfit="+DoubleToStr(TakeProfit, 0)+"п.")
         );
}

P.S. Во вложении скрипт для тестирования функции IIFs().

Файлы:
test_iifs.mq4  2 kb
 

Пример использования функции IIFd().

Функцию IIFd() удобно использовать при инициализации некоторых переменных. Например, ценовые уровни стоп и тейк перед открытием позиции.

extern int StopLoss=50;
extern int TakeProfit=0;
void start() {
  double ll=0.1;
  double sl=IIFd(StopLoss  >0, Ask-StopLoss  *Point, 0);
  double tp=IIFd(TakeProfit>0, Ask+TakeProfit*Point, 0);

  OpenPosition(NULL, OP_BUY, ll, sl, tp);
}

Без функции IIFd() подобный код выглядел бы следующим образом:

extern int StopLoss=50;
extern int TakeProfit=0;
void start() {
  double ll=0.1, sl, tp;
  if (StopLoss  >0) sl=Ask-StopLoss  *Point; else sl=0;
  if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;

  OpenPosition(NULL, OP_BUY, ll, sl, tp);
}
 

Пример использования торговых функций в тестере.

Чтобы показать, как можно применять торговые функции, предназначенные для использования только в тестере, я написал свинговый советник e_ForTester. Сигналом на вход является пара однонаправленных свечей. Если свечи направлены вверх, то советник закрывает покупку и продаёт. Если свечи направлены вниз, то советник закрывает продажу и покупает. В рынке постоянно только одна позиция. Выход выполняется либо по противоположному сигналу, либо по стопу/тейку. Стоп и тейк - это два внешних параметра, которые можно оптимизировать.
В советнике используются следующие функции, предназначенные только для тестера:

  • ClosePosBySelect() - Закрытие одной предварительно выбранной позиции.
  • CountOrders() - Рассчитывает количество ордеров по типам.
  • OpenPosition() - Открытие позиции.

Сделки советника e_ForTester на графике EURUSD H1:

P.S. Во вложении:

  • e_ForTester.mq4 - Советник, предназначенный для использования только в тестере.
  • e_ForTester.rar - Отчёт тестера.
  • e_ForTester.txt - Лог тестера.
Файлы:
 
Функции, предназначенные для использования только в тестере MetaTrader 4, полностью опубликованы. Поэтому выложена соответствующая библиотека b-ForTest.
 
Читал книгу В.Якимкин. "Рынок форекс - ваш путь к успеху" и наткнулся на такие строчки "...дифференциал от (DJI x Nikkei)..." Подскажите Игорь это возможно реализовать и вывести в форме индикатора...
Причина обращения: