matrix corr_from_matrix=rates.CorrCoef(false); // false vektörlerin dizeler halinde olduğu anlamına gelir матрицы
Sütunlarda olmadığına emin misin?
//--- Kapanış fiyatlarını vektör haline getirin if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- vektörü zaman serisi matrisine yerleştirin rates.Col(close, i);
Ne yazık ki, matrisi doldurmanın bu basit yolunun ciddi bir kusuru vardır: çoklu para birimi çubukları senkronize edilmez.
Belki de doğru verileri kolayca elde etmek için standart CopyRates yöntemini matrisler için de yapmak mantıklıdır.
vector::Deals( void* Filter );
Buna göre, İstatistik bölümünü sadece matematiksel yöntemlerle değil, aynı zamanda finansal yöntemlerle de doldurmak gerekir: Kazanç, MaxDD, PF, vb.
İşte CopyRates yöntemi ve içindeki bir örnek
//+------------------------------------------------------------------+ //| Komut dosyası programı başlatma işlevi| //+------------------------------------------------------------------+ void OnStart() { //--- tırnak işaretlerini matrise al matrix matrix_rates; if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10)) Print("matrix rates: \n", matrix_rates); else Print("matrix_rates.CopyRates failed. Error ", GetLastError()); //--- kontrol et MqlRates mql_rates[]; if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0) { Print("mql_rates array:"); ArrayPrint(mql_rates); } else Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError()); //--- tırnak işaretlerini vektöre al = geçersiz çağrı vector vector_rates; if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15)) Print("vector_rates COPY_RATES_OHLC: \n", vector_rates); else Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError()); //--- kapanış fiyatlarını bir vektör haline getirin if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15)) Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates); else Print("vector_rates.CopyRates failed. Error ", GetLastError()); }; /* matris oranları: [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001] [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957] [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922] [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]] mql_rates array: [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641 44630 0 [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588 45190 0 [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441 30600 0 [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464 38670 0 [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594 52800 0 [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697 72270 0 [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758 101300 0 [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581 70120 0 [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528 61660 0 [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259 69500 0 vector_rates.CopyRates COPY_RATES_OHLC başarısız oldu. Hata 4003 vector_rates COPY_RATES_CLOSE: [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] */
- www.mql5.com
Görünüşe göre sorunu iyi formüle edememişim. Sembol korelasyonunu hesaplamak için matrisi doldururken, EURUSD[5].BarTime, GBPUSD[5].BarTime ile eşleşmeyebilir.Buna çoklu çubuk senkronizasyonsuzluğu denir. Hesaplamalardan önce bu tür veri hazırlığına oldukça fazla zaman/çaba ayırmanız gerekir. Tek bir satırla çözülebilseydi harika olurdu.
Makale şöyle diyor:
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
Talimat aşağıdakileri içerir
| void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Tek boyutlu bir diziden matris oluşturur |
ama aslında çalışmıyor. Tek boyutlu bir diziyi bir matrise kopyalamanın başka bir yolu var mı?
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale MQL5'te matrisler ve vektörlerle çalışma yayınlandı:
Matematik problemlerinin verimli bir şekilde çözülebilmesi adına MQL5’e matrisler ve vektörler eklendi. Yeni türler, matematiksel gösterime yakın, öz ve anlaşılır kodlar yazmak için yerleşik metotlar sağlar. Diziler iyidir, ancak matrisler çok daha iyidir çünkü matrislerin çok daha verimli olduğu birçok durum vardır.
Geçtiğimiz yıllarda, gelişmiş teknolojileri MQL5 diline dahil etmek için çok şey yaptık:
MQL5 dili gelişmeye devam ederken, en öncelikli yönlerden biri de makine öğrenimi olacaktır. Daha fazla gelişmek için büyük planlarımız var. Bu yüzden bizimle kalın, bizi destekleyin ve bizimle birlikte öğrenmeye devam edin.
Yazar: MetaQuotes