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

 
KimIV >>:

На 76 странице...

спасибо

 

Функция isTradeTimeInt().

Данная функция возвращает флаг разрешения торговли по времени. Возвращаемое значение - истина или ложь. Функция isTradeTimeInt() по принципу распознавания временного интервала аналогична функции isTradeTimeString(), то есть время начала торговли может быть как больше (временной отрезок внутри суток) времени окончания, так и меньше (временной отрезок в разных сутках). Функция isTradeTimeInt() принимает следующие необязательные параметры:

  • hb - Число, задаёт часы времени начала торговли. Значение по умолчанию - 0.
  • mb - Число, задаёт минуты времени начала торговли. Значение по умолчанию - 0.
  • he - Число, задаёт часы времени окончания торговли. Значение по умолчанию - 0.
  • me - Число, задаёт минуты времени окончания торговли. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

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

  1. Временной отрезок внутри суток. Текущее время торгового сервера внутри отрезка и пусть оно равно "08:30".
    if (isTradeTimeInt(6, 0, 9, 30)) Message("Торгуем...");
    else Message("Отдыхаем...");
  2. Временной отрезок внутри суток. Текущее время торгового сервера вне отрезка и пусть оно равно "08:30".
    if (isTradeTimeInt(12, 0, 16, 30)) Message("Торгуем...");
    else Message("Отдыхаем...");
  3. Временной отрезок включает границу суток. Текущее время торгового сервера внутри отрезка и пусть оно равно "08:30".
    if (isTradeTimeInt(21, 15, 9, 30)) Message("Торгуем...");
    else Message("Отдыхаем...");
  4. Временной отрезок включает границу суток. Текущее время торгового сервера вне отрезка и пусть оно равно "08:30".
    if (isTradeTimeInt(22, 0, 5, 30)) Message("Торгуем...");
    else Message("Отдыхаем...");

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

Файлы:
 

Обновлённый список функций с краткими описаниями и ссылками...

Файлы:
f_kimiv.rar  12 kb
 
KimIV >>:

Функция isCloseLastPosByStop().

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


Здравствуйте

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

..........................................................

if ( isCloseLastPosByStop(NULL,OP_SELL, MagicNamber) == 0)
{
if ( (StochK_0<StochD_1) && (StochD_1 > 80) ) // 1ые усл продажи
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+SL*Point,0, "My EXP", MagicNamber,0,Green); // продаем

OrderSelect(0, SELECT_BY_POS);

if (OrderSelect(0, SELECT_BY_POS)==true )
Print("выбрал");
else
Print("не выбрал ошибка : ",GetLastError());
RefreshRates();
if((StochK_0<30)&& (StochD_1 < 30))
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
}
else
if ( isCloseLastPosByStop(NULL,OP_SELL, MagicNamber) == 1)
{
if ((StochK_0<StochD_1) && (StochK_0 < 60) && (StochD_1 < 60) ) //2ые усл продажи

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My EXP", MagicNamber,0,Green); //

...........................

 
KoZaNOStra писал(а) >>
Эксперт открывает позиции, но не закрывает.

Сделайте принты переменных StochK_0 и StochD_1. Может быть они принимают такие значения, которые не попадают под Ваши условия закрытия позиции.

 

to KimIV

Здравствуйте, не могли бы Вы помочь переделать данный кластерный индикатор в функцию с такой же прорисовкой и + возвратом значений скорости изменения ПАРЫ (верхний правый угол) по входному параметру - названию пары. Заранее благодарю.

Р.S..... мучаюсь уже неделю

Файлы:
cc_240.mq4  13 kb
 
а нет ли функции чтоб вывести новости на открытое окно валютной пары
 
А как выразить в коде, что в начале любого часа на первой секунде открываем две разнонаправленные позиции, а на последней секунде часа закрываем несработавший ордер?
 
VAM_ писал(а) >>
А как выразить в коде, что в начале любого часа на первой секунде открываем две разнонаправленные позиции, а на последней секунде часа закрываем несработавший ордер?

А если их нету, первой и последней секунды?