Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2011.10.21 14:11
Библиотеки

b-PSI@Trailing v.1.1 - библиотека для MetaTrader 4

Просмотров:
4692
Рейтинг:
голосов: 7

Давно "хотел", НО не "доходили" руки... :)
В свободном доступе "гуляет" множество функций и библиотек для трейлинга позиций, НО так чтобы было удобно ими пользоваться и был богатый выбор, я не встречал, хотя может быть просто плохо искал. Вот и решил сделать библиотеку для быстрого и удобного использования с советниками.
За основу взял набор функций от I_D и, чуть-чуть подправив, привёл в удобопользуемый вид.

Вот что получилось:

extern string SETUP_Trailing        = "=================== TRAILING ===================";
extern int    N_Trailling              = 0;          // Вариант используемого трейлинга
extern int    Trail_Period             = PERIOD_H1;  // Период (графика), на котором производим расчёты
extern bool   TrailLOSS_ON             = FALSE;      // Включение трейлинга на LOSS`e
extern int    TrailLossAfterBar        = 12;         // После какого по счёту бара (после открытия) начинаем тралить на ЛОССе
extern int    TrailStep                = 5;          // Шаг трейлинга
extern string Setup_TrailStairs     = "------------- N0 - TrailingStairs -------------";
extern int    TraillingStop            = 50;         // Скользящий тейк-профит, ноль чтобы отключить его
extern int    BreakEven                = 20;         // БезУбыток
extern string Setup_TrailByFractals = "---------- N1 - TraiillingByFractals ----------";
extern int    BarsInFractal            = 0;          // Количество баров в фрактале
extern int    Indent_Fr                = 0;          // Отступ (пп.) - расстояние от макс\мин свечи, на которое переносится SL (от 0)
extern string Setup_TrailByShadows  = "----------- N2 - TrailingByShadows ------------";
extern int    BarsToShadows            = 0;          // Количество баров, по теням которых необходимо трейлинговать (от 1 и больше)
extern int    Indent_Sh                = 0;          // Отступ (пп.) - расстояние от макс\мин свечи, на которое переносится SL (от 0)
extern string Setup_TrailUdavka     = "------------- N3 - TrailingUdavka -------------";
extern int    Level_1                  = 30;
extern int    Distance_1               = 60;
extern int    Level_2                  = 20;
extern int    Distance_2               = 80;
extern int    Level_3                  = 10;
extern string Setup_TrailByTime     = "------------- N4 - TrailingByTime -------------";
extern int    Interval                 = 60;         // Интервал (минут), с которым передвигается SL
extern int    TimeStep                 = 5;          // Шаг трейлинга (на сколько пунктов) перемещается SL
extern string Setup_TrailByATR      = "------------- N5 - TrailingByATR --------------";
extern int    ATR_Period1              = 9;          // период первого ATR (больше 0; может быть равен ATR_Period2, но лучше отличен от последнего)
extern int    ATR_shift1               = 2;          // для первого ATR сдвиг "окна" (неотрицательное целое число)
extern int    ATR_Period2              = 14;         // период второго ATR (больше 0)
extern int    ATR_shift2               = 3;          // для второго ATR сдвиг "окна", (неотрицательное целое число)
extern double ATR_coeff                = 2.5;        // 
extern string Setup_TrailRatchetB   = "------------ N6 - TrailingRatchetB ------------";
extern int    ProfitLevel_1            = 20;
extern int    ProfitLevel_2            = 30;
extern int    ProfitLevel_3            = 50;
extern int    StopLevel_1              = 2;
extern int    StopLevel_2              = 5;
extern int    StopLevel_3              = 15;
extern string Setup_TrailByPriceCh  = "--------- N7 - TrailingByPriceChannel ---------";
extern int    BarsInChannel            = 10;        // период (кол-во баров) для рассчета верхней и нижней границ канала
extern int    Indent_Pr                = 15;        // отступ (пунктов), на котором размещается стоплосс от границы канала
extern string Setup_TrailByMA       = "-------------- N8 - TrailingByMA --------------";
extern int    MA_Period                = 14;        // 2-infinity, целые числа
extern int    MA_Shift                 = 0;         // целые положительные или отрицательные числа, а также 0
extern int    MA_Method                = 1;         // 0 (MODE_SMA), 1 (MODE_EMA), 2 (MODE_SMMA), 3 (MODE_LWMA)
extern int    MA_Price                 = 0;         
// 0 - (PRICE_CLOSE), 1 - (PRICE_OPEN), 2 - (PRICE_HIGH), 3 - (PRICE_LOW), 4 - (PRICE_MEDIAN), 5 - (PRICE_TYPICAL), 6 - (PRICE_WEIGHTED)
extern int    MA_Bar                   = 0;         // 0-Bars, целые числа
extern int    Indent_MA                = 10;        // 0-infinity, целые числа
extern string Setup_TrailFiftyFifty = "----------- N9 - TrailingFiftyFifty -----------";
extern double FF_coeff                 = 0.05;      // "коэффициент поджатия", в % от 0.01 до 1 (в последнем случае SL будет перенесен 
                                                    // (если получится) вплотную к тек. курсу и позиция, скорее всего, сразу же закроется)
extern string Setup_TrailKillLoss   = "----------- N10 - TrailingKillLoss ------------";
extern double SpeedCoeff               = 0.05;      // "скорость" движения курса
extern string Setup_TrailPips       = "--------------- N11 - TrailPips ---------------";
extern int    Average_Period           = PERIOD_D1; // За какой период вычисляем среднюю свечу текущего периода

Напомню, как сделать так, чтобы библиотека работала:

  • саму библиотеку кладёте в папку c:\Program Files\terminal\experts\include\
  • в теле советника прописываете обращение к этой библиотеке
#include      <b-PSI@TrailSymbol.mqh>                        // Библиотека трейлинга
  • в любой функции советника, в которой перебираются открытые советником ордера, прописываете одну строчку.

ПРИМЕР:

    for (int li_int = OrdersTotal - 1; li_int >= 0; li_int--)
    {
        if (!OrderSelect (li_int, SELECT_BY_POS, MODE_TRADES))
        continue;
        //----------------//
        какой-то очень нужный вам код
        //----------------//
        //---- Осуществляем трейлинг позиции
        fTrail_Position (OrderTicket());
    }

И в "Добрый путь"!!!

Теперь даже ничего не соображающий в программировании, НО не пасующий перед трудностями, пользователь, путём нехитрых манипуляций сможет ею воспользоваться. ;)

P.S. Библиотека работает только с одним символом и только один вид трейлинга одновременно (на выбор).

В следующей (альтернативной) версии добавлю:

  • мультивалютность;
  • виртуальный трейлинг (т.е. контроль стопов виртуально, без модификации стопа);
  • одновременную работу нескольких видов трейлинга с одной позицией, где на выходе будем иметь три варианта (на выбор) результирующего нового СТОПА: минимальный, максимальный и усреднённый;
  • трейлинг по FIBO с модификацией, как стопа, так и тэйка.
P.S. Добавил в эту "копилку" трейлинг для пипсовки (мой вариант):

за период (Average_Period) расчитываем средний размер свечи для текущего графика - это будет условным тэйком (УТ). При достижении ценой половины УТ, переводим в БезУбыток. А затем применяем "удавку". При достижении ценой УТ, "удлиняем" его в 1.5 раза.

Пришла необходимость мои библиотеки "привести к общему знаменателю". В данном виде библиотека работает ТОЛЬКО совместно с базовой библиотекой функций торговых операций. Эта версия библиотеки требует инициализации:

int init()
{
    //---- Инициализируем библиотеку трейлинга
    fInit_Trailing();
}

Также поменял имя библиотеки: b-PSI@TrailSymbol. Всё остальное осталось нетронутым.

Сетка ордеров Сетка ордеров

Сетка отложенных ордеров с индикаторами флета-тренда.

PriceSound_MA_Shift_Y PriceSound_MA_Shift_Y

MA со смещением по пунктам и функцией PriceSound_trendline.

HistoryBarsEditor HistoryBarsEditor

Лёгкое редактирование истории котировок прямо на графике с помощью мыши.

отложки по трендовым линиям отложки по трендовым линиям

Cоветник для ручной торговли, выставляет отложенные ордера по трендовым линиям. Сразу возможно установить 4 типа ордеров и стопы для них.