MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1521

 
MakarFX :

Aksi takdirde, "per" yerine karşılaştırırsanız, rsi okumaları olmalıdır.

öyle mi?

 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 :

öyle mi?

Evet, ancak bir göstergeyi diğerine yeniden yazamazsınız.

Göstergenin mantığını oluşturun ve ardından yazın.


Bu durumda, tüm mantık net değildir veya kullanılmayan ekstra veriler vardır.
 
MakarFX :

Evet, ancak bir göstergeyi diğerine yeniden yazamazsınız.

Göstergenin mantığını oluşturun ve ardından yazın.


Bu durumda, tüm mantık net değildir veya kullanılmayan ekstra veriler vardır.

Aldığım ekran görüntüsüne bakın.

Bu fikrim var.

rsi 70 seviyesinin üzerindeyse ve mum açılış seviyesinin altında kapanırsa, bir satış sinyali olmalıdır.

rsi 30 seviyesinin altındaysa ve mum açıklığın üzerinde kapanırsa, sinyal satın almaktır.


kesinlikle yargılama, sadece biraz öğrenmeye çalışıyorum))))

Şimdi söyle bana neyi yanlış yaptım?

Dosyalar:
 
jarikn :

Aldığım ekran görüntüsüne bak.

Bu fikrim var.

rsi 70 seviyesinin üzerindeyse ve mum açılış seviyesinin altında kapanırsa, bir satış sinyali olmalıdır.

rsi 30 seviyesinin altındaysa ve mum açıklığın üzerinde kapanırsa, sinyal satın almaktır.


kesinlikle yargılama, sadece biraz öğrenmeye çalışıyorum))))

Şimdi söyle bana neyi yanlış yaptım?

1) düğmesini kullanarak mesajlara ekran görüntüleri ekleyin resim

2) durumunuza göre - doğru

 //+------------------------------------------------------------------+
//|                                                   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) düğmesini kullanarak mesajlara ekran görüntüleri ekleyin

2) durumunuza göre - doğru

teşekkür etmek. bunu halledeceğim

 
MakarFX :

1) düğmesini kullanarak mesajlara ekran görüntüleri ekleyin

2) durumunuza göre - doğru

ama böyle bir koşul nasıl yazılır * eğer rsi aşağıdan yukarıya doğru kesişirse AlertLevDn o zaman satın alır mı? Bu mümkün mü yoksa ek bir kayar parçaya ihtiyacım var mı?

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

ve böyle bir koşul nasıl yazılır * rsi aşağıdan yukarıya doğru kesişirse AlertLevDn satın alın? Bu mümkün mü yoksa ek bir kayar parçaya ihtiyacım var mı?

Sorunuz size cevap veriyor...

rsi alttan üste geçerse , mevcut değer daha yüksektir ve önceki değer daha düşüktür

bugünkü değeri

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

önceki yapılacak

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

sonra karşılaştır

RSI2, AlertLevDn'den küçükse ve RSI, AlertLevDn'den büyükse

bir bai'niz var)

 
MakarFX :

Sorunuz size cevap veriyor...

rsi alttan üste geçerse , mevcut değer daha yüksektir ve önceki değer daha düşüktür

bugünkü değeri

önceki yapılacak

sonra karşılaştır

RSI2, AlertLevDn'den küçükse ve RSI, AlertLevDn'den büyükse

bir bai'niz var)

anladım. teşekkür etmek)

 
jarikn :

anladım. teşekkür etmek)

düzelt

 int limit=rates_total-prev_calculated- 2 ;
 

Selamlar, lütfen tavsiye verin. MT5

Bollinger Bantları değerlerini almanız gerekiyor.

yazı

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

double_max'a benzer bir çıktı verir.

Bu durumda, dönem, ofset ve geri kalanı doğru olur