Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 6
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Camaradas, eu nunca fiz nenhum ajuste histórico, então eu não conheço os meandros da leitura do gráfico após a otimização.
Existe tal gráfico após a passagem anual 2014-2015, onde olhar e o que isso significa? Interessado na cor e localização dos cubos, por que alguns estão no centro, outros abaixo/abaixo, e dois/três no mesmo quadrado?
Obrigado pelo esclarecimento!
Não abre o comércio no testador. Qual poderia ser o problema aqui?)
Bem... Primeiro, você está tentando abrir um Sell at Ask price. Enquanto você está abrindo uma venda na Bid e uma compra na Ask.
Coloquei a pesquisa de dados RSI e sua passagem de nível em uma função. Tem também uma verificação de preço. Retorna sinais: para comprar, para vender, ou 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);
}
//+------------------------------------------------------------------+
Camaradas, eu nunca fiz nenhum ajuste histórico, então eu não conheço os meandros da leitura do gráfico após a otimização.
Existe tal gráfico após a passagem anual 2014-2015, onde olhar e o que isso significa? Interessado na cor e localização dos cubos, por que alguns estão no centro, outros abaixo/abaixo, e dois/três no mesmo quadrado?
Obrigado pelo esclarecimento!
Eu também nunca confiei em otimistas em tantos anos - acho que é um ajuste. Mas é um pouco como quanto mais rica a cor, melhor. E também - quanto mais blocos com cores saturadas, melhor. Mas o que fazer ainda mais com esta confusão - não consigo pensar. Sempre tentei construir sistemas adaptativos, e não com uma seleção estúpida de valores para a história de um testador.
Talvez haja alguém que possa nos explicar tudo isso
Eu também nunca confiei em otimistas em tantos anos - penso neles como um remendo. Mas quanto mais saturada for a cor, melhor. E também - quanto mais blocos com cores saturadas, melhor. Mas o que fazer a seguir com esta confusão - não consigo pensar. Sempre tentei construir sistemas adaptativos, e não com uma seleção estúpida de valores para a história de um testador.
Talvez haja alguém que possa nos explicar tudo isso
É provável que ninguém explique. Restam 10-12 pessoas no fórum, algumas delas foram banidas e muitas delas não voltarão. Agora se você olhar para o fórum, há cerca de 5-7 pessoas, metade delas não responde a perguntas. Minha pergunta sobre o cronograma não foi respondida.
Você precisa olhar no quarto fórum - vi uma explicação do otimizador lá há algum tempo, mas não me lembro bem do que se tratava e onde estava...
Olá.
Você pode me dizer por que não é possível selecionar uma data do calendário suspenso se eu fizer isso em ambientes externos?Há alguma maneira de mudar para que você possa selecionar uma data em vez de digitá-la a partir do teclado?
Camaradas, eu nunca fiz nenhum ajuste histórico, então eu não conheço os meandros da leitura do gráfico após a otimização.
Existe tal gráfico após a passagem anual 2014-2015, onde olhar e o que isso significa? Interessado na cor e localização dos cubos, por que alguns estão no centro, outros abaixo/abaixo, e dois/três no mesmo quadrado?
Obrigado pelo esclarecimento!
Sim, muito provavelmente ninguém vai explicar. Restam apenas 10-12 pessoas no fórum, algumas delas foram banidas e muitas nunca mais voltaram. Agora, se você olhar para o fórum, cerca de 5-7 pessoas aparecem, metade delas não responde a perguntas. Minha pergunta sobre o cronograma ficou sem resposta.
Não há muito a explicar e ninguém está respondendo. O gráfico que você mostrou não tem sentido e como ele foi obtido é um mistério.
E a opção "Superfície bidimensional" na aba "Gráfico de otimização" do testador faz sentido (imho) quando queremos otimizar 2 parâmetros de entrada de um EA ou ver claramente, em quais valores de 2 parâmetros os resultados foram bons na história e se esses parâmetros são interdependentes, e se fazem sentido de todo.
Aqui está um exemplo da otimização de 2 parâmetros de entrada (talvez não seja o melhor, mas não consigo encontrar um exemplo melhor neste momento):
O eixo horizontal é o valor do 1º parâmetro em 16 incrementos, e o eixo vertical é o valor do 2º parâmetro, também em 16 incrementos. Quanto mais escuro o quadrado verde, maior o lucro (se a otimização pelo lucro) estava nos valores correspondentes dos parâmetros, quanto mais pálido, menor o lucro. O melhor resultado (por lucro histórico) foi no centro. O "monte" verde escuro parece estar em torno dele, o que sugere alguma dependência e regularidade entre estes 2 parâmetros e os parâmetros não são insignificantes, enquanto o resultado da otimização não é acidental. Portanto, vale a pena prestar atenção aos valores destes parâmetros 2x a partir do melhor resultado (no centro).
Em geral, tudo é muito simples. Quanto à forma de usá-la, bem, é uma questão de imaginação. Eu não olho para estes quadrados verdes por muito tempo ))
Seu gráfico tem apenas 0 nos dois eixos por alguma razão, e verticalmente estes 0's também são divididos em 3 passos intermediários, daí os "cubos um no centro, dois abaixo/cima, e dois/três no mesmo quadrado". E os resultados parecem aleatórios - "cubos" brancos e verdes são dispersos aleatoriamente. Portanto, o gráfico não tem sentido e não parece significar nada.
Olá.
Você pode me dizer por que é impossível selecionar uma data do calendário suspenso se eu fizer isso em ambientes externos?Há alguma maneira de mudar para que a data possa ser selecionada em vez de inseri-la a partir do teclado?