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

 
MakarFX:

Estás comparando el rsi equivocado en lugar de "por".

¿Así que eso es todo?

 int Signal(int i)
{
  // Снимем показания индикатора
   double Current   = iRSI(NULL, 0, per, PRICE_CLOSE, i);
   double Previous    = iRSI(NULL, 0, per, PRICE_CLOSE, i+1);
   
    double SCurrent   = iRSI(NULL, 0, per, PRICE_CLOSE, i);
     // Для предыдущего бара
   double SPrevious    = iRSI(NULL, 0, per, PRICE_CLOSE, i+1);
      // А теперь проверим всловия для наличия сигналов
   
   // есть сигнал на покупку?
   if(Current <= niz && Close[1]>Open[1])
   
   return(BUY);
   
   if(Current >= verx && Close[1]<Open[1])
    return(SELL);
   
   // Сигнала нет   
   return(-1);
 
jarikn:

¿Así que eso es todo?

Sí, pero no se puede reescribir un indicador en otro.

Construye la lógica del indicador y luego escríbelo.


En este caso, no toda la lógica está clara o hay datos extra que no se utilizan.
 
MakarFX:

Sí, pero no se puede reescribir un indicador en otro.

Construye la lógica del indicador y luego escríbelo.


En este caso, no toda la lógica está clara o hay datos adicionales que no se utilizan.

ver en la captura de pantalla lo que tengo.

mi idea es esta.

si el rsi está por encima del nivel 70 y la vela cierra por debajo de la apertura - debería haber una señal de venta

Tengo una idea. Si el rsi está por debajo de 30 y la vela cierra por encima de la apertura - una señal de compra.


no juzgues, solo estoy tratando de aprender un poco))))

Ahora dime qué hice mal.

Archivos adjuntos:
 
jarikn:

Mira la captura de pantalla de lo que tengo.

mi idea es esta.

Si el rsi está por encima de 70 y la vela cierra por debajo de la apertura - debería haber una señal de venta.

Si el rsi está por debajo de 30 y la vela cierra por encima de la apertura - una señal de compra.


no juzgues, solo estoy tratando de aprender un poco))))

Lo único que intento aprender es esto.

1) utilizar el botón para pegar capturas de pantalla Imagen

2) según su condición - es correcto.

//+------------------------------------------------------------------+
//|                                                   jarikn_RSI.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Покупаем
#property indicator_label1  "Продаём"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Продаём
#property indicator_label2  "Покупаем"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int   RSI_Period  =14;  //Период рассчета RSI
input int   AlertLevUp  =70;  //Уровень для покупок 
input int   AlertLevDn  =30;  //Уровень для продаж
//--- indicator buffers
double      Buy[];            // Буфер для покупок
double      Sell[];           // Буфер для продаж
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i);
      if(RSI>AlertLevUp&&open[i]>close[i])
         Buy[i]=high[i];
      if(RSI<AlertLevDn&&open[i]<close[i])
         Sell[i]=low[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
MakarFX:

1) utilice el botón para insertar capturas de pantalla

2) según su condición - esto es correcto.

Gracias. Lo investigaré.

 
MakarFX:

1) utilice el botón para insertar capturas de pantalla

2) de acuerdo con su condición - de esta manera

¿cómo escribir la condición * si rsi cruza de abajo hacia arriba AlertLevDn entonces comprar? ¿es posible o necesito un deslizador adicional?

{
//---
   int limit=rates_total-prev_calculated-1;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
      double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i);
      if(RSI>AlertLevUp)
         Buy[i]=high[i];
      if(RSI<AlertLevDn)
         Sell[i]=low[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn:

¿cómo escribir esta condición * si rsi cruza AlertLevDn de abajo hacia arriba entonces comprar? ¿es posible o se necesita un deslizador adicional?

Su pregunta le da la respuesta...

Si el rsi cruza de abajo hacia arriba - significa que el valor actual es más alto y el anterior es más bajo.

valor actual

double RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i);

el valor anterior debe hacerse

double RSI2 = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i+1);

después de eso compare

si RSI2 es menor que AlertLevDn y RSI es mayor que AlertLevDn

tienes una compra)

 
MakarFX:

Su pregunta le da la respuesta...

Si el rsi cruza de abajo hacia arriba, significa que el valor actual es más alto y el valor anterior es más bajo.

valor actual

el valor anterior debe hacerse

después de eso compare

si RSI2 es menor que AlertLevDn y RSI es mayor que AlertLevDn

Tienes una compra)

Lo tengo. Gracias)

 
jarikn:

Entendido. Gracias).

correcto

int limit=rates_total-prev_calculated-2;
 

Saludos, ¿podrías darme una pista? MT5.

Necesito obtener los valores de las bandas de Bollinger.

Escribo

#property strict

#include <Indicators\Trend.mqh>
CiBands       m_bands;

input int Magic = 778871;

int OnInit(){//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////////OnInit()


Print(m_bands.Create(Symbol(), PERIOD_CURRENT, 20, 0, 2, PRICE_CLOSE));
Print((string)m_bands.MaPeriod());
Print((string)m_bands.Base(Bars(NULL, PERIOD_CURRENT)));

return(INIT_SUCCEEDED);
} 

Produce algo similar a double_max.

Al mismo tiempo, consigue que el periodo, el desplazamiento y todo lo demás sea correcto.



Razón de la queja: