Mors kodu - sayfa 4

 

Sayı kalıbının uzunluğunu belirtmek için " kalıbın uzunluğu " parametresini çıkardım (bu parametre yalnızca optimizasyon modu için kullanılır).

 #property version    "1.003"
#property description "Bull candle - \"1\", bear candle - \"0\""
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                       // trading object
//+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_TYPE
  {
   PATTERN_TYPE_NUMERICAL= 0 ,   // numerical
   PATTERN_TYPE_STRING= 1 ,     // string 
  };
//---
input ENUM_PATTERN_TYPE    InpPatternType          = PATTERN_TYPE_STRING;   // pattern type
input uchar                 InpLenNumerical         = 3 ;                     // length of the pattern (use only if pattern "numerical")
input string                InpsMorseCode           = "101" ;                 // string Morse code (max 5 characters)
input ENUM_POSITION_TYPE    InpPosType              = POSITION_TYPE_BUY ;     // posinion type
input double                InpLot                  = 0.1 ;                   // lot
sinput ulong                m_magic                 = 88430400 ;             // magic number
input ulong                 m_slippage              = 30 ;                   // slippage
//---
string sExtMorseCode= "" ;
int max_string_len= 5 ;         // limitation of the length of the pattern "string"
int i_morse_code= 0 ;           // int Morse code (use only if pattern type=numerical)
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (InpPatternType==PATTERN_TYPE_STRING)
     {
       //--- check start mode
       if ( MQLInfoInteger ( MQL_OPTIMIZATION ))
         return ( INIT_PARAMETERS_INCORRECT );
       //--- info print
       Print ( "The type of the pattern \"string\" is set - the parameters \"pattern length\" and \"int Morse code\" are ignored" );

      sExtMorseCode=InpsMorseCode;

Ve anında koruma - optimizasyon modunda kalıbın dize türü seçilirse - danışman "INIT_PARAMETERS_INCORRECT" değerini döndürür

 
Vitalii Ananev :


Daha sonra tekrar yapmamak için her şeyi bir kerede öngörmek gerekir.

....

Yine, "akşam yıldızı" formasyonuna dönerseniz, o zaman bu bir yükseliş-küçük şamdan-düşüş ve yükseliş-düşüş emilimi olarak düşünülebilir. Yani, bir yükseliş mumundan ve bir düşüş eğiliminden oluşan bileşik bir desen ortaya çıkıyor. Ve desendeki üç mum da özetlenirse, yine bir pim çubuğu elde ederiz.



5 sentimi koyayım.

Böyle bir görev belirlenmedi ve her şeyi bir kerede öngörmek imkansız, bu durumda, ana konsept olarak tasarlanan orijinal konsept kaybolur: kullanıcı bir dizi yükseliş ve düşüş mumları yapar ve program bu dizileri ve işlemleri arıyor, neden mumları tek bir modelde toplayalım?

 
Pyxis :


5 sentimi koyayım.

Böyle bir görev belirlenmedi ve her şeyi bir kerede öngörmek imkansız, bu durumda, ana konsept olarak tasarlanan orijinal konsept kaybolur: kullanıcı bir dizi yükseliş ve düşüş mumları yapar ve program bu dizileri ve işlemleri arıyor, neden mumları tek bir modelde toplayalım?


neden özet geçeyim. Örneğin, modelin sadeliği için. Ve genel olarak örnek olarak verildi.

Neden imkansız? Japon şamdanlarının tüm yaygın kombinasyonları şu veya bu şekilde kodlanabilir. Başka bir şey de 1. bit (yukarıda bunun hakkında yazdım) yeterli değil, en az 2 bit kullanmanız gerekiyor ve desen modelini özetlemezseniz (basitleştirmezseniz) bunlar da yeterli değil.

 

Mors kodu sürümü "1.003" iken: Modelin bir dize açıklamasını manuel olarak ayarlayabilir ve hatta test cihazında tek geçişler çalıştırabilirsiniz.

Dosyalar:
Morse_code.mq5  15 kb
 
Vladimir Karputov :


Program, bir programcı tarafından değil, sıradan bir kullanıcı tarafından kullanılacaktır (yukarıda ve bir kereden fazla bahsedilmiştir) - ve onun için "101" ve "5" iki farklı sayıdır, onun için "5" ise hiçbir bilgi yoktur. mumların göreceli konumu hakkında her şey var, ancak "101" açıkça "boğa, düşüş, yükseliş" diyor.

Anladım. Peki, o zaman - bir karakter dizisi ve bir ayrıştırıcı. Bence en esnek seçenek.
 
George Merts :

Tam olarak anlamadığım bir şey var - programcılar veya enayiler var mı?

Orada bir yere transfer edilecek bir şey için ne ???

101 koduna ihtiyacımız varsa, bu normal değer 5'tir. İşte bu kadar. Hangi sorunlar? Zihinsel olarak ondalık sayıyı ikiliye dönüştürün ???

Benzer deneyler yaptım, sadece mumumun hala dört boyutu vardı - küçükten büyüğe. Buna göre, sekiz mum çeşidi. Ve bu nedenle, üç bit. Desende sayıyı (ulong) yazın - ızgara yirmi çubuklu desenden daha büyüktür.

Bana göre sorun çok uzak.

Önce anlıyor sonra eleştiriyorsun. İşte düşünmeniz için bir meydan okuma:

Aşağıdaki şamdan kombinasyonlarını int olarak kodlayın:

  • 1011;
  • 01011;
  • 001011

İpucu: bunlar farklı kombinasyonlardır.

George Merts'in fotoğrafı.
Anladım. Peki, o zaman - bir karakter dizisi ve bir ayrıştırıcı. Bence en esnek seçenek.
Bir kez daha: optimizer_does not_optimize_string_parameters . Bir optimize edici olmadan karlı kalıpların bir kombinasyonunu nasıl arayacaksınız?
 
Vasiliy Sokolov :
Bir kez daha: optimizer_does not_optimize_string_parameters . Bir optimize edici olmadan karlı kalıpların bir kombinasyonunu nasıl arayacaksınız?

Bir optimize ediciye ihtiyaç duyulursa, bence, kullanıcı, sayıyı ikili koda dönüştürmek için yeterince "bilgili" olmalıdır (en azından normal bir Windows hesap makinesi kullanarak).

Arkadaşlar, tartışmalı bir isteğiniz var. Kullanıcı, ikili kodu ondalık sayıya dönüştürmek için bir hesap makinesi kullanamayacak kadar meşe ise, o zaman hiçbir durumda optimizasyonda ustalaşmayacaktır. Maksimum - en iyi değeri bulmak için bir kez çalışır.

Kullanıcı optimizasyonu kullanacak kadar gelişmişse, giriş parametrelerini normal unsigned long ile kodlamak oldukça mantıklıdır,

 
Vasiliy Sokolov :

Önce anlıyor sonra eleştiriyorsun. İşte düşünmeniz için bir meydan okuma:

Aşağıdaki şamdan kombinasyonlarını int olarak kodlayın:

  • 1011;
  • 01011;
  • 001011

İpucu: bunlar farklı kombinasyonlardır.

Ayrıca, uzunlukları farklıdır. İlk kombinasyon - dört altı haneli olanı içerir.

İkinci kombinasyon - iki altı haneli olanı içerir.

Buna göre, optimize ederken, sadece 64 altı basamaklı kombinasyon alın.

Ayrıca, ikincisi, ilk iki seçeneğin bir alt kümesidir ve sondan bir önceki seçenek, ilk seçeneğin bir alt kümesidir.

Yani, son kombinasyonun tescili sırasında, hem ikinci hem de birinci kombinasyon aynı anda tanınmalıdır. Bana göre bu açıkça yanlış bir istektir.

 
Ve olayın amacı tam olarak nedir - en karlı diziyi bulmak? Bunun için ne bir robota ne de bir test cihazına ihtiyaç yoktur - dizinin uzunluğunun ve bir pozisyonu kapatma kurallarının ayarlandığı (TP veya ters sinyal veya başka bir yer) bir gösterge yeterlidir. Gösterge, verilen dizi uzunluğu ve verilen geçmiş derinliği içindeki tüm seçenekleri sıralayacak, sonucu sıralayacak (düşüş dahil) ve belirttiğiniz yere yazdıracaktır. Ve gerçekten de, sorun çok uzak görünüyor. Eh, bu bir oyuncak değilse, kullanıcıyı almak için 0101'e fal söyle
 
George Merts :

Buna göre, optimize ederken, sadece 64 altı basamaklı kombinasyon alın.

Soru: 64 bitte gerekli kombinasyonla çakışan bir kombinasyonun piyasada görünme olasılığı nedir? Cevap: (1/2^64)*BarsCount. Onlar. %100'e yakın bir olasılıkla böyle bir kombinasyon bulunmayacaktır. Onlar. Açıkçası, int veya long sayı tek başına kalıbı tam olarak tanımlayamaz, bu nedenle kalıbın uzunluğunu gösteren ek bir parametre gereklidir.

Bu kadar küçük adımlarla tartışarak, ikinci sayfada dile getirdiğim şeye çok geçmeden geleceksiniz.

Neden: