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

 
Artyom Trishkin :

Göstergeden rasgele fraktallar elde etme işlevlerini tamamen ayırmak için, yüksek[] ve düşük[] dizilerini ve sınır değerini bunlara referans olarak iletmemelisiniz, ancak gerekli değerleri fonksiyonlarla da almalısınız.

Kodu MQL5'e olabildiğince yakın yaptığımız için, High[], Low[], iHigh(), iLow() fonksiyonlarını terk etmemiz ve kendi fonksiyonlarımızı kullanarak gerekli fiyatları almamız gerekecek. Aynı göstergede şöyle görünecek:

Doğru, yine de GetPriceHigh() ve GetPriceLow() işlevlerinden -1 almak için kontroller yapmanız gerekiyor.
Teşekkür ederim.
 
strongflex :
RSI'ın 15 dakikaya ihtiyacı var. Danışmanın piyasanın açılışından itibaren her 20 dakikada bir kontrol etmesi gerekiyor (9-00, 9-20, 9-40 vb.) diyelim ki 10-20'de 70. seviyede yukarı doğru bir geçiş oldu, hatırlıyor. fiyat ve 10-40'ta fiyatın 10-20'den düşük olup olmadığını kontrol edecekler ve kısa açılıyor.

İlk başta, ayarlanan dakika sayısını elde etmek için zaman ayırmak gerekir. İşte test komut dosyası:

//+------------------------------------------------------------------+
//|                                                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 ()));
  }
//+------------------------------------------------------------------+

Bu komut dosyası, geçerli sunucudaki zamanı sayar - yalnızca belirtilen sayıda dakika önce RSI verilerini alma testi.

 

Ardından, geçerli saati bulmamız gerekiyor ve dakikalarının değerinin, kontrol sıklığının dakikalarının katı olup olmadığını. Test danışmanı haline getirdi:

//+------------------------------------------------------------------+
//|                                               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));
  }
//+------------------------------------------------------------------+

Bundan sonra ne bilmeniz gerekiyor?

 
Güzel gün. Ben ticarette acemiyim, bu yüzden yazılım soruları da dahil olmak üzere birçok soru ortaya çıkıyor, benim durumumda MT4. Böyle bir şey, örneğin grafik penceresinde bir sayı olarak görüntülenen bir döviz çiftinin yayılmasını ve aynı şekilde ATR göstergesini yapmak mümkün müdür? Tobish, çizelge yok, sadece rakamlar. İkinci nokta, ATR tabanlı takip eden durdurma noktasıdır. Otomatik yapmak mümkün mü? Bir pozda oturuyorsanız, hesap makinesi ve iyi görme sayesinde, durağı hesaplamak ve manuel olarak ayarlamak sorun değildir. Ancak bu işlemi otomatik hale getirmek, bence, dezavantajları olsa bile, bir tüccar için bir nimettir, ancak iyi bir eğilimde, takip eden bir durdurma, yeni başlayanlar tarafından 'çubuk' veya yanlış ayarlanmış bir durdurma riskini azaltacaktır. . Şimdiden teşekkürler.
 
Artyom Trishkin :

Ardından, geçerli saati bulmamız gerekiyor ve dakikalarının değerinin, kontrol sıklığının dakikalarının katı olup olmadığını. Test danışmanı haline getirdi:

//+------------------------------------------------------------------+
//|                                               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));
  }
//+------------------------------------------------------------------+

Bundan sonra ne bilmeniz gerekiyor?

Ayrıca, RSI 20 dakika önce seviyeyi geçtiyse fiyatı kontrol ederiz, yani kısacası fiyat 20 dakika öncesinden daha düşük olmalıdır. Çok teşekkürler. Her şey benimle çalışırsa söz verdim))
 
Vladymyr Glushko :
Güzel gün. Ticarette yeniyim, bu yüzden yazılım soruları da dahil olmak üzere birçok soru var, benim durumumda MT4. Böyle bir şey, örneğin grafik penceresinde bir sayı olarak görüntülenen bir döviz çiftinin yayılmasını ve aynı şekilde ATR göstergesini yapmak mümkün müdür? Tobish, çizelge yok, sadece rakamlar. İkinci nokta, ATR tabanlı takip eden durdurma noktasıdır. Otomatik yapmak mümkün mü? Bir pozda oturuyorsanız, hesap makinesi ve iyi görme sayesinde, durağı hesaplamak ve manuel olarak ayarlamak sorun değildir. Ancak bu işlemi otomatik hale getirmek, bence, dezavantajları olsa bile, bir tüccar için bir nimettir, ancak iyi bir eğilimde, takip eden bir durdurma, yeni başlayanlar tarafından 'çubuk' veya yanlış ayarlanmış bir durdurma riskini azaltacaktır. . Şimdiden teşekkürler.

Her şey kolay ve basit bir şekilde yapılır - grafik nesneleri, özellikle - grafik üzerinde gerekli verilerle metin etiketlerini görüntüleyin ve her onayda bunları güncelleyin.

Ve kod tabanında birçok farklı trol var - kendiniz için doğru olanı arayın;)

 
strongflex :
Ayrıca, RSI 20 dakika önce seviyeyi geçtiyse fiyatı kontrol ederiz, yani kısacası fiyat 20 dakika öncesinden daha düşük olmalıdır. Çok teşekkürler. Her şey benimle çalışırsa söz verdim))
O zamana karşılık gelen mumun açılış/kapanış/yüksek/düşük olduğu anda fiyatı "o zaman" kontrol edebileceğiz - MT4'te kene geçmişi yok. Bu nedenle mevcut fırsatların en doğru fiyat tespiti için dakikalar üzerindeki kesişimi bulmanız gerekir. Ancak RSI geçişi ile ne demek istiyorsunuz?
 

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

RSI seviyesi 70'i geçmek kabul edilebilir 10-00'de RSI 70'in altında, 10-20'de 70'in üzerindeydi ve 10-40'ta 10-20'nin 10-40'tan daha yüksek olması gerektiğini kontrol ediyoruz
 
Artyom Trishkin :

Her şey kolay ve basit bir şekilde yapılır - grafik nesneleri, özellikle - grafik üzerinde gerekli verilerle metin etiketlerini görüntüleyin ve her onayda bunları güncelleyin.

Ve kod tabanında birçok farklı trol var - kendiniz için doğru olanı arayın;)

Çok teşekkür ederim ...... bakacağız))

 
Artyom Trishkin :

Her şey kolay ve basit bir şekilde yapılır - grafik nesneleri, özellikle - grafik üzerinde gerekli verilerle metin etiketlerini görüntüleyin ve her onayda bunları güncelleyin.

Ve kod tabanındaki çeşitli trollere gelince - bir düzine düzine - kendiniz için doğru olanı arayın;)

Ama işte adım adım nasıl yapılır?..... grafik nesneleri (nedir ve nasıl yerleştirilir), grafikte verilerle etiketler (nereye girilir ve hangi verilerle) ...... aptal sorular için üzgünüm.
Neden: