MMLib v1.0
Меня заинтересовала идея Павла начать изучать mql4.
Вот и начал изучение. С программированием столкнулся впервые, неделю назад, начав писать эту библиотеку.
Библиотека предназначена для расчета лота различными способами.
Цель написания - использование в дальнейших наработках и улучшении уже существующих советников.
Кроме того изучение языка "по ходу дела".
Так как программирование на mql4 и как таковое вообще для меня пока в новинку - не судите строго:).
Основная цель создания темы - улучшение библиотеки, как в плане кода, так и в плане дополнения полезными "фишками".
Библиотека кладется в папку с терминалом \experts\include
В советник прописывается просто:
В блоке объявления переменных:
#include
В функции start() советника:
double Лот=Лот(Magic, СтопЛосс);
ну и соответственно, названия выделенные жирным шрифтом надо поменять на используемые в советнике.
Ошибки наверняка есть, но надеюсь кто-нибудь заинтересуется и поможет довести все до ума. >:d
Для теста использовал стандартный сов, идущий в комплекте с MT4 MACD Advisor, немного изменив его (вставил контроль открытия нового бара)
Добавлена функция для проведения теста в готовом советнике.
double OnlyTest(int Magic);
Выводит КБТС, КНД, z-счет в журнал. На основании этих значений даются рекомендации по ММ.
Настройки:
Первые две функции помогают в отладке советника.
Использовать коэффициент безопасности КБТС. Есть такая кривая - кривая безопасности, которая располагается над кривой нулевой доходности. Для своих вычислений я взял коэффициент безопасности КБТС=(СредняяПрибыль/СреднийУбыток)/((110%-%Выигрышей)/(%Выигрышей-10%)+1). Как только КБТС падает ниже 1, умножаем лот на КБТС, если падает ниже 0, переходим в безопасный режим - торгуем минлотом, пока ситуация не выровняется. Для отладки - если КБТС КБТСUse=true; Вкл/выкл расчет КБТС
КБТСLot=false; Использовать увеличение лота при КБТС>1
Функция расчета Z-счета.
Ищет повторяющиеся серии. Если Z >1, после убыточной сделки скорее всего будет прибыльная, целесообразно применить Мартингейл.
Если Z Если 1>Z>-1 то закономерностей между сделками нет.
ZCount=true; // Рассчитывать z-счет
ZComment=true; // Вносить запись в журнал
ZControl=true; // Корректировать лоты в зависимости от z. Если включено, после убыточной сделки увеличивает лот в Кмартин2 раз при z>1 и уменьшает при zКмартин2=2; // Коэффициент корректировки
Использовать мартингейл для каждого из выбираемых вариантов. Сделал чисто для эксперимента.
Мартин=true; Использовать мартингейл для каждого способа расчета
Кмартин1=2; Коэффициент увеличения лота после убыточной сделки
Вариант=0; Выбор способа расчета лота. Варианты 0-10
История=60; Количество сделок в истории для расчета (для вариантов 3, 5-10)
Вариант 0. Фиксированный лот
Тут все просто. Фиксированный лот.
ЛотФикс=0.01;
Вариант 1. Фиксированная фракция. Минимальный лот на Х единиц депо.
Тут я что-то напутал, работает не правильно. По идее должен увеличивать лот на каждые ЕдиницыДепо баланса.
ЕдиницыДепо=10000;
Вариант 2. Фиксированная фракция. Фиксированный процент от депо.
Тут тоже все просто, рискуем в каждой сделке определенным процентом средств от депо.
extern double ДепоПроц=1;
Вариант 3. Фиксированная фракция. Фиксированный % от максимального дродауна.
Высчитывается на истории максимальный дродаун, рискуем ДродаунПроц процентом денег от этого дродауна.
ДродаунПроц=30;
Вариант 4. Фиксированная фракция. Фиксированный % от максимальной волатильности.
По индикатору ATR с периодом ATRPer берется ATRTF (=1440 - дневная) волотильность цены актива,
риск берется как VolProc процент от нее.
ATRPer=21; Период усреднения ATR
ATRTF=1440; ТФ ATR
VolProc=10; Процент от волатильности ATR
Вариант 5. Фиксированная фракция. Оптимальная f.
По истории вычисляется оптимальная f, на основе ее вычисляется лот.
Вычисляется по максимальному убытку.
Вариант 6. Фиксированная фракция. Безопасная f.
То же самое, только безопасная f.
Вычисляется по максимальному дродауну.
Вариант 7. Критерий Келли
Вычисляется на истории критерий Келли и лот.
Вариант 8. Метод Ларри Вильямса
Тот же критерий Келли, только по максимальному дродауну, а не убытку.
Вариант 9. Фиксированная пропорция
На истории вычисляется дельта, равная максимальному дродауну.
Определяется уровень средств на счете, при котором мы переходим к следующему кол-ву контрактов.
При снижении до определенного баланса на счете, понижаем лот.
НачБаланс=1000; //Начальный баланс
СтавкаСниж=50; //Ставка снижения в случае неудачной сделки
Вариант 10. Мартингейл
Мартингейл. Коэффициент Кмартин для увеличения следующего лота в случае убытка.
Кмартин=2;
Кроме того, автоматически считает Z-счет. И выдает рекомендации на основании расчета в журнал.
Смотрите, делайте замечания, буду улучшать и исправлять :-H
