Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1521

 
MakarFX:

Sie vergleichen den falschen rsi anstelle von "pro".

Das war's also?

 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:

Das war's also?

Ja, aber man kann nicht einfach einen Indikator in einen anderen umschreiben.

Entwickeln Sie die Logik des Indikators und schreiben Sie ihn dann.


In diesem Fall ist nicht alle Logik klar oder es gibt zusätzliche Daten, die nicht verwendet werden.
 
MakarFX:

Ja, aber man kann nicht einfach einen Indikator in einen anderen umschreiben.

Entwickeln Sie die Logik des Indikators und schreiben Sie ihn dann.


In diesem Fall ist die Logik nicht ganz klar oder es gibt zusätzliche Daten, die nicht verwendet werden.

sehen Sie auf dem Screenshot, was ich bekommen habe.

Meine Idee ist folgende.

Wenn der rsi über dem Niveau von 70 liegt und die Kerze unter dem Eröffnungswert schließt, sollte ein Verkaufssignal gegeben sein.

Ich habe eine Idee: Wenn der rsi unter 30 liegt und die Kerze über der Eröffnung schließt - ein Kaufsignal.


Urteilen Sie nicht, ich versuche nur, ein bisschen zu lernen))))

Jetzt sagen Sie mir, was ich falsch gemacht habe.

Dateien:
 
jarikn:

Sehen Sie sich den Screenshot an, den ich habe.

Meine Idee ist folgende.

Wenn der rsi über 70 liegt und die Kerze unter dem Eröffnungswert schließt, sollte ein Verkaufssignal gegeben sein.

Wenn der rsi unter 30 liegt und die Kerze über der Eröffnung schließt - ein Kaufsignal.


Urteilen Sie nicht, ich versuche nur, ein bisschen zu lernen))))

Das Einzige, was ich zu lernen versuche, ist dies.

1) Verwenden Sie die Schaltfläche zum Einfügen von Bildschirmfotos Bild

2) nach Ihrem Zustand - es ist richtig.

//+------------------------------------------------------------------+
//|                                                   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) Verwenden Sie die Schaltfläche zum Einfügen von Bildschirmfotos

2) je nach Ihrem Zustand - das ist richtig.

Danke, ich werde es mir ansehen.

 
MakarFX:

1) Verwenden Sie die Schaltfläche zum Einfügen von Bildschirmfotos

2) je nach Ihrem Zustand - hier entlang

wie die Bedingung zu schreiben * wenn rsi kreuzt von unten nach oben AlertLevDn dann kaufen? ist es möglich, oder brauche ich einen zusätzlichen Schieberegler?

{
//---
   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:

wie diese Bedingung zu schreiben * wenn rsi kreuzt AlertLevDn von unten nach oben dann kaufen? ist es möglich, oder benötigen Sie einen zusätzlichen Schieberegler?

Ihre Frage gibt Ihnen die Antwort...

Wenn der rsi von unten nach obenkreuzt, bedeutet dies, dass der aktuelle Wert höher und der vorherige Wert niedriger ist.

aktueller Wert

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

vorheriger Wert sollte gemacht werden

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

danach vergleichen

wenn RSI2 kleiner ist als AlertLevDn und RSI größer ist als AlertLevDn

Sie haben einen Kauf)

 
MakarFX:

Ihre Frage gibt Ihnen die Antwort...

Wenn der rsi von unten nach oben kreuzt, bedeutet dies, dass der aktuelle Wert höher und der vorherige Wert niedriger ist.

aktueller Wert

der vorherige Wert muss übernommen werden

danach vergleichen

wenn RSI2 kleiner ist als AlertLevDn und RSI größer ist als AlertLevDn

Sie haben einen Kauf)

Ich hab's. Danke)

 
jarikn:

Verstanden. Danke.)

richtig

int limit=rates_total-prev_calculated-2;
 

Grüße, könnten Sie mir einen Tipp geben? MT5.

Ich muss die Werte der Bollinger-Bänder ermitteln.

Ich schreibe

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

Gibt etwas Ähnliches aus wie double_max.

Gleichzeitig werden Periode, Offset und alles andere richtig eingestellt.



Grund der Beschwerde: