- Как стать продавцом - Маркет - магазин приложений
- Стакан цен - MetaTrader 5 для iPhone
- MetaTrader Market – крупнейший магазин торговых приложений
void CheckForOpen() { .... //---- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //---- sell conditions if(Open[1]>ma && Close[1]<ma) { } //---- buy conditions if(Open[1]<ma && Close[1]>ma) { }
Если скользящая средняя пересекает бар так, что она выше цены Open и ниже Close, то открывается позиция BUY. Если скользящая пересекает бар так что лиция ниже Open и выше Close, то происходит продажа.
Успешный трейдинг немыслим без money management. В этом эксперте показан очень простой, но эффективный способ управления объемом каждой позиции в зависимости от результатов предыдущих сделок.
//+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //---- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //---- calculate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- return lot size if(lot<0.1) lot=0.1; return(lot); }
Объясню по шагам:
1) расчет базового размера лота на основе максимально допустимого риска:
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
Параметр MaximumRisk показывает базовое процентное значение риска на каждую сделку. Обычно принимает значение от 0.01 (1%) до 1 (100%). Например, свободные средства(AccountFreeMargin) $20500 и правила управления капиталом рекомендуют использовать риск 2%. Значит базовый лот = 20500 * 0.02 / 1000 = 0.41 лота.
Очень важно контролировать точность размера лота и явно выравнивать результат до допустимых значений. Обычно допустимы дробные лоты с шагом 0.1, а в данном случае мы имеем 0.41 (сделка с таким объемом не пройдет). Для выравнивания надо использовать NormalizeDouble с точностью до 1 знака после запятой. В результате получаем базовый лот = 0.4
Расчет базового лота на основе свободной маржи позволяет увеличивать объем операций в зависимости от успешности торговли. То есть, вести торговлю с реинвестированием средств. Это базовый механизм (при обязательном управлении капиталом) для повышения эффективности трейдера.
2) DecreaseFactor - степень "сбавления оборотов" при неудачных трейдах. Обычные значения 2,3,4,5. Если предыдущие сделки были убыточными, то последующие объемы уменьшаются в DecreaseFactor раз, чтобы затаиться и переждать неудачный период. В нашем алгоритме управления капиталом это самый главный фактор.
Идея очень простая: если торговля идет успешно в плюс, то работаем базовым лотом, зарабатывая по максимуму. После первой же убыточной сделки "сбавляем обороты" до тех пор, пока не проведем положительную сделку.
Алгоритм позволяет отключить "сбавление оборотов", если указать DecreaseFactor = 0.
В истории сделок подсчитывается количество последних подряд идущих убыточных сделок. На их основе производится перерасчет базового лота:
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
Расчитаем размер лота при DecreaseFactor =3 и наличии подследних 2 подряд идущих убыточных сделок:
lot = 0.4 - 0.4 * 2 / 3 = 0.133
После нормализации получим lot = 0.1 . Таким образом алгоритм позволил эффективно снизить риск из-за череды предыдущих неудачных сделок.
3) В конце производится обязательная проверка на минимально допустимый размер лота, так как в результате ранее проведенных расчетов можно получить lot = 0
if(lot<0.1) lot=0.1;
Как реально влияет DecreaseFactor на эффективность торговли?
Проведем ряд экспериментов на EURUSD Daily (у меня история с апреля 1989 по 21 декабря 2005, эксперт писался главным образом для дневок) в режиме тестирования по ценам закрытия. Эксперт торгует только при открытии нового бара, поэтому режимы детального потикового моделирования не нужно использовать. Размер депозита $10000, открываем позиции BUY и SELL.
1) Оставим принцип реинвестирования через MaximumRisk, но отключим DecreaseFactor (выставим его в 0). Вот настройки:
Попытаемся в режиме оптимизации выжать максимум из этого эксперта с указанными пределами тестирования при каждом параметре. Вот что получилось:
Наилучший результат по профиту ($62780) и максимальной просадке(Drawdown, 43.74%) получился при следующих параметрах: MaximumRisk=0.04 , MovingPeriod=19, MovingShift=0
На графике оптимизации стрелочкой показан выбранный результат (10000 депозит + 62780 прибыль = 72780 итоговый баланс). Самый прибыльный результат $78532 был отвергнут из-за чрезмерной просадки в 58.94%.
По графику объемов видно, что работало реинвестирование прибыли и объем сделок постепенно возрастал. Но трейдер постоянно был в страхе из-за просадок, достигающих 43%. Когда объемы сделок достигли максимума, началась череда убытков, на которых практически потеряли половину заработанной прибыли (с максимума в $125000 упали до $70000). Это очень нервный трейдинг.
2) Попробуем улучшить результаты эксперта за счет более грамотного Money Management? Главным образом сконцентрируем на снижении максимальной просадки. Запустим оптимизатор с теми же самыми настройками, но включим в оптимизацию параметр DecreaseFactor:
Результаты прогона оптимизации такие:
Наилучший результат по профиту ($168415) и максимальной просадке(Drawdown, 23.83%) получился при следующих параметрах: MaximumRisk=0.07 , DecreaseFactor=2, MovingPeriod=12, MovingShift=6
На графике оптимизации стрелочкой показан выбранный результат (10000 депозит + 168415 прибыль = 178415 итоговый баланс). Самый прибыльный результат $272570 был отвергнут из-за относительно большой просадки в 43.55%.
Объем сделок изменяется скачками, иногда падая до минимально (почти нулевого) возможного уровня. Это как раз показывает влияние параметра DecreaseFactor с резким "снижением оборотов" после неудачных трейдов. Пониженные объемы сделок в серии неудачных сделок позволяют пережить убыточные периоды и сохранить капитал.
Я специально потратил 2.5 часа на написание этого развернутого ответа для
наглядной демонстрации эффекта управления капиталом.
Тема управления капиталом была расширена komposter'ом:
Специально только что скачал "Руководство пользователя для MetaTrader 4" - все доступно:
https://www.metaquotes.net/
Уверен, что Вы позволите сохранить мое время и потратите собственное, чтобы побольше узнать о об экспертах. Не смею просить Вас изменить свое мнение об экспертах, раз уж Вы такой противник тестирования.
Почитайте, пожалуйста, наш сайт, а заодно и специальный ресурс, посвященный MQL4: "MQL4: automated forex trading"
Просьба не флудить на нашем форуме, как Вы это делаете на форуме Альпари.
Здесь это очень не приветствуется.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования