Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

lot lib - библиотека для MetaTrader 4

Просмотров:
12783
Рейтинг:
(25)
Опубликован:
2007.02.15 09:59
Обновлен:
2016.05.23 09:44
\MQL4\Include\
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Итак, решаем - чем мы можем рискнуть в каждой сделке? Вариантов много, а выбрать правильный не всегда просто. Для решения этой проблемы я и сделал библиотеку 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 - Накопление/распределение Ларри Вильямса Williams' Accumulation/Distribution, W A/D - Накопление/распределение Ларри Вильямса

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

Price and Volume Trend - PVT Price and Volume Trend - PVT

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

AllMinutes - Графики без дыр AllMinutes - Графики без дыр

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

Коэффициент ранговой корреляции Спирмена - Spearman's Rank Correlation Коэффициент ранговой корреляции Спирмена - Spearman's Rank Correlation

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