Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 7329
- Рейтинг:
- Опубликован:
- 2011.10.21 14:11
- Обновлен:
- 2014.04.21 14:55
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Давно "хотел", НО не "доходили" руки... :)
В свободном доступе "гуляет" множество функций и библиотек для трейлинга позиций, НО так чтобы было удобно ими пользоваться и был богатый выбор, я не встречал, хотя может быть просто плохо искал. Вот и решил сделать библиотеку для быстрого и удобного использования с советниками.
За основу взял набор функций от 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 с модификацией, как стопа, так и тэйка.
за период (Average_Period) расчитываем средний размер свечи для текущего графика - это будет условным тэйком (УТ). При достижении ценой половины УТ, переводим в БезУбыток. А затем применяем "удавку". При достижении ценой УТ, "удлиняем" его в 1.5 раза.
Пришла необходимость мои библиотеки "привести к общему знаменателю". В данном виде библиотека работает ТОЛЬКО совместно с базовой библиотекой функций торговых операций. Эта версия библиотеки требует инициализации:
int init() { //---- Инициализируем библиотеку трейлинга fInit_Trailing(); }
Также поменял имя библиотеки: b-PSI@TrailSymbol. Всё остальное осталось нетронутым.

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

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

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

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