Çaydanlıktan gelen sorular - sayfa 13

 
stringo :

Aslında, sihir için 8 bayta kadar bilgi verilir, bu da istediğiniz gibi yorumlanabilir. En az tarihsaat, en az double, en az 4 kısa, en az 8 karakter, en az 64 bit bit bit.

Dördünde, 4 bayt sihir herhangi bir şeyi kodlamak için yeterliydi ve şimdi 8'e kadar. Bir arzu olurdu.

Ve bu anlaşılabilir, dördünde iyi kullandım ve makaleyi okudum (fikri gerçekten beğendim).

Basitçe net değil - Neden farklı yerlerde farklı türler gösteriliyor?

 

Lütfen fiyat TP'den çok uzak değilse ve şimdi çıkmanız gerekiyorsa, yerleşik TP ve SL ile bir pozisyonu nasıl kapatabileceğinizi söyleyin.

Hacim olarak eşit yeni bir pozisyon açmak için emir gönderiyorum. Çoğu durumda bu işe yarar. Ama TP tarafından anlaşmanın kapanması için zamanım olduğu ve kapatmak yerine piyasada yeni bir pozisyon aldığım durumlar var... :(

Açılan pozisyonun mevcut pozisyonun kapanması olduğunu ve ana pozisyon zaten kapalıysa yeni bir pozisyon açmadığını nasıl belirtebilirim?

"Kapatmadan önce SL ve TP'yi kaldır veya TP bitene kadar bekle" gibi seçenekler akla geliyor, ancak bu çözümler çirkin. MT4'te olduğu gibi bir pozisyonu KAPATMAK gibi basit bir işlemi gerçekleştirmek gerçekten imkansız mı ???

 

CTrade sınıfında PositionClose'a bakın.
Eminim senin yaptığın gibi olacaktır. Bir sonuç kendini gösteriyor - artık başka bir yol yok.

Ama isteğinizi destekliyorum. Ve geliştiricilerden bu seçeneği düşünmelerini istiyorum.

İşlem türünü ekleyin TRADE_ACTION_CLOSE - belirtilen enstrümandaki bir pozisyonu mevcut fiyattan kendi hacminde kapatın.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
stringo :

Aslında, sihir için 8 bayta kadar bilgi verilir, bu da istediğiniz gibi yorumlanabilir. En az tarihsaat, en az double, en az 4 kısa, en az 8 karakter, en az 64 bit bit bit.

Dördünde, 4 bayt sihir herhangi bir şeyi kodlamak için yeterliydi ve şimdi 8'e kadar. Bir arzu olurdu.

Uzun ve ulong için yaklaşık 8 bayt Dizin'den temizlendi. Büyü ile ilgili olarak bu türlerin kullanımındaki tutarsızlık endişe vericidir.

Basit bir örnek: bir ticaret talebi gönderirken request.magic= ULONG_MAX-1 atamak kabul edilebilir. Öyleyse El Kitabı neden OrderGetInteger( ORDER_MAGIC ) işlevinin yalnızca uzun türü döndürdüğünü belirtiyor? Ayrıca, hem pozisyonlar hem de fırsatlar için uzun tip sihir de döndürülür.

Peki, başlangıçta nasıl amaçlandı? Belki de HistoryDealGetInteger () , PositionGetInteger() , OrderGetInteger() , vb. fonksiyonlardan dolayı MqlTradeRequest yapısı için büyünün long türünde olduğunu belirtmelisiniz. LONG_MAX'tan büyük tamsayı değerleri döndürmeyi amaçlamıyor mu?

 
Yedelkin :

Uzun ve ulong için yaklaşık 8 bayt Dizin'den temizlendi. Büyü ile ilgili olarak bu türlerin kullanımındaki tutarsızlık endişe vericidir.

Basit bir örnek: bir ticaret talebi gönderirken request.magic= ULONG_MAX-1 atamak kabul edilebilir. Öyleyse El Kitabı neden OrderGetInteger( ORDER_MAGIC ) işlevinin yalnızca uzun türü döndürdüğünü belirtiyor? Ayrıca, hem pozisyonlar hem de fırsatlar için uzun tip sihir de döndürülür.

Peki başlangıçta nasıl amaçlandı? Belki de HistoryDealGetInteger () , PositionGetInteger() , OrderGetInteger() , vb. fonksiyonlardan dolayı MqlTradeRequest yapısı için büyünün long türünde olduğunu belirtmelisiniz. LONG_MAX'tan büyük tamsayı değerleri döndürmeyi amaçlamıyor mu?

Sihir aslında long türündedir (bu, long türündeki değer aralığının dışında bir değere sahip bir negatif büyü ve bir büyü üretilerek kolayca doğrulanır ).

Doğrulama için Night Expert Advisor'ı biraz değiştirebilirsiniz (standart kütüphanenin sınıflarını kullanmaz).

Deneyin saflığı için, EA_Magic parametresinin türünü uzun olarak değiştirmeli ve geçmişteki son anlaşmanın büyüsünü yazdırmalısınız (sipariş başarıyla verildiyse).


 

Interesting :
В действительности магик имеет тип long (это легко проверяется формированием отрицательного магика и магика со значением выходящим за диапазон значений типа long ).

Eğer öyleyse, MqlTradeRequest yapısının sihirli öğesinin tanımını tür adından " u " harfini kaldırarak netleştirmek gerekir.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Yedelkin :
Eğer öyleyse, MqlTradeRequest yapısının sihirli öğesinin tanımını tür adından " u " harfini kaldırarak netleştirmek gerekir.
İyi bir not olarak, CTrade sınıfında da değişiklikler yapmanız gerekir (elbette geliştiriciler sihirli değeri yalnızca pozitif değerlerle sınırlamak istemiyorsa).
 
stringo :

Aslında, sihir için 8 bayta kadar bilgi verilir, bu da istediğiniz gibi yorumlanabilir. En az tarihsaat, en az double, en az 4 kısa, en az 8 karakter, en az 64 bit bit bit.

Dördünde, 4 bayt sihir herhangi bir şeyi kodlamak için yeterliydi ve şimdi 8'e kadar. Bir arzu olurdu.

Aslında, 64 değil, yalnızca 63 bit kullanılır (yani, eksik 8 bayt). 8 bayt, long aralığının tamamını kullanıyorsanız olacaktır.

Ama maalesef...

Bir yandan, MqlTradeRequest yapısına ulong büyüsü geçirilir. Bu, yalnızca pozitif değerlerin belirtilebileceği anlamına gelir.

Öte yandan, PositionGetInteger / OrderGetInteger işlevleri uzun bir tür döndürür . Bu, ulong aralığının yarısının kesildiği anlamına gelir.

Toplamda, beyan edilen 64 bit yerine, aslında 63 bitimiz var.Genel olarak, bu o kadar da kötü değil, çünkü sipariş kontrolü ilkelerine büyük rahatsızlık veriyor.

MT4'teki gibi benzer bir sistem bırakmak çok daha uygundur - işaretli büyülere izin verin. Birçok ticaret sistemi, sihirli işareti kullanarak basit bir prensip üzerine inşa edildiğinden. Bu nedenle, bir sistemi ikiye bölmek ve siparişlerinizi MathAbs( OrderMagicNumber() ) olağan işleviyle filtrelemek çok daha kolaydır.


 
sergeev :

Aslında, 64 değil, yalnızca 63 bit kullanılır (yani, eksik 8 bayt). 8 bayt, long aralığının tamamını kullanıyorsanız olacaktır.

Hatalısınız.

64 bit kullanılır ve bunları nasıl kullanacağınız size kalmış. long/ulong önemli değil, hepsi bu 64 biti nasıl yorumladığınıza bağlı. İmzalı uzun olarak kullanmak istiyorsanız, imzasız olarak kullanmak istiyorsanız sorunsuz kullanın. Diğer veri türlerini bu 64 bit içine paketlemek istiyorsanız, bunları paketleyin.

Slava'nın yazdığı şey buydu.

 
sergeev :

Aslında, 64 değil, yalnızca 63 bit kullanılır (yani, eksik 8 bayt). 8 bayt, long aralığının tamamını kullanıyorsanız olacaktır.

Ama maalesef...

Bir yandan, MqlTradeRequest yapısına ulong büyüsü geçirilir. Bu, yalnızca pozitif değerlerin belirtilebileceği anlamına gelir.

Öte yandan, PositionGetInteger / OrderGetInteger işlevleri uzun bir tür döndürür . Bu, ulong aralığının yarısının kesildiği anlamına gelir.

Toplamda, beyan edilen 64 bit yerine, aslında 63 bitimiz var.Genel olarak, bu o kadar da kötü değil, çünkü sipariş kontrolü ilkelerine büyük rahatsızlık veriyor.

MT4'teki gibi benzer bir sistem bırakmak çok daha uygundur - işaretli büyülere izin verin. Birçok ticaret sistemi, sihirli işareti kullanarak basit bir prensip üzerine inşa edildiğinden. Bu nedenle, bir sistemi ikiye bölmek ve siparişlerinizi MathAbs( OrderMagicNumber() ) olağan işleviyle filtrelemek çok daha kolaydır.

Arkadaşlar açıkçası kafam karıştı. Düz bir zeminde yüzüyorsun. Kesinlikle eşit. Sorun basitçe mevcut değil, siz icat ettiniz. Tür dönüşümlerinin en altına inin.

Aşağıdaki snippet'in size yardımcı olacağını umuyorum. Bir komut dosyasına kopyalayın, derleyin, terminalde çalıştırdığınızdan emin olun ve sonra çok dikkatli düşünün. İyi şanlar.

 void OnStart ()
  {
     Print ( "//------ " );

     int i_A = - 100 ;
     uint ui_B = uint (- 100 );
    
     Print (i_A, " " , uint (i_A));
     Print ( int (ui_B), " " ,ui_B);

    i_A = int ( 4294967196 );
    ui_B = 4294967196 ;

     Print (i_A, " " , uint (i_A));
     Print ( int (ui_B), " " ,ui_B);
//--
     long l_A = - 100 ;
     ulong ul_B = ulong (- 100 );
    
     Print (l_A, " " , ulong (l_A));
     Print ( long (ul_B), " " ,ul_B);
   
    l_A = long ( 18446744073709551516 );
    ul_B = 18446744073709551516 ;
    
     Print (l_A, " " , ulong (l_A));
     Print ( long (ul_B), " " ,ul_B);
  }
Neden: