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

 
Rosh писал(а) >>

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

Спасибо за оперативный ответ. А в 5-й версии Метатрейдера будет?

 
KimIV, а нет в Вашей коллекции, скрипта, который закрывал бы одной командой все открыте оредар: buy, sell, buystop, sellstop, buylimit, selllimit - принудительно, циклично, чтобы закрылось без ошибок и все???
 

http://forum.alpari-idc.ru/showpost.php?p=368730&postcount=24

Нашел уже здесь.

 
KimIV, а нет в вашей коллекции скрипта, наподобее вот этого -   ByMarketBuySymbols и ByMarketSellSymbols, только общего, чтобы допустим по скрипту открывалось 5 позий на бай и 2 на селл?
 
Уважаемый KimIV,

Большое Вам спасибо за нужную работу.

Пожелание: если возможно, в первом посте вывесить и обновлять список Ваших функций/скриптов с ссылками на соответствующие страницы ветки и кратким описанием. Тогда будет супер-tool! А то кто-то где-то про что-то "пошлёт к Киму" а потом тут листаeш долго, чтобы найти...

 

Функция MovingInWL().

Выполняет перемещение ценового уровня StopLoss открытых позиций в безубыток. Функция MovingInWL() принимает следующие необязательные параметры:

  • sy - Наименование инструмента. "" - любой символ, NULL - текущий символ. Значение по умолчанию "".
  • op - Торговая операция. Допустимые значения: -1, OP_BUY, OP_SELL. Значение по умолчанию -1 - любая операция.
  • mn - Идентификатор торговых операций, MagicNumber. Значение по умолчанию -1 - любой магик.

Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника):

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

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      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);
          }
        }
      }
    }
  }
}

ЗЫ. Советник с примером использования функции MovingInWL() можно взять здесь.

 
mamma писал(а) >>
если возможно, в первом посте вывесить и обновлять список Ваших функций/скриптов с ссылками на соответствующие страницы ветки и кратким описанием.

На первой странице уже невозможно...

Выложу здесь... Если пост для обновления заблокируется, то буду выкладывать заново. Так что следите за веткой :-)

Файлы:
f_kimiv_1.rar  11 kb
 

Функция SimpleTrailing().

Выполняет перемещение ценового уровня StopLoss открытых позиций по алгоритму TrailingStop. Функция SimpleTrailing() принимает следующие необязательные параметры:

  • sy - Наименование инструмента. "" - любой символ, NULL - текущий символ. Значение по умолчанию "".
  • op - Торговая операция. Допустимые значения: -1, OP_BUY, OP_SELL. Значение по умолчанию -1 - любая операция.
  • mn - Идентификатор торговых операций, MagicNumber. Значение по умолчанию -1 - любой магик.

Кроме того, функция SimpleTrailing() предполагает наличие глобальных переменных (внешних параметров скрипта или советника):

  • bool TSProfitOnly - Переключатель зоны, в которой трал начинает свою работу. Если True, то трал начнёт работу только после того, как профит позиции достигнет значения TStop.Buy/Sell+TrailingStep пунктов. Если False, то советник будет просто следить за тем, чтобы стоп позиции относительно текущей цены всегда был не далее, чем TStop.Buy/Sell+TrailingStep пунктов. Другими словами при True советник работает только в профитной зоне позиции, а при False и в отрицательной.
  • int TStop.Buy - Размер трала в пунктах для покупок.
  • int TStop.Sell - Размер трала в пунктах для продаж.
  • int TrailingStep - Шаг трала в пунктах. Необходим для того, чтобы не мучить дилера частыми запросами.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 11.09.2008                                                     |
//|  Описание : Сопровождение позиций простым тралом                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void SimpleTrailing(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)) {
        po=MarketInfo(OrderSymbol(), MODE_POINT);
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pp=MarketInfo(OrderSymbol(), MODE_BID);
            if (!TSProfitOnly || pp-OrderOpenPrice()>TStop.Buy*po) {
              if (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po) {
                ModifyOrder(-1, pp-TStop.Buy*po, -1);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            pp=MarketInfo(OrderSymbol(), MODE_ASK);
            if (!TSProfitOnly || OrderOpenPrice()-pp>TStop.Sell*po) {
              if (OrderStopLoss()>pp+(TStop.Sell+TrailingStep-1)*po || OrderStopLoss()==0) {
                ModifyOrder(-1, pp+TStop.Sell*po, -1);
              }
            }
          }
        }
      }
    }
  }
}

ЗЫ. Советник с примером использования функции SimpleTrailing() можно взять здесь.

 

//------- Подключение внешних модулей -----------------------------------------+

#include "b-Positions.mqh" // Работа с позициями

Где найти этот файл?

 
beginner писал(а) >>

//------- Подключение внешних модулей -----------------------------------------+

#include "b-Positions.mqh" // Работа с позициями

Где найти этот файл?

здесь

Причина обращения: