Советники: Day_Traiding_PAMXA

 

Day_Traiding_PAMXA:

Переделанный Day_Traiding. На тестере за 2009 работает отлично. Тайфрейм D1. Используемые графики: AO, ADX и Stochastic.

Author: PAMXA

 

Вот твой график на сегодняшний день:

...на твоем тесте относительная просадка 85%...., так, что и следовало ожидать.

 
ViDan888:

...на твоем тесте относительная просадка 85%...., так, что и следовало ожидать.

Вот охота Вам разрушать идиллию? Такая красивая картинка, прямо мечта трейдера!

 

Я и сам это видел, а если риск уменьшить, то и просадка будет меньше. Кстати у меня почему-то не сливает. Но я просил совета определенного т.е. что можно было бы сделать, а то что это не грааль и дураку понятно. Просто если бы его доделать, то он мог бы приносить прибыль или если это говно, то так и скажите - буду думать в другом направлении.

P.S.: Дествительно воспользовался метатрейдером forex4you и там на тестере слив, а на метатейдере4 те результаты, что вы видели на моем графике)))

 
ViDan888:

Вот твой график на сегодняшний день:

...на твоем тесте относительная просадка 85%...., так, что и следовало ожидать.


Это просто пример что бывает если работать без стоплосса.

Вешняя переменная extern double StopLoss = 50; не используется всоветнике.

 

К сожалению стоплос погоды не играет. Я пробовал его включать, но толку мало. Там бы какую-то проверку добавить...хотя наверное ерунда вышла - буду дальше думать, если кто предложит что-то дельное буду рад.

 

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

 
arman77:

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

:)))

Вообще то тут не место для анекдотов 

 

PAMXA, а дайте ссылку на оригинал DayTraiding. облизал я ваш советник и получил слив :) хотелось бы взглянуть на оригинал, разобраться со стратегией.

з.ы. сейчас идет оптимизация параметров, отпишу когда будет что-то готово (около 8 часов)

а пока вот:

extern double TakeProfit = 50;
extern double Lots = 0.01;
extern double TrailingStop = 20;
extern double StopLoss = 500;
extern   bool     UseMM = true;
//extern   bool     MicroAcct = true;
extern   double   Risk = 10;
double   var_96 = 0;
string   var_240 = "";
double sL;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double stoc2k_0;
  double AO;
  double adx_0, adx_1;
  int cnt, ticket, total;
//server Time
Comment(var_240,"\nServer Time = ",TimeToStr(TimeCurrent(),TIME_MINUTES));
 
// initial data checks
   if(Bars<10)
     {
      Print("bars less than 10");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);
     }
     
// to simplify the coding and speed up access
AO=iAO(NULL,0,150);
adx_0=iADX(NULL,0,14,PRICE_TYPICAL,MODE_SIGNAL,0);
adx_1=iADX(NULL,0,14,PRICE_TYPICAL,MODE_SIGNAL,1);
stoc2k_0=iStochastic(NULL,0,5,3,3,MODE_SMA,NULL,MODE_MAIN,0);
// identifying open orders
   total=OrdersTotal();
   if(total<1)
   {
   if(AccountFreeMargin()<(100000*Lots))
   {
   Print("We have no money. Free Margin = ", AccountFreeMargin());
   return(0);  
   }
   
// check for long position (BUY) possibility
   if(AO<0 && adx_0 >= Ask && adx_1<adx_0 && stoc2k_0<20)
   {
   if(StopLoss>0)
   {
   sL = Ask-StopLoss*Point;
   }
   else sL = 0;
   ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,sL,Ask+TakeProfit*Point,0,0,Green);
   if(ticket>0)
   Print("Day Trading_PAMXA Buying : ", Symbol());
   {
   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
   } 
   return(0);
   }
   
// check for short position (SELL) possibility
   if(AO>0 && adx_0 >= Ask && adx_1<adx_0 && stoc2k_0>20)
   {
   if(StopLoss>0)
   {
   sL = Bid+StopLoss*Point;
   }
   else sL = 0;
   ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,sL,Bid-TakeProfit*Point,0,0,Red);
   if(ticket>0)
   Print("Day Trading_PAMXA Selling : ", Symbol());
   {
   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
   }
   return(0);
   }
   return(0);
   }
   
// control of open orders
   for(cnt=0;cnt<total;cnt++)
   {
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   if(OrderType()<=OP_SELL && 
   OrderSymbol()==Symbol())
   {
   if(OrderType()==OP_BUY)
   {
// long positions
   if(AO>0 && adx_0 >= Ask && adx_1<adx_0 && stoc2k_0>70)
   {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
   return(0);
   }
// check for trailing stop
   if(TrailingStop>0)  
   {                 
   if(Bid-OrderOpenPrice()>Point*TrailingStop)
   {
   if(OrderStopLoss()<Bid-Point*TrailingStop)
   {
   OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
   return(0);
   }
   }
   }
   }
else
// short positions
   {
   if(AO<0 && adx_0 >= Ask && adx_1<adx_0 && stoc2k_0<35)
      {
   OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
   return(0);
   }
// check for trailing stop
   if(TrailingStop>0)  
   {                 
   if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
   {
   if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
   {
   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
   return(0);
   }
   }
   }
   }
   }
   }
   return(0);
   }
   
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double LotsOptimized()
{
if (UseMM == false) return(Lots);
double lots = Lots;
int    ordtotal = OrdersHistoryTotal();
int    losscnt = 0;
double var_LotsOptimized_16 = 0;
int    digits = 2;
//if (MicroAcct == true) digits = 2;
if (MarketInfo(Symbol(),MODE_LOTSTEP) == 1.0) digits = 1;
lots = NormalizeDouble(AccountFreeMargin() * Risk / 100.0 / 1000.0,digits);
if (var_96 > 0.0)
   {
   for (int i = ordtotal - 1; i >= 0; i--)
      {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == 0)
         {
         Print("Error in history!");
         break;
         }
      if ((OrderSymbol() != Symbol()) || (OrderType() > OP_SELL)) continue;
      if (OrderProfit() > 0.0) break;
      if (OrderProfit() < 0.0) losscnt++;
      }
   if (losscnt > 1) lots = NormalizeDouble(lots - lots * losscnt / var_96,digits);
   }
if ((lots < 0.1) && (digits == 1)) lots = 0.1;
if ((lots < 0.01) && (digits == 2)) lots = 0.01;
if (lots > 2.0) lots = 2;
return(lots);
}
 

Параметры следующие:

extern double TakeProfit = 45;
extern double Lots = 0.01;
extern double TrailingStop = 50;
extern double StopLoss = 100;
extern bool UseMM = true;
extern double Risk = 30;

но я бы на реал с таким не сунулся. по истории сливает... 2009 год не показатель, и стратегия хромает.

 

Вот ссылка http://codebase.mql4.com/ru/480 - он тоже сливает я думал что изменив используемые графики можно улучшить результат, но как видно ошибся. Сейчас появится чуть больше времени придумаю что-то другое и может получше.

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