Librerías: BestInterval - página 2

 
Sergey Chalyshev:

Todavía no he hecho nada, estoy intentando compilar este código:

Este código compila. Virtual y BestInterval se actualizaron ayer. Puede que tengas una versión anterior.

Compila sin Virtual ,

compila sin BestInterval también,

pero no compilan juntos.

Las bibliotecas eran completamente independientes antes de la actualización, por lo que había un conflicto. Las versiones que publiqué ayer no tienen este problema.
 

¿Qué se supone que significa eso?

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
No hay otro parámetro de entrada de su biblioteca.

 
Sergey Pavlov:

¿Qué quiere decir con eso?

No hay ni un parámetro de entrada más de su biblioteca.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Bibliotecas: BestInterval

fxsaber, 2018.10.16 2:57 pm.

Virtual y BestInterval se actualizaron ayer. Es posible que tengas una versión anterior.

 
fxsaber:

Este código compila. Virtual y BestInterval se actualizaron ayer. Es posible que tengas una versión anterior.

Gracias.

Actualizado Virtual, se compila.

 
fxsaber:

El Asesor Experto compila, los intervalos para saltar se calculan, el archivo aparece en Common.

Fase 1.

Pero el parámetro inBestInterval_Action está ausente en el probador y no aparece ni con ni sin VIRTUAL_TESTER.

Fase 2.

En consecuencia, no puedo realizar la prueba teniendo en cuenta los intervalos lanzados.

Necesito ayuda: ¿qué estoy haciendo mal?

 
Mikola_2:

El Asesor Experto se compila, se calculan los intervalos de salto y el archivo aparece en Común.

Pero el parámetro inBestInterval_Action falta en el probador y no aparece ni con ni sin VIRTUAL_TESTER.

En consecuencia, no hay forma de realizar la prueba teniendo en cuenta los intervalos lanzados.

Necesito ayuda: ¿qué estoy haciendo mal?

VIRTUAL_TESTER sólo es necesario para acelerar la optimización o la inversión. Es por eso que no está prescrito para trabajar con BestInterval

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Bibliotecas: BestInterval

fxsaber, 2018.10.15 13:30

1. Coge cualquier Asesor Experto y escribe estas líneas en su inicio

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

#define  BESTINTERVAL_ONTESTER // El criterio de optimización es el beneficio del mejor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710


ZY Es bueno que hayas descifrado el código. Si las librerías están de la misma forma que en KB, no sé por qué. Quizás olvidaste compilarlas cuando eliminaste VIRTUAL_TESTER.

 

fxsaber:

ZY Es bueno que el código se haya solucionado. Si las librerías son las mismas que en KB, no sé por qué. Quizás olvidaste compilarlas al quitar VIRTUAL_TESTER.

He creado un fichero TesterEA_mq4.mq5 con el siguiente contenido:

#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006
#define  VIRTUAL_TESTER // Ejecutar en un entorno comercial virtual
#define  BESTINTERVAL_ONTESTER // El criterio de optimización es el beneficio del mejor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710
#include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

El fichero TesterEA.mq4 es original, de KB. Compilado normalmente.

MT4Orders, Virtual, BestInterval son frescos de KB.

He corregido EMA.mqh (aparecía un error de división por cero):

EMA( const int period ) : Alfa(1.0 / periodo), Valor(0)

en

EMA( const int periodo ) : Alfa(2.0 / (periodo+1.0)), Valor(0)

He intentado en BestInterval.mqh en lugar de

#ifndef  VIRTUAL_TESTER
  sinput
#endif
bool inBestInterval_Action = false; // Acción BestInterval

hacer

//#ifndef VIRTUAL_TESTER
// sinput
//#endif.
sinput bool inBestInterval_Action = false; // Acción BestInterval

La variable BestInterval Action aparece en el tester, con BestInterval Action=false todo es bonito en el log, pero con BestInterval Action=true todo el test se ejecuta y nada sobre los intervalos se escribe en el log....

Es una pena... :)

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

He creado el siguiente archivo TesterEA_mq4.mq5:

El archivo TesterEA.mq4 es original, de KB. Compilado normalmente.

MT4Orders, Virtual, BestInterval son frescos de KB.

Fijo EMA.mqh ( error de división por cero estaba apareciendo):

EMA( const int periodo ) : Alfa(1.0 / periodo), Valor(0)

por

EMA( const int periodo ) : Alfa(2.0 / (periodo+1.0)), Valor(0)

Periodo cero es un valor incorrecto. Así que la división por cero es normal y se deja a propósito para mostrar que tal valor no se puede establecer.

He probado en BestInterval.mqh en lugar de

hacer

La variable BestInterval Action aparece en el tester, con BestInterval Action=false todo es bonito en el log, pero con BestInterval Action=true todo el test se ejecuta y nada sobre los intervalos se escribe en el log....

Es una pena... :)


Aquí está la fuente de Acción

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

//#define VIRTUAL_TESTER // Ejecutar en entorno comercial virtual
#define  BESTINTERVAL_ONTESTER // El criterio de optimización es el beneficio del mejor intervalo.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710

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


Con Action = true, en el informe del probador debería aparecer el mismo beneficio que se calculó en el registro con Action = false.

 
fxsaber:

Para Action, éste es el código fuente

Si Acción = true, en el informe del Probador debería aparecer el mismo beneficio que se calculó en el registro si Acción = false.

No, no sale la flor de la piedra... :)

De esta forma, cuando Action = true, deja de cerrar órdenes e inmediatamente se come todo el margen con nuevas órdenes (probablemente algo con CloseBy)....

Con Virtual.mqh desactivado, todo funciona, pero los intervalos de Action son ignorados.

Y es un reto entender tu código más profundamente... creo que paso por ahora. ;)

 
Mikola_2:

No, no sale ninguna flor de piedra... :)

En este formulario, cuando Action = true, deja de cerrar órdenes en absoluto e inmediatamente se come todo el margen con nuevas órdenes (probablemente algo con CloseBy)....

No me sorprendería que se ejecutara en Netting. CloseBy no funciona allí.

Con Virtual.mqh deshabilitado, todo funciona, pero los intervalos de Acción son ignorados.

Y es un reto entender tu código más profundamente... creo que pasaré por ahora. ;)

Hazlo en el seto. No me molesté con la compensación, porque MT4-advisor no se supone que se ejecuta en este modo, por supuesto.


El algoritmo de ignorar los intervalos malos es simple. El TS se pone en marcha en un entorno virtual. Allí se calcula la posición neta de sólo aquellas posiciones abiertas que se ajustan a los intervalos calculados. A continuación, sincroniza su posición neta con la virtual en el entorno real. Esto se hace de la manera más fea para el análisis, pero simple de implementar - CloseBy.

En realidad, Reverse-mode se implementa de la misma manera. Podría reescribir la variante CloseBy para hacerla funcionar en cuentas de compensación también. No estaba ocupado con eso.