Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 4

 
Artyom Trishkin:

Para separar las funciones para obtener fractales arbitrarios del indicador, no debemos pasar por referencia las matrices high[] y low[] y el valor límite en ellas.

Dado que nuestro código es muy cercano a MQL5, tendremos que rechazar las funciones High[], Low[], iHigh() y iLow(). Así es como se verá en este indicador:

Aunque también debería comprobar si hay -1 en las funciones GetPriceHigh() y GetPriceLow()
Gracias.
 
strongflex:
La RSI debería ser de 15 minutos. Necesitamos que el EA lo compruebe cada 20 minutos desde la apertura del mercado (9-00, 9-20, 9-40, etc.) Digamos que a las 10-20 hubo un cruce por debajo del nivel 70, recuerda el precio y a las 10-40 comprueba si el precio es menor que a las 10-20, abre un corto.

Bueno, primero tienes que hacer que el tiempo recupere un número determinado de minutos. Aquí hay un script de prueba:

//+------------------------------------------------------------------+
//|                                                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 realiza una cuenta atrás desde la hora actual del servidor - sólo prueba a obtener los datos del RSI hace un número determinado de minutos.

 

A continuación, necesitamos saber la hora actual y si su valor es un múltiplo de los minutos del intervalo de comprobación. Lo he convertido en un EA de prueba:

//+------------------------------------------------------------------+
//|                                               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 continuación, ¿qué necesitamos saber?

 
Buenas tardes. Soy nuevo en el trading, por lo que tengo muchas preguntas, entre ellas las del software, en mi caso es MT4. ¿Es posible poner un spread de par de divisas, por ejemplo, en una ventana de gráfico en forma de números y de la misma manera un indicador de ATR? Creo que sería conveniente utilizar esta forma de presentar la información sobre la situación del mercado, es más cómoda y rápida de calcular y evaluar en base a promedios. El segundo punto es la parada móvil basada en el ATR. ¿Es posible hacerla automática? Si estás sentado en una postura, gracias a la calculadora y a la buena vista, puedes calcular y fijar un tope manualmente, sin problemas. Y hacerlo automático es una buena idea para un trader, aunque tenga sus desventajas, pero en una buena tendencia un trailing stop reducirá el riesgo de un stop erróneo por parte de un novato. Gracias de antemano.
 
Artyom Trishkin:

A continuación, necesitamos saber la hora actual y si su valor es un múltiplo de los minutos del intervalo de comprobación. Lo he convertido en un EA de prueba:

//+------------------------------------------------------------------+
//|                                               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 continuación, ¿qué necesitamos saber?

A continuación, si hay un cruce del nivel del RSI hace 20 minutos, comprobamos el precio, es decir, para el corto, el precio debe ser más bajo que hace 20 minutos. Muchas gracias. Si funciona, te debo una promesa))
 
Vladymyr Glushko:
Buen día. Soy nuevo en el trading, por eso tengo muchas preguntas, incluyendo el software, en mi caso es MT4. ¿Es posible mostrar el spread del par de divisas en la ventana del gráfico como un número, y del mismo modo el indicador ATR? Creo que sería conveniente utilizar esta forma de presentar la información sobre la situación del mercado, es más cómoda y rápida de calcular y evaluar en base a promedios. El segundo punto es la parada móvil basada en el ATR. ¿Es posible hacerla automática? Si estás sentado en una postura, gracias a la calculadora y a la buena vista, puedes calcular y fijar un tope manualmente, sin problemas. Y hacerlo automático es una buena idea para un trader, aunque tenga sus desventajas, pero en una buena tendencia un trailing stop reducirá el riesgo de un stop erróneo por parte de un novato. Gracias de antemano.

Es sencillo y directo: mostrar objetos gráficos, en particular etiquetas de texto con los datos necesarios en el gráfico, y actualizarlos en cada tic.

Si no sabes qué hacer con ellos, intenta encontrar el adecuado ;)

 
strongflex:
Entonces, si el nivel del RSI ha sido cruzado hace 20 minutos, comprobamos el precio, es decir, para una venta el precio debe ser más bajo que hace 20 minutos. Muchas gracias. Si todo sale bien te deberé una promesa))
Sólo podremos comprobar el precio "ahora" "entonces" mediante la apertura/cierre/vela alta/baja correspondiente a ese momento - no hay historial de ticks en MT4. Así que tenemos que encontrar un cruce en los minutos para la determinación más precisa del precio disponible. ¿Pero a qué te refieres con el cruce del RSI?
 

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

RSI cruzando el nivel 70 digamos que el RSI en 10-00 estaba por debajo de 70 en 10-20 por encima de 70 y en 10-40 comprobar el 10-20 debe ser mayor que en 10-40
 
Artyom Trishkin:

Es sencillo y directo: se muestran objetos gráficos, en particular etiquetas de texto con los datos necesarios en el gráfico, y se actualizan en cada tic.

Y las diferentes redes de arrastre en kodobase son una docena - busque la correcta ;)

Muchas gracias ...... lo buscaremos))

 
Artyom Trishkin:

Todo es fácil y sencillo - mostrar objetos gráficos, en particular - etiquetas de texto con los datos requeridos en el gráfico, y actualizarlos en cada tick.

Y las diferentes redes de arrastre en kodobase son una docena - encontrar el adecuado para usted ;)

Pero, ¿cómo hacerlo paso a paso? ..... objetos gráficos (qué es y cómo ponerlos), poner etiquetas con los datos en el gráfico (dónde introducir y con qué datos) ...... perdón por las preguntas tontas.