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

 

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!

 
strongflex :
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 );
}
//+------------------------------------------------------------------+
 
Vitaly Muzichenko :

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.

 
Artyom Trishkin :

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.
 
Vitaly Muzichenko :
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 ...
 
Artyom Trishkin :
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 ...
İşte burada , ancak test sırasında elde edilenlerle hiç uyuşmuyor, bu yüzden uzmanlara bir soru sordum.
 

Merhaba.

Bunu harici ayarlarda yaparsam, lütfen açılır takvimden bir tarih seçmenin neden imkansız olduğunu söyleyin:
extern datetime CloseTime        = D'2016.09.11 15:50' ;   //

Tarihi seçebilmeniz ve klavyeden girmemeniz için bir şekilde değiştirebilir miyim?

 
Vitaly Muzichenko :

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!

Vitaly Muzichenko :
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.

 
Tünaydın.
Göstergeden sqlite3 veritabanı ile çalışmak için kendi dll'mi yazıyorum. Dağıtım kitindeki ve internetteki tüm örnekleri inceledim. geliştirme ortamı kod blokları. dll çalışıyor, ancak hatalı ve periyodik olarak bir erişim ihlaliyle çöküyor.
İlk sorular:
1. dll'yi kod bloklarında veya yalnızca Visual Studio'da doğru şekilde oluşturmak mümkün müdür? Basit örnekler ( Int, double ile çalışmak) birleştirilir ve çalışır. Drenaj yok ve dosyalarla çalışma - program çöküyor.
2. __stdcall bildirimi ile başlatılamadı ve çalışılamadı, sadece __cdecl ile. İşlev adları bozuk ve kod bloklarındaki Def dosyası normal çalışmıyor.
Lütfen bilenlere yardımcı olun.
Halihazırda bir konu varsa, Admin'den mesajı uygun başlığa taşımasını rica ediyorum.
 
mila.com :

Merhaba.

Bunu harici ayarlarda yaparsam, lütfen açılır takvimden bir tarih seçmenin neden imkansız olduğunu söyleyin:
extern datetime CloseTime        = D'2016.09.11 15:50' ;   //

Tarihi seçebilmeniz ve klavyeden girmemeniz için bir şekilde değiştirebilir miyim?

input datetime CloseTime        = D'2016.09.11 15:50' ;