Наткнулся на новую разработку Решетова - советник
FixedMarginLevelветка с обсуждением:
http://forum.mql4.com/ru/16793Собрал мультивалютного советника из чисто теоретического интереса. Даже не подозревал, что он будет вести себя не совсем так, как предполагалось в теории. Ведь он действует неправильно, т.е. продает когда цена снижается, а закрывает короткие (т.е. покупает), когда цена растет. В результате это отрицательно сказывается на балансе, т.е. он очень быстро убывает. А вот эквити на удивление держится на плаву, даже во флете.
Депо должно быть порядка $10000 или более (не менее $100 на центовых счетах). Микролоты, т.е. позы объемом менее 0.1 лота советник не поддерживает.
Чтобы установить советника, необходимо чтобы в "Обзор рынка" обязательно присутствовали три пары: USDCAD, USDCHF и USDJPY. Открываем любой график (какой именно без особой разницы), выставляем таймфрейм M1 и ставим на него советника (советник на счету должен быть только один). И все. Оптимизация не нужна, т.к. входные параметры отсутствуют.
Все чем занимается этот самый советник, дык держит MarginLevel на уровне 133.33%. А посему и маржинкол ему не страшен, т.к. уровень маржинколла никоим образом не может быть более 100%.
Вот собственно и все дела. Если повезет и тренд пойдет в нужную сторону, т.е. USD начнет сдавать позиции, то можно быстро увеличить депо. Если не повезет, то будет долго сливать это самое депо.
Минимум описания для оптимизации могу дать:
Входные параметры:
risk - уровень риска для валютной пары. Оптимизируется значениями от 0.01 с шагом 0.01 до 1
type - направление входа в рынок. Оптимизируется от 0 с шагом 1 до 1.
Таймфрейм M1, генетический алгоритм можно отключить.
Этот советник, в отличие от предыдущих версий, оптимизируется и устанавливается на свой отдельный график инструмента и только с этим инструментом он будет работать. Т.е. в данном случае инструменты можно подбирать на свой вкус, а точнее в зависимости от результатов оптимизации.
Если кто оптимизировал, то наверняка заметил, что одиночный советник дает даже в тестере весьма посредственные результаты. Все потому, что он предназначен для портфельной торговли - один в поле не воин. Здесь нужно собрать и оптимизировать портфель инструментов. И только тогда будет соответствующий результат.
В экспе нет никакой логики, а сплошная кибернетика - наука буржуазных мракобесов.
Если уж на то пошло, то нормальному программеру вполне будет достаточно нижеприведенного куска кода:
...
double orders = equity / (4.0 * MarketInfo(s, MODE_MARGINREQUIRED)) - count;
...
Где:
orders - объем на который нужно долить позу по инструменту s, если значение положительное. Если orders - число отрицательное, то абсолютное значение указывает количество лотов, на которое нужно закрыть какую нибудь позу по инструменту s. Самое главное не забыть прогнать MathAbs(orders) через normalizedouble(), чтобы торговые приказы не сыпали ошибки.
s - название инструмента
count - общий объем всех поз, открытых по инструменту s, подсчитанный до вышеприведенного участка кода.
Ну это у меня так сейчас реализовано. Т.е. самый примитивный вариант, при котором объемы поз по всем трем инструментам получаются одинаковыми.
Поскольку при этом залог составляет 3/4 от эквити (1/4 - заначка или НЗ), то уровень маржи будет регулироваться на уровне 133.33%, т.е. обратно пропорционально залогу - 4/3.