MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 6
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
Yoldaşlar, hiç geçmiş eşleştirme yapmadım, bu yüzden optimizasyondan sonra bir grafiği okumanın inceliklerini bilmiyorum.
2014-2015 yıllık geçişinden sonra böyle bir program var, nereye bakmalı ve bu ne anlama geliyor? Küplerin rengi ve düzeniyle ilgileniyorsanız, neden bazıları ortada, ikincisi altta/üstte ve iki/üç bir karede?
Açıklama için teşekkürler!
test cihazında bir anlaşma açmaz. burdaki problem ne olabilir?
İlk olarak, Satış fiyatından bir Satış açmaya çalışıyorsunuz. Satış Bid'de ve satın alma Ask'ta açılırken.
RSI verilerinin aranmasını ve seviyelerin kesişimini bir işleve göre tasarladı. Ayrıca fiyat kontrolü var. Dönüş sinyalleri: al, sat veya hiçbir şey (-1)
//| 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 UpperRSIlevel = 70 ; // Верхний уровень RSI
input int LowerRSIlevel = 30 ; // Нижний уровень RSI
input int MinutesBefore = 20 ; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
int upperRSIlevel; // Верхний уровень RSI
int lowerRSIlevel; // Нижний уровень RSI
//---
double prevRSIvalue0; // Значение RSI для заданного тф xxx минут назад
double prevRSIvalue1; // Значение RSI для заданного тф xxx минут назад-x минут
//---
double prevClose_0; // Значение Close для заданного тф xxx минут назад
double prevClose_1; // Значение Close для заданного тф xxx минут назад-x минут
//---
datetime timeBefore; // Время ххх минут назад
datetime timePrevBefore; // Время ххх минут назад-x минут
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
upperRSIlevel=(UpperRSIlevel< 1 ? 1 :UpperRSIlevel> 100 ? 100 :UpperRSIlevel);
lowerRSIlevel=(LowerRSIlevel< 0 ? 0 :lowerRSIlevel> 99 ? 99 :LowerRSIlevel);
if (upperRSIlevel<=lowerRSIlevel) upperRSIlevel=lowerRSIlevel+ 1 ;
if (lowerRSIlevel>=upperRSIlevel) lowerRSIlevel=upperRSIlevel- 1 ;
/*
*/
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
MqlDateTime server_time;
TimeToStruct ( TimeCurrent (),server_time);
//--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) {
if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_BUY ) {
//--- получили сигнал на покупку
Print ( "Сигнал на покупку " , TimeCurrent ()); // Проверочное сообщение в журнал
//--- проверка наличия уже открытой позиции на покупку
//--- вызов функции открытия позиции на покупку
}
if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_SELL ) {
//--- получили сигнал на продажу
Print ( "Сигнал на продажу " , TimeCurrent ()); // Проверочное сообщение в журнал
//--- проверка наличия уже открытой позиции на продажу
//--- вызов функции открытия позиции на продажу
}
}
}
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) {
return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[ 1 ];
if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) {
if (time< 0 ) return (- 1 );
//---
datetime array[], time0;
if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 );
time0=array[ 0 ];
if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 );
datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 );
if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 );
else return ( ArraySize (array));
}
//+------------------------------------------------------------------+
datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) {
if (bar< 0 ) return (- 1 );
datetime array[];
if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]);
return (- 1 );
}
//+------------------------------------------------------------------+
int SignalByRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int minutes_before, int upper_lev_rsi= 70 , int lower_lev_rsi= 30 ) {
//--- время 1x и 2x минут назад
datetime time_before_0= TimeCurrent ()-minutes_before* PeriodSeconds ( PERIOD_M1 );
datetime time_before_1= TimeCurrent ()- 2 *minutes_before* PeriodSeconds ( PERIOD_M1 );
//--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15)
int shift_0=GetBarShift(symbol_name,timeframe,time_before_0);
int shift_1=GetBarShift(symbol_name,timeframe,time_before_1);
//--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15)
double prev_rsi_value_0=GetLastDataRSI(symbol_name,timeframe,shift_0);
double prev_rsi_value_1=GetLastDataRSI(symbol_name,timeframe,shift_1);
//--- значения цен закрытия баров 1х и 2х минут назад
double prev_close_0=GetPriceClose(symbol_name,timeframe,shift_0);
double prev_close_1=GetPriceClose(symbol_name,timeframe,shift_1);
//--- отладочные сообщения
string tf= EnumToString (TimeframeRSI);
MqlDateTime server_time;
TimeToStruct ( TimeCurrent (),server_time);
Comment (
"\nВремя проверки RSI: " , TimeCurrent (), ", минуты времени проверки: " ,server_time.min,
"\nВремя " ,minutes_before, " минут назад: " ,time_before_0, ", бар " ,tf, " : " ,shift_0,
"\nВремя " ,minutes_before* 2 , " минут назад: " ,time_before_1, ", бар " ,tf, " : " ,shift_1,
"\nЗначение RSI " ,minutes_before, " минут назад на " ,tf, " : " , DoubleToString (prev_rsi_value_0, 4 ),
"\nЗначение RSI " ,minutes_before* 2 , " минут назад на " ,tf, " : " , DoubleToString (prev_rsi_value_1, 4 ),
//---
"\nЗначение Close " ,minutes_before, " минут назад > " ,tf, " : " , DoubleToString (prev_close_0, Digits ()),
"\nЗначение Close " ,minutes_before* 2 , " минут назад > " ,tf, " : " , DoubleToString (prev_close_1, Digits ())
);
//--- проверка наличия данных RSI
if (prev_rsi_value_1> 0 && prev_rsi_value_0> 0 ) {
//--- проверка условия на продажу
if (prev_rsi_value_1<upper_lev_rsi && prev_rsi_value_0>upper_lev_rsi) {
if (prev_close_0> SymbolInfoDouble (symbol_name, SYMBOL_BID )) return ( OP_SELL );
}
//--- проверка условия на покупку
if (prev_rsi_value_1>lower_lev_rsi && prev_rsi_value_0<lower_lev_rsi) {
if (prev_close_0< SymbolInfoDouble (symbol_name, SYMBOL_ASK )) return ( OP_BUY );
}
}
return (- 1 );
}
//+------------------------------------------------------------------+
Yoldaşlar, hiç geçmiş eşleştirme yapmadım, bu yüzden optimizasyondan sonra bir grafiği okumanın inceliklerini bilmiyorum.
2014-2015 yıllık geçişinden sonra böyle bir program var, nereye bakmalı ve bu ne anlama geliyor? Küplerin rengi ve düzeniyle ilgileniyorsanız, neden bazıları ortada, ikincisi altta/üstte ve iki/üç bir karede?
Açıklama için teşekkürler!
Ben de uzun yıllardır optimize edicilere hiç güvenmemiştim - bunun uygun olduğunu düşünüyorum. Ama renk ne kadar zenginse o kadar iyi gibi görünüyor. Ve yine de - doygun renklere sahip daha yığın bloklar, daha iyi. Ama bu rezaletle sonra ne yapacağım - hiçbir fikrim yok. Test geçmişi için aptal bir değer seçimiyle değil, her zaman uyarlanabilir sistemler oluşturmaya çalıştım.
Belki de tüm bunları bize açıklayabilecek biri vardır.
Ben de uzun yıllardır optimize edicilere hiç güvenmemiştim - bunun uygun olduğunu düşünüyorum. Ama renk ne kadar zenginse o kadar iyi gibi görünüyor. Ve yine de - doygun renklere sahip daha yığın bloklar, daha iyi. Ama bu rezaletle sonra ne yapacağım - hiçbir fikrim yok. Test geçmişi için aptal bir değer seçimiyle değil, her zaman uyarlanabilir sistemler oluşturmaya çalıştım.
Belki de tüm bunları bize açıklayabilecek biri vardır.
Evet, büyük olasılıkla kimse açıklamayacaktır. Forumda 10-12 kişi kaldı, bazıları yasaklandı ve çoğu geri dönmeyecek. Şimdi foruma bakarsanız, yaklaşık 5-7 kişi görünüyor, bunların yarısı sorulara cevap vermiyor. Programla ilgili sorum hala cevapsız.
Dördüncü foruma bakmanız gerekiyor - Uzun zaman önce orada optimize edici hakkında açıklamalar gördüm, ancak ne hakkında olduğunu ve nerede olduğunu hiç hatırlamıyorum ...
Merhaba.
Bunu harici ayarlarda yaparsam, lütfen açılır takvimden bir tarih seçmenin neden imkansız olduğunu söyleyin:Tarihi seçebilmeniz ve klavyeden girmemeniz için bir şekilde değiştirebilir miyim?
Yoldaşlar, hiç geçmiş eşleştirme yapmadım, bu yüzden optimizasyondan sonra bir grafiği okumanın inceliklerini bilmiyorum.
2014-2015 yıllık geçişinden sonra böyle bir program var, nereye bakmalı ve bu ne anlama geliyor? Küplerin rengi ve düzeniyle ilgileniyorsanız, neden bazıları ortada, ikincisi altta/üstte ve iki/üç bir karede?
Açıklama için teşekkürler!
Evet, büyük olasılıkla kimse açıklamayacaktır. Forumda 10-12 kişi kaldı, bazıları yasaklandı ve çoğu geri dönmeyecek. Şimdi foruma bakarsanız, yaklaşık 5-7 kişi görünüyor, bunların yarısı sorulara cevap vermiyor. Programla ilgili sorum hala cevapsız.
Açıklanacak özel bir şey yok, bu yüzden kimse cevap vermiyor. O gösterdiğin grafik anlamsız, nasıl elde edildiği ise muamma.
Ve test cihazındaki "Optimizasyon grafiği" sekmesindeki "İki boyutlu yüzey" seçeneği, danışmanın 2 giriş parametresini optimize etmeniz veya geçmişte 2 parametrenin hangi değerlerinde görsel olarak görmeniz gerektiğinde anlamlıdır (IMHO). Bu parametrelerin birbirine bağlı olup olmadığı ve mantıklı olup olmadığı konusunda iyi sonuçlar elde edildi.
İşte 2 giriş parametresini optimize etmenin bir örneği (belki en başarılısı değil, ama şimdi daha iyi bir örnek bulamadım):
Yatay olarak - 16'lık bir adımla 1. parametrenin değerleri, dikey olarak - 2.'lik, ayrıca 16'lık bir adımla. Yeşil kare ne kadar koyu olursa, kâr (karla optimizasyon ise) ilgili parametre değerlerinde o kadar büyük olur. , daha soluk, daha az. En iyi sonucun (tarihteki kâr açısından) merkezde olduğu ortaya çıktı. Etrafında koyu yeşil bir "yığın" görünüyor gibi görünüyor, bu da bu 2 parametre arasında bir tür bağımlılık ve kalıp olduğu ve parametrelerin anlamsız olmadığı ve optimizasyon sonucunun rastgele olmadığı anlamına geliyor. Bu nedenle, en iyi sonuçtan (ortada) bu 2-x parametrelerinin değerlerine dikkat etmeye değer.
Genel olarak, her şey çok basittir. Ama nasıl kullanılacağı, o zaman birinin ne için yeterli hayal gücü var. Uzun zamandır bu yeşil karelere bakmadım))
Her nedense grafikte her iki eksende sadece 0 var ve dikey olarak bu 0 3 ara adıma daha bölünüyor, bu nedenle "merkezde bir küp var, ikincisi daha düşük/yüksek ve iki/üç bir karede". Ve sonuçlar rastgele görünüyor - beyaz ve yeşil "zarlar" rastgele dağılıyor. Bu nedenle, grafik anlamsızdır ve hiçbir şey ifade etmiyor gibi görünmektedir.
Merhaba.
Bunu harici ayarlarda yaparsam, lütfen açılır takvimden bir tarih seçmenin neden imkansız olduğunu söyleyin:Tarihi seçebilmeniz ve klavyeden girmemeniz için bir şekilde değiştirebilir miyim?