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

 
Artyom Trishkin:

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()
Obrigado.
 
strongflex:
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?

 
Boa tarde. Sou novo no comércio, por isso tenho muitas perguntas, inclusive de software, no meu caso é o MT4. É possível colocar um spread de par de moedas, por exemplo, em uma janela de gráficos na forma de números e da mesma forma um indicador de ATR? 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. Obrigado de antemão.
 
Artyom Trishkin:

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?

Em seguida, se há uma cruz do nível RSI 20 minutos atrás, verificamos o preço, ou seja, por um curto espaço de tempo, o preço deve ser inferior a 20 minutos atrás. Muito obrigado. Se funcionar, eu lhe devo uma promessa))
 
Vladymyr Glushko:
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 ;)

 
strongflex:
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))
Só poderemos verificar o preço "agora" "então" abrindo/fechando/alto/baixo a vela correspondente àquele tempo - sem histórico de tic-tac em MT4. Portanto, precisamos encontrar um cruzamento nas atas para a determinação mais precisa dos preços disponíveis. Mas o que você quer dizer com o crossover RSI ?
 

Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

RSI cruzando o nível 70 digamos que o RSI a 10-00 estava abaixo de 70 a 10-20 acima de 70 e a 10-40 verifique que o 10-20 deve ser mais alto do que a 10-40
 
Artyom Trishkin:

É 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))

 
Artyom Trishkin:

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 ;)

Mas como fazê-lo passo a passo? ..... objetos gráficos (o que é e como defini-los), colocar etiquetas com os dados no gráfico (onde entrar e com que dados) ...... desculpe pelas perguntas bobas.
Razão: