MetaTrader 5 Strategy Tester: bugs, bugs, sugestões para melhorias - página 27

 
fxsaber:
Provavelmente falhou.

Eles não falharam.

O formato actual do ficheiro opt não o permite. É preciso pensar no assunto.

 
Slava:

Eles não falharam.

O formato actual do ficheiro opt-file não permite. É preciso pensar no assunto.

Não parece haver necessidade de mudar nada.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

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), буфер оптимизируемых параметров и генетический проход

Cada entrada é definida por uma estrutura com os campos requeridos.

 

É agora muito fácil de descobrir

  • Todas as configurações do testador e parâmetros de entrada da EA.
  • Todos os dados estatísticos de cada passe de Optimização.


Mas não conseguimos descobrir, por exemplo, dados estatísticos de uma única passagem. É evidente que existe um formato tst. Mas seria conveniente utilizar CTRL+C no Strategy Tester para formar um set-file com dados estatísticos no separador Backtest.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Bibliotecas: 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.797693134862316 e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316 e+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

Não sei de outros, mas acho conveniente quando o ficheiro do conjunto contém toda a informação. É muito rápido a descobrir o que é, de onde vem e quanto é.


Este é o resultado dos campos da estrutura sumária da ExpTradeSummary.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Insectos, insectos, perguntas

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)          // среднее количество последовательных убыточных сделок
    );
 

Desde que apareceram as poderosas caches, vale a pena melhorá-las um pouco.

Agora apenas um parâmetro do utilizador, OnTester, entra na cache.


Seria muito conveniente se a ExpTradeSummary se tornasse três ou cinco vezes maior. Que poderia ser preenchido através de

double OnTester( double &CustomDoubles[] );


Agora analisa as caches e obviamente falta-lhe a possibilidade de ver não o valor de um utilizador mas sim de vários.

 

Este é um pedido à Metaquotes, espero que pelo menos um criador da equipa possa responder (desculpe se já lhe foi perguntado, mas devido a um problema linguístico não consigo encontrar resposta no fórum russo).

Será razoável pedir uma melhoria do Strategy Tester para adicionar a capacidade de testar uma situação de negociação que nunca acontece numa conta de demonstração, mas apenas numa conta real? Como é realmente difícil criar um código robusto sem poder testá-lo completamente.

Isto deve-se principalmente ao mercado centralizado (em oposição ao Forex / CFD). Por exemplo, o preenchimento parcial de encomendas, numa conta de demonstração isto nunca acontece (tanto quanto sei), mas numa conta real sobre futuros ou acções é comum. Seria muito útil ter um instrumento para simular uma tal situação.

O preenchimento parcial é apenas um exemplo, se Metaquotes pensa que é uma boa ideia trabalhar com tais características, estou disposto a centralizar as ideias e fornecer uma descrição detalhada de tais características. (Nada específico para as minhas próprias necessidades).

Obrigado pelo seu tempo e pela(s) resposta(s).

 
Alain Verleyen:

é difícil criar um código fiável sem poder testá-lo completamente.

Para o fazer, todos os criadores sérios de EA depuram as suas bibliotecas comerciais durante anos em contas reais.

Não há forma de criar um código fiável sem ele.

 
fxsaber:

Para o fazer, todos os criadores sérios de EA depuram as suas bibliotecas comerciais durante anos em contas reais.

Não há forma de criar um código fiável sem ele.

Isso é verdade, mas ajudaria a evitar muitos testes morosos sobre uma conta real.

 
Artyom Trishkin:

Portanto, é verdade, mas esta funcionalidade ajudaria a evitar muitos testes morosos sobre uma conta real.

Há dois objectivos.

  1. Uma biobioteca comercial adequada que apenas sabe como mostrar o estado actual do comércio, o histórico comercial e enviar ordens. Aqui o Testador quase não ajuda. A demonstração pode ajudar muito se realizarmos testes de stress. Não podemos fazê-las por conta própria - é caro. Por conseguinte, existe apenas uma demonstração sobre um grande número de símbolos/servidores. Tais bibliotecas estão nos dedos de uma mão.
  2. Praticar a lógica comercial de execuções parciais, redireccionamentos, etc. Este ponto é muito mais fácil do que o primeiro. E repetidamente resolvido no mesmo MT4 sem quaisquer testadores. É realmente simples.

Um testador só pode ajudar com o segundo ponto, o simples. Pode implementar a execução parcial medindo o alegado "tecto de liquidez" do TS. Mas isso seria uma estimativa extremamente grosseira.


Deve entender-se que quaisquer floreados no Testador são travões adicionais mesmo que estes floreados não sejam utilizados.

 
fxsaber :

Para o fazer, todos os criadores sérios de EA depuram as suas bibliotecas comerciais durante anos em contas reais.

Não há forma de criar um código fiável sem ele.

Aconselho-vos a esquecerem-me de uma vez por todas com os vossos postos inúteis e arrogantes.

Infelizmente, não tenho forma de filtrá-los.

Nunca responda ao meu correio, por favor, está a fazer-me perder tempo por causa das notificações.

 
Alain Verleyen:

Aconselho-vos a esquecerem-me de uma vez por todas com os vossos postos inúteis e arrogantes.

Recomendo-lhe que comece a questionar a adequação dos tradutores automáticos de russo que utiliza.


Infelizmente não tenho forma de filtrá-los.

Nunca responda ao meu correio, por favor, está a fazer-me perder tempo por causa das notificações.

OK.