Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 6
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Compañeros, nunca he hecho ningún ajuste de historial, así que no conozco los entresijos de la lectura del gráfico tras la optimización.
Existe dicho gráfico tras el pase anual 2014-2015, ¿dónde mirar y qué significa? Te interesa el color y la ubicación de los cubos, ¿por qué algunos están en el centro, otros abajo/arriba, y dos/tres en el mismo cuadrado?
Gracias por la aclaración.
No abre el comercio en el probador. ¿Cuál podría ser el problema aquí?)
Bueno... En primer lugar, usted está tratando de abrir una venta a precio de compra. Mientras que usted abre una venta en Bid y una compra en Ask.
He puesto la búsqueda de datos del RSI y su cruce de niveles en una función. También cuenta con una comprobación de precios. Devuelve señales: para comprar, para vender, o nada (-1)
//| exTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15; // Таймфрейм RSI
input int PeriodRSI = 14; // Период расчёта RSI
input ENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE; // Цена расчёта RSI
input int UpperRSIlevel = 70; // Верхний уровень RSI
input int LowerRSIlevel = 30; // Нижний уровень RSI
input int MinutesBefore =20; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
int upperRSIlevel; // Верхний уровень RSI
int lowerRSIlevel; // Нижний уровень RSI
//---
double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад
double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут
//---
double prevClose_0; // Значение Close для заданного тф xxx минут назад
double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут
//---
datetime timeBefore; // Время ххх минут назад
datetime timePrevBefore; // Время ххх минут назад-x минут
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI<1?1:PeriodRSI);
upperRSIlevel=(UpperRSIlevel<1?1:UpperRSIlevel>100?100:UpperRSIlevel);
lowerRSIlevel=(LowerRSIlevel<0?0:lowerRSIlevel>99?99:LowerRSIlevel);
if(upperRSIlevel<=lowerRSIlevel) upperRSIlevel=lowerRSIlevel+1;
if(lowerRSIlevel>=upperRSIlevel) lowerRSIlevel=upperRSIlevel-1;
/*
*/
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
//--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
if(server_time.min%minutesBefore==0 || server_time.min==0) {
if(SignalByRSI(Symbol(),TimeframeRSI,minutesBefore)==OP_BUY) {
//--- получили сигнал на покупку
Print("Сигнал на покупку ",TimeCurrent()); // Проверочное сообщение в журнал
//--- проверка наличия уже открытой позиции на покупку
//--- вызов функции открытия позиции на покупку
}
if(SignalByRSI(Symbol(),TimeframeRSI,minutesBefore)==OP_SELL) {
//--- получили сигнал на продажу
Print("Сигнал на продажу ",TimeCurrent()); // Проверочное сообщение в журнал
//--- проверка наличия уже открытой позиции на продажу
//--- вызов функции открытия позиции на продажу
}
}
}
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE) {
return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
double GetPriceClose(string symbol_name,ENUM_TIMEFRAMES timeframe, int shift){
double array[1];
if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
return(-1);
}
//+------------------------------------------------------------------+
int GetBarShift(string symbol_name,ENUM_TIMEFRAMES timeframe,datetime time) {
if(time<0) return(-1);
//---
datetime array[], time0;
if(CopyTime(symbol_name,timeframe,0,1,array)<0) return(-1);
time0=array[0];
if(CopyTime(symbol_name,timeframe,time0,time,array)<0) return(-1);
datetime temptime=GetTime(symbol_name,timeframe,ArraySize(array)-1);
if(array[0]==temptime && temptime<=time) return(ArraySize(array)-1);
else return(ArraySize(array));
}
//+------------------------------------------------------------------+
datetime GetTime(string symbol_name,ENUM_TIMEFRAMES timeframe,int bar) {
if(bar<0) return(-1);
datetime array[];
if(CopyTime(symbol_name,timeframe,bar,1,array)>0) return(array[0]);
return(-1);
}
//+------------------------------------------------------------------+
int SignalByRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, int minutes_before, int upper_lev_rsi=70, int lower_lev_rsi=30) {
//--- время 1x и 2x минут назад
datetime time_before_0=TimeCurrent()-minutes_before*PeriodSeconds(PERIOD_M1);
datetime time_before_1=TimeCurrent()-2*minutes_before*PeriodSeconds(PERIOD_M1);
//--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15)
int shift_0=GetBarShift(symbol_name,timeframe,time_before_0);
int shift_1=GetBarShift(symbol_name,timeframe,time_before_1);
//--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15)
double prev_rsi_value_0=GetLastDataRSI(symbol_name,timeframe,shift_0);
double prev_rsi_value_1=GetLastDataRSI(symbol_name,timeframe,shift_1);
//--- значения цен закрытия баров 1х и 2х минут назад
double prev_close_0=GetPriceClose(symbol_name,timeframe,shift_0);
double prev_close_1=GetPriceClose(symbol_name,timeframe,shift_1);
//--- отладочные сообщения
string tf=EnumToString(TimeframeRSI);
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
Comment(
"\nВремя проверки RSI: ",TimeCurrent(),", минуты времени проверки: ",server_time.min,
"\nВремя ",minutes_before," минут назад: ",time_before_0,", бар ",tf," : ",shift_0,
"\nВремя ",minutes_before*2," минут назад: ",time_before_1,", бар ",tf," : ",shift_1,
"\nЗначение RSI ",minutes_before," минут назад на ",tf," : ",DoubleToString(prev_rsi_value_0,4),
"\nЗначение RSI ",minutes_before*2," минут назад на ",tf," : ",DoubleToString(prev_rsi_value_1,4),
//---
"\nЗначение Close ",minutes_before," минут назад > ",tf," : ",DoubleToString(prev_close_0,Digits()),
"\nЗначение Close ",minutes_before*2," минут назад > ",tf," : ",DoubleToString(prev_close_1,Digits())
);
//--- проверка наличия данных RSI
if(prev_rsi_value_1>0 && prev_rsi_value_0>0) {
//--- проверка условия на продажу
if(prev_rsi_value_1<upper_lev_rsi && prev_rsi_value_0>upper_lev_rsi) {
if(prev_close_0>SymbolInfoDouble(symbol_name,SYMBOL_BID)) return(OP_SELL);
}
//--- проверка условия на покупку
if(prev_rsi_value_1>lower_lev_rsi && prev_rsi_value_0<lower_lev_rsi) {
if(prev_close_0<SymbolInfoDouble(symbol_name,SYMBOL_ASK)) return(OP_BUY);
}
}
return(-1);
}
//+------------------------------------------------------------------+
Compañeros, nunca he hecho ningún ajuste de historial, así que no conozco los entresijos de la lectura del gráfico después de la optimización.
Existe dicho gráfico tras el pase anual 2014-2015, ¿dónde mirar y qué significa? Te interesa el color y la ubicación de los cubos, ¿por qué algunos están en el centro, otros abajo/arriba, y dos/tres en el mismo cuadrado?
Gracias por la aclaración.
Yo tampoco he confiado nunca en los optimizadores en tantos años, creo que es un ajuste. Pero es como si cuanto más rico sea el color, mejor. Y además, cuantos más bloques con colores saturados, mejor. Pero qué hacer después con este lío - no puedo pensar. Siempre he tratado de construir sistemas adaptativos, y no con una selección estúpida de valores para una historia de probadores.
Quizás haya alguien que pueda explicarnos todo esto
Yo tampoco me he fiado nunca de los optimizadores en tantos años, los considero una chapuza. Pero cuanto más saturado sea el color, mejor. Y además, cuantos más bloques con colores saturados, mejor. Pero qué hacer después con este lío - no puedo pensar. Siempre he tratado de construir sistemas adaptativos, y no con una selección estúpida de valores para una historia de probadores.
Quizás haya alguien que pueda explicarnos todo esto
Es probable que nadie lo explique. Quedan 10-12 personas en el foro, algunas de ellas han sido baneadas y muchas de ellas no volverán. Ahora si miras el foro, hay unas 5-7 personas, la mitad de ellas no contestan a las preguntas. No se ha respondido a mi pregunta sobre el horario.
Tienes que buscar en el cuarto foro - vi una explicación del optimizador allí hace algún tiempo, pero no recuerdo bien de qué se trataba y dónde estaba...
Hola.
Me pueden decir por qué no es posible seleccionar una fecha en el calendario desplegable si lo hago en la configuración externa:¿Hay alguna forma de cambiar para que se pueda seleccionar una fecha en lugar de escribirla desde el teclado?
Compañeros, nunca he hecho ningún ajuste de historial, así que no conozco los entresijos de la lectura del gráfico después de la optimización.
Existe dicho gráfico tras el pase anual 2014-2015, ¿dónde mirar y qué significa? Te interesa el color y la ubicación de los cubos, ¿por qué algunos están en el centro, otros abajo/arriba, y dos/tres en el mismo cuadrado?
Gracias por la aclaración.
Sí, lo más probable es que nadie lo explique. Sólo quedan 10-12 personas en el foro, algunas de ellas han sido baneadas, y muchas no han vuelto. Ahora, si miras el foro, aparecen unas 5-7 personas, la mitad de ellas no contestan a las preguntas. Mi pregunta sobre el horario quedó sin respuesta.
No hay mucho que explicar y nadie responde. El gráfico que has mostrado no tiene sentido y cómo se ha obtenido es un misterio.
Y la opción "Superficie bidimensional" en la pestaña "Gráfico de optimización" del probador tiene sentido (imho) cuando queremos optimizar 2 parámetros de entrada de un EA o para ver claramente, a qué valores de 2 parámetros los resultados fueron buenos en la historia y si estos parámetros son interdependientes, y si tienen sentido en absoluto.
Aquí hay un ejemplo de la optimización de 2 parámetros de entrada (tal vez no es el mejor, pero no puedo encontrar un mejor ejemplo en este momento):
El eje horizontal es el valor del primer parámetro en 16 incrementos, y el eje vertical es el valor del segundo parámetro, también en 16 incrementos. Cuanto más oscuro sea el cuadrado verde, mayor será el beneficio (si la optimización por el beneficio) en los valores correspondientes de los parámetros, y cuanto más pálido, menor. El mejor resultado (por el beneficio de la historia) fue en el centro. El "montón" de color verde oscuro parece estar alrededor, lo que sugiere cierta dependencia y regularidad entre estos 2 parámetros y los parámetros no son sin sentido, mientras que el resultado de la optimización no es accidental. Por ello, conviene prestar atención a los valores de estos 2 parámetros a partir del mejor resultado (en el centro).
En general, todo es muy sencillo. En cuanto a cómo utilizarlo, bueno, es cuestión de imaginación. No miro estos cuadrados verdes durante mucho tiempo ))
Tu gráfico tiene sólo 0 en ambos ejes por alguna razón, y verticalmente estos 0 también están divididos en 3 pasos intermedios, de ahí los "cubos uno en el centro, dos abajo/arriba, y dos/tres en el mismo cuadrado". Y los resultados parecen aleatorios: los "cubos" blancos y verdes están dispersos al azar. Así que el gráfico no tiene sentido y no parece significar nada.
Hola.
Por favor, pueden decirme por qué no es posible seleccionar una fecha en el calendario desplegable si lo hago en los ajustes externos:¿Hay alguna forma de cambiar para que se pueda seleccionar la fecha en lugar de introducirla desde el teclado?