MT4'ten MT5'e aktarma sorunu. Veya daha doğrusu, MT5'te bazı algoritmaların hatasız yürütülmesinin imkansızlığı. - sayfa 11

 

Düşünce için bilgi.

Piyasada yayınlanan danışmanların bazı gelişmelerini izliyorum. Veya bazı makaleler.

Orada, genellikle bir danışmanın çalışması için komisyoncu seçme gereksinimlerinde, küçük bir yayılma belirtilir.

Ve bence, MT5, piyasadaki değişikliklere hızla yanıt vermek için birçok yönden geliştirildi. Bu, tekliflerin güncellenmesi beklentisiyle tüm frenlerin devre dışı bırakılmasını açıklar.

Yani, eğer alıntılar güncellenirse, terminal zaman serilerine erişimi reddeder. Bazı hızlı algoritmaların hesaplanmasına müdahale etmemek için.

Böyle bir paradigmanın var olma hakkı vardır. Aynı zamanda, ticaret kısadır. Hızlı bir şekilde girdiler. Birkaç eşya topladı. Çabuk dışarı çıktılar.

Ama başka bir paradigma daha var.

Piyasada, piyasa geri dönüşlerinin oluştuğu bazı aşırı durumlar vardır.

Bu ekstremumlar birkaç yıl önce bile oluşturulabilir. Ancak mevcut piyasa durumunu etkilemeye devam ediyorlar.

Bu durumda tik veya dakika geçmişindeki anlık değişiklikler de dikkate alınabilir. Ama belirleyici değiller.

Bu durumda, erişim kesintisi sonucunda işleyiciden çıkmadan teklif güncellemesini bekleyebilirsiniz. Ve sadece MT4'te çalışır.

Söylenenleri açıklayan birkaç resim.

Aylık telefon alıyoruz. Mart 1995, Ekim 2000 ve Temmuz 2007'deki aşırılıklar piyasayı etkilemeye devam ediyor.

Şubat 1985 aşırılığının bile bir etkisi var:


Bu ekstremumlar dikkate alınarak oluşturulan hatların piyasa tarafından fark edildiği görülmektedir.

Gelelim diğer telefonlara. Yaklaşık olarak aynı oranda dalga işareti yapıyormuşuz gibi. Böyle bir seçimle, her TF'de yaklaşık bir dalga seviyesi gelişebilir.

Haftalık TF:

D1:

H4:

M30:

M5:

M1:

Tarihin çok ilerisinde oluşan ekstremumların piyasadaki şu an üzerinde etkisi olduğunu görüyoruz.

----------------------------------

Bu tür yapılar için, tekliflere sürekli erişim olmalıdır.

Daha fazla devam edeceğim. Temel olarak, resimlerde gösterilen her şey manuel ticarette kullanılır.

Ancak. Birkaç sinir ağının girişlerine, örneğin resimlerde gösterilen zaman dilimlerine alıntılar uygulayabilirsiniz. Her NS kendi verilerini işleyecektir. Ve neler olup bittiğine dair anlayışınızı verin. Sinir ağlarının çıktıları, çubukların varış zamanı ile senkronize edilir.

Aynı zamanda, eski TF'den gelen NS'den gelen sinyaller, genç olandan daha yüksek önceliğe sahiptir.

Sinir ağlarından alınan sinyaller, bir tür öncelik ile bir sonraki sinir ağının girişine beslenir. Burada seçenekler olabilir.

Örneğin, sinir ağlarının ilk katmanı LSTM tipinde olabilir. Geçmişin hatırlanması gereklidir. Bu durumda, bir katman, her biri kendi zaman diliminden alıntılar alan bir sinir ağı olarak anlaşılır. Ayrıca, birinci katmanın her bir sinir ağı, birkaç nöron katmanına sahip olabilir.

Toplama sinir ağının kendi mimarisi olabilir. Bu daha çok bir mühendislik zorluğudur.

Örneğin, anlaşmaları açmak için bazı algoritmalar kullanarak eğitim alabilirsiniz. Sinir ağlarının ilk katmanında. Yani birinci katmanın her bir sinir ağı ayrı ayrı eğitilir. Örneğin, ilgili katmandaki çubuğun sonunda anlaşmaları açıyoruz. Hatta belki farklı yönlerde. Anlaşmalar şartlı. Bu işlemler sonucunda Millet Meclisinin eğitilmesi için sinyal verilir.

Böylece, toplam sinir ağına kendi başına en uygun ticaret modunu seçme hakkı verilir.

Algoritmanın DeepMinde ekibi tarafından Alfa Zero'da uygulanana benzer bir şey olduğu ortaya çıktı.

Seçilen tüm TF'ler için tarih boyunca böyle bir ağı eğitin. Akılda tutulması gereken tek şey, MT5'te tüm zaman serilerinin dakikalardan oluşturulduğudur. Ve bu doğru değil. Günlük işlemlerden derlenen 1993 yılına kadar Eurodollar NCC dosyaları. Zaman serilerinin gerçek zaman çerçevesini geri yükleyen bir algoritma olmalıdır.

Bir döviz çifti üzerinde eğitim alabilirsiniz. Ve bir başkası için test edin.

------------------------------

Özet. Neden bu yaklaşımda piyasada olup bitenlere hızlı bir yanıt veriliyor?

 
Eugeni Neumoin :


bazı offtopikler için üzgünüm ama konu ilginç olsa da bırakamıyorum


kurban :

Pekala, bunu şu şekilde kullanmak üzereyim:

MQL'de typename() vardır - bir dize türü adı döndürür, hatta çalışır

 void OnStart ()
  {
   Print ( typename (Txt()));       // в логе будет       string
  }
string Txt()
{
return ( " Txt " );
}

yapacak çok az şey kaldı - MyFunc () türünü bilmek - bir makro yazın ((( , ... elbette tüm makroları _Try_helper türlerine göre yazabilirsiniz ... genel olarak, görünüşe göre kumar oynamıyorum, çünkü nasıl olduğunu bilmiyorum

 
Igor Makanu :

bazı offtopikler için üzgünüm ama konu ilginç olsa da bırakamıyorum


Herşey yolunda.

 
Igor Makanu :

MQL'de typename() vardır - bir dize türü adı döndürür, hatta çalışır

yapacak çok az şey kaldı - MyFunc () türünü bilmek - bir makro yazın ((( , ... elbette tüm makroları _Try_helper türlerine göre yazabilirsiniz ... genel olarak, görünüşe göre kumar oynamıyorum, çünkü nasıl olduğunu bilmiyorum

µl içindeki typename () yardımcı olmaz, derleme zamanında bir değişken bildirmek için uygun bir tür vermez, sadece yazdırın. Sadece Try_d(), Try_i(), ... üretmek için kalır. µl'de decltype işlevselliğini nasıl elde edeceğimi bilmiyorum.

 
Vict :

µl içindeki typename () yardımcı olmaz, derleme zamanında bir değişken bildirmek için uygun bir tür vermez, sadece yazdırın. Sadece Try_d(), Try_i(), ... üretmek için kalır. µl'de decltype işlevselliğini nasıl elde edeceğimi bilmiyorum.

hmm, hiç kumar oynamak istemiyorum! Daha da kesinlikle kumar oynamayacağımı söyleyeceğim! ))) - Bilmiyorum, böyle bir şey işe yarayacak (gerçekten makine düzeyinde “her şey dönüyor” un nasıl olduğunu anlamıyorum - güçlü bir şekilde yazılmış bir dilimiz var mı?)

 void OnStart ()
{
   int i = func( 1 );
   double d = func( 1.123 );
   string s = func("s");
   Print ("i = ",i);
   Print ("d = ",d);
   Print ("s = ",s);
}

template < typename T>
T func(T invalue)
{
   string s = typename (T);
   if (s==" int ") return (invalue);
   if (s==" double ") return (invalue);
   if (s==" string ") return ("Hello word!!!");
return ( NULL );
}

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) ben = 1

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) d = 1.123

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) s = Merhaba kelime!!!


ayrıca bir işleve bir işaretçi tanımlayabilirsiniz

 typedef void (*TFuncvoidPTR)( void );

ve daha fazla kullanım

TFuncvoidPTR      func[];
....
func[ 0 ]();
 
Vict :

µl'deki typename () yardımcı olmaz, derleme zamanında bir değişken bildirmek için uygun bir tip vermez, sadece yazdırır. Sadece Try_d(), Try_i(), ... üretmek için kalır. µl'de decltype işlevselliğini nasıl elde edeceğimi bilmiyorum.

Statik T tipi değişkenli şablon işlevi.

 
Igor Makanu :

teşekkür etmek!

Mesajlarınızı okudum maalesef birçok yönden haklısınız, dün bu konuda moderatör Artem ile çok yazıştım, konuşmanın sonucu: bu şekilde uygulanırsa böyle çalışması gerekir... , eski reklamda olduğu gibi "Onları nasıl pişireceğinizi bilmiyorsunuz!"

IMHO, MQL5 derleyicisinin sonuçları gerçekten fantezi alanından (çok üretken!), ancak bir ticaret terminali olarak kullanım ... peki, şu şekilde koyalım: çok, çok iyi teknik altyapı gerektirir ve "eski terminalde" ~% 30 daha fazla kod yazma arzusu (- burada forumdaki bu ifade bile zaten yerleşik bir ifadedir)

Ay-yay... Öyle demedim :)

Dedim ki - istediğimiz sonucu elde etmek için elimizde olanı kullanıyoruz.

Geri kalan duygularımı kendime saklıyorum.

 
Igor Makanu :

