Bibliotecas: BestInterval - página 17

 
Andrey Khatimlianskii:

Existe uma maneira fácil de deixar o OnTester funcionando depois de conectar o BestInterval?

Isso não ajuda:

Ele ainda retorna o saldo final (e você precisa de seu próprio critério complexo, pois BESTINTERVAL_ONTESTER_FORMULA não resolve o problema).

#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#define  BESTINTERVAL_CALL_ONFUNCTIONS // OnTester será chamado no modo BESTINTERVAL_ONTESTER и OnTimer.
#include <fxsaber\BestInterval\BestInterval.mqh> // Cálculo do melhor intervalo de negociação

double OnTester()
{
  Print("Hello World");
  
  return(123);
}

No registro, você verá que o Print foi acionado, ou seja, o OnTester será executado. Mas não mais do que isso - seu resultado é ignorado.


Você precisa do seguinte

#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#define  BESTINTERVAL_ONTESTER_FORMULA MyOnTester()
#include <fxsaber\BestInterval\BestInterval.mqh> // Cálculo do melhor intervalo de negociação

input int Input = 0;

double MyOnTester()
{
  return(123);
}


Resultado

pass 1 returned result 123.000000 in 0:00:00.468
pass 0 returned result 123.000000 in 0:00:00.469
 
Andrey Khatimlianskii:


ps: a versão mais recente do MT5 tem vários avisos "comportamento obsoleto, a chamada de método oculto será desativada em uma versão futura do compilador MQL" durante a compilação.

O que isso significa?

 
fxsaber:

Você precisa disso

Não funciona com Amount of Delete Intervals = 0.

Nos testes, cheguei a esse EA:

#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#define  BESTINTERVAL_ONTESTER_FORMULA MyOnTester()
#include <fxsaber\BestInterval\BestInterval.mqh> // Cálculo do melhor intervalo de negociação

input int inputParam = 0;

double MyOnTester()
{
  return(inputParam*100);
}

Quando Amount of Delete Intervals = 0, ele retorna o saldo inicial em todas as passagens.

Se Amount of Delete Intervals = 1, ele retorna os valores esperados.

 
Andrey Khatimlianskii:

Não funciona com Amount of Delete Intervals = 0.

Nas verificações, cheguei a esse EA:

Quando Amount of Delete Intervals = 0, ele retorna o saldo inicial em todas as passagens.

Se Amount of Delete Intervals = 1, ele retorna os valores esperados.

Na linha 713.

  if (!inBestInterval_Action && inAmountDeleteIntervals)

remova a segunda condição.

 
fxsaber:

Linha 713

remover a segunda condição.

Está tudo certo! Obrigado.

 

Nessas bibliotecas universais, eu coloco os parâmetros de entrada em um arquivo separado e os envolvo com ifdef, para que eu possa inseri-los no lugar certo sem observar a ordem em que os próprios arquivos da biblioteca estão conectados (o que pode ter um papel importante).

Talvez haja outra maneira mais elegante de gerenciar a ordem das entradas?

 
Andrey Khatimlianskii:

Talvez haja outra maneira mais elegante de gerenciar a ordem das entradas?

Nunca me preocupei com esse tipo de cosmético. Há tantas outras coisas para fazer...

Seria bom ter um lugar para discutir coisas promissoras. O silêncio é quase total.

 
fxsaber:

Seria bom ter um lugar para discutir coisas voltadas para o futuro. O silêncio é quase total.

Há uma opinião de que estratégias lucrativas não podem ser discutidas publicamente. É por isso que há apenas rudimentos de pesquisa no fórum e, no primeiro encontro (mesmo que acidental) com um grão de ouro, ele se torna clandestino.

Sou sempre a favor da discussão, mas não ajudarei muito em termos de negociação, pois estou mais concentrado em questões técnicas.

 
Andrey Khatimlianskii:

Sou sempre a favor da discussão

Com um grande número de negociações e intervalos descartáveis, surge um interessante objeto de estudo.

Profit = 55367.00 = 54785.00 + 582.00 (1.06%) - Amount of Delete Intervals = 20
00:00:00 - 02:29:28 : Profit = 8460.00 (15.28%), Total = 293 (88.74%), PF = 4.95, Mean = 28.87, DD = 298.00, RF = 28.39
02:34:20 - 03:06:49 : Profit = 763.00 (1.38%), Total = 74 (79.73%), PF = 1.64, Mean = 10.31, DD = 696.00, RF = 1.10
03:12:43 - 03:46:29 : Profit = 1067.00 (1.93%), Total = 76 (75.00%), PF = 2.07, Mean = 14.04, DD = 440.00, RF = 2.43
03:54:37 - 07:15:26 : Profit = 3641.00 (6.58%), Total = 327 (77.68%), PF = 1.66, Mean = 11.13, DD = 1183.00, RF = 3.08
07:30:54 - 09:16:59 : Profit = 2452.00 (4.43%), Total = 253 (79.45%), PF = 1.57, Mean = 9.69, DD = 877.00, RF = 2.80
09:34:03 - 09:42:17 : Profit = 865.00 (1.56%), Total = 42 (83.33%), PF = 3.03, Mean = 20.60, DD = 177.00, RF = 4.89
09:42:19 - 09:51:57 : Profit = 1389.00 (2.51%), Total = 51 (84.31%), PF = 4.99, Mean = 27.24, DD = 93.00, RF = 14.94
09:56:38 - 10:04:58 : Profit = 1351.00 (2.44%), Total = 75 (82.67%), PF = 2.52, Mean = 18.01, DD = 350.00, RF = 3.86
14:22:11 - 14:46:12 : Profit = 2167.00 (3.91%), Total = 110 (78.18%), PF = 3.33, Mean = 19.70, DD = 488.00, RF = 4.44
14:51:09 - 15:01:51 : Profit = 1511.00 (2.73%), Total = 69 (79.71%), PF = 2.68, Mean = 21.90, DD = 353.00, RF = 4.28
15:04:47 - 15:46:23 : Profit = 3605.00 (6.51%), Total = 297 (76.09%), PF = 1.75, Mean = 12.14, DD = 670.00, RF = 5.38
15:54:05 - 16:04:53 : Profit = 2051.00 (3.70%), Total = 103 (82.52%), PF = 2.65, Mean = 19.91, DD = 299.00, RF = 6.86
16:08:24 - 16:15:39 : Profit = 896.00 (1.62%), Total = 56 (78.57%), PF = 2.22, Mean = 16.00, DD = 167.00, RF = 5.37
16:21:19 - 16:44:18 : Profit = 2159.00 (3.90%), Total = 184 (79.89%), PF = 1.71, Mean = 11.73, DD = 352.00, RF = 6.13
16:54:29 - 17:01:09 : Profit = 1457.00 (2.63%), Total = 68 (82.35%), PF = 4.70, Mean = 21.43, DD = 118.00, RF = 12.35
17:10:30 - 17:30:56 : Profit = 2858.00 (5.16%), Total = 178 (78.09%), PF = 2.07, Mean = 16.06, DD = 431.00, RF = 6.63
17:41:23 - 17:51:28 : Profit = 989.00 (1.79%), Total = 88 (76.14%), PF = 1.65, Mean = 11.24, DD = 478.00, RF = 2.07
17:53:57 - 18:51:41 : Profit = 4399.00 (7.95%), Total = 449 (73.72%), PF = 1.53, Mean = 9.80, DD = 635.00, RF = 6.93
18:56:38 - 19:41:09 : Profit = 1646.00 (2.97%), Total = 181 (75.14%), PF = 1.51, Mean = 9.09, DD = 474.00, RF = 3.47
19:44:55 - 20:03:20 : Profit = 1492.00 (2.69%), Total = 70 (78.57%), PF = 3.25, Mean = 21.31, DD = 130.00, RF = 11.48
20:11:31 - 23:59:59 : Profit = 10149.00 (18.33%), Total = 659 (77.24%), PF = 2.12, Mean = 15.40, DD = 645.00, RF = 15.73
SUMMARY: 00:00:00 - 23:59:59 : Profit = 55367.00 (100.00%), Total = 3703 (78.50%), PF = 2.04, Mean = 14.95, DD = 1247.00, RF = 44.40

Precisamos descobrir como identificar boas partes de negociações a partir desses dados. Deve haver uma combinação de um número decente de negociações em uma parte, ganhos sérios por unidade de tempo, etc. Ainda não consegui formalizar isso.


A tarefa é mais ou menos a seguinte: com um grande número de intervalos descartados, determinar provavelmente os blocos do sistema e, somente com base neles, calcular um critério de otimização personalizado.

A solução do problema permitirá revelar muito mais o potencial do TC.

 
fxsaber:

Ainda não consegui formalizá-lo.

Então, essa é uma tarefa para uma rede neural, prepare os dados manualmente e treine a rede neural; depois, no futuro, você avaliará os resultados usando a rede neural treinada.

FN: Se estiver nos dedos, como ensinar a tabuada de multiplicação à NS https://www.mql5.com/ru/forum/8265/page2#comment_333746 (provavelmente já irritei todo mundo com esse exemplo )))) ) - você fornece dados às entradas, o resultado é a sua avaliação, que deve ser em uma escala de 3 pontos: excelente, bom, insatisfatório - o NS lida perfeitamente bem com essa tarefa, mas você terá que preparar os dados manualmente, ou melhor, classificar o que você acha que é um resultado bom/ruim.