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

 
zennon писал(а) >>
Фунция MovingInWL() тупо перебирает все открытые позиции невзирая на входные фильтры sy,op,mn. Это касается и прикрепленного для примера советника (страница 55).

Андрей, благодарю! Исправил...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.04.2009                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (OrderType()==OP_BUY) {
            if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_BID);
              if (pp-OrderOpenPrice()>LevelProfit*po) {
                ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_ASK);
              if (OrderOpenPrice()-pp>LevelProfit*po) {
                ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
              }
            }
          }
        }
      }
    }
  }
}
Советник e-MovingInWL2.mq4 тоже исправлен.
 

Добрый день Игорь!

Спасибо за то, что Вы уделяете столько времени для форума. Игорь, не знаете ли Вы возможности получать информацию о поступающих запросах на покупку / продажу - "глубина рынка".

 
Alex30 писал(а) >>
Игорь, не знаете ли Вы возможности получать информацию о поступающих запросах на покупку / продажу - "глубина рынка".

нет

 
Вопрос к бывалым: может кто подскажет почему у меня в демо xMeterMTF.mq4 индикатор показывает все нормально, а в реале по евро пустоту(может ли из-за того что в реали пара eur/usd- числится как eur/usddpro)если из-за этого то можно ли исправить
Файлы:
xmetermtf.mq4  8 kb
xmeter.rar  34 kb
 

Функция isTradeTimeString().

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

  • TimeBegin - Строка в формате "ЧЧ:ММ", задаёт время начала торговли. Значение по умолчанию - "00:00".
  • TimeEnd - Строка в формате "ЧЧ:ММ", задаёт время окончания торговли. Значение по умолчанию - "00:00".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
  datetime dtBegin, dtEnd;        // Время начала и окончания работы
  int      hc, he;                // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);
  hc     =TimeHour(TimeCurrent());
  he     =TimeHour(dtEnd);
  if (dtBegin>=dtEnd) {
    if (hc>=he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
  }

  if (TimeCurrent()>=dtBegin && TimeCurrent()<=dtEnd) return(True);
  else return(False);
}
 

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

  1. Временной отрезок внутри суток. Текущее время торгового сервера внутри отрезка и пусть оно равно "07:50".
    if (isTradeTimeString("06:00", "09:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  2. Временной отрезок внутри суток. Текущее время торгового сервера вне отрезка и пусть оно равно "07:50".
    if (isTradeTimeString("12:00", "16:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  3. Временной отрезок включает границу суток. Текущее время торгового сервера внутри отрезка и пусть оно равно "07:50".
    if (isTradeTimeString("21:15", "09:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  4. Временной отрезок включает границу суток. Текущее время торгового сервера вне отрезка и пусть оно равно "07:50".
    if (isTradeTimeString("22:00", "05:30")) Message("Торгуем...");
    else Message("Отдыхаем...");

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

Файлы:
 
KimIV >>:

Игорь, в индикаторе i-Sessions периодически появляются глюки: возникают и исчезают области ещё не открывшихся сесий...

 
DR12CED >>:

Игорь, в индикаторе i-Sessions периодически появляются глюки: возникают и исчезают области ещё не открывшихся сессий...

Упс... Забираю это обратно... они тоже пригодятся с точки зрения ожидания событий... Пардон..., плиз...

 
KimIV >>:

Функция isTradeTimeString().

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

  • TimeBegin - Строка в формате "ЧЧ:ММ", задаёт время начала торговли. Значение по умолчанию - "00:00".
  • TimeEnd - Строка в формате "ЧЧ:ММ", задаёт время окончания торговли. Значение по умолчанию - "00:00".

А можно так штобы переменные были не "string" а "int". Чтобы в тестере перебирать?

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

 
vasilyt писал(а) >>
А можно так штобы переменные были не "string" а "int". Чтобы в тестере перебирать?

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