Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 4

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
Para separar as funções para obter fractais arbitrários do indicador, não devemos passar por matrizes de referência altas[] e baixas[] e limitar o valor nelas.
Como nosso código é muito próximo ao MQL5, teremos que recusar as funções High[], Low[], iHigh() e iLow(). Esta é a aparência que terá neste indicador:
Embora, você também deve verificar por -1 das funções GetPriceHigh() e GetPriceLow()A LER deve ser de 15 minutos. Precisamos que a EA verifique a cada 20 minutos desde a abertura do mercado (9-00, 9-20, 9-40 etc.) Por exemplo, a cada 10-20 houve uma passagem de baixo para cima do nível 70 lembra-se do preço e a cada 10-40 verifica se o preço é mais baixo do que a 10-20 abre um curto.
Bem, primeiro você precisa fazer com que o tempo seja recuperado em um determinado número de minutos. Aqui está um roteiro de teste:
//| sTestValueRSI.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
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15; // Таймфрейм RSI
input int MinutesBefore =20; // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
"\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
"\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
"\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
}
//+------------------------------------------------------------------+
Este script está em contagem regressiva a partir do tempo atual do servidor - apenas teste de recuperação de dados RSI um determinado número de minutos atrás.
A seguir, precisamos saber a hora atual e se seu valor é um múltiplo dos minutos do intervalo de verificação. Eu o transformei em um teste EA:
//| 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 MinutesBefore =20; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
double prevRSIValue; // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
}
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
{
datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
int shift=Bars(symbol_name,timeframe,start_time,time_before);
return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
A seguir, o que precisamos saber?
A seguir, precisamos saber a hora atual e se seu valor é um múltiplo dos minutos do intervalo de verificação. Eu o transformei em um teste EA:
//| 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 MinutesBefore =20; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
double prevRSIValue; // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
}
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
{
datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
int shift=Bars(symbol_name,timeframe,start_time,time_before);
return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
A seguir, o que precisamos saber?
Bom dia. Sou novo no comércio, por isso tenho muitas perguntas, incluindo software, no meu caso é o MT4. É possível exibir o spread do par de moedas no gráfico como um número e indicador ATR da mesma forma? Penso que seria conveniente utilizar esta forma de apresentar informações sobre a situação do mercado, é mais conveniente e mais rápido calcular e avaliar com base em médias. O segundo ponto é a parada em movimento com base na ATR. É possível torná-lo automático? Se você estiver sentado em uma pose, então graças à calculadora e à boa visão, você pode calcular e definir uma parada manualmente - sem problemas. E torná-la automática é uma boa idéia para um comerciante, mesmo que tenha suas desvantagens, mas em uma boa tendência, uma parada de rastreamento reduzirá o risco de uma parada errada por parte de um novato. Agradecemos antecipadamente.
É simples e direto - exibir objetos gráficos, em particular etiquetas de texto com os dados necessários no gráfico, e atualizá-los em cada tic tac.
Se você não souber o que fazer com eles, tente encontrar o certo ;)
Então, se o nível de RSI foi ultrapassado há 20 minutos, verificamos o preço, ou seja, por um curto período o preço deve ser inferior a 20 minutos atrás. Muito obrigado. Se tudo der certo, serei encarregado de cumprir a promessa))
Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
É fácil e simples de fazer - exibir objetos gráficos, em particular - etiquetas de texto com os dados necessários no gráfico, e atualizá-las a cada tick.
E diferentes redes de arrasto em kodobase são um centavo a dúzia - procure a correta ;)
Muito obrigado ...... vamos procurar por ele))
Tudo é fácil e simples - exibir objetos gráficos, em particular - etiquetas de texto com os dados necessários no gráfico, e atualizá-los a cada tick.
E diferentes redes de arrasto em kodobase são um centavo a dúzia - encontre a certa para você mesmo ;)