Опытные тестеры сюда! В чем проблема тестерных граалей? - страница 3

 
Сделали бы в маркете, например тот, кто хочет купить продукт скачивает демку робота и ставит её на демо-счет. Я как продавец указываю дату (можно в коде прописать) до кого числа будет работать демка. Так можно хоть как то проверить продукт
 

Вот к примеру такой код закрытия выводит сливную стратегию в ноль, а более-менее нормальную в хороший плюс)

// ========================================================================================================
//                                                                                     == (c) Kino 2015  ==
// ========================================================================================================

bool ExpansionLotsProfit (int tr)
{
double ml = MarketInfo(Symbol(),MODE_LOTSTEP);
int cnt;
double close_lot;

for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
   {
   bool Select = OrderSelect(cnt,SELECT_BY_POS);
   if (OrderSymbol() != Symbol()) continue; //Опционально
   if (OrderMagicNumber()!=mn) continue; //Опционально
   close_lot=NormalizeDouble(OrderLots()/2,2);
   if (close_lot<ml) close_lot=ml;
   if (OrderType()==OP_BUY)
      {
      if (OrderStopLoss()==0 ||OrderStopLoss() < OrderOpenPrice())
         {
         if ((MarketInfo(OrderSymbol(),MODE_BID) - (OrderOpenPrice() + (OrderCommission()*MarketInfo(OrderSymbol(),MODE_POINT)) + (OrderSwap()*MarketInfo(OrderSymbol(),MODE_POINT)))) > (tr*MarketInfo(OrderSymbol(),MODE_POINT)))
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            bool ModifyBuy_1 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_BID) - tr*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_BID) + tr*2*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),0,CLR_NONE);
               if(!ModifyBuy_1)
               Print("Ошибка модификации ордера Buy(1). Код ошибки=",GetLastError());
               else
               Print("Цена Stop Loss ордера успешно модифицирована.");

            bool CloseBuy_1 = OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),Slippage,CLR_NONE);
               if(!CloseBuy_1)
               Print("Ошибка закрытия ордера Buy(1). Код ошибки=",GetLastError());
               else
               Print("Ордер успешно закрыт.");
            }
         }
      else
         {
         if ((MarketInfo(OrderSymbol(),MODE_BID) - OrderStopLoss()) > (tr*MarketInfo(OrderSymbol(),MODE_POINT)*2))
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            bool ModifyBuy_2 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_BID) - tr*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_BID) + tr*2*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),0,CLR_NONE);
               if(!ModifyBuy_2)
               Print("Ошибка модификации ордера Buy(2). Код ошибки=",GetLastError());
               else
               Print("Цена Stop Loss ордера успешно модифицирована.");
            
            bool CloseBuy_2 = OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),Slippage,CLR_NONE);
               if(!CloseBuy_2)
               Print("Ошибка закрытия ордера Buy(2). Код ошибки=",GetLastError());
               else
               Print("Ордер успешно закрыт.");
            }
         }
      }
   if (OrderType()==OP_SELL)
      {
      if (OrderStopLoss()==0 ||OrderStopLoss() > OrderOpenPrice())
         {
         if (((OrderOpenPrice() - (OrderCommission()*MarketInfo(OrderSymbol(),MODE_POINT)) - (OrderSwap()*MarketInfo(OrderSymbol(),MODE_POINT))) - MarketInfo(OrderSymbol(),MODE_ASK) ) > (tr*MarketInfo(OrderSymbol(),MODE_POINT)))
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            bool ModifySell_1 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_ASK) + tr*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_ASK) - tr*2*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),0,CLR_NONE);
               if(!ModifySell_1)
               Print("Ошибка модификации ордера Sell(1). Код ошибки=",GetLastError());
               else
               Print("Цена Stop Loss ордера успешно модифицирована.");
            
            bool CloseSell_1 = OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),Slippage,CloseColor);
               if(!CloseSell_1)
               Print("Ошибка закрытия ордера Sell(1). Код ошибки=",GetLastError());
               else
               Print("Ордер успешно закрыт.");
            }
         }
      else
         {
         if (OrderStopLoss()-MarketInfo(OrderSymbol(),MODE_ASK)>tr*MarketInfo(OrderSymbol(),MODE_POINT)*2)
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            bool ModifySell_2 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_ASK) + tr*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),NormalizeDouble((MarketInfo(OrderSymbol(),MODE_ASK) - tr*2*MarketInfo(OrderSymbol(),MODE_POINT)),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),0,CLR_NONE);
               if(!ModifySell_2)
               Print("Ошибка модификации ордера Sell(2). Код ошибки=",GetLastError());
               else
               Print("Цена Stop Loss ордера успешно модифицирована.");
            
            bool CloseSell_2 = OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),Slippage,CloseColor);
               if(!CloseSell_2)
               Print("Ошибка закрытия ордера Sell(2). Код ошибки=",GetLastError());
               else
               Print("Ордер успешно закрыт.");
            }
         }
      }
   
   
   }
return (True); 
}
// End
 
Vladimir Zubov:
Потому что тестер для программистов, а не для оценки потенциальной прибыли/убытков. Чтобы код тестить и всё.

Не согласен. Тестер как раз вполне себе может оценить потенциальную прибыль-убытки. Просто важно знать пределы его применимости. Тестер МТ5 плохо моделирует внутрибарное поведение цены. Тестер МТ4 - может и на крупных таймфреймах плохо моделировать.

Однако, если советник работает на открытии баров М5 и старше - он вполне адекватно отражает работу эксперта.

 
Vladimir Zubov:

Вот к примеру такой код закрытия выводит сливную стратегию в ноль, а более-менее нормальную в хороший плюс)

Это, как я понимаю, тралл ?
 
Anton Zverev:
Сделали бы в маркете, например тот, кто хочет купить продукт скачивает демку робота и ставит её на демо-счет. Я как продавец указываю дату (можно в коде прописать) до кого числа будет работать демка. Так можно хоть как то проверить продукт
Я не знаю как в маркете работает скачанная демка, но если ограничить по времени то найдутся "кулибины" будут копировать друг у друга.
 
George Merts:
Это, как я понимаю, тралл ?
Да, это тралл со сбросом лотов.
 
Vladimir Zubov:
Я не знаю как в маркете работает скачанная демка, но если ограничить по времени то найдутся "кулибины" будут копировать друг у друга.
В маркете демку можно только в тестере погонять. А что мешает с тестера копировать друг у друга?))
 
Anton Zverev:
В маркете демку можно только в тестере погонять. А что мешает с тестера копировать друг у друга?))
Ну смысл то на реал зарядить, с демки можно копировать если 2-3 сделки в неделю и то с большой погрешностью.
 
Vladimir Zubov:
Ну смысл то на реал зарядить, с демки можно копировать если 2-3 сделки в неделю и то с большой погрешностью.

Думаю, несложный копировщик легко справится.

А если советник работает на дневках - то без проблем можно и руками копировать.

 
Vladimir Zubov:
Ну смысл то на реал зарядить, с демки можно копировать если 2-3 сделки в неделю и то с большой погрешностью.
Ну да не подумал, что с демки копировать можно