KimIV'ten faydalı özellikler - sayfa 74

 
allarkoms писал(а) >>

Merhaba Igor!

MQL4 dilini öğrenmeye çalışıyorum ve dil operatörlerinin tanım eksikliğinden dolayı bir sorun beni şaşırttı. Bir göstergesi var, 8 adet veri toplama tamponu var, bir sonraki zaman dilimi periyodu ile seçtiğim zaman diliminde görüntülenmesi gerekiyor. Bunun için iCustom () operatörü kullanılır. Ancak bir double value döndürür ve bunun nasıl mümkün olduğunu ve bu durumda iCustom kullanmanın mümkün olup olmadığını anlayamıyorum.

yardımın için çok umut ediyorum.

Merhaba Alexey!

iCustom() işlevini kullanan yeni bir gösterge yapmanız gerekir. Bu işlev tarafından döndürülen değerleri yeni göstergenin arabelleklerine atayın.

 
ProfitTrader писал(а) >>

Merhaba Igor! Ve herkese günaydın!

Danışmanın o gün bir anlaşmayı kapatırken daha fazla işlem yapmaması için hangi kodu girmem gerektiğiyle ilgileniyorum...

Bir tane buldum ama strateji test cihazında çalışmıyor, test etmek istiyorum, hangi kodla değiştirebilirim?

Ardından giriş koşullarında eklemeniz gerekir

Merhaba Sergey!

Her nasılsa, sizin tarafınızdan verilen işlevimin kullanımının strateji test cihazında neden işe yaramadığını bile anlamıyorum. Bu sizin için hala geçerliyse, danışmanın tüm kodunu düzenlemenizi öneririm. Hadi anlamaya çalışalım...

 

Hata işlemede SetOrder() ve OpenPosition() işlevlerinin farklılıkları ve özellikleri hakkında sorular var.


SetOrder():

       if ( err = = 8 | | err = = 141 ) Sleep ( 1000 * 100 ) ;
       if ( err ! = 135 & & err ! = 138 ) Sleep ( 1000 * 7.7 ) ;
       if ( err = = 139 | | err = = 140 | | err = = 148 ) break ;

OpenPositions(): SetOrder() 'dan farklı olarak 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE), 139 (ERR_ORDER_LOCKED) hataları işlenmez :

       if ( err = = 141 ) Sleep ( 1000 * 100 ) ;
       if ( err ! = 135 ) Sleep ( 1000 * 7.7 ) ;
       if ( err = = 140 | | err = = 148 | | err = = 4110 | | err = = 4111 ) break ;

SetOrder()'da hata 130 (ERR_INVALID_STOPS) durdurma düzeltmeleriyle işlenirken OpenPositions()'da hiçbir şekilde işlenmez.

OpenPosition() içinde 145 (ERR_TRADE_MODIFY_DENIED) işleme var. Burada işlenmesinin anlamı açık değildir.

Ayrıca, bu tartışmanın ilk sayfasında, her iki işlevde de ele alınmayan hatalardan bahsedilmiştir:

KimIV >> :

7,7 saniyelik bir duraklama için, 129 (Yanlış teklif veya satış fiyatı), 130 (Yanlış duraklar), 134 (Yeterli para yok), 136 (Fiyat yok) hatalarıyla karşılaşılır.

