MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 4
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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.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?
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. 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;)
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))
Artyom Trishkin :
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории . Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
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))
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;)