Kütüphaneler: Takvim - sayfa 6

 
Automated Trading :

Takvim :

Yazar: fxsaber

Teşekkürler fxsaber,
Bu kütüphane çok harika.
Bin dosyasının notepad++ tarafından okunabilir olup olmadığını sorabilir miyim? EA'm tarafından oluşturulan dosya notepad++ tarafından okunamıyor ve BT sırasında calendar.Load hiçbir şey döndürmüyor. Bu konuda herhangi bir ipucunuz var mı?

Teşekkürler
 
eepatk #:
bin dosyasının notepad++ tarafından okunabilir olup olmadığını sorabilir miyim? EA'm tarafından oluşturulan dosya notepad++ tarafından okunamıyor ve BT sırasında calendar.Load hiçbir şey döndürmüyor. Bu konuda herhangi bir ipucunuz var mı?

Görevin ne olduğunu hemen formüle etmek daha iyidir.

 
fxsaber # :

Görevin ne olduğunu hemen formüle etmek daha iyidir.

Özür dilerim fxsaber, açıklığa kavuşturayım.

Temel olarak, paylaştığınız örnek kodla başlıyorum, bir .bin dosyası indirip oluşturabiliyorum.

Backtest için aşağıdakileri kodlamaya çalışıyorum, amaç her yinelemede .bin dosyasını yüklemek, böylece sınıfta listelenen her para biriminin haberlerini / olaylarını kontrol etmek.

Ancak, geriye dönük test yaptığımda, Calendar.ToString boş dönüyor ("Yazdır" hata ayıklama içindir)


Teşekkürler,

 if ( MQLInfoInteger ( MQL_TESTER )) 
 {
    NF_Stopped_CCY="";  
      for(int i=0;i<8;i++)        
        {
                Calendar.Load(CALENDAR_FILENAME);
                Print("Raw",Calendar.ToString(0,10,false));  

                Calendar.FilterByTime(TimeCurrent()-NF_Stop_in_Days*24*60*60,TimeCurrent()+NF_Stop_in_Days*24*60*60);
                Print("FilterByTime",Calendar.ToString(0,10,false));  

                Calendar.FilterByCurrency(CCYP[i].Cname);
                Print("FilterByCCY",Calendar.ToString(0,10,false));  

                Calendar.FilterByImportance(NF_Stop_Importance);  
                Print("FilterByImp",Calendar.ToString(0,10,false));  
 
                          
                CCYP[i].Stop_By_News=Calendar.GetAmount();
                if (CCYP[i].Stop_By_News) 
                {
                  int temp=StringConcatenate(NF_Stopped_CCY,NF_Stopped_CCY," ", CCYP[i].Cname);
                  Print(Calendar.ToString(0,-1,false));  
                }
        } 
   Print("NF list(BackTest)   :",NF_Stopped_CCY);
   NEWS_RefreshTime.day =CurrentDay.day;
  }
 
eepatk #:

Backtest için aşağıdakileri kodlamaya çalışıyorum, amaç her yinelemede .bin dosyasını yüklemek, böylece sınıfta listelenen her para biriminin haberlerini / olaylarını kontrol etmek.

Dosyadaki verileri statik değişkene yalnızca bir kez yüklemeniz gerekir.

#define  CALENDAR_FILENAME "Calendar.bin" // Takvim'i okumak/yazmak için dosya adı.
#property tester_file CALENDAR_FILENAME  // MT5-Tester'ın bu dosyayı alacağını belirtir.

#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/tr/code/32430

CALENDAR CalendarFull; // Takvim verilerini içeren nesne.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Olayları dosyadan yükle
}

void OnTick()
{
  CALENDAR Calendar = CalendarFull;
  
  //....
}
 
fxsaber # :

Dosyadaki verileri statik değişkene yalnızca bir kez yüklemeniz gerekir.


Çok teşekkürler, güzel ve kesin.

 
fxsaber # :

Dosyadaki verileri statik değişkene yalnızca bir kez yüklemeniz gerekir.

Teşekkürler fxaber,

Önerinizle kodu düzenleyebildim, ancak yine de CalendarFULL .bin yüklendikten sonra da boş.

CalendarFULL.Load bir "1" döndürüyor, ancak CalendarFULL içinde hiçbir şey yok gibi görünüyor.

.bin dosyasında bir çeşit kodlama sorunu olabilir mi?

TEŞEKKÜRLER

 
eepatk #:

CalendarFULL.Load "1" döndürüyor, ancak CalendarFULL içinde hiçbir şey yok gibi görünüyor.

Bin dosyasını oluşturmak için bu betiği MT5 terminalinde bir kez çalıştırın.

#define  CALENDAR_FILENAME "Calendar.bin" // Takvim'i okumak/yazmak için dosya adı.

#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/tr/code/32430

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // MT5-Terminal'den kesinlikle tüm olaylar (geçmiş + gelecek) yüklendi.
    Calendar.Save(CALENDAR_FILENAME);                     // Bunları bir dosyaya kaydedin.
}
 
fxsaber # :

Bin dosyasını oluşturmak için bu betiği MT5 terminalinde bir kez çalıştırın.

Teşekkürler fxsaber, bunu yaptım ve bir 7xmb .bin dosyası oluşturdu. Ancak yine de yüklemeye ve yazdırmaya çalıştığımda boş çıktı verdi.
 
eepatk #:
Teşekkürler fxsaber, bunu yaptım ve bir 7xmb .bin dosyası oluşturdu. Ancak yine de yüklemeye ve yazdırmaya çalıştığımda boş çıktı verdi.
#define  CALENDAR_FILENAME "Calendar.bin" // Takvim'i okumak/yazmak için dosya adı.
#property tester_file CALENDAR_FILENAME  // MT5-Tester'ın bu dosyayı alacağını belirtir.

#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/tr/code/32430

const string inSymbols[] = {"EURUSD", "AUDCAD"};

CALENDAR Calendars[];

int OnInit()
{      
  CALENDAR Calendar;
  const bool Res = (Calendar.Load(CALENDAR_FILENAME) != -1);

  if (Res)
    for (int i = ArrayResize(Calendars, ArraySize(inSymbols)) - 1; i >= 0; i--)
    {
      Calendars[i] = Calendar;
      
      Calendars[i].FilterBySymbol(inSymbols[i]);
    }

  return(!Res);
}

string NewsToString( const CALENDAR &Calendar, const datetime From, const datetime To )
{
  CALENDAR CalendarTmp = Calendar;
  
  CalendarTmp.FilterByTime(From, To);
  
  return(CalendarTmp.ToString(0, 10));
}

#define  HALF_INTERVAL (6 * 3600)

void OnTick()
{  
  string Str = NULL;
  
  for (int i = ArraySize(Calendars) - 1; i >= 0; i--)
  {
    const datetime From = TimeCurrent() - HALF_INTERVAL;
    const datetime To = TimeCurrent() + HALF_INTERVAL;
    
    Str += "\n\n" + inSymbols[i] + "-news (" + (string)From + " - " + (string)To + "):\n" + NewsToString(Calendars[i], From, To);
  }
  
  Comment(Str);
}

 
fxsaber #:

Teşekkürler fxsaber,

Sonunda, kodumdaki sorunu buldum, .mq5'im bir şekilde Unicode olarak kaydedilmişti, bu da fileread'in çalışmamasına neden oldu, ANSI olarak değiştirdiğimde çalışıyor.


Teşekkürler,