Заработать на ФОРЕКС
Вторник, 19.03.2024, 11:14
Всё для прибыльной торговли на FOREX!
Главная | Добавить в избранное | Сделать стартовойфорекс советники
Меню сайта
Категории раздела
Торгуем прибыльно с Price Action и VSA [27]
Учимся прибыльно торговать с помощью методики Price Action и VSA
Форекс видео уроки [14]
Форекс видео уроки
Основы Финансового Рынка - Азбука Инвестора форекс видео [41]
Форекс видео уроки для трейдеров и инвесторов - Азбука Инвестора
Лучшие брокеры
форекс бесплатно заработок в интернете Виртуальный выделенный сервер для Форекс Виртуальный выделенный сервер для Форекс Виртуальный выделенный сервер для Форекс заработок в интернете заработок в интернете
Друзья сайта
Поиск
Наш опрос
Рейтинг брокеров
Всего ответов: 2096
Термины ФОРЕКС
<a href="http://instaforex.com/ru/" rel="nofollow">Форекс портал</a>

Тестирование и оптимизация советников

     Рассмотрим последовательность действий при работе с советником с самого-самого начала. Для примера, возьмем простой модифицированный нами советник Moving Average. В отличие от встроенной в торговую платформу MetaTrader 4 изначальной версии, наша версия реализует открытие позиций при пересечении ценой одной линии Moving Average, а закрытие позиций - при обратном пересечении ценой другой линии Moving Average, с другим периодом. В нашу версию также добавлена функция открытия позиций в условиях рыночного исполнения торговых заявок Market Execution, поскольку такая программная модификация сильно востребована в последнее время. Вот код советника:

//+------------------------------------------------------------------+
//|                                        Moving Average_Мodify.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                      Modify  by BARS             |
//+------------------------------------------------------------------+
#define MAGICMA  20050610
//-----------------------------------------
extern int      StopLoss=500;
extern int      TakeProfit=500;
extern double   Lots              =0.1;
extern double   MaximumRisk       =0.02;
extern double   DecreaseFactor    =3;
extern double   MovingPeriod_Open =12;
extern double   MovingPeriod_Close=21;
extern double   MovingShift       =1;

double SL,TP;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
void start() 
  {
//---- check for history and trading
//(если на графике есть более 100 баров и торговый поток свободен)
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0)//если нет открытых позиций 
      CheckForOpen();// начинаем работу
   else     CheckForClose();
  }
//жжжжжжжжжжжжжжжж Конец функции  void start()жжжжжжжжжжжжжжжжжжжжжжж+             
//жжжжжжжжжж Пользовательские функции жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//| Функция определения наличия открытых позиций                     |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol) 
  {
   int buys=0,sells=0; for(int i=0;i<OrdersTotal();i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY) buys++;
         if(OrderType()==OP_SELL) sells++; 
        }
     }
//---- return orders volume
   if(buys>0) return(buys);   else       return(-sells);
  }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//| Функция расчета оптимального размера лота                        |
//+------------------------------------------------------------------+
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);
  }
//жжжжжжжжжжжж Функция открытия позиций жжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen() 
  {
   double ma;   int    res;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod_Open,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma) 
     {
      SL=0;TP=0;
      if(StopLoss>0) SL=Bid+Point*StopLoss;
      if(TakeProfit>0) TP=Bid-Point*TakeProfit;
      res=WHCOrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,SL,TP,
                       "Moving Average",MAGICMA,0,Red);
      if(res<0)
        {
         Print("Ошибка открытия ордера SELL #",GetLastError());
         Sleep(10000);   return(0);  
        }
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      SL=0;TP=0;
      if(StopLoss>0) SL=Ask-Point*StopLoss;
      if(TakeProfit>0) TP=Ask+Point*TakeProfit;
      res=WHCOrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,SL,TP,
                       "Moving Average",MAGICMA,0,Blue);
      if(res<0) 
        {
         Print("Ошибка открытия ордера BUY #",GetLastError());
         Sleep(10000);   return(0); 
        }
     }
//----
  }
//+жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//| Функция закрытия позиций                                         |
//+------------------------------------------------------------------+
void CheckForClose() 
  {
   double ma;
//---- go trading only for first tiсks of new bar
//(с первым тиком нового бара начинаем работу)
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod_Close,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
   for(int i=0;i<OrdersTotal();i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY) 
        {
         if(Open[1]>ma && Close[1]<ma)
            OrderClose(OrderTicket(),OrderLots(),Bid,3,White);     break;
        }
      if(OrderType()==OP_SELL) 
        {
         if(Open[1]<ma && Close[1]>ma)
            OrderClose(OrderTicket(),OrderLots(),Ask,3,White);     break;
        }
     }
//---------------------
  }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//Функция предусмотрена для открытие позиций в условиях рыночного 
//исполнения торговых заявок Market Watch
int WHCOrderSend(string symbol,  int cmd,    double volume,
                 double price,int slippage,double stoploss,
                 double takeprofit,string comment,int magic,
                 datetime expiration,     color arrow_color)
  {
   int ticket= OrderSend(symbol,cmd,              volume,price,slippage,0,0,
                         comment,magic,             expiration,arrow_color);
   int check=-1;   if(ticket>0 && (stoploss!=0 || takeprofit!=0)) 
     {
      if(!OrderModify(ticket,price,stoploss,takeprofit,expiration,arrow_color)) 
        {
         check=GetLastError();                             
 if(check!=ERR_NO_ERROR) 
           {
         Print("OrderModify error: ",ErrorDescription(check)); } }              
        }
      else 
        {
         check=GetLastError();                              
 if(check!=ERR_NO_ERROR)
           {
            Print("OrderSend error: ",ErrorDescription(check));  
           }
        }
      return(ticket);    
     }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

     Скачиваем прилагаемый файл советника Moving Average_Мodify. Скачанный файл советника нужно поместить в папку ..\experts\ торгового терминала MetaTrader 4. Например, если у Вас торговый терминал установлен в папку C:\Program Files\MetaTrader 4\, то советник Вы должны будете поместить в папку C:\Program Files\MetaTrader 4\experts\. После чего запускаем (перезапускаем) терминал.

     Слева, в окне Навигатор->Советники, должен появиться ещё один файл - файл нашего советника с названием Moving Average_Мodify.

     Запускаем Тестер стратегий из меню (7-я кнопка слева) торгового терминала MetaTrader 4. Далее последовательность действий будет такая (см. рисунок):

лучшие советники форекс

   - Из выпадающего списка выбираем и устанавливаем в окошечко "Советник" наш эксперт Moving Average_Мodify.

   - В окошечке "Символ" выбираем валютную пару для наших экспериментов, например, EURUSD.

   - Выбираем таймфрейм для работы, например, H1 и устанавливаем его в окошечке "Период".

   - Ставим галочку в окошечко "Использовать дату" и задаем временной период тестирования и оптимизации. Например, с 1 августа 2008 по 1 мая 2009. Почему именно по 1 мая, а не по сегодняшний день (08 июня)? Это вам будет ясно чуть позже.

   - В окошечке "Модель" устанавливаем режим "По ценам открытия".

     Об этом режиме следует сказать особо. При работе в таком режиме сигналы на открытие и закрытие позиций поступают только при открытии очередного, нового бара. Именно такой режим входа в рынок предусмотрен в алгоритме работы нашего советника!

     Начнем тестирование. Пока используем в СВОЙСТВАХ ЭКСПЕРТА параметры по умолчанию. Нажимаем на кнопку "Старт" в правом нижнем углу тестера и, после того как зеленая полоска внизу пробежит справа налево, мы можем посмотреть результат теста. Для этого нужно открыть окно "Отчет" тестера. Либо открыть график баланса полученного тестерного прогона - окно "График" (см. рис. выше).

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

лучшие советники форекс

     Вывод: При тех параметрах, что были заданы в СВОЙСТВАХ ЭКСПЕРТА по умолчанию, наш советник не способен профитно работать на заданном таймфрейме по заданному инструменту. Нужно подобрать иные параметры, при которых работа советника будет прибыльной!

     Иначе говоря, "под оптимизацией можно понимать нахождение таких параметров выбранной торговой системы, которые позволяют получить наилучшие результаты".

     В режиме оптимизации советник автоматически прогоняется неоднократно, меняя внешние переменные по заданной нами схеме в СВОЙСТВАХ эксперта: начальное значение-шаг-конечное значение. Тестер МТ4 позволяет оптимизировать несколько параметров одновременно. Нам следует задать параметры оптимизации. Для этого в тестере нажимаем кнопку (справа вверху) и раскрываем окно СВОЙСТВА ЭКСПЕРТА:

лучшие советники форекс

     Ставим галочки справа в окошечках тех параметров, которые мы будем оптимизировать, и зададим начальные значения, шаги и конечные значения этих параметров в колонках "Старт", "Шаг" и "Стоп" соответственно. Из рисунка видно, что оптимизироваться (подбираться) будут параметры:

  • StopLoss - стоплосс (старт=400 пунктов, шаг=10 пунктов, стоп=1500 пунктов);
  • TakeProfit - тейкпрофит;
  • MovingPeriod_Open - период МА для открытия позиций;
  • MovingPeriod_Close - период МА для закрытия позиций.

     Начальные и конечные значения для оптимизации выбираем исходя из позиции здравого смысла. Для валютной пары EURUSD и таймфрейма Н1 нам представляется разумным задать такие значения, которые вы видите на рисунке выше. Напомним, что котировки у нас в MetaTrader 4 в данном случае пятизначные.

     В режиме "По ценам открытия" оптимизация идет быстро. Поэтому мы можем позволить себе оптимизировать все выбранные нами четыре параметра одновременно. Закрываем окно "Свойства эксперта" нажатием кнопки ОК и ставим галочку в окошечко "Оптимизация" справа в тестере. После чего нажимаем кнопку "Старт" в правом нижнем углу тестера. Оптимизация началась.

     Сам процесс оптимизации можно визуально контролировать в окнах тестера "Результаты оптимизации" или "График оптимизации". Если вместо графика оптимизации вы наблюдаете зелёные поля, то для лучшей наглядности рекомендуем, щелкнув правой мышкой, убрать в появившемся окне галочку с опции "Двухмерная поверхность - Space".

     После окончания оптимизации (когда зеленая полоска внизу пробежит всю свою дорожку) раскроем окно тестера "Результаты оптимизации" и поднимем вверх его верхнюю границу. После чего, щелкнем по второй колонке "Прибыль", чтобы результаты прогонов выстроились в порядке убывания. Картину мы увидим вот такую:

лучшие советники форекс

     Как видно из рисунка, при некоторых комбинациях параметров советника достигается максимальная прибыль 3061$. Однако не стоит торопиться загружать в наш советник эти параметры. Слишком уж велика просадка при такой прибыли! Нам же для начала желательно выбрать из предложенных вариантов подходящее сочетание максимальной прибыли и разумной просадки. Поэтому мы возьмем проход 2823 с прибылью 2847.86$ и просадкой 490.25$ .

     Щелкаем по этой строке правой мышкой. В появившемся окне щелкаем по строке "Установить входные параметры". При этом выбранные параметры автоматически загружаются в советник. Нажимаем кнопку "Старт" в правом нижнем углу тестера. После окончания теста (прогона) открываем окно "Отчет" и смотрим результаты теста.

Начальный депозит 1000.00
Чистая прибыль 2828.06
Общая прибыль 10911.45
Общий убыток -8083.39
Прибыльность 1.35
Матожидание выигрыша 10.28
Максимальная просадка 492.05 (21.72%)
Относительная просадка 33.96% (370.29)
Всего сделок 275
Короткие позиции (% выигравших) 151 (43.05%)
Длинные позиции (% выигравших) 124 (44.35%)
Самая большая
прибыльная сделка 114.00
убыточная сделка -73.92
Средняя
прибыльная сделка 90.93
убыточная сделка -52.15
Максимальное количество
непрерывных выигрышей (прибыль) 7 (508.00)
непрерывных проигрышей (убыток) 7 (-361.13)

StopLoss=890, TakeProfit=420, Lots=0.1, MaximumRisk=0.02, DecreaseFactor=3,

MovingPeriod_Open = 16, MovingPeriod_Close=42, MovingShift =1;



лучшие советники форекс

     Насколько стабилен этот результат? И будет ли советник в реальном времени работать так же, как отработал у нас при прогоне в тестере? Ответы на эти вопросы в какой-то мере может дать так называемый форвард-тест!

     Напомню, что мы задали дату тестирования и оптимизации с 1 августа 2008 по 1 мая 2009. Мы умышленно не стали оптимизировать советник с августа 2008 по сегодняшний день - 8 июня 2009. Мы как бы обучали советник на заданном нами интервале времени! А теперь пришла пора "строго спросить" с него, с советника - принять экзамен.

     Т.е. протестировать советник с этими же параметрами вне периода оптимизации - со 2 мая по 8 июня 2009! Именно такой прогон с и принято называть "форвард-тестом". В отличие от предыдущего - бэк-теста.

     По результатам форвард-теста мы уже более уверенно и объективно сможем судить о перспективах работы нашего советника в реальном времени. Не будем более вас мучить лукавым ожиданием и сделаем, наконец, описанный выше форвард-тест! Для этого зададим дату в окне тестера с 2 мая 2009 по "сегодня"(8 июня). И нажмем кнопку "Старт"! Вот результат:

Начальный депозит 1000.00
Чистая прибыль 348.44
Общая прибыль 1049.34
Общий убыток -700.90
Прибыльность 1.50
Матожидание выигрыша 8.93
Максимальная просадка 287.60 (20.82%)
Относительная просадка 20.82% (287.60)
Всего сделок 39
Короткие позиции (% выигравших) 22 (59.09%)
Длинные позиции (% выигравших) 17 (70.59%)
Самая большая
прибыльная сделка 42.00
убыточная сделка -89.00
Средняя
прибыльная сделка 41.97
убыточная сделка -50.06
Максимальное количество
непрерывных выигрышей (прибыль) 6 (251.90)
непрерывных проигрышей (убыток) 3 (-267.00)

лучшие советники форекс

     Неожиданный результат! Нечасто так бывает с первого раза, и мы сами такого не ожидали. Форвард-тест дал неплохую прибыль! Хотя и просадка тоже имеет место . В идеале следует отследить на графике в визуальном режиме работы тестера участок с убыточными сделками, которые дали максимальную просадку. И выяснить причины этой просадки. А также продумать приемы и методы её устранения. Любой читатель данной статьи может повторить описанные процедуры (в MetaTrader 4 Альпари) и убедиться в совершенной справедливости всех полученных результатов. Добавим, что аналогичный форвард-тест с более прибыльными параметрами оптимизации и большей просадкой (3061 и 771.95) дал гораздо худший результат.

     Впрочем, обольщаться рано. Для более объективной оценки советника следует сделать на истории несколько таких форвард-тестов.

     Мы же здесь ставим своей целью познакомить пользователей с начальными основами и самыми элементарными, первичными действиями по работе с советниками. Вернемся, однако, к той немалой просадке, которую мы получили при прогоне форвард-теста. Из графика видно, что просадка имела место после 18 мая 2009 года, сделки №18-20. Попробуем отследить ситуацию в визуальном режиме тестера. Для этого поставим галочку в окошечке "Визуализация" тестера. А режим работы тестера в окошечке "Модель" переведем в режим "По всем тикам" для наглядности. Движком визуализации мы сможем регулировать скорость истечения времени (т.е. скорость поступления котировок). Задаем дату: с 18 мая 2009. И нажимаем кнопку "Старт".

     Вот такая ситуация обнаружилась на этом убыточном участке истории:

лучшие советники форекс

     Три подряд убыточные сделки SELL дали нам эту существенную просадку. Причем, сделки происходили против тренда, что сразу проясняет главный недостаток нашего советника - слишком примитивный алгоритм работы. Необходимо добавить хотя бы простейший трендовый фильтр. И/или разделить механизм входа длинных и коротких сделок на самостоятельную, независимую работу. Либо воспользоваться любым другим подходящим приемом. Однако данные вопросы уже выходят за пределы нашей темы.

Заключение

     Нами были описаны простейшие приемы работы по тестированию и оптимизации советника в тестере.

     В заключение, рассмотрим некоторые самые частые вопросы, возникающие у начинающих пользователей при работе с тестированием советников.
    1. Почему результаты одноимённых тестов разные в разных ДЦ?

   - Разные результаты тестов в разных ДЦ объясняются разными котировками. Каждый брокер имеет своих поставщиков котировок. Отсюда и возникает ценовая разница и, как следствие, отображается на результатах теста.

     2. Почему в одном и том же ДЦ разные результаты при одноименных тестах?

   - Разные результаты в одном и том же ДЦ могут носить несколько причин, самая распространенная:
Плавающий спред, - оказывает довольно большое влияние на результат, особенно, при тестировании на малых таймфреймах и ПО ВСЕМ ТИКАМ. Тестер терминала MetaTrader 4 запоминает последнее значение спреда. При следующем прогоне спред может измениться и изменится, соответственно, результат теста.

     3. Почему разные результаты при тестированиях на тиках и по ценам открытия?

Всё дело в том что если эксперт работает по тикам, он получает данные на каждом тике и их анализирует. По ценам же открытия советник получает данные и дает сигналы только с появлением нового бара. Со всеми вытекающими...
Выход: Необходимо выяснить, как работает эксперт, и запустить тестер в нужном режиме.

     4. Почему эксперт не открывает позиции?

В первую очередь необходимо открыть журнал тестера стратегий. Он покажет код возможной ошибки.

Далее к разделу "Основы языка MQL4" >>>

 



Наш выбор брокеров
форекс скачать форекс бесплатно заработать на форекс форекс советники

форекс стратегии


VPS для Форекс
vps сервер для форекс
Заработать на ФОРЕКС
памм инвестирование
Форекс обзор
Наша кнопка
Установите нашу кнопку себе на сайт

Форекс советники

Торговые сессии
Котировки Sell/Buy
Журнал
FOREX MAGAZINE
Форма входа
Статистика
vps для форекс vps для форекс сервер для форекс
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Календарь
«  Март 2024  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Торговля на финансовых рынках сопряжена с риском. Все материалы носят исключительно ознакомительный характер. Администрация сайта не несет ответственности за принимаемые Вами решения.
Copyright Profit © 2010 - 2024

Облако тегов: форекс для начинающих форекс для начинающих видео форекс для новичков форекс для тебя форекс анализ технический анализ форекс прогноз форекс аналитика форекс видео брокеры форекс лучшие брокеры форекс надежный брокер форекс Волновой форекс анализ и прогноз Форекс аналитика от Trading Central советники форекс бесплатно советники форекс бесплатные советники форекс vps для форекс форекс сервер ПАММ памм счета волновой анализ форекс волновой анализ рынка форекс волновой анализ волновой анализ рынка волновой анализ эллиотта волновой анализ элиота аналитика рынка форекс аналитика форекс форекс аналитика прогнозы аналитика форекс на каждый день аналитика форекс на сегодня trading central заработок на форекс лучшие советники форекс форекс советники бесплатно Форекс советник аналитика форекс прогноз ежедневная форекс аналитика форекс новости аналитика прибыльные советники форекс советники форекс скачать торговый советник форекс советники форекс отзывы советники форекс скачать бесплатно советники форекс 2019 лучшая аналитика форекс технический анализ форекс анализ рынка форекс Анализ Форекс фундаментальный анализ форекс свечной анализ форекс нелинейный волновой анализ волновой анализ эл технический анализ рынка форекс прогноз форекс прогноз доллара форекс прогноз рынка форекс прогноз курса форекс прогноз форекс на сегодня прогноз евро форекс прогноз валют форекс графический анализ форекс свечной анализ на форекс Фундаментальный прогноз валюты форекс анализ форекс на сегодня прогноз евро доллар форекс технический анали прогноз форекс 2017 волновой анализ usd прогноз форекс евро анализ фигур форекс волновой анализ сегодня анализ форекс евро доллар форекс анализ евро волновой анализ доллар прогноз доллара на форекс сегодня прогноз курса доллара форекс рынки сегодня волновой анализ артем гелий форекс прогноз прогноз форекс гелия волновой анализ павелко анализ форекса сегодня волновой анализ форекс на сегодня анализ рынка форекс на сегодня роман павелко волновой анализ прогноз форекс гелий волновой анализ онегин технический анализ рынка фор прогнозы на золото форекс волновой анализ рынка форек прогноз фо анализ форекс книги прогноз курса валют на форекс доллар на форекс прогноз сегодня форекс прогноз сентябрь анализ валют форекс анализ графиков форекс ежедневный анализ форекс