Советники: Kloss_

 

Kloss_:

Переделанный специально для оптимизации недавно выложенный советник Kloss

Author: Андрей

 

Бред какой то! Ни одного графика не выдает, хоть на каком режиме прогоняй его!

 

Скачайте новую версию.

Если будут проблемы с работой, выкладывайте их сюда, постараюсь оперативно исправить.

 

Автору привет!

У меня просьба, напишите определение параметров и правила открытия и закрытия позиций, жду, спасибо.

Вообще могу сказать, с депо 500 баксов по 100 баксов или около того берет каждый день, на тесте, ставлю на демо, будем наблюдать.

Как он торгует при мощном тренде пока не понятно.

 
alexluzan:

Автору привет!

У меня просьба, напишите определение параметров и правила открытия и закрытия позиций, жду, спасибо.

Вообще могу сказать, с депо 500 баксов по 100 баксов или около того берет каждый день, на тесте, ставлю на демо, будем наблюдать.

Как он торгует при мощном тренде пока не понятно.

Что вы понимаете под определением параметров и правилами открытия закрытия сделок? Объясните поподробней, я просто не очень понял.

Комментарии по-русски написать что-ли?

 
TheXpert:
alexluzan:

Автору привет!

У меня просьба, напишите определение параметров и правила открытия и закрытия позиций, жду, спасибо.

Вообще могу сказать, с депо 500 баксов по 100 баксов или около того берет каждый день, на тесте, ставлю на демо, будем наблюдать.

Как он торгует при мощном тренде пока не понятно.

Что вы понимаете под определением параметров и правилами открытия закрытия сделок? Объясните поподробней, я просто не очень понял.

Комментарии по-русски написать что-ли?

Входные параметры советника, которые мы оптимизируем, некоторые строчки понятны, но не все, для общей картины напишите определение всех, и в каких интервалах рекомендуете оптимизировать.
 

Версия с русскими комментариями и подправленным динамическим лотом.

//+------------------------------------------------------------------+
//|                                                       Kloss_.mq4 |
//|                                       Copyright © 2007, Tinytjan |
//|                                                 tinytjan@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Tinytjan"
#property link      "tinytjan@mail.ru"
 
#define STUPID 0x60BE57
 
extern string     Lots_Desc         =  "Если 0 применяется динамический лот";
extern double     Lots              =  0;
 
extern string     RiskPercentage_Desc =  "Настройка для динамического лота -- % риска. Если 0 используется минимальный доступный размер лота, если Lots > 0 эта настройка игнорируется";
extern int        RiskPercentage    =  0;
 
extern int        Slippage          =  2;
 
extern string     Target_Desc       =  "Тейк профит, если 0 профит не выставляется 90-200";
extern int        Target            =  152;
 
extern string     Loss_Desc         =  "Стоп лосс, если 0 лосс не выставляется 30-80";
extern int        Loss              =  48;
 
extern string     MA_DESC           =  "Период МА 1-10";
extern int        MA                =  1;
 
extern string     CCI_DESC          =  "Период ССI 8-30";
extern int        CCI               =  10;
 
extern int        StochasticK       =  10;
 
extern int        StochasticD       =  3;
 
extern int        StochasticS       =  3;
 
extern string     CCIDiffer_Desc    =  "Сигнальный уровень CCI для открытия позиций CCIDiffer -- sell b -CCIDiffer -- buy 80-200";
extern int        CCIDiffer         =  120;
 
extern string     StochDiffer_Desc  =  "Сигнальный уровень Stochastic для открытия позиций 50 + StochDiffer -- sell 50 - StochDiffer -- buy 15-40";
extern int        StochDiffer       =  20;
 
extern string     MaxOrders_Desc    =  "если 0 количество одновременно открытых позиций не ограничивается 1-3";
extern int        MaxOrders         =  3;
 
double LotsToBid;
string symbol;
 
// закрытие покупок
void CloseBuys(int MagicNumber, int Slippage)
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      
      if(OrderType() == OP_BUY)
      {
         if(OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue))
         {
            i--;
         }
         RefreshRates();
      }
   }
}
 
// закрытие продаж
void CloseSells(int MagicNumber, int Slippage)
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      
      if(OrderType() == OP_SELL)
      {
         if (OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red))
         {
            i--;
         }
         RefreshRates();
      }
   }
}
 
// подсчет кол-ва открытых позиций
int GetOrdersCount(int MagicNumber, int Type)
{
   int count = 0;
   
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      
      if(OrderType() == Type)
      {
         count++;
      }
   }
   
   return (count);
}
 
// Вычисление динамического лота
double GetLotsToBid(int RiskPercentage)
{
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step = MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   double lots = MathRound(percentage/margin/step)*step;
   
   if(lots < minLot)
   {
      lots = minLot;
   }
   
   if(lots > maxLot)
   {
      lots = maxLot;
   }
 
   return (lots);
}
 
// покупка
void OpenBuy()
{
   double TP = 0;
   if (Target > 0)
   {
      TP = Bid + Target*Point;
   }
 
   double SL = 0;
   if (Loss > 0)
   {
      SL = Bid - Loss*Point;
   }
   
   if (Lots == 0) LotsToBid = GetLotsToBid(RiskPercentage);
   
   OrderSend(Symbol(), OP_BUY, LotsToBid, Ask, Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 
// продажа
void OpenSell()
{
   double TP = 0;
   if (Target > 0)
   {
      TP = Ask - Target*Point;
   }
 
   double SL = 0;
   if (Loss > 0)
   {
      SL = Ask + Loss*Point;
   }
   
   if (Lots == 0) LotsToBid = GetLotsToBid(RiskPercentage);
   
   OrderSend(Symbol(), OP_SELL, LotsToBid, Bid, Slippage, SL, TP, NULL, STUPID, 0, Red);
}
 
// проверка условий торговли и управление позициями
void Check()
{
   double ma = iMA(symbol, 0, MA, 0, MODE_LWMA, PRICE_TYPICAL, 5);
   double cci = iCCI(symbol, 0, CCI, PRICE_WEIGHTED, 0);
   double stoch = iStochastic(symbol, 0, StochasticK, StochasticD, StochasticS, MODE_SMA, 0, MODE_MAIN, 0);
   
   // Проверка условий на покупку.
   if (cci < -CCIDiffer && stoch < 50 - StochDiffer && Open[1] > ma)
   {  // Можно покупать
      if (GetOrdersCount(STUPID, OP_SELL) > 0)
      {
         // Закрываем продажи
         CloseSells(STUPID, Slippage);
         return; // это по авторскому коду, можно закомментировать и тогда встречный лот будет открываться в тот же тик
      }
      if (GetOrdersCount(STUPID, OP_BUY) < MaxOrders || MaxOrders == 0) 
      {
         // покупаем, если не превышено кол-во позиций
         OpenBuy();
      }
   }
 
   // Проверка на продажу
   if (cci > CCIDiffer && stoch > 50 + StochDiffer && Close[1] < ma)
   {
      if (GetOrdersCount(STUPID, OP_BUY) > 0)
      {
         CloseBuys(STUPID, Slippage);
         return; // это по авторскому коду, можно закомментировать и тогда встречный лот будет открываться в тот же тик
      }
      if (GetOrdersCount(STUPID, OP_SELL) < MaxOrders || MaxOrders == 0) 
      {
         OpenSell();
      }
   }
}
 
int init()
{
   LotsToBid = Lots;
   symbol = Symbol();
}
 
int start()
{
   // Check for open new orders and close current ones
   Check();
 
   return(0);
}
 

Спасибо, изучаю, интересно....возможен толк.

Вижу на фунте, сегодня тренд почти 200 пунктов, а советник его пропускает, не торгует.

 

Хороший советник. Оптимизацей можно добиться неплохих результатов. У меня с начальной 1000$ по истории GBP-M15  01042008-21062008 (нет времени оптимизить на больший период) получилось:

Прибыль  - 7529.12  Сделок    -  231   Просадка - 4281.90

С параметрами:  Slippage=2  Target=150  Loss=160  MA=1  CCI=11  StochasticK=8  StochasticD=5  StochasticS=4  CCIDiffer=150  StochDiffer=21  MaxOrders=8 Lots=0  RiskPercentage=0

А с начала 2008г. с этими же параметрами быстро сливает.

 
cobalt:

Хороший советник. Оптимизацей можно добиться неплохих результатов. У меня с начальной 1000$ по истории GBP-M15  01042008-21062008 (нет времени оптимизить на больший период) получилось:

Прибыль  - 7529.12  Сделок    -  231   Просадка - 4281.90

С параметрами:  Slippage=2  Target=150  Loss=160  MA=1  CCI=11  StochasticK=8  StochasticD=5  StochasticS=4  CCIDiffer=150  StochDiffer=21  MaxOrders=8 Lots=0  RiskPercentage=0

А с начала 2008г. с этими же параметрами быстро сливает.

Самый оптимальный промежуток для тестирования -- 2002-2008 годы, затянется может даже на сутки. У Вас получилась переоптимизация. Да, еще советую не особо экспериментировать с  MaxOrders. В исходном варианте увеличения этого параметра не несет никакой выгоды.


Кстати, попробуйте проверить на минутке, график просто великолепный, но только до середины 2007 года, потом слив. Кто найдет рабочие параметры для минутки, с маленькой просадкой и стабильным выигрышем, просьба поделиться :) .

 

Вот что у меня получилось:

 

Символ EURUSD (Euro vs US Dollar)
Период 5 Минут (M5) 2008.06.16 16:10 - 2008.06.27 22:55 (2008.05.01 - 2008.06.28)
Модель Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Параметры Lots_Desc="Если 0 применяется динамический лот"; Lots=0; RiskPercentage_Desc="Настройка для динамического лота -- % риска. Если 0 используется минимальный доступный размер лота, если Lots > 0 эта настройка игнорируется"; RiskPercentage=5; Slippage=2; Target_Desc="Тейк профит, если 0 профит не выставляется 90-200"; Target=90; Loss_Desc="Стоп лосс, если 0 лосс не выставляется 30-80"; Loss=30; MA_DESC="Период МА 1-10"; MA=5; CCI_DESC="Период ССI 8-30"; CCI=12; StochasticK=10; StochasticD=3; StochasticS=3; CCIDiffer_Desc="Сигнальный уровень CCI для открытия позиций CCIDiffer -- sell b -CCIDiffer -- buy 80-200"; CCIDiffer=120; StochDiffer_Desc="Сигнальный уровень Stochastic для открытия позиций 50 + StochDiffer -- sell 50 - StochDiffer -- buy 15-40"; StochDiffer=20; MaxOrders_Desc="если 0 количество одновременно открытых позиций не ограничивается 1-3"; MaxOrders=0;
Баров в истории 2761 Смоделировано тиков 86169 Качество моделирования 86.74%
Ошибки рассогласования графиков 9
Начальный депозит 10000.00
Чистая прибыль 122615.80 Общая прибыль 210811.00 Общий убыток -88195.20
Прибыльность 2.39 Матожидание выигрыша 154.43
Абсолютная просадка 1179.10 Максимальная просадка 97679.00 (85.36%) Относительная просадка 85.36% (97679.00)
Всего сделок 794 Короткие позиции (% выигравших) 92 (56.52%) Длинные позиции (% выигравших) 702 (63.68%)
Прибыльные сделки (% от всех) 499 (62.85%) Убыточные сделки (% от всех) 295 (37.15%)
Самая большая прибыльная сделка 880.00 убыточная сделка -332.90
Средняя прибыльная сделка 422.47 убыточная сделка -298.97
Максимальное количество непрерывных выигрышей (прибыль) 124 (54717.80) непрерывных проигрышей (убыток) 163 (-52525.50)
Максимальная непрерывная прибыль (число выигрышей) 54717.80 (124) непрерывный убыток (число проигрышей) -52525.50 (163)
Средний непрерывный выигрыш 45 непрерывный проигрыш 30

 

Открыл реальный счет. Бросил туда 3.4$. Вчера получил сверху 1.4, сегодня пока советник не торговал

Причина обращения: