Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 12995
- Рейтинг:
- Опубликован:
- 2007.02.15 09:59
- Обновлен:
- 2016.05.23 09:44
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Итак, решаем - чем мы можем рискнуть в каждой сделке? Вариантов много, а выбрать правильный не всегда просто. Для решения этой проблемы я и сделал библиотеку lot_lib.mqh
Использование:
- скачиваем lot_lib.mqh в папку MetaTrader 4\experts\include;
- в эксперта добавляем следующие строки:
// в самом начале: #include <lot_lib.mqh> // в ф-цию init(): lotlib_PrevLots = 0.0; lotlib_PrevProfit = 0.0; // в функцию start(), _перед_каждой_ установкой ордера: lotlib_OpenPriceLevel = Ask; // вместо Ask - реальное значение // уровня открытия позиции lotlib_StopLossLevel = Ask-StopLoss*Point; // вместо Ask-StopLoss*Point - реальное значение уровня СтопЛосса // позиции // в функцию start(), туда, где выбрана открытая позиция (например, // перед трейлинг-стопом): lotlib_PrevLots = OrderLots(); lotlib_PrevProfit = OrderProfit();- размер лота при установке ордера определяем функцией Lot(). Т.е. просто вместо переменной, определяющей размер лота (обычно Lot или Lots) пишем Lot();
- компилируем эксперта и пользуемся.
Примечание: если эксперт держит открытыми одновременно 2 и больше позиций, переменным lotlib_PrevLots и lotlib_PrevProfit необходимо дополнительно присваивать нужные значения перед открытием новой позиции. Выбрать, какие значения присваивать: последней закрытой позиции или последней открытой, вам придётся самостоятельно.
Внешние переменные:
- LotSizeVariant - номер варианта, будет описана ниже;
- StartLot - начальный размер лота (для LotSizeVariant может быть от 0 до 5);
- AddLot - размер "прибавки" лота (для LotSizeVariant - 1 и 2);
- KLot - коэфициент прибавки (для LotSizeVariant - 3 и 4);
- MaxRisk - процент от депозита, которым можно рисковать (для LotSizeVariant - 5, 6, 11-17, 31-37);
- TrueProfitPoints - сумма в пунктах, больше которой прибыль позиции будет считаться прибылью, меньше которой будет считаться убытком (для LotSizeVariant - 1-4);
- BalanceUse - Процент баланса, который будет задействован экспертом. Если планируется торговать одновременно несколькими экспертами, установите 100/"кол-во экспертов", то есть для 3-х экспертов 33, для 4-х - 25, и т.д. (для LotSizeVariant - 5, 6, 7, 11-17, 31-37)
Возможные значения LotSizeVariant:
0 - фиксированный размер лота, задаётся переменной StartLot;
1 - если предыдущая позиция прибыльная, то есть прибыль больше TrueProfitPoints пунктов, размер лота увеличивается на AddLot или уменьшается, если AddLot меньше 0, если убыточная, то есть прибыль меньше TrueProfitPoints пунктов - устанавливается StartLot;
2 - если предыдущая позиция убыточная, размер лота увеличивается на AddLot, если прибыльная - устанавливается StartLot;
3 - если предыдущая позиция прибыльная, размер лота увеличивается в AddLot раз, если убыточная - устанавливается StartLot;
4 - если предыдущая позиция убыточная, размер лота увеличивается в AddLot раз, если прибыльная - устанавливается StartLot;
5 - размер лота выбирается с расчётом, что максимальный убыток от открытой позиции в случае срабатывания СтопЛосс составит MaxRisk процентов от депозита;
6 - размер лота выбирается как процент от баланса и управляется переменной MaxRisk. Например, для eurusd при Балансе 1000 и MaxRisk=10 откроется 0.1 лот, а при балансе 15000 и MaxRisk=5 откроется 0,8 лота;
7 - размер лота выбирается по формуле "1 процент от баланса" / "среднюю амплитуду движения цены на последних 20-ти барах" * 0,4. Откуда взял - не помню;
11-17 - алгоритмы подсчёта из вариантов 1-7, размер лота ограничен размером из 5-го варианта, то есть максимальный убыток будет MaxRisk процентов от баланса;
21-27 - алгоритмы подсчёта из вариантов 1-7, размер лота не может уменьшаться;
31-37 - алгоритмы подсчёта из вариантов 1-7, размер лота ограничен размером из 5-го варианта и не может уменьшаться, то есть, если он будет больше, чем в 5-м варианте, он уменьшится до размера из 5-го варианта, но если при этом будет меньше, чем предыдущий лот, будет приравнян предыдущему лоту;
100-128 - все варианты подряд (удобно для оптимизации):
100 - 0
101 - 1 108 - 11 115 - 21 122 - 31
102 - 2 109 - 12 115 - 22 123 - 32
103 - 3 110 - 13 117 - 23 124 - 33
104 - 4 111 - 14 118 - 24 125 - 34
105 - 5 112 - 15 119 - 25 126 - 35
106 - 6 113 - 16 120 - 26 127 - 36
107 - 7 114 - 17 121 - 27 128 - 37
Предварительная настройка (если необходимо, измените в коде):
//---- лот не будет МЕНЬШЕ значения MIN_LOT #define MIN_LOT 0.1 //---- лот не будет БОЛЬШЕ значения MAX_LOT #define MAX_LOT 100 //---- если в работе произошла ошибка (например, не все необходимые //---- переменные инициализированы из эксперта), ф-ция вернёт // значение DEFAULT_LOT #define DEFAULT_LOT -1
Пример результатов использования:
Я взял MACD Sample, добавил в него стоп-лосс, интегрировал библиотеку, и попробовал тестировать с разными значениями LotSizeVariant. Символ графика - EURUSD, период графика - H1, период тестирования: 01.01.2001 - 01.08.2005, режим моделирования - все тики, качество моделирования - 90%.
На рисунках несколько результатов, полученных случайным образом. Я не выбирал лучший вариант и не оптимизировал параметры. На первом рисунке размер лота фиксированный.

Индикатор Накопление/распределение Ларри Вильямса (Williams' Accumulation/Distribution, W_A/D) представляет собой накопленную сумму позитивных "накопительных" движений цены и негативных "распределительных".

Индикатор Тенденция цены и объема (Price and Volume Trend, PVT), как и индикатор Балансовый Объем (On Balance Volume, OBV), представляет собой нарастающую сумму значений объема торгов, рассчитываемую с учетом изменений цен закрытия.

Эксперт заполняет пропущенные на графике бары "чёрточками" (доджами) — барами, у которых O=H=L=C.

Коэффициент ранговой корреляции Спирмена - это непараметрический метод, который используется с целью статистического изучения связи между явлениями. В этом случае определяется фактическая степень параллелизма между двумя количественными рядами чисел.