Ayrıca diğer (belki de bu durumda önemli) hataların ele alınması yoktur, örneğin 3 (ERR_INVALID_TRADE_PARAMETERS), 6 (ERR_NO_CONNECTION), 7 (ERR_NOT_ENOUGH_RIGHTS), 9 ERR_MALFUNCTIONAL_TRADE, 137 (ERR_BROKER_BUSY !), 40_ERRDERDERDERDE , 4106 ( ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, lütfen açıklanan noktalar hakkında yorum yapın.

Bahsettiğim SetOrder() ve OpenPositions() fonksiyonları, kimiv.ru sitesinden 11/05/2008 tarihli b-Orders ve 10/29/2008 tarihli b-Positions kitaplıklarından alınmıştır.


Eklemek istiyorum. 5 ERR_OLD_VERSION hatası oluşursa, 2, 64, 65, 133'e benzer şekilde işlenebilir; 4109 ERR_TRADE_NOT_ALLOWED 4110, 4111'e benzer

 
Hata 142 ne anlama geliyor? Hata kodlarında hiçbir şey bulamadım. Pipsator için de bilmek isterim, belki bazı yerlerde gecikmeleri azaltabilirsiniz?
 
khorosh >> :
Hata 142 ne anlama geliyor? Hata kodlarında hiçbir şey bulamadım.

https://docs.mql4.com/ru/trading/errors

142 Sipariş kuyruğa alındı. Bu bir hata değil, müşteri terminali ile ticaret sunucusu arasındaki etkileşim kodlarından biridir. Bu kod, bir ticari işlemin yürütülmesi sırasında bağlantının koptuğu ve ardından geri yüklendiği nadir bir durumda alınabilir. Hata 128 ile aynı şekilde ele alınmalıdır.

 
Здравствуйте Игорь! И всем Добрый день!

GEP'ler sorusuyla ilgileniyorum, kitapta anlatılmıyorlar, ancak bu konuda pek çok yenilik var. Her boşluk ortaya çıktığında bir ticaretin nasıl açılacağını bilmek istiyorum. Bu konu daha önce tartışıldı, ancak bu sorun hiçbir zaman çözülmedi, danışman basit görünse de deneyimli bir programcının görüşü ilgi çekicidir. Olan buydu, ama bir nedenden dolayı bu algoritma çalışmayı reddediyor, burada yanlış olan ne???

 extern int     Magic                = 777 ;
extern int       TP                 = 6 ;
extern int       SL                 = 2 ;
extern double  Lots                 = 0.01 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
  {
//----
if (  iClose ( NULL , 0 , 1 ) > iOpen ( NULL , 0 , 0 ) & & ( iClose ( NULL , 0 , 1 ) - iOpen ( NULL , 0 , 0 ) ) > 1 * Point )
   { //покупаем
  OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 2 , Bid - SL * Point , Bid + TP * Point ,
                                               NULL , Magic , 0 , CLR_NONE ) ; }
                                                  
if (  iClose ( NULL , 0 , 1 ) < iOpen ( NULL , 0 , 0 ) & & ( iClose ( NULL , 0 , 1 ) - iOpen ( NULL , 0 , 0 ) ) > 1 * Point )
   { //продаем
 OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 2 , Ask + SL * Point , Ask - TP * Point ,
                                              NULL , Magic , 0 , CLR_NONE ) ; }

   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
 
Birinci koşulda, birinci alt koşul gereksizdir, ikinci koşul ise satış için genellikle imkansızdır. Zaten bir boşluk olduğunu bir nokta var mı? 2'ye eşit kaymanız ve 2'ye eşit durmanız var, bindirmeler olabilir.
 
Roger >> :
Birinci koşulda, birinci alt koşul gereksizdir, ikinci koşul ise satış için genellikle imkansızdır. Zaten bir boşluk olduğunu bir nokta var mı? 2'ye eşit kaymanız ve 2'ye eşit durmanız var, bindirmeler olabilir.

Teşekkürler, ama neden ilk önsöz gereksiz? Sonuçta, yeni bir çubuk öncekinin kapanışından daha yüksek olduğunda ve bunun tersi olduğunda bir satın alma pozisyonunun açılması gerekir. Bu böyle mi olur doğru??

 if (  iClose ( NULL , 0 , 1 ) < iOpen ( NULL , 0 , 0 ) & & ( iClose ( NULL , 0 , 1 ) - iOpen ( NULL , 0 , 0 ) ) > 2 * Point )
   { //покупаем
  OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 2 , Bid - SL * Point , Bid + TP * Point ,
                                               NULL , Magic , 0 , CLR_NONE ) ; }
                                                  
if (  iClose ( NULL , 0 , 1 ) > iOpen ( NULL , 0 , 0 ) & & ( iClose ( NULL , 0 , 1 ) - iOpen ( NULL , 0 , 0 ) ) > 2 * Point )
   { //продаем
 OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 2 , Ask + SL * Point , Ask - TP * Point ,
                                              NULL , Magic , 0 , CLR_NONE ) ; }
 
Bu doğru
 if (    iClose ( NULL , 0 , 1 ) - iOpen ( NULL , 0 , 0 ) > 10 * Point )
   { //покупаем
   OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 2 , Bid - SL * Point , Bid + TP * Point ,
                                               NULL , Magic , 0 , CLR_NONE ) ; }
                                                  
if ( iOpen ( NULL , 0 , 0 ) - iClose ( NULL , 0 , 1 ) > 10 * Point )
   { //продаем
OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 2 , Ask + SL * Point , Ask - TP * Point ,
                                               NULL , Magic , 0 , CLR_NONE ) ; }
 
Roger >> :
Bu doğru

Anladığım kadarıyla birinci koşul otomatik olarak kapanış fiyatının açılış fiyatından büyük olduğunu ima ediyor. İkincisinde ise durum tam tersi.