Советники: BeerGodEA - страница 17

[Удален]  
ну это всё понятно, но хотелось бы услышать Nirus'a )
[Удален]  
MyMessir:
ну это всё понятно, но хотелось бы услышать Nirus'a )


Да, пожалуйста! "Усреднением при просадке" это назвать нельзя, я бы назвал компенсацией потерь... :-) А ММ вы можете выбрать любой в зависимости от того, насколько вы готовы рисковать, благо он гибко настраивается посредством параметров MaximumRisk и balans...

 

 

[Удален]  
Nirus:
MyMessir:
ну это всё понятно, но хотелось бы услышать Nirus'a )


Да, пожалуйста! "Усреднением при просадке" это назвать нельзя, я бы назвал компенсацией потерь... :-) А ММ вы можете выбрать любой в зависимости от того, насколько вы готовы рисковать, благо он гибко настраивается посредством параметров MaximumRisk и balans...

 
 

Большое спасибо за ответ, а не могли бы Вы, выложить код советника целиком, или советник сам? а то я, например, не очень шарю)
[Удален]  
MyMessir:
Nirus:
MyMessir:
ну это всё понятно, но хотелось бы услышать Nirus'a )


Да, пожалуйста! "Усреднением при просадке" это назвать нельзя, я бы назвал компенсацией потерь... :-) А ММ вы можете выбрать любой в зависимости от того, насколько вы готовы рисковать, благо он гибко настраивается посредством параметров MaximumRisk и balans...

 
 

Большое спасибо за ответ, а не могли бы Вы, выложить код советника целиком, или советник сам? а то я, например, не очень шарю)


А ветку целиком почитать слабо? :-)

Выкладываю исключительно для ленивых... :-)

#property copyright "Scam Laboratory 2012" 
#property link      "http://www.forex4you.org/?affid=bdbda7b"
//=============== Меню ===============================================
extern string Name="BeerGodEA (25.06.12)";
extern string MoneyManagement = "MoneyManagement";
extern double MaximumRisk = 0.1;         // прогресия лота на каждые 1000 баланса +0.1 лот. например депозит стал 2000 лот =0.2, 3000 лот =0.3 итд
extern double DecreaseFactor = 10.0;     // если будет две убыточные сделки лот уменьшится от предыдущего деленое на DecreaseFactor
extern double balans = 1000;             // шаг баланса, баланс реинвестирования, на каждую 1000 депо будет умножатся лот на риск
extern double Lots = 0.1;                // начальный лот
extern string Indicators="Параметры индикаторов";
extern int Period_MA=20;                 // Период МА
extern int TimeBarOpen = 15;             // время свечи для принятия решения
extern string TradeManagement="Управление торговлей";
extern bool BUY = true;                  // разрешить BUY
extern bool SELL = true;                 // разрешить SELL
extern int TakeProfit = 1650;            // фиксированный профит
extern int StopLoss = 950;               // фиксированный стоп
extern int MinTP = 50;                   // минимальный тейк профит 
extern int MinSL = 50;                   // минимальный стоп лосс
extern string TradeTime="Время торговли (по ДЦ)";
extern int MondayStart = 0;              // (8)(9) открытие первой сделки не раньше этого времени по ДЦ
extern int FridayStop = 20;
extern int FridayClose = 22;
extern string Server="Параметры сервера";
extern int Slippage = 10;                // Допустимое проскальзование цены
extern int Pause = 1000;                 // пауза между запросами на сервер
extern string Magic="Магическое число";
extern int MagicNumber = 0;              // Магический номер
//============== Переменные ==========================================
string GetNameOP="BeerGodEA";            // комент в открытом ордере
double TimeBar_t;                        // текущее время свечи
double sv_close;                         // цена закрытия свечи
double PA;                               // текущая цена
double MA_1_t;                           // МА текущая
double MA_1_p;                           // МА предыдущая
double NewBuy;                           // сигнал открытия покупки
double NewSell;                          // сигнал открытия продажи
double Trade;                            // разрешение или запрет работы
int mn;                                  // мейджик в зависимости от валютной пары
int timeplus;                            // время для валютной пары
int stoplevel;                           // текущий уровень стопов
int spread;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   if (!IsTesting())
   {
      if (IsExpertEnabled())
      {
         Comment("Советник будет запущен следующим тиком");
      }
      else 
      {
         Comment("Отжата кнопка \"Разрешить запуск советников\"");
      }
   }
      
   return (0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {//0
//======== Magic в зависимости от валютной пары ==============================
{ //1
if(Symbol()=="EURUSD") 
   {
      mn=(100+MagicNumber);
      timeplus=0;
   }
if(Symbol()=="GBPUSD")
   {
      mn=(200+MagicNumber);
      timeplus=1;
   }
if(Symbol()=="AUDUSD")
   {
      mn=(300+MagicNumber);
      timeplus=2;
   }
if(Symbol()=="USDCAD")
   {
      mn=(400+MagicNumber);
      timeplus=3;
   }
if(Symbol()=="USDCHF")
   {
      mn=(500+MagicNumber);
      timeplus=4;
   }
if(Symbol()=="USDJPY")
   {
      mn=(600+MagicNumber);
      timeplus=5;
   }
        
} //1
//======== получение данных с индикаторов и текущей цены ======================
{//2
MA_1_t=iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0); // МА_1 текущая
MA_1_p=iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,1); // МА_1 текущая
TimeBar_t = (TimeCurrent()-Time[0])/60; // время в минутах с открытия свечи
sv_close = iClose(NULL,0,1); // цена закрытия свечи на предыдущем баре
PA = Bid; // получение текущей цены
spread =  MarketInfo(Symbol(),MODE_SPREAD);
stoplevel =  MarketInfo(Symbol(),MODE_STOPLEVEL); // уровень стопов
RefreshRates ();
}//2  
// ================= Обработка сигналов ===============================
{//3
if ((PA < MA_1_t) && (MA_1_t < MA_1_p) && (PA < sv_close) && (TimeBar_t==(TimeBarOpen+timeplus)))   NewBuy = 1; else NewBuy = 0; // условие BUY
if ((PA > MA_1_t) && (MA_1_t > MA_1_p) && (PA > sv_close) && (TimeBar_t==(TimeBarOpen+timeplus)))   NewSell = 1; else NewSell = 0; // условие SELL
// ======= вычисляем время торговли ======
// (воскресенье-0,1,2,3,4,5,6)
if((DayOfWeek() == 1 && Hour() >= MondayStart) ||DayOfWeek() == 2 || DayOfWeek() == 3 || DayOfWeek() == 4 || (DayOfWeek() == 5 && Hour() < FridayStop)) Trade = 1; else Trade = 0;
}//3
// ================= Открытие сделки ===================================
{//4
// открытие BUY
if ((NewBuy == 1) && (ExistPositions() == false) && (Trade == 1) && (BUY==true))
   {
      OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,0,0,GetNameOP,mn,0,Blue);
      Sleep (Pause);
      OrderModify(GetTicketLastPos(),OrderOpenPrice(),(Ask-Point*StopLoss),(Ask+Point*TakeProfit),0,Red);
   }
// открытие Sell
if ((NewSell == 1) && (ExistPositions() == false) && (Trade == 1) && (SELL==true))
   {
      OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,0,0,GetNameOP,mn,0,OrangeRed);
      Sleep (Pause);
      OrderModify(GetTicketLastPos(),OrderOpenPrice(),(Bid+Point*StopLoss),(Bid-Point*TakeProfit),0,Red);
   }
}//5
// ================= Закрытие сделки ===================================
{//6
if (NewBuy == 1) 
   {
      ClossAllProfitSell ();
      ClossAllLossSell();
      Sleep(Pause);
   }
if (NewSell == 1) 
   {
      ClossAllProfitBuy ();
      ClossAllLossBuy();
      Sleep(Pause);
   }
if (DayOfWeek() == 5 && Hour() >= FridayClose) // закрываем в пятницу вечером все прибыльные ордера
   {
      ClossAllProfitBuy ();
      ClossAllProfitSell ();
      Sleep(Pause);
   }
}//6
// ================= Комментарии ======================================
{//7
if (!IsTesting())
   {
     Comment("Magic=",mn, " PA=",PA, " MA_t=",MA_1_t," MA_p=",MA_1_p," Sv_close=",sv_close," TimeBar=",TimeBar_t," Spread=",spread," StopLevel=",stoplevel);    // Комментарий в угол окна  
   }
}//7
// =====================================================================
   return(0);
  }//0
// END
// ================= Функции ==========================================
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, datetime ot=0) {
  int i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//END
//+------------------------------------------------------------------+
//|                 Закрыть прибыльные ордера                        |
//+------------------------------------------------------------------+
// ====================== Закрыть BUY в профите ===============================
double ClossAllProfitBuy ()
{
   int Profit1=MinTP;
   int col1=Lime;
   int ask1, bid1, open1;
   double point1;
   for (int i1=OrdersTotal()-1; i1>=0; i1--)
   {
      if (!OrderSelect(i1,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn))
      {
         point1=MarketInfo(Symbol(),MODE_POINT);
         if (point1==0) break;
         bid1=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point1);
         open1=MathRound(OrderOpenPrice()/point1);
         if (bid1-open1<Profit1) continue;
         OrderClose(OrderTicket(),OrderLots(),bid1*point1,Slippage,col1);
      }
   }
}
// End
// ====================== Закрыть SELL в профите ===============================
double ClossAllProfitSell ()
{
   int Profit2=MinTP;
   int col2=Lime;
   int ask2, bid2, open2;
   double point2;
   for (int i2=OrdersTotal()-1; i2>=0; i2--)
   {
      if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn))
      {
         point2=MarketInfo(Symbol(),MODE_POINT);
         if (point2==0) break;
         ask2=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point2);
         open2=MathRound(OrderOpenPrice()/point2);
         if (open2-ask2<Profit2) continue;
         OrderClose (OrderTicket(),OrderLots(),ask2*point2,Slippage,col2) ;
      }
   }
}
// End
//+------------------------------------------------------------------+
//|                 Закрыть убыточные ордера                         |
//+------------------------------------------------------------------+
// ====================== Закрыть BUY в убытке ===============================
double ClossAllLossBuy()
{
   int Stop4=MinSL;
   int ask4, bid4, open4;
   double point4;
   for (int i4=OrdersTotal()-1; i4>=0; i4--)
   {
      if (!OrderSelect(i4,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_BUY) && (OrderMagicNumber()==mn))
      {
         point4=MarketInfo(Symbol(),MODE_POINT);
         if (point4==0) break;
         bid4=MathRound(MarketInfo(Symbol(),MODE_BID)/point4);
         open4=MathRound(OrderOpenPrice()/point4);
         if (open4-bid4<Stop4) continue;
         OrderClose(OrderTicket(),OrderLots(),bid4*point4,Slippage,Red);
      }
   }
}
// End
// ====================== Закрыть SELL в убытке ===============================
double ClossAllLossSell()
{
   int Stop5=MinSL;
   int ask5, bid5, open5;
   double point5;
   for (int i5=OrdersTotal()-1; i5>=0; i5--)
   {
      if (!OrderSelect(i5,SELECT_BY_POS,MODE_TRADES)) break;
      if ((OrderType()==OP_SELL) && (OrderMagicNumber()==mn))
      {
         point5=MarketInfo(Symbol(),MODE_POINT);
         if (point5==0) break;
         ask5=MathRound(MarketInfo(Symbol(),MODE_ASK)/point5);
         open5=MathRound(OrderOpenPrice()/point5);
         if (ask5-open5<Stop5) continue;
         OrderClose (OrderTicket(),OrderLots(),ask5*point5,Slippage,Red);
      }
   }
}
// End
//+----------------------------------------------------------------------------------------+
//| ММ Функция работает по принципу наращивания лота при увеличении                        |
//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается                |
//| на начальный лот в данном случае 0.1 если происходит профит то следующий               |
//| лот расчитывается по прогресии.                                                        |
//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит                    |
//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки                |
//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее             |
//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3,    |
//| далее если сделка будет прибыльной то следующий лот откроется из расчета               |
//| баланса депозита "баланс/500*0.1"=лот внешние переменные                               |
//+----------------------------------------------------------------------------------------+
double LotsOptimized() {
       double minlot = MarketInfo(Symbol(), MODE_MINLOT);
       double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);       
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0;
       lot = NormalizeDouble((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2);
       if (DecreaseFactor > 0.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.0) break; 
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot + lot * losses / DecreaseFactor, 2);
}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot; 
return (lot);} 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тикет последней открытой позиции или -1             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTicketLastPos(string sy="", int op=-1) {
  datetime o;
  int      i, k=OrdersTotal(), r=-1;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=OrderTicket();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
// END
[Удален]  
Как в том анекдоте - "Ну чо, типа, ау-у!" Может кто-то выскажется? У кого какие результаты в тестировании?
saban
74
saban  
Nirus:
Как в том анекдоте - "Ну чо, типа, ау-у!" Может кто-то выскажется? У кого какие результаты в тестировании?

Ну типа ау-у! :))))))


По-делу значится.

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

2. Настройки у меня свои. Мне советник нравится, но вот все времени нет фильтр какой-нибудь попробовать.

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

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

5. Ну и идея по поводу граализации данного советника. Может есть смысл вместо стопа, применить усреднение? А то как получается, попал в глобальный тренд (например идем вверх) и словил стоп, так он через час все равно откроется с продажой, т.е. против тренда..... но тренд по большому счету не отфильтруешь, т.к. пока отфильтруешь можно как раз пропустить те самые сделки, которые выводят из просадки. Вот и родилась мысль что вместо стопа надо пробовать усредняться (можно и мартина попробовать). Стоп обычно (у меня в настройках в районе 80-100 пунктов), ну так вот стоп не ставить, а на расстоянии 100 (регулируемый параметр) усреднение с подтягиванием тейкпрофита ну скажем   в безубыток И!!! если сигнал меняется, то соответственно переворот и дальше как обычно. Оно все равно бывает переворот с небольшим минусом. С одной стороны без стопов опасно (обрывы связи т.п.), но просто можно добавить как вариант на любителя. На мой взгляд возможно это лучше чем просто фильтр использовать, т.к. неизвестно что найдешь, а что потеряешь. Буду благодарен кто попробует добавить эту мысль в код для проверки. Может и другие пары тоже приручатся.....

[Удален]  
saban:
Nirus:
Как в том анекдоте - "Ну чо, типа, ау-у!" Может кто-то выскажется? У кого какие результаты в тестировании?

Ну типа ау-у! :))))))


По-делу значится.

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

2. Настройки у меня свои. Мне советник нравится, но вот все времени нет фильтр какой-нибудь попробовать.

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

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

5. Ну и идея по поводу граализации данного советника. Может есть смысл вместо стопа, применить усреднение? А то как получается, попал в глобальный тренд (например идем вверх) и словил стоп, так он через час все равно откроется с продажой, т.е. против тренда..... но тренд по большому счету не отфильтруешь, т.к. пока отфильтруешь можно как раз пропустить те самые сделки, которые выводят из просадки. Вот и родилась мысль что вместо стопа надо пробовать усредняться (можно и мартина попробовать). Стоп обычно (у меня в настройках в районе 80-100 пунктов), ну так вот стоп не ставить, а на расстоянии 100 (регулируемый параметр) усреднение с подтягиванием тейкпрофита ну скажем   в безубыток И!!! если сигнал меняется, то соответственно переворот и дальше как обычно. Оно все равно бывает переворот с небольшим минусом. С одной стороны без стопов опасно (обрывы связи т.п.), но просто можно добавить как вариант на любителя. На мой взгляд возможно это лучше чем просто фильтр использовать, т.к. неизвестно что найдешь, а что потеряешь. Буду благодарен кто попробует добавить эту мысль в код для проверки. Может и другие пары тоже приручатся.....

Ну, слава богу... Я уж подумал, что все ушли косить бабло... :-)

1. Ключевое резюме - "в целом результат положителен".

2. На счёт фильтра - очень сомневаюсь. Мне кажется любой фильтр будет мешать и сильно скажется на прибыльности...

3. Действительно, без лосей - никуда, и, действительно, здесь главное - не нервничать... Что, конечно, очень непросто... :-) Причём необходимо понимать, что весомые профитные сделки случаются именно после двух подряд (иногда - трёх) лосевых сделок.

4. На других парах можно подобрать настройки, но по результатам моих прогонов могу сказать, что наибольшая прибыльность получается по евробаксу, а по баксофранку - наибольшая стабильность... А по-большому счёту не вижу необходимости использовать данного советника в мультивалютной торговле...

5. Категорически против "мартингейлизации" - это, во-первых, нарушает логику работы советника, во-вторых, это - путёвка к сливу...

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

В этом советнике меня беспокоит только одно - просто дьявольская зависимость результатов торговли  от параметра TimeBarOpen! В чём здесь логика?! А советник действительно отличный, из серии "Всё гениальное - просто!"

Какие будут мнения?

saban
74
saban  
5. Категорически против "мартингейлизации" - это, во-первых, нарушает логику работы советника, во-вторых, это - путёвка к сливу...

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

В этом советнике меня беспокоит только одно - просто дьявольская зависимость результатов торговли  от параметра TimeBarOpen! В чём здесь логика?! А советник действительно отличный, из серии "Всё гениальное - просто!"

Какие будут мнения?



Идем дальше.

1. А в настройках где 

lot + lot 

уже заложен Мартингейл. ))))))) да еще

DecreaseFactor = 0,16

и в итоге имеем после 2-х минусовых (не обязательно сработал стоп) советник входит лотом в 14 раз большим. Можно и снизить эту цифру, но факт остается фактом, мартингейл на лицо. И если в этом случае сработает стоп (85 пунктов), то получаем  убыток в 36%, но это повторюсь на любителя.

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


2. По поводу TimeBarOpen, да это по своей сути и есть как раз тот самый фильтр, но как бы внутри часа. Если поставить например  59 (как раз за минуту до закрытия свечи), то получим массу "неправильных"  входов. А так вроде как  и ничего, нормально  получается.

[Удален]  
Nirus:

В этом советнике меня беспокоит только одно - просто дьявольская зависимость результатов торговли  от параметра TimeBarOpen! В чём здесь логика?! А советник действительно отличный, из серии "Всё гениальное - просто!"

Какие будут мнения?



На рынке нет логики, поэтому не надо искать логику там где её нет Всё что нам подвластно это только управление рисками ...
[Удален]  
saban:
5. Категорически против "мартингейлизации" - это, во-первых, нарушает логику работы советника, во-вторых, это - путёвка к сливу...

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

В этом советнике меня беспокоит только одно - просто дьявольская зависимость результатов торговли  от параметра TimeBarOpen! В чём здесь логика?! А советник действительно отличный, из серии "Всё гениальное - просто!"

Какие будут мнения?



Идем дальше.

1. А в настройках где 

lot + lot 

уже заложен Мартингейл. ))))))) да еще

DecreaseFactor = 0,16

и в итоге имеем после 2-х минусовых (не обязательно сработал стоп) советник входит лотом в 14 раз большим. Можно и снизить эту цифру, но факт остается фактом, мартингейл на лицо. И если в этом случае сработает стоп (85 пунктов), то получаем  убыток в 36%, но это повторюсь на любителя.

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


2. По поводу TimeBarOpen, да это по своей сути и есть как раз тот самый фильтр, но как бы внутри часа. Если поставить например  59 (как раз за минуту до закрытия свечи), то получим массу "неправильных"  входов. А так вроде как  и ничего, нормально  получается.

Saban, вот тут ты как раз принципиально ошибаешься! Мартингейл - это, упрощённо говоря, последовательное открытие ордеров с увеличением лота В ОДНУ И ТУ ЖЕ СТОРОНУ С ОДНИМ УСРЕДНЯЮЩИМ СТОПОМ ДЛЯ ВСЕХ И ДО ПОБЕДНОГО КОНЦА! Который как раз может оказаться не победным, а весьма плачевным. Здесь же каждый последующий ордер открывается только после закрытия предыдущего, а компенсирующий ордер открывается не обязательно в ту же сторону, что и два предыдущих убыточных, да и два последовательно убыточных ордера тоже могут быть противоположными! Поэтому принципом мартингейла здесь и не пахнет!

Направление открытия ордеров здесь зависит только от расположения текущей цены относительно МА...