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

 

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

Не могли бы вы сказать каким оператором в mql4 заменяется вот этот оператор - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3). 

Заранее спасибо.

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

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

Сколько не смотрел функций и операторов - не могу найти, а если есть - то увидеть функцию,

которая бы модифицировала разом все открытые позиции, а не по одной выбраной на каждом тике .

Если вас не затруднит - подскажите пожалуйста.

 
KimIV >>:

В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанные с их использованием. Каждую функцию буду публиковать двумя постами. В первом посте код функции, во втором примеры использования и небольшие пояснения. Ко второму посту буду иногда прицеплять код скрипта для реального тестирования функции с отображением результатов.

Начну с функций, предназначенных для работы с ордерами, по просьбе Lukyanov в теме "Как два советника одновременно запустить" в конце.

Пусть первой будет функция установки ордера (версия для тестера МТ4):

здравствуйте Игорь. вы не знакомы с терминалом альтер трейдер ? если да то может подскажете ответы на 3 -4 волнующих меня вопроса ?

 
ipm писал(а) >>
Игорь. Доброго времени суток.
Может черкнете простую для вас задачку:
установить при каком значении цены сигнальная линия пересечет MACD, или, другими словами, гистограмма MACD станет равной нулю.

Здравствуйте, Олег!

Практически я такие задачи не решал. Да и теоритически-то смутно представляю как это делается. Наверно, значения макдака берутся за игрек, а цена за икс и тогда функция y=f(x) будет представлять зависимость значений макдака от цены. Если бы было так просто, то можно было бы перевернуть функцию y=f(x), выразив икс через игрек x=F(y). Но сложность в том, что функция y=f(x) зависит не от одного икс, а от нескольких. Эти лекции я в университете прогулял :-)

 
Duke3D писал(а) >>

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

Не могли бы вы сказать каким оператором в mql4 заменяется вот этот оператор - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Заранее спасибо.

Видимо, это будет OrderType().

 
mozg писал(а) >>
А подскажите пожалуйста, как закрыть ордер по цене закрытия текущего бара? Тоесть закрываеться бар вместе с ордером.
static datetime prevTimeOpen=0
if (prevTimeOpen>0 && prevTimeOpen<Time[0]) {
  for (цикл перебора позиций) {
    if (выбрана позиция, которую надо закрыть) {
      OrderClose(...);
    }
  }
}
prevTimeOpen=Time[0];
 
amur писал(а) >>

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

Сколько не смотрел функций и операторов - не могу найти, а если есть - то увидеть функцию,

которая бы модифицировала разом все открытые позиции, а не по одной выбраной на каждом тике .

Если вас не затруднит - подскажите пожалуйста.

Вряд-ли такие действия будут целесообразны. Ведь у каждой позиции обычно ставятся индивидуальные параметры. Поэтому выбирается одна, конкретная...

А что именно Вы хотите модифицировать?

 

Функция NameDayOfWeek()

Возвращает наименование дня недели по номеру, передаваемому в качестве параметра:

  • ndw - Номер дня недели. Обязательный параметр.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование дня недели                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ndw - номер дня недели                                                  |
//+----------------------------------------------------------------------------+
string NameDayOfWeek(int ndw) {
  if (ndw==0) return("Воскресенье");
  if (ndw==1) return("Понедельник");
  if (ndw==2) return("Вторник");
  if (ndw==3) return("Среда");
  if (ndw==4) return("Четверг");
  if (ndw==5) return("Пятница");
  if (ndw==6) return("Суббота");
}
 

Функция NormalizeLot().

Данная функция возвращает нормализованное значение торгуемого лота. Кроме нормализации функция ещё и укладывает размер лота в пределы, установленные дилинговым центром (проверяются минимальное и максимальное значения лота, а также шаг изменения лота). Функция NormalizeLot() принимает следующие параметры:

  • lo - Нормализуемое значение лота. Обязательный параметр.
  • ro - Способ округления. False - в меньшую сторону, True - в большую сторону. Значение по умолчанию - False - в меньшую сторону.
  • sy - Наименование торгового инструмента. NULL или "" - текущий символ. Значение по умолчанию - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}

ЗЫ. Во вложении скрипт для тестирования функции NormalizeLot().

Файлы: