Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы - страница 27

 
fxsaber:
Возможно, пропустили.

Не пропустили.

Текущий формат opt-файла не позволяет. Тут думать надо.

 
Slava:

Не пропустили.

Текущий формат opt-файла не позволяет. Тут думать надо.

Вроде, ничего менять не надо.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| входные параметры тестирования                                   |
//+------------------------------------------------------------------+
struct TestCacheInput
  {
   wchar_t           name[64];
   int               flag;                    // оптимизируемый параметр
   int               type;                    // тип TYPE_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход

Каждый входной задается структурой, где есть нужные поля.

 

Сейчас очень легко узнать

  • Все настройки Тестера и входные параметры советника.
  • Все стат. данные каждого прохода Оптимизации.


Но не получается узнать, например, стат. данные одиночного прохода. Понятно, что есть tst-формат. Но было бы удобно в Тестере во вкладке Бэктест задействовать CTRL+C для формирования сет-файла со стат. данными

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: TesterCache

fxsaber, 2019.11.11 04:45

; saved on 2019.11.13 19:40:01
; Experts\Examples\MACD\MACD Sample LImitTP.ex5
; EURUSD
; 2019.09.01 - 2019.11.13
;
InpLots=0.1
InpTakeProfit=200||10||5||500||Y
InpTrailingStop=290||30||10||300||Y
InpMACDOpenLevel=5||5||5||200||Y
InpMACDCloseLevel=180||5||5||200||Y
InpMATrendPeriod=8||1||1||200||Y
;
; initial_deposit = 10000.0
; withdrawal = 0.0
; profit = 479.15
; grossprofit = 479.15
; grossloss = 0.0
; maxprofit = 99.8
; minprofit = 0.0
; conprofitmax = 479.15
; maxconprofit = 479.15
; conlossmax = 0.0
; maxconloss = 0.0
; balance_min = 10000.0
; maxdrawdown = 0.0
; drawdownpercent = 0.0
; reldrawdown = 0.0
; reldrawdownpercent = 0.0
; equity_min = 9997.700000000001
; maxdrawdown_e = 253.6000000000004
; drawdownpercent_e = 2.457388152985982
; reldrawdown_e = 253.6000000000004
; reldrawdownpercnt_e = 2.457388152985982
; expected_payoff = 47.91500000000001
; profit_factor = 1.797693134862316e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316e+308
; custom_fitness = 0.0
; deals = 15
; trades = 10
; profittrades = 10
; losstrades = 0
; shorttrades = 6
; longtrades = 4
; winshorttrades = 6
; winlongtrades = 4
; conprofitmax_trades = 10
; maxconprofit_trades = 10
; conlossmax_trades = 0
; maxconloss_trades = 0
; avgconwinners = 10
; avgconloosers = 0

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


Это вывод полей структуры ExpTradeSummary.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| Структура для статистики торговли                                |
//+------------------------------------------------------------------+
struct ExpTradeSummary;

#define TOSTRING(A) #A + " = " + (string)(A) + "\n"

  string ToString( void ) const
  {
    return(
      TOSTRING(initial_deposit) +      // начальный депозит
      TOSTRING(withdrawal) +           // снято средств
      TOSTRING(profit) +               // общая прибыль (+)
      TOSTRING(grossprofit) +          // общий плюс
      TOSTRING(grossloss) +            // общий минус
      TOSTRING(maxprofit) +            // максимально прибыльная сделка
      TOSTRING(minprofit) +            // максимально убыточная сделка
      TOSTRING(conprofitmax) +         // прибыль максимальной последовательности прибыльных сделок
      TOSTRING(maxconprofit) +         // максимальная прибыль среди последовательностей
      TOSTRING(conlossmax) +           // убыток максимальной последовательности убыточных сделок
      TOSTRING(maxconloss) +           // максимальный убыток среди последовательностей
      TOSTRING(balance_min) +          // минимальное значение баланса (для расчёта абсолютной просадки)
      TOSTRING(maxdrawdown) +          // максимальная просадка по балансу
      TOSTRING(drawdownpercent) +      // отношение максимальной просадки по балансу к её пику
      TOSTRING(reldrawdown) +          // максимальная относительная просадка по балансу в деньгах
      TOSTRING(reldrawdownpercent) +   // максимальная относительная просадка по балансу в процентах
      TOSTRING(equity_min) +           // минимальное значение equity (для расчёта абсолютной просадки по equity)
      TOSTRING(maxdrawdown_e) +        // максимальная просадка по equity
      TOSTRING(drawdownpercent_e) +    // отношение максимальной просадки по equity к её пику (+)
      TOSTRING(reldrawdown_e) +        // максимальная относительная просадка по equity в деньгах
      TOSTRING(reldrawdownpercnt_e) +  // максимальная относительная просадка по equity в процентах
      TOSTRING(expected_payoff) +      // матожидание выигрыша (+)
      TOSTRING(profit_factor) +        // показатель прибыльности (+)
      TOSTRING(recovery_factor) +      // фактор восстановления (+)
      TOSTRING(sharpe_ratio) +         // коэффициент Шарпа (+)
      TOSTRING(margin_level) +         // минимальный уровень маржи
      TOSTRING(custom_fitness) +       // пользовательский фитнесс - результат OnTester (+)
      TOSTRING(deals) +                // общее количество сделок
      TOSTRING(trades) +               // количество сделок out/inout
      TOSTRING(profittrades) +         // количество прибыльных
      TOSTRING(losstrades) +           // количество убыточных
      TOSTRING(shorttrades) +          // количество шортов
      TOSTRING(longtrades) +           // количество лонгов
      TOSTRING(winshorttrades) +       // количество прибыльных шортов
      TOSTRING(winlongtrades) +        // количество прибыльных лонгов
      TOSTRING(conprofitmax_trades) +  // максимальная последовательность прибыльных сделок
      TOSTRING(maxconprofit_trades) +  // последовательность максимальной прибыли
      TOSTRING(conlossmax_trades) +    // максимальная последовательность убыточных сделок
      TOSTRING(maxconloss_trades) +    // последовательность максимального убытка
      TOSTRING(avgconwinners) +        // среднее количество последовательных прибыльных сделок
      TOSTRING(avgconloosers)          // среднее количество последовательных убыточных сделок
    );
 

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

Сейчас в кеши попадает только один пользовательский параметр  - OnTester.


Было бы очень удобно, если бы ExpTradeSummary потолстел еще на три-пять double-а. Которые можно было бы заполнить через

double OnTester( double &CustomDoubles[] );


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

 

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

Разумно ли просить об улучшении Тестера стратегий, чтобы добавить возможность тестировать торговую ситуацию, которая никогда не происходит на демо-счете, а только на реальном счете? Поскольку действительно сложно создать надежный код без возможности его полного тестирования.

В основном это связано с работой с централизованным рынком (в отличие от Forex / CFD). Например, частичное заполнение заказа, на демо-счете это никогда не происходит (насколько я знаю), но на реальном счете на фьючерсах или акциях это обычная ситуация. Было бы очень полезно иметь инструмент, позволяющий имитировать такую ситуацию.

Частичное заполнение - только пример, если Metaquotes посчитает хорошей идеей работать с такими функциями, я готов централизовать идеи и предоставить подробное описание таких функций. (Ничего конкретного для моих собственных потребностей).

Спасибо за ваше время и ответ (ы).

 
Alain Verleyen:

сложно создать надежный код без возможности его полного тестирования.

Для этого каждый серьезный разработчик советников отлаживает свои торговые библиотеки годами на реальных счетах.

Без этого никак нельзя создать надежный код.

 
fxsaber:

Для этого каждый серьезный разработчик советников отлаживает свои торговые библиотеки годами на реальных счетах.

Без этого никак нельзя создать надежный код.

Так-то оно так, но такой функционал помог бы избежать множества времязатратных тестов на реальном счёте.

 
Artyom Trishkin:

Так-то оно так, но такой функционал помог бы избежать множества времязатратных тестов на реальном счёте.

Есть две задачи.

  1. Адекватная торговая бибиотека, которая просто умеет показывать текущее торговое состояние, историю торгов и отправлять приказы. Здесь Тестер почти не помощник. Демо может сильно помочь, если проводить стресс-тесты. На реале их не воссоздать - дорого. Поэтому здесь только демо на огромном количестве символов/серверов. Таких библиотек по пальцам одной руки.
  2. Отработка торговой логики частичных исполнений, реджектов и т.д. Этот пункт гораздо проще первого. И многократно решался на том же MT4 без всяких Тестеров. Это, действительно, просто.

Тестер может помочь только во втором пункте, простом. Реализовывать частичное исполнение можно через last-объем, измеряя якобы "потолок ликвидности" ТС. Но это будет крайне грубой оценкой.


При этом нужно понимать, что любые навороты в Тестере - это доп. тормоза даже в том случае, если эти навороты не используются.

 
fxsaber :

Для этого каждый серьезный разработчик советников отлаживает свои торговые библиотеки годами на реальных счетах .

Без этого никак нельзя создать надежный код.

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

К сожалению, у меня нет способа отфильтровать их.

Никогда не отвечайте на мой пост, пожалуйста, вы тратите мое время из-за уведомлений.

 
Alain Verleyen:

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

Рекомендую начать сомневаться в адекватности используемых вами автоматических переводчиков с русского языка.


К сожалению, у меня нет способа отфильтровать их.

Никогда не отвечайте на мой пост, пожалуйста, вы тратите мое время из-за уведомлений.

OK.