Советники: BSS 1_0

 

BSS 1_0:

Простой советник на основе скользящих средних. Таймфрейм Н1.

Author: BredSS

 

Взял на себя смелость привести его в порядок для возможного тестирования. Теперь его можно тестировать с разными периодами МА, лотом и рисками (Если Lot=0, то лот вычисляется через risk)

У меня получилось при МА 11, 27, 48 на EURUSD H1 за 2013 год прибыль +76%, при просадке 15%.

НО не рекомендую использовать его в торговле без ограничительного стоп-лоса!! Т.к. вход в торговлю инверсный ! Т.е. цена допустим идет вниз, а открывается Buy и ждется, когда закроется. Поэтому есть очень серьёзные "скрытые" просадки.

//+------------------------------------------------------------------+
//|                                                      BSS_v01.mq4 |
//+------------------------------------------------------------------+
#property copyright "BredSS"
#property link      ""
//+------------------------------------------------------------------+
extern double Lot          = 0;
extern double risk         = 0.01;
extern int    period_MA9   = 11;
extern int    period_MA21  = 27;
extern int    period_MA50  = 48;
extern int    SL           = 0;
extern int    Magic        = 66766;
//+------------------------------------------------------------------+
int      NObay;
int      NOsell;
double   MA9, MA21, MA50;
double   Lot1;
double   dig_lot;
double   min_l, max_l;
double   sl;
//+------------------------------------------------------------------+
int init()
{
   min_l=MarketInfo(Symbol(),MODE_MINLOT);
   max_l=MarketInfo(Symbol(),MODE_MAXLOT);
   double n_lot=MarketInfo(Symbol(),MODE_LOTSTEP);
   dig_lot=NormalizeDouble(MathLog(1.0/n_lot)/MathLog(10.0),0);
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
int start()
{
   MA9  = iMA(Symbol(), PERIOD_H1, period_MA9,  0, MODE_EMA, PRICE_CLOSE, 1);
   MA21 = iMA(Symbol(), PERIOD_H1, period_MA21, 0, MODE_EMA, PRICE_CLOSE, 1);
   MA50 = iMA(Symbol(), PERIOD_H1, period_MA50, 0, MODE_EMA, PRICE_CLOSE, 1);
   //......................................
   if (Lot<=0)
   {
      double Balans =  AccountBalance();
      Lot1 = (Balans * risk)/(30*10); 
   }
   else
      Lot1=Lot;
   if (Lot1<min_l)Lot1=min_l;
   if (Lot1>max_l)Lot1=max_l;
   Lot1=NormalizeDouble(Lot1,dig_lot);
   //......................................
   double lots;
   int tik=ticket_ord(lots);
   //......................................
   RefreshRates();     
   if (tik == 0)  // открыть ордер
   {
      if (MA9 < MA21 && MA21 < MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask-SL*Point,Digits);
         NObay=OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,Digits),3,sl,0,0,Magic,0,Blue);
         tik=ticket_ord(lots);
      }
      if (MA9 > MA21 && MA21 > MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask+SL*Point,Digits);
         NOsell=OrderSend(Symbol(),OP_SELL,Lot1,NormalizeDouble(Bid,Digits),3,sl,0,0,Magic,0,Red);
         tik=ticket_ord(lots);
      }
   }
   //......................................
                  // закрыть ордер
   if (tik > 0 && MA9 > MA21)OrderClose( tik,lots,Bid,3,Green); 
   if (tik < 0 && MA9 < MA21)OrderClose(-tik,lots,Ask,3,Green); 
   //......................................
   return(0);
}
//+------------------------------------------------------------------+
int ticket_ord(double& lot)
{     // возвращает тикет Buy > 0 и Sell < 0 и 0, если нет ордеров
   int ticket = 0;
   lot=0;
   for (int trade = OrdersTotal() -1; trade >=0; trade --)
      if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES))
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic)
         {  
            if (OrderType() ==  OP_BUY)
            {
               ticket=OrderTicket();
               lot=OrderLots();
               break;
            }
            if (OrderType() ==  OP_SELL)
            {
               ticket=-OrderTicket();
               lot=OrderLots();
               break;
            }
         }
      
   return(ticket);
}  
//------------------------------------------------
 

Нормально.

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

Гг...

 
Evgen57:

Взял на себя смелость привести его в порядок для возможного тестирования. Теперь его можно тестировать с разными периодами МА, лотом и рисками (Если Lot=0, то лот вычисляется через risk)

У меня получилось при МА 11, 27, 48 на EURUSD H1 за 2013 год прибыль +76%, при просадке 15%.

НО не рекомендую использовать его в торговле без ограничительного стоп-лоса!! Т.к. вход в торговлю инверсный ! Т.е. цена допустим идет вниз, а открывается Buy и ждется, когда закроется. Поэтому есть очень серьёзные "скрытые" просадки.

//+------------------------------------------------------------------+
//|                                                      BSS_v01.mq4 |
//+------------------------------------------------------------------+
#property copyright "BredSS"
#property link      ""
//+------------------------------------------------------------------+
extern double Lot          = 0;
extern double risk         = 0.01;
extern int    period_MA9   = 11;
extern int    period_MA21  = 27;
extern int    period_MA50  = 48;
extern int    SL           = 0;
extern int    Magic        = 66766;
//+------------------------------------------------------------------+
int      NObay;
int      NOsell;
double   MA9, MA21, MA50;
double   Lot1;
double   dig_lot;
double   min_l, max_l;
double   sl;
//+------------------------------------------------------------------+
int init()
{
   min_l=MarketInfo(Symbol(),MODE_MINLOT);
   max_l=MarketInfo(Symbol(),MODE_MAXLOT);
   double n_lot=MarketInfo(Symbol(),MODE_LOTSTEP);
   dig_lot=NormalizeDouble(MathLog(1.0/n_lot)/MathLog(10.0),0);
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
int start()
{
   MA9  = iMA(Symbol(), PERIOD_H1, period_MA9,  0, MODE_EMA, PRICE_CLOSE, 1);
   MA21 = iMA(Symbol(), PERIOD_H1, period_MA21, 0, MODE_EMA, PRICE_CLOSE, 1);
   MA50 = iMA(Symbol(), PERIOD_H1, period_MA50, 0, MODE_EMA, PRICE_CLOSE, 1);
   //......................................
   if (Lot<=0)
   {
      double Balans =  AccountBalance();
      Lot1 = (Balans * risk)/(30*10); 
   }
   else
      Lot1=Lot;
   if (Lot1<min_l)Lot1=min_l;
   if (Lot1>max_l)Lot1=max_l;
   Lot1=NormalizeDouble(Lot1,dig_lot);
   //......................................
   double lots;
   int tik=ticket_ord(lots);
   //......................................
   RefreshRates();     
   if (tik == 0)  // открыть ордер
   {
      if (MA9 < MA21 && MA21 < MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask-SL*Point,Digits);
         NObay=OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,Digits),3,sl,0,0,Magic,0,Blue);
         tik=ticket_ord(lots);
      }
      if (MA9 > MA21 && MA21 > MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask+SL*Point,Digits);
         NOsell=OrderSend(Symbol(),OP_SELL,Lot1,NormalizeDouble(Bid,Digits),3,sl,0,0,Magic,0,Red);
         tik=ticket_ord(lots);
      }
   }
   //......................................
                  // закрыть ордер
   if (tik > 0 && MA9 > MA21)OrderClose( tik,lots,Bid,3,Green); 
   if (tik < 0 && MA9 < MA21)OrderClose(-tik,lots,Ask,3,Green); 
   //......................................
   return(0);
}
//+------------------------------------------------------------------+
int ticket_ord(double& lot)
{     // возвращает тикет Buy > 0 и Sell < 0 и 0, если нет ордеров
   int ticket = 0;
   lot=0;
   for (int trade = OrdersTotal() -1; trade >=0; trade --)
      if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES))
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic)
         {  
            if (OrderType() ==  OP_BUY)
            {
               ticket=OrderTicket();
               lot=OrderLots();
               break;
            }
            if (OrderType() ==  OP_SELL)
            {
               ticket=-OrderTicket();
               lot=OrderLots();
               break;
            }
         }
      
   return(ticket);
}  
//------------------------------------------------

его большая прибыль идет от громадного размера лота, так можно сделать на любом советнике....))
 
Evgen57:

Т.к. вход в торговлю инверсный ! Т.е. цена допустим идет вниз, а открывается Buy и ждется, когда закроется. Поэтому есть очень серьёзные "скрытые" просадки.

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

//+------------------------------------------------------------------+
//|                                                      BSS_v01.mq4 |
//+------------------------------------------------------------------+
#property copyright "BredSS"
#property link      ""
//+------------------------------------------------------------------+
extern double Lot          = 0;
extern double risk         = 0.01;
extern int    period_MA9   = 11;
extern int    period_MA21  = 27;
extern int    period_MA50  = 48;
extern int    SL           = 0;
extern int    Magic        = 66766;
//+------------------------------------------------------------------+
int      NObay;
int      NOsell;
double   MA9, MA21, MA50;
double   Lot1;
double   dig_lot;
double   min_l, max_l;
double   sl;
//+------------------------------------------------------------------+
int init()
{
   min_l=MarketInfo(Symbol(),MODE_MINLOT);
   max_l=MarketInfo(Symbol(),MODE_MAXLOT);
   double n_lot=MarketInfo(Symbol(),MODE_LOTSTEP);
   dig_lot=NormalizeDouble(MathLog(1.0/n_lot)/MathLog(10.0),0);
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
int start()
{
   MA9  = iMA(Symbol(), PERIOD_H1, period_MA9,  0, MODE_EMA, PRICE_CLOSE, 1);
   MA21 = iMA(Symbol(), PERIOD_H1, period_MA21, 0, MODE_EMA, PRICE_CLOSE, 1);
   MA50 = iMA(Symbol(), PERIOD_H1, period_MA50, 0, MODE_EMA, PRICE_CLOSE, 1);
   //......................................
   if (Lot<=0)
   {
      double Balans =  AccountBalance();
      Lot1 = (Balans * risk)/(30*10); 
   }
   else
      Lot1=Lot;
   if (Lot1<min_l)Lot1=min_l;
   if (Lot1>max_l)Lot1=max_l;
   Lot1=NormalizeDouble(Lot1,dig_lot);
   //......................................
   double lots;
   int tik=ticket_ord(lots);
   //......................................
   RefreshRates();     
   if (tik == 0)  // открыть ордер
   {
      if (MA9 < MA21 && MA21 < MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask-SL*Point,Digits);
         NObay=OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,Digits),3,sl,0,0,Magic,0,Blue);
         tik=ticket_ord(lots);
      }
      if (MA9 > MA21 && MA21 > MA50)
      {
         if (SL==0)
            sl=0;
         else
            sl=NormalizeDouble(Ask+SL*Point,Digits);
         NOsell=OrderSend(Symbol(),OP_SELL,Lot1,NormalizeDouble(Bid,Digits),3,sl,0,0,Magic,0,Red);
         tik=ticket_ord(lots);
      }
   }
   //......................................
                  // закрыть ордер
   if (tik > 0 && MA9 > MA21)OrderClose( tik,lots,Bid,3,Green); 
   if (tik < 0 && MA9 < MA21)OrderClose(-tik,lots,Ask,3,Green); 
   //......................................
   return(0);
}
//+------------------------------------------------------------------+
int ticket_ord(double& lot)
{     // возвращает тикет Buy > 0 и Sell < 0 и 0, если нет ордеров
   int ticket = 0;
   lot=0;
   for (int trade = OrdersTotal() -1; trade >=0; trade --)
      if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES))
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic)
         {  
            if (OrderType() ==  OP_BUY)
            {
               ticket=OrderTicket();
               lot=OrderLots();
               break;
            }
            if (OrderType() ==  OP_SELL)
            {
               ticket=-OrderTicket();
               lot=OrderLots();
               break;
            }
         }
      
   return(ticket);
}  
//------------------------------------------------

 
не могу советника добавить сюда хелпп
 

Хммм...... никак не в курю.

У всех графики баланса схожи с графиками автора? Например у меня наоборот ((((((..... ничего не менял просто в тестере прогнал и все. Как будто совсем другой советник.

Уважаемый BredSS, может быть цифры в выложенном коде другие или что-то еще не так? Пробовал исправленный код от Evgen57 и все равно не то. Есть тут какая-то загвоздка в коде и отчетах от автора.....

 
saban:

Хммм...... никак не в курю.

У всех графики баланса схожи с графиками автора? Например у меня наоборот ((((((..... ничего не менял просто в тестере прогнал и все. Как будто совсем другой советник.

Уважаемый BredSS, может быть цифры в выложенном коде другие или что-то еще не так? Пробовал исправленный код от Evgen57 и все равно не то. Есть тут какая-то загвоздка в коде и отчетах от автора.....


Сложно сказать... Может качество моделирования другое! А так все цифры те же.
 
saban:

Хммм...... никак не в курю.

У всех графики баланса схожи с графиками автора? Например у меня наоборот ((((((..... ничего не менял просто в тестере прогнал и все. Как будто совсем другой советник.

Уважаемый BredSS, может быть цифры в выложенном коде другие или что-то еще не так? Пробовал исправленный код от Evgen57 и все равно не то. Есть тут какая-то загвоздка в коде и отчетах от автора.....


4ех значные котировки попробуйте