Strateji test cihazından memnuniyetsizliğim. MQL geliştiricilerine - sayfa 2

 
Alexey Volchanskiy :

Renat, madem buradasın, bu fırsatı değerlendirip soracağım. Yeni yapıda hizmet olacak mı yoksa şimdilik ertelendi mi?

Daha sonra.

Bu arada, onlarsız, sentetik enstrümanlar için veri beslemeleri yazabilirsiniz.

 
Renat Fatkhullin :

Daha sonra.

Bu arada, onlarsız, sentetik enstrümanlar için veri beslemeleri yazabilirsiniz.


Çoklu iş parçacığı istiyorum, bir şekilde bunu servislerle yapmanın mümkün olacağına dair bir umut vardı. Kişisel olarak henüz veri beslemelerine ihtiyacım yok.

 

Hepinize iyi günler.

Hayır, bu yazı, birinin burada yazdığı gibi tamamen çöp değil.

Tüm hızımla devam ediyorum.

Programcıların yazdığını ve çalıştığını söylediğini anlıyorum, ama üzgünüm.

Hepimiz komisyoncu üzerinde hatalı verilerle çalışırsak, düşünce hemen geçer ve sonucum hatalı değildir.

Gerçek şu ki, belki ironik bir şekilde üniversitede istatistik mühendisi olarak okudum.

Yani benim için hatalı veri temelde yanlış veridir, sırasıyla %99 benim gördüklerimin işe yaradığını söylersem, ben bir istatistik insanı olarak bilmiyorum diyorum, siz ve bu yazıyı okuyan herkes aynı şeyi söyleyecektir.

Bunun çözümü yukarıda yazdıklarım.

Basit bir robot/algoritma ile herkes kene toplama yapabilir.

Ancak gerçek şu ki, 5'te değil 4 MQL'de stratejileri test etmek için kullanılması gereken piyasa verisine sahip değiliz.

Uzun vadeli stratejiler için tartışmıyorum ama orada bir robota ihtiyacım yok.

Ancak keneler veya kazanma anı üzerinde çalışan her şey yanlış bir sonuçtur - Ve benim için en azından keneler kenedir, ancak benim de kene hayatında sorma ve teklif verme konusunda ilginç fikirlerim var.

Uzun cevap için özür dilerim ve zaman çok meşguldü!

Saygılarımla, Ivan S.

 
Alexey Volchanskiy :

Evet bir kere yazmıştım şimdi bulacağım

Beş https://www.mql5.com/ru/code/18046 için

Dört https://www.mql5.com/en/code/18047 için

Altı https://www.mql5.com/en/code/ için


Şaşıracaksınız, ancak 5'te ve 4'te aynı şey.

4 ve 5'i aynı anda konuşabiliyorum!


Algoritmanızın kodunun tamamını okumadım, ancak kodun bu bölümünün kaydedilmesi gerekiyor, ancak şimdi bu soruyu yeniden oluşturmanız ve strateji test cihazının bunu görüntülemesini sağlamanız gerekiyor.

Programcılardan bunu yapabilecek biri varsa çok ama çok dikkatle dinliyorum!

 
Renat Fatkhullin :
Yanılmıyorsam, o zaman MT5'te test cihazı gerçek keneler üzerindedir, teklif/sorma gerçek nerede?

Renat, mql5'in çalışıp çalışmadığını kontrol etti ve kendi kendine sabit bir spread belirledi. 4 mql'deki gibi

 
Ivan Stepanenko :

Renat, mql5'in çalışıp çalışmadığını kontrol etti ve kendi kendine sabit bir spread belirledi. 4 mql'deki gibi


Sorun çözüldü

1. MQL5 yaklaşık bir yıldır gerçek keneler üzerinde test edilmiştir, kene verileri doğrudan ticaret yaptığınız DC'den indirilir. En azından terminali incelemelisin, ya da başka bir şey ...

2. Kendi kene .fxt dosyalarınızı MQL4 ile değiştirebilirsiniz. En kolay yol TickStory Lite ile dukas'tan gerçek keneler indirir

 
Ivan Stepanenko :

Renat, mql5'in çalışıp çalışmadığını kontrol etti ve kendi kendine sabit bir spread belirledi. 4 mql'deki gibi


yalanlar

SaveTicks kenelerini kaydetmek için Uzman Danışmanımı alıyoruz, yukarıda CodeBase'de bağlantıyı verdim ve test cihazında " Her tik temelli gerçek keneler" modunda çalıştırın. Çıktı dosyasında ne olduğuna bakarız, benim durumumda \Tester\Agent-127.0.0.1-3000\MQL5\Files\EURUSD_SaveTicks.csv

2017.11.28 09:11:16,1.1895,1.18952

2017.11.28 09:11:16,1.1895,1.18952

yaymak 2

2017.11.28 09:11:26,1.18947,1.18951

2017.11.28 09:11:26,1.18947,1.18951

yaymak 4
 

Sembol tarayıcısına bakın ve herhangi bir sembol için işaretler var.

Bu gerçek keneler test cihazında kullanılır.

 
Ivan Stepanenko :

Hepinize iyi günler.

Hayır, bu yazı, birinin burada yazdığı gibi tamamen çöp değil.

Tüm hızımla devam ediyorum.

Programcıların yazdığını ve çalıştığını söylediğini anlıyorum, ama üzgünüm.

Hepimiz komisyoncu üzerinde hatalı verilerle çalışırsak, düşünce hemen geçer ve sonucum hatalı değildir.

Gerçek şu ki, belki ironik bir şekilde üniversitede istatistik mühendisi olarak okudum .

Yani benim için hatalı veri temelde yanlış veridir, sırasıyla %99 benim gördüklerimin işe yaradığını söylersem, ben bir istatistik insanı olarak bilmiyorum diyorum, siz ve bu yazıyı okuyan herkes aynı şeyi söyleyecektir.

Bunun çözümü yukarıda yazdıklarım.

Herkes kene toplama işlemini basit bir robot/algoritma yapabilir.

Ancak gerçek şu ki, 5'te değil 4 MQL'de stratejileri test etmek için kullanılması gereken piyasa verisine sahip değiliz.

Uzun vadeli stratejiler için tartışmıyorum ama orada bir robota ihtiyacım yok.

Ancak keneler veya kazanma anı üzerinde çalışan her şey yanlış bir sonuçtur - Ve benim için en azından keneler kenedir, ancak benim de kene hayatında sorma ve teklif verme konusunda ilginç fikirlerim var.

Uzun cevap için özür dilerim ve çok meşguldüm!

Saygılarımla, Ivan S.

Peki ya grameriniz? // bu arada...

Pekala, her şey çok ciddi olduğuna göre, sorunuzun çözümü şudur:

İstatistikleri, alıntı geçmişini ve çalışmaları toplayın, Alexey Volchansky zaten sizin ve sizin için her şeyi buldu ve yukarıdaki bağlantıları verdi.

Sor ile ilgili - hikayeyi DucasCopy'den (google it) soru ve tekliflerle indirebilirsiniz.

İyi şanlar!
 

İşte bazı ilginç makaleler:


Ek olarak, MetaQuotes-Demo'dan yükseltebileceğiniz dünkü MetaTrader 5 beta, özel enstrümanlar oluşturmak için tam teşekküllü bir formül sistemine sahiptir.

Sentetik finansal enstrümanlar - bir veya daha fazla mevcut enstrümana dayalı enstrümanlar yaratma yeteneği eklendi. Teklifleri hesaplamak için bir formül belirlemeniz yeterlidir ve platform, gerçek zamanlı olarak sentetik bir enstrümanın tiklerini oluşturacak ve aynı zamanda dakika geçmişini oluşturacaktır.

bu nasıl olur

  • Sentetik bir enstrüman yaratır ve onun için bir formül belirlersiniz.
  • Platform, kenelerini saniyede 10 kez sıklıkta hesaplayacaktır (ve yalnızca formüle dahil edilen en az bir enstrümanın fiyatı değiştiyse).
  • Platform, formülünde yer alan enstrümanların dakika çubuklarına göre dakika çubuklarının geçmişini (son iki ay için) hesaplayacaktır. Tüm yeni çubuklar (mevcut ve sonraki), sentetik enstrümanın oluşturulan kenelerine dayalı olarak gerçek zamanlı olarak oluşturulacaktır.
Örneğin, dolar endeksini (USDX) gösterecek bir enstrüman oluşturabilirsiniz. Formülü şöyle görünecek:
 50.14348112 * pow (ask(EURUSD),- 0.576 ) * pow (USDJPY, 0.136 ) * pow (ask(GBPUSD),- 0.119 ) * pow (USDCAD, 0.091 ) * pow (USDSEK, 0.042 ) * pow (USDCHF, 0.036 )
Not: Orijinal dolar endeksi formülü USDEUR ve USDGBP çiftlerini kullanır. Platformda yalnızca ters döviz çiftleri bulunduğundan, sentetik araç formülü negatif bir üs ve onlar için Alış fiyatı yerine Satış fiyatı kullanır.

Gerçek zamanlı olarak platform, komisyoncunuz tarafından sağlanan diğer altı enstrümanın fiyatlarına dayalı olarak yeni bir enstrümanın fiyatını hesaplayacaktır. Piyasa İzlemede ve grafikte fiyatının nasıl değiştiğini göreceksiniz:



Yeni bir özel araç oluşturun, spesifikasyonunu açın ve formülü belirtin:




Kolaylık sağlamak için, formül düzenleyici, siz araçların ve işlevlerin adlarını girerken olası seçeneklerin bir listesini gösterir.

Sentetik bir enstrümanın tik ve dakika çubuklarının hesaplanması, Piyasa İzlemeye eklendiğinde başlayacaktır. Aynı zamanda, hesaplanması için gerekli tüm semboller otomatik olarak "Piyasa İzleme" ye anında eklenir. Platform günlüğüne hesaplamanın başlangıcına ilişkin bir giriş eklenecektir: Sentetik Sembol USDX: işlem başlatıldı.
  • Sentetik bir enstrümanın hesaplanması, Piyasa İzleme'den gizlendiğinde durur.
  • Halihazırda sentetik enstrümanları hesaplamak için kullanılan semboller Piyasa İzleme'den gizlenemez.

Tekliflerin gerçek zamanlı olarak hesaplanması
Her 100 ms'de (saniyede on kez) formüle dahil olan enstrümanlardan en az birinin fiyatının değişip değişmediği kontrol edilir. Evet ise, sentetik enstrümanın fiyatı hesaplanır ve bir onay işareti oluşturulur. Hesaplama, Alış, Satış ve Son fiyatlar için üç akışta paralel olarak gerçekleştirilir. Örneğin formül EURUSD*GBPUSD içeriyorsa, sentetik enstrüman fiyatlarının hesaplanması aşağıdaki gibi olacaktır:

  • Teklif — teklif(EURUSD)*teklif(GBPUSD)
  • Sor — sor(EURUSD)*sor(GBPUSD)
  • Son - son(EURUSD)*son(GBPUSD)

Değişikliklerin varlığı her fiyat için ayrı ayrı kontrol edilir. Örneğin, bir sonraki hesaplama sırasında yalnızca orijinal enstrümanın Alış fiyatı değiştiyse, sentetik enstrümanın işareti için yalnızca değişikliklerin yapıldığı fiyat hesaplanacaktır.

Dakika çubuklarının tarihini inşa etmek
Platform, gerçek zamanlı olarak kene toplamanın yanı sıra, sentetik bir enstrümanın bir dakikalık geçmişini de oluşturur. Böylece, bir tüccar, grafiklerini geleneksel araçlarla aynı şekilde görüntüleyebilir, nesneler ve göstergeler kullanarak bunlar üzerinde teknik analiz yapabilir.

Bir tüccar Piyasa İzleme'ye sentetik bir enstrüman ekler eklemez platform bunun için hesaplanmış 1 dakikalık bir geçmiş olup olmadığını kontrol eder. Değilse, yaklaşık 50.000 bar olan son 60 gün için oluşturulacaktır. Parametredeki platform ayarlarında ise maks. Çubuklar için pencerede daha düşük bir değer belirtilirse, bu sınırlama kullanılacaktır.

Bu süre zarfında barlardan bazıları zaten inşa edilmişse, platform yeni barlar ekleyecektir. Daha derin bir geçmiş, yalnızca ilgili zaman dilimini grafikte görüntülemeye çalıştığınızda oluşturulur (eğer onu geri kaydırırsanız veya bir MQL5 programından geçmişi talep ederseniz).

Sentetik bir sembolün dakika çubuklarının geçmişi, formülünde yer alan aletlerin dakika çubukları (tikler değil) temelinde hesaplanır. Örneğin, sentetik bir enstrümanın dakika çubuğunun Açık fiyatını hesaplamak için platform, formülünde yer alan enstrümanların Açık fiyatlarını alır. Benzer şekilde Yüksek, Düşük ve Kapanış fiyatları için hesaplama yapılır.

Formülden herhangi bir enstrüman için gerekli dakika çubuğu yoksa, platform hesaplama için önceki çubuğun Kapanış fiyatını alacaktır. Örneğin, üç enstrüman kullanılır: EURUSD, USDJPY ve GBPUSD. USDJPY enstrümanı için 12:00 dakikasına karşılık gelen çubuk hesaplanırken böyle bir dakika çubuğu yoksa hesaplamada aşağıdaki fiyatlar kullanılacaktır:

  • Açık için — EURUSD Açık 12:00, USDJPY Kapanış 11:59, GBPUSD Açık 12:00
  • Yüksek için — EURUSD En Yüksek 12:00, USDJPY Kapanış 11:59, GBPUSD En Yüksek 12:00
  • Düşük için — EURUSD Düşük 12:00, USDJPY Kapanış 11:59, GBPUSD Düşük 12:00
  • Kapanış için — EURUSD Kapanış 12:00, USDJPY Kapanış 11:59, GBPUSD Kapanış 12:00

Formüldeki tüm enstrümanlar için bir dakika çubuğu eksikse, sentetik enstrümanın karşılık gelen dakika çubuğu hesaplanmayacaktır.

Yeni dakika çubukları inşa etmek
Sentetik bir enstrümanın tüm yeni çubukları (geçerli ve sonraki), oluşturulan kenelere dayalı olarak oluşturulur. Çubukların çizildiği fiyat, spesifikasyondaki "Grafik" parametresine bağlıdır:





Araç formülünde hangi işlemler kullanılabilir?
Fiyat verileri formülde kullanılabilir ve ayrıca mevcut sembollerin bazı özellikleri (broker tarafından sağlanır). Bunu yapmak için şunları belirtin:

  • Sembol adı — hesaplanan sentetik enstrümanın fiyatına bağlı olarak, formülde belirtilen enstrümanın Alış, Satış veya Son fiyatı kullanılacaktır. Örneğin, EURUSD*GBPUSD belirtirseniz, Bid(EURUSD)*bid(GBPUSD) olarak ve Satış fiyatı ask(EURUSD)*ask(GBPUSD) olarak hesaplanır.
  • teklif(sembol adı) — Belirtilen sembolün Teklif fiyatı, sentetik bir enstrümanın Teklif fiyatını hesaplamak için kullanılacaktır. Aslında, bu seçenek bir öncekine karşılık gelir (fiyat türünü belirtmeden).
  • ask(sembol adı) — Belirtilen sembolün Satış fiyatı, sentetik bir enstrümanın Alış fiyatını hesaplamak için kullanılacaktır. Alış fiyatını hesaplamak için, aksine, belirtilen enstrümanın Alış fiyatı kullanılacaktır. Son fiyatı hesaplamak için belirtilen enstrümanın Son fiyatı kullanılacaktır. Örneğin, ask(EURUSD)*GBPUSD belirtirseniz hesaplama aşağıdaki gibi olacaktır:
    • Вid = sor(EURUSD)*teklif(GBPUSD)
    • Sor = teklif(EURUSD)*sor(GBPUSD)
    • Son = son(EURUSD)*son(GBPUSD)
  • last(sembol adı) — Belirtilen sembolün son fiyatı, tüm sentetik enstrüman fiyatlarının (Bid, Ask ve Last) hesaplanmasında kullanılacaktır. Örneğin last(EURUSD)*GBPUSD belirtirseniz hesaplama aşağıdaki gibi olacaktır:
    • Вid = son(EURUSD)*teklif(GBPUSD)
    • Sor = son(EURUSD)*sor(GBPUSD)
    • Son = son(EURUSD)*son(GBPUSD)
  • hacim(sembol adı) — formülde belirtilen sembolün onay hacmi kullanılacaktır. Belirtilen enstrüman için ses bilgisinin yayınlandığından emin olun.
  • point(symbol name) — belirtilen enstrümanın minimum fiyat değişikliğinin miktarı formülde değiştirilecektir.
  • digits(sembol name) — formülde belirtilen enstrümanın fiyatındaki ondalık basamak sayısı değiştirilecektir.

Sembolün karmaşık bir adı varsa (tire, nokta vb. içeriyorsa), tırnak içine alınmalıdır. Örneğin, "RTS-6.17".
Aritmetik işlemleri formülde kullanabilirsiniz: toplama (+), çıkarma (-), çarpma (*), bölme (/) ve kalan (%). Örneğin EURUSD+GBPUSD, fiyatın EURUSD ve GBPUSD fiyatlarının toplamı olarak hesaplandığı anlamına gelir. Formüldeki işareti değiştirmek için tekli eksi de kullanabilirsiniz, örneğin: -10*EURUSD.

Aritmetik işlemler için, bunların yürütülmesi için bir öncelik vardır:

  • Önce çarpma, bölme ve kalan işlemleri yapılır, ardından toplama ve çıkarma işlemleri yapılır.
  • İşlemler soldan sağa doğru yapılır. Bir formül, aynı önceliğe sahip birden çok işlem kullanıyorsa (örneğin, çarpma ve bölme), önce soldaki işlem gerçekleştirilecektir.
  • İşlemlerin önceliğini değiştirmek için parantezler ( ve ) kullanılabilir. Parantez içindeki ifadeler, hesaplamada en yüksek önceliğe sahiptir. Onlar için soldan sağa ilkesi de geçerlidir: soldaki formülde bulunan parantez içindeki ilk ifadeler değerlendirilir.

Formülde sabitleri de kullanabilirsiniz:

  • Sayısal (tam sayı ve noktalı gerçek). Örneğin, EURUSD*2+GBPUSD*0.7.
  • Sembol özellikleri _Digits ve _Point. Spesifikasyondan formüle özel bir sembolün özelliklerini değiştirirler. _Rakamlar — enstrümanın fiyatındaki ondalık basamak sayısı, _Puan — enstrümanın fiyatındaki minimum değişikliğin boyutu.

Ayrıca, MathSrand, MathRand ve MathIsValidNuber hariç, MQL5'te desteklenen tüm matematiksel işlevler formülde kullanılabilir. Tüm işlevler için yalnızca kısa adlar kullanılır: fabs(), acos(), asin(), vb.