Советник Moving Average в МТ4

 
Уважаемые разработчики...Пользуясь Вашим любезным приглашением хочу задать вопрос...Вот в МТ4 есть советник Moving Average...В принципе интересная штука...Но описания его параметров я найти нигде не смог...Поэтому прошу либо послать туда,где можно об этом прочитать (только не говорите скачать руководство...Скачал...три раза...И все три раза руководство мне отвечало...The page cannot be displayed ...)...либо расскажите что означает параметр 1)MaximumRisk 2) DecreaseFactor...С остальными параметрами всё ясно...Изменение указанных параметров методом научного тыка ничего не дало...При открытии ордеров он (советник) не ставит ни стоп,ни профит, а закрывает позы по своему, непонятному мне пока , усмотрению... И порядок его работы правильный какой должен быть...???...Вот они пересеклись и он открыл позу...Потом ещё пересечение и что должно произойти...???...Вот сейчас смотрю на монитор и вижу - было пересечение с сигналом бай - открыл советник позу...Сейчас прошло пересечение с сигналом селл,поза бай висит,её никто закрывать не хочет... и селл тоже открывать не хочет...Как прибор работать должен,объясните пожалуйста...
 
Одна из самых простых стратегий - это анализировать пересечение скользящей средней и рыночного графика. Эксперт Moving Average как раз и занимается такой проверкой:
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'ом:

 
Поэтому прошу либо послать туда,где можно об этом прочитать (только не говорите скачать руководство...Скачал...три раза...И все три раза руководство мне отвечало...The page cannot be displayed ...)

Специально только что скачал "Руководство пользователя для MetaTrader 4" - все доступно:
https://www.metaquotes.net/
 
Доброе утро..Уважаемый Ренат,благодарю за столь развёрнутый ответ и с этой частью советника абсолютно всё понятно...Остался вопрос о том,как советник всё таки должен торговать...По пунктам...Вот появился сигнал на продажу - он открыл селл...И дальше - потёмки...Какой стоп он при этом к этой позе прилепил...???...Какой профит...???...При каких условиях он эту позу закроет...???...Когда он новую должен открывать...???...И правильно ли я понял,что он работает не по пересечению двух МА разного периода,а по пересечении цены и одной из МА...???...Если да,то какой именно...???...Вопросы эти не направлены в отрицательное русло ,ни боже мой...Я знаю,что на основе пересечения 2-х МА можно сделать простую прибыльную стратегию,главное определиться с параметрами...Вот тут советник - вещь незаменимая...Но поскольку я принципиальный противник тестирования на истории,то без понимания алгоритма работы советника не ясно чего от него ждать в следующий момент...С уважением за ваш труд...
 
Уважаемый nemo-x,

Уверен, что Вы позволите сохранить мое время и потратите собственное, чтобы побольше узнать о об экспертах. Не смею просить Вас изменить свое мнение об экспертах, раз уж Вы такой противник тестирования.

Почитайте, пожалуйста, наш сайт, а заодно и специальный ресурс, посвященный MQL4: "MQL4: automated forex trading"

Просьба не флудить на нашем форуме, как Вы это делаете на форуме Альпари.
Здесь это очень не приветствуется.
 
Поверьте,Ренат, я привык ценить чужое время...Поверьте,я умею пользоваться поиском и задаю вопросы только тогда,когда не могу на них найти сам ответ...Пусть моя манера общения флудом кажеться...Но есть МТ4...В нём есть советник...Его кто-то написал и всё про него знает...Я хочу очень его использовать,но не знаю - что он и как должен делать...Могу я с просить у разработчика - КАК он должен правильно работать...???...Если большое количество вопросов одновременно - это не приветствуется,тогда по одному...Можете не отвечать,чего уж там...ветка просто заглохнет и концы в воду...Потому что я тоже с вопросами завяжу...Вопрос первый...Вот сказано выше "Если скользящая средняя пересекает бар так, что она выше цены Open и ниже Close, то открывается позиция BUY. Если скользящая пересекает бар так что линия ниже Open и выше Close, то происходит продажа."...Вопрос - пересечение линии ЦЕНЫ и МА учитывается в данном советнике, или пересечение двух МА разного периода,указанных в начальных настройках...???...
 
И вслед добавлю (если больше не прийдется эту ветку поднимать...)...Я не против тестирования советников...Я это всегда и делаю,и думаю что успешно,на демо-счетах...Я против тестировании на истории...Глупости всё это, потому что рынок меняется...Это как растёт ребенок - примените к 5 летнему ребёнку мерки и оценки 3-х летнего ...Или к пришедшему из армии парню мерку его до армии...Ах вот он в 17 лет был такой спокойный,любил гороховую кашу...А сейчас он нервный и кашу эту терпеть не может...Всё...Не ответите, так заранее вас с Новым годом...Всех...Весь коллектив...