Bibliotecas: BestInterval - página 2

 
Sergey Chalyshev:

Ainda não fiz nada, estou tentando compilar esse código:

Este código é compilado. Virtual e BestInterval foram atualizados ontem. Talvez você tenha uma versão mais antiga.

Ele compila sem o Virtual ,

ele também compila sem o BestInterval,

mas não compila junto.

As bibliotecas eram completamente independentes antes da atualização, portanto, houve um conflito. As versões que postei ontem não têm esse problema.
 

O que isso quer dizer?

2018.10.16 15:54:45.104 Core 1  2018.08.30 23:59:59   Amount of Delete Intervals = 0
2018.10.16 15:54:45.104 Core 1  2018.08.30 23:59:59   SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
2018.10.16 15:54:45.104 Core 1  final balance 2978.46 USD
2018.10.16 15:54:45.104 Core 1  OnTester result 0
Não há outro parâmetro de entrada em sua biblioteca.

 
Sergey Pavlov:

O que você quer dizer com isso?

Não há mais nenhum parâmetro de entrada de sua biblioteca.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Bibliotecas: BestInterval

fxsaber, 2018.10.16 2:57 pm.

Virtual e BestInterval foram atualizados ontem. Talvez você tenha uma versão mais antiga.

 
fxsaber:

Este código é compilado. Virtual e BestInterval foram atualizados ontem. Talvez você tenha uma versão mais antiga.

Obrigado!

Atualizei o Virtual, ele compila.

 
fxsaber:

O Expert Advisor compila, os intervalos para pular são calculados e o arquivo aparece no Common.

Estágio 1.

Mas o parâmetro inBestInterval_Action está ausente no testador e não aparece com ou sem o VIRTUAL_TESTER.

Estágio 2.

Consequentemente, não posso executar o teste levando em conta os intervalos lançados.

Preciso de ajuda - o que estou fazendo de errado?

 
Mikola_2:

O Expert Advisor é compilado, os intervalos para pular são calculados e o arquivo aparece no Common.

Mas o parâmetro inBestInterval_Action está faltando no testador e não aparece com ou sem o VIRTUAL_TESTER.

Dessa forma, não há como executar o teste levando em conta os intervalos lançados.

Preciso de ajuda - o que estou fazendo de errado?

O VIRTUAL_TESTER é necessário apenas para acelerar a otimização ou a reversão. É por isso que ele não é indicado para trabalhar com o BestInterval

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Bibliotecas: BestInterval

fxsaber, 2018.10.15 13:30

1. Pegue qualquer Expert Advisor e escreva estas linhas em seu início

#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006

#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/pt/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/pt/code/22710


ZY É bom que você tenha descoberto o código. Se as bibliotecas estiverem no mesmo formato que no KB, não sei por quê. Talvez você tenha se esquecido de compilá-las quando removeu o VIRTUAL_TESTER.

 

fxsaber:

ZY É bom que o código tenha sido resolvido. Se as bibliotecas são as mesmas do KB, não sei por quê. Talvez você tenha se esquecido de compilá-las ao remover o VIRTUAL_TESTER.

Criei um arquivo TesterEA_mq4.mq5 com o seguinte conteúdo:

#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006
#define  VIRTUAL_TESTER // Executar em um ambiente de negociação virtual
#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/pt/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/pt/code/22710
#include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

O arquivo TesterEA.mq4 é original, da KB. Compilado normalmente.

MT4Orders, Virtual, BestInterval são novos da KB.

Corrigi o EMA.mqh (um erro de divisão por zero estava aparecendo):

EMA( const int period ) : Alpha(1.0 / period), Value(0)

por

EMA( const int period ) : Alpha(2.0 / (period+1.0)), Value(0)

Tentei no BestInterval.mqh em vez de

#ifndef  VIRTUAL_TESTER
  sinput
#endif
bool inBestInterval_Action = false; // Ação BestInterval

make

//#ifndef VIRTUAL_TESTER
// sinput
//#endif.
sinput bool inBestInterval_Action = false; // Ação BestInterval

A variável BestInterval Action aparece no testador, com BestInterval Action=false tudo é lindo no registro, mas com BestInterval Action=true o teste inteiro é executado e nada sobre intervalos é escrito no registro....

É uma pena... :)

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
Mikola_2:

Criei o seguinte arquivo TesterEA_mq4.mq5:

O arquivo TesterEA.mq4 é original, da KB. Compilei-o normalmente.

MT4Orders, Virtual, BestInterval são novos da KB.

Corrigido o EMA.mqh ( estava aparecendo um erro de divisão por zero):

EMA( const int period ) : Alpha(1.0 / período), Value(0)

por

EMA( const int period ) : Alpha(2.0 / (period+1.0)), Value(0)

O período zero é um valor incorreto. Portanto, a divisão por zero é normal e foi deixada de propósito para mostrar que esse valor não pode ser definido.

Tentei no BestInterval.mqh em vez de

make

A variável BestInterval Action aparece no testador, com BestInterval Action=false tudo é lindo no log, mas com BestInterval Action=true todo o teste é executado e nada sobre intervalos é escrito no log....

É uma pena... :)


Aqui está o código-fonte da Action

#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006

//#define VIRTUAL_TESTER // Executar no ambiente de negociação virtual
#define  BESTINTERVAL_ONTESTER // O critério de otimização é o lucro do melhor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/pt/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/pt/code/22710

#include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>


Com Action = true, o mesmo lucro deve aparecer no relatório do testador que foi calculado no registro com Action = false.

 
fxsaber:

Para o Action, este é o código-fonte

Se Action = true, o mesmo lucro deve aparecer no relatório do testador que foi calculado no registro se Action = false.

Não, a flor de pedra não aparece... :)

Nesse formulário, quando Action = true, ele para de fechar ordens e consome imediatamente toda a margem com novas ordens (provavelmente algo com CloseBy)....

Com o Virtual.mqh desativado, tudo funciona, mas os intervalos do Action são ignorados.

E é um desafio entender seu código mais profundamente... Acho que vou deixar passar por enquanto. ;)

 
Mikola_2:

Não, não está saindo nenhuma flor de pedra... :)

Nesse formulário, quando Action = true, ele interrompe o fechamento de ordens e consome imediatamente toda a margem com novas ordens (provavelmente algo com CloseBy)....

Eu não ficaria surpreso se ele fosse executado em Netting. O CloseBy não funciona lá.

Com o Virtual.mqh desativado, tudo funciona, mas os intervalos de ação são ignorados.

E é um desafio entender seu código mais profundamente... Acho que vou deixar passar por enquanto. ;)

Faça isso na cobertura. Não me preocupei com a compensação, porque o MT4-advisor não deveria ser executado nesse modo, é claro.


O algoritmo de ignorar intervalos ruins é simples. O TS é lançado em um ambiente virtual. A posição de compensação de apenas as posições abertas que se encaixam nos intervalos calculados é calculada lá. Em seguida, ele sincroniza sua posição de compensação com a posição virtual no ambiente real. Isso é feito da maneira mais feia para análise, mas simples de implementar: CloseBy.

Na verdade, o modo reverso é implementado da mesma forma. Eu poderia reescrever a variante CloseBy para fazê-la funcionar também em contas de compensação. Eu não estava ocupado com isso.