ve moderatör Artem'in bunu söylediğini söylemedim, sadece konuşmanın sonucunu yazdım - bence bu benim değer yargım, sadece duygularıma ve sohbetin analizine dayanarak oluşturabileceğim ....) )))

Yani, birinin kafasında ne olduğunu bilmiyorum, sadece kafamı görüyorum... Neyse ki, şimdilik, aynada)))

bunun yerine inanırdım

konuşmanın sonucu : eğer böyle uygulandıysa, o zaman böyle çalışması gerekir ... genel olarak, eski reklamda olduğu gibi " Onları nasıl pişireceğinizi bilmiyorsunuz!"

Öyleydi

benim sonucum : eğer böyle uygulanırsa, o zaman böyle çalışması gerekir... genel olarak, eski reklamdaki gibi " Onları nasıl pişireceğimi bilmiyorum!"

Ve aynadan bir kafanın sözde moderatör Artyom'dan alıntı yaptığı ortaya çıktı ...

Ve kişisel bir konuşma olsaydı iyi olurdu. Ama söylemediğim sözlerim hakkında kamuoyu önünde sonuçlar çıkarmak, beni tamamen yanlış olan sözde fikrimle herkesin önünde çerçevelemek demektir - bu benim için alıntıda dile getirilenden tamamen farklı.

fikrimi söyleyebilirim:

Şu anda sahip olduğumuzdan sakince yapıyoruz, sızlanmıyoruz, hataların aranmasına yardımcı oluyoruz ve düzeltme beklentisiyle soruyoruz - hala düzeltiliyorlar ve yeni güzel özellikler ortaya çıkıyor.

 
Artyom Trishkin :

bunun yerine inanırdım

Öyleydi

Ve aynadan bir kafanın sözde moderatör Artyom'dan alıntı yaptığı ortaya çıktı ...

Ve kişisel bir konuşma olsaydı iyi olurdu. Ama söylemediğim sözlerim hakkında kamuoyu önünde sonuçlar çıkarmak, beni tamamen yanlış olan sözde fikrimle herkesin önünde çerçevelemek demektir - bu benim için alıntıda dile getirilenden tamamen farklı.

fikrimi söyleyebilirim:

Şu anda sahip olduğumuzdan sakince yapıyoruz, sızlanmıyoruz, hataların aranmasına yardımcı oluyoruz ve düzeltme beklentisiyle soruyoruz - hala düzeltiliyorlar ve yeni güzel özellikler ortaya çıkıyor.

hmm, her şey ne kadar zor oldu .... kendi kendine temizlendi, bence ... ama ne fark var? ne değişecek? geliştiricilerin ürünlerini geliştirme konusunda kendi vizyonları var, bu onların işi ve benim fikrim ...


... peki, nasıl değişecek ..., bugün için iyi bir insan @Vict - bana hata ayıklamayı benim için basitleştirdiği püf noktalarını gösterdi ve en önemlisi, kodumun okunabilirliğini sağlayabilirim - evet, değişti hem MQL5 hem de genel olarak forum üyeleri hakkında fikrim

tamam susacağım, tarihi olan bir forum olduğu için tekrar okumadan okuyabilirsiniz - bu forumu ararken sorularıma bir çok cevap var

 
Igor Makanu :

fxsaber haklı olarak söyledi - bir seçenek var

template < typename T> T Try_helper(T val, bool assign) {
   static T sval;
   if (assign)
      sval = val;
   return sval;
}
#define Try(EXPR, MES)                    \
   Try_helper(EXPR, true );                \
   if (Try_helper(EXPR, false ) <= 0.0 ) {  \
     printf ( "Error: %s " , MES);           \
     return ;                              \
   }

double f( double ) { return DBL_MAX ;}
ulong f( ulong ) { return ULONG_MAX ;}

void OnStart ()
{

   double d = Try(f( 0 .), "double error" );
   ulong u = Try(f( 0 ), "ulong error" );
}

Biraz hileli - EXPR iki kez hesaplanacak, ancak yine de daha esnek. Genel olarak evrensel olduğu söylenemez (sadece aritmetik türler için. Hata değeri aynı olmalı, bu hoş değil. Yapının/fonksiyonun açık bir şekilde uzmanlaşmasıyla bunu aşmaya çalıştım ama yapamıyorum.

 template < typename T> bool Try_helper_is_valid(T val);
template <> bool Try_helper_is_valid< string >( string val) {val== "" ? false : true ;}   // compile-time error

template < typename T>
struct S;
template <>
struct S< string > {...};       // compile-time error

Genel olarak, bir şekilde, mikrolitrede kazmadığınız yerde, her yere dikkatlice bir tırmık yerleştirilir. Kendinizi sabit kodlanmış bir türe sahip küçük, oldukça uzmanlaşmış bir makroyla sınırlamak muhtemelen daha iyidir.

Neden: