gspencer: No sé nada acerca de la codificación o el trabajo con EA en Meta Editor, pero me gusta mucho su concepto con el BestInterval. ¿Sería demasiado problema para que usted me instruya sobre cómo agregarlo a la EA que tengo que me gustaría probar?
// Mostrar el gráfico de equilibrio BestInterval en el gráfico#property strict#property script_show_inputsinputint inAmountIntervals = 3; // Cuántos intervalos comerciales en el peor de los casos hay que tirar#include <Graphics\Graphic.mqh> // https://www.mql5.com/es/articles/2866void ToChart( constdouble &Y[] )
{
CGraphic graphic;
graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380);
graphic.CurveAdd(Y, CURVE_LINES);
graphic.CurvePlotAll();
graphic.Update();
}
#include <MT4Orders.mqh> // No es necesario si MT4.#include <fxsaber\BestInterval\BestInterval.mqh> // Cálculo del mejor intervalo de negociaciónvoidOnStart()
{
BESTINTERVAL BestInterval; // Creado un objeto para calcular el mejor intervalo de negociación
BestInterval.Set(); // Publicado un historial de pujasfor (int i = 0; i < inAmountIntervals; i++)
if (BestInterval.DeleteWorseInterval()) // Si se ha tirado algoPrint(BestInterval.ToString()); // Imprimamos los datos comerciales obtenidoselsebreak; // De lo contrario, estamos fueradouble Profits[];
double Balance[];
constint Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // Obtuvo los beneficios de BestInterval-transaction
Balance[0] = 0;
// Calcular la curva de equilibriofor (int i = 1; i < Size; i++)
Balance[i] = Balance[i - 1] + Profits[i - 1];
ToChart(Balance); // Visualizado.
}
Si inserta esto al final de cualquier EA de la entrega estándar
// Transmitir las cotizaciones de cada pasada del Optimizador al Terminal. Aplicarles BestInterval y visualizarlas.#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710#include <TypeToBytes.mqh> // https://www.mql5.com/es/code/16280#include <Graphics\Graphic.mqh> // https://www.mql5.com/es/articles/2866inputint inAmountIntervals = 1; // Cuántos intervalos comerciales en el peor de los casos hay que tirar// Salida del gráficovoid ToChart( constdouble &Y[] )
{
CGraphic graphic;
graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380);
graphic.CurveAdd(Y, CURVE_LINES);
graphic.CurvePlotAll();
graphic.Update();
}
// Recoge la historia del comercioint GetDeals( DEAL_BASE &Deals[] )
{
constint Total = ArrayResize(Deals, OrdersHistoryTotal());
int Amount = 0;
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
{
Deals[Amount].OpenTime = OrderOpenTime();
Deals[Amount++].Profit = OrderProfit() + OrderCommission() + OrderSwap();
}
return(ArrayResize(Deals, Amount));
}
// Desde aquí (Agente) enviaremos datos al TerminaldoubleOnTester()
{
DEAL_BASE Deals[];
if (MQLInfoInteger(MQL_OPTIMIZATION) && GetDeals(Deals)) // Si Optimización, historial comercial recopilado
{
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
Container[0] = Deals; // Poner el historial de pujas en un contenedorFrameAdd(NULL, 0, 0, Container.Data); // Envío de datos del Agente al Terminal
}
return(0);
}
// Aquí (Terminal) recibir datos de los AgentesvoidOnTesterPass()
{
ulong Pass;
string Name;
long ID;
double Value;
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205while (FrameNext(Pass, Name, ID, Value, Container.Data))
{
Print("Pass = " + (string)Pass); // Número de pase
DEAL_BASE Deals[];
// Datos recibidos del Agente
Container[0].Get(Deals);
BESTINTERVAL BestInterval; // Creado un objeto para calcular el mejor intervalo de negociación
BestInterval.Set(Deals); // Publicado el historial de pujas transmitidoPrint(BestInterval.ToString() + "\n"); // Imprimamos los datos comerciales obtenidosfor (int i = 0; i < inAmountIntervals; i++)
if (BestInterval.DeleteWorseInterval()) // Si se ha tirado algoPrint(BestInterval.ToString() + "\n"); // Imprimamos los datos comerciales obtenidoselsebreak; // De lo contrario, estamos fueradouble Profits[];
double Balance[];
constint Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // Obtenemos los beneficios de BestInterval-transaction
Balance[0] = 0;
// Calcular la curva de equilibriofor (int i = 1; i < Size; i++)
Balance[i] = Balance[i - 1] + Profits[i - 1];
ToChart(Balance); // Visualizado.
}
}
verá algo como esto en el registro de la Terminal (por el ejemplo de las Medias Móviles estándar)
Algo más generalizado describí en un blog en inglés(parte 1, parte 2). Hacer secciones transversales sólo sobre intervalos de tiempo es un enfoque muy especializado. En idea, las secciones transversales sobre otros parámetros podrían ser igualmente interesantes.
Algo más generalizado describí en el blog inglésapertura de la posición. En consecuencia, todas las posiciones del historial de operaciones pueden compararse con estos valores de MA.
Y luego aplicamos BestInterval a estos MAs. Y en la salida obtenemos los rangos de МАшки en los que se deben abrir posiciones, y en cuáles - no.
Por supuesto, puede utilizar cualquier función numérica en lugar de una MA. Como resultado, usted puede encontrar filtros fresco que superan el tiempo.
#include <fxsaber\BestInterval\BestInterval.mqh>
voidOnStart()
{
BESTINTERVAL BestInterval;
// Valores correspondientes para todo el BestIntervalPrint(BestInterval.GetTotal()); // Número de posiciones cerradas.Print(BestInterval.GetTotalPlus()); // Número de posiciones cerradas rentables.Print(BestInterval.GetTotalMinus()); // Número de posiciones cerradas no rentables.Print(BestInterval.GetMean()); // Expectativa matemáticaPrint(BestInterval.GetProfit()); // BeneficioPrint(BestInterval.GetProfitFactor()); // Factor de beneficioPrint(BestInterval.GetProfitPlus()); // Beneficio de las transacciones positivasPrint(BestInterval.GetProfitMinus()); // Pérdida de transacciones negativasPrint(BestInterval.GetRecoveryFactor()); // Factor de recuperaciónPrint(BestInterval.GetMaxDrawDown()); // Disminución máxima absoluta del saldoPrint(BestInterval.GetAmountDeleteIntervals()); // Número de intervalos malos eliminados
INTERVAL Intervals[];
constint Size = BestInterval.GetIntervals(Intervals); // Obtener los intervalos que componen el BestInterval// Para cada intervalo imprimimos sus índicesfor (int i = 0; i < Size; i++)
{
Print(Intervals[i].Total); // Número de posiciones cerradas.Print(Intervals[i].TotalPlus); // Número de posiciones cerradas rentables.Print(Intervals[i].TotalMinus); // Número de posiciones cerradas no rentables.Print(Intervals[i].Mean); // Expectativa matemáticaPrint(Intervals[i].Profit); // BeneficioPrint(Intervals[i].ProfitFactor); // Factor de beneficioPrint(Intervals[i].ProfitPlus); // Beneficio de las transacciones positivasPrint(Intervals[i].ProfitMinus); // Pérdida de transacciones negativasPrint(Intervals[i].RecoveryFactor); // Factor de recuperaciónPrint(Intervals[i].MaxDrawDown); // Disminución máxima absoluta del saldoPrint(Intervals[i].OpenTime); // Intervalo tiempo abierto.Print(Intervals[i].CloseTime); // Hora de cierre del intervalo.
}
}
Realizar secciones transversales sólo por intervalos de tiempo es un enfoque muy especializado. De hecho, las secciones transversales por otros parámetros no pueden ser menos interesantes.
He estado pensando y pensando, pero no se me ha ocurrido algo que pueda filtrarse tan eficazmente como el tiempo.
Este algo no debe ser parte de la estrategia y debe influir directamente en el comportamiento del mercado.
¿pila? ¿otros datafeeds?
y otra pregunta - ¿tiene sentido hacer hipercubos? en teoría, individualmente también debería filtrarse bien.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
No sé nada acerca de la codificación o el trabajo con EA en Meta Editor, pero me gusta mucho su concepto con el BestInterval. ¿Sería demasiado problema para que usted me instruya sobre cómo agregarlo a la EA que tengo que me gustaría probar?
Trate de entender esta discusión hilo.
verá algo como esto en el registro de la Terminal (por el ejemplo de las Medias Móviles estándar)
Y el gráfico muestra el gráfico BestInterval-profit del pase correspondiente
Pasaba por aquí. Lo leí.
La descripción dice: "
"
Algo más generalizado describí en un blog en inglés(parte 1, parte 2). Hacer secciones transversales sólo sobre intervalos de tiempo es un enfoque muy especializado. En idea, las secciones transversales sobre otros parámetros podrían ser igualmente interesantes.
Pasaba por aquí. Lo leí.
La descripción dice: "
"
Algo más generalizado describí en el blog inglésapertura de la posición. En consecuencia, todas las posiciones del historial de operaciones pueden compararse con estos valores de MA.
Y luego aplicamos BestInterval a estos MAs. Y en la salida obtenemos los rangos de МАшки en los que se deben abrir posiciones, y en cuáles - no.
Por supuesto, puede utilizar cualquier función numérica en lugar de una MA. Como resultado, usted puede encontrar filtros fresco que superan el tiempo.
Por desgracia, la barrera del idioma me impide adentrarme en su trabajo. Sobre el interés en otros filtros, por supuesto, estoy de acuerdo
¿Desde cuándo existe tal barrera? ;-) Antes estaba claro. ¿O he metido la pata con el inglés?
¿Desde cuándo existe tal barrera? ;-) Antes estaba claro. ¿O es que me he equivocado con el inglés?
Siempre había una barrera. A veces iba directamente - leyendo el código fuente.
Por desgracia, la barrera del idioma me impide adentrarme en su trabajo. Sobre el interés en otros filtros, por supuesto, estoy de acuerdo
Dios es tu juez.
Realizar secciones transversales sólo por intervalos de tiempo es un enfoque muy especializado. De hecho, las secciones transversales por otros parámetros no pueden ser menos interesantes.
He estado pensando y pensando, pero no se me ha ocurrido algo que pueda filtrarse tan eficazmente como el tiempo.
Este algo no debe ser parte de la estrategia y debe influir directamente en el comportamiento del mercado.
¿pila? ¿otros datafeeds?
y otra pregunta - ¿tiene sentido hacer hipercubos? en teoría, individualmente también debería filtrarse bien.