[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 309

 
Çok teşekkür ederim Zhunko.Her şey bir bumerang gibi geri geliyor ve çok güzel.
 
artmedia70 :
Aynen öyle. Genel değişken Reason bir değer alır, ancak onu deinit()'de değil, init()'de alır, böylece init()'i çalıştırdığınızda, son deinitialization'ın nedenini görebilir ve değere bağlı olarak, bir gerçekleştirebilirsiniz. veya başka bir işlem. Ama olması gerektiği gibi çalışmıyor.

Size nasıl yapacağınız söylendi. Deinit() içinde, son başlatmadan çıkarmanın nedenini buluyoruz ve bunu global düzeyde bildirilen bir değişkenden geçiriyoruz. init()'te değişkenin değerini kontrol eder ve son deinitialization'ın nedenini bulursunuz. İşe yarıyor!.

PS Görünüşe göre, init () / deinit () fonksiyonlarının içindeki operatörlerde açıkça belirtilmemişse, küresel düzeyde bildirilen değişkenlerin değerlerini değiştirmediğini herkes anlamıyor.

Aslında init() içinde siparişleri kapatmamak daha iyidir. Orada MarketInfo () genellikle beklendiği gibi çalışmıyor.

 int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
...
int init ()
{
...
       if ( DeinitReason == 3 ) // если смена таймфрейма
...
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   Print ( "DeinitReason " ,DeinitReason);
//----
   return ( 0 );
  }
 
Mislaid :
Size nasıl yapacağınız söylendi. Deinit() içinde, son başlatmadan çıkarmanın nedenini buluyoruz ve bunu global düzeyde bildirilen bir değişkenden geçiriyoruz. init()'te değişkenin değerini kontrol eder ve son deinitialization'ın nedenini bulursunuz. İşe yarıyor!.
Artyom'un M5 TF'den geçiş yapmakla ilgili bir sorunu olduğunu fark ettim. Bir hata var. Durumun bu olup olmadığını kontrol etmeliyiz. Belki bir MT4 hatasıdır.
 
Zhunko :
Bu özellikle ne yapacağınızı önerdi. Böyle bir işlev genellikle tarih boyunca çalıştırılır.

Fonksiyonun döngü etrafında sürüleceğini hayal bile edemiyorum ...
 
hoz :

Fonksiyonun döngü etrafında sürüleceğini hayal bile edemiyorum ...

Evet lütfen :
 for (i= OrdersTotal ()- 1 ;i>= 0 ;i--){
     Print (GetOrderInfo(i,OrderMagic,.....)); // вызов пользовательской функции 
}

for (i= 0 ;i< OrdersTotal ();i++){ /// вызов функции "ордерс тотал" на каждой итерации

}
 
Zhunko :
Artyom'un M5 TF'den geçiş yapmakla ilgili bir sorunu olduğunu fark ettim. Bir hata var. Durumun bu olup olmadığını kontrol etmeliyiz. Belki bir MT4 hatasıdır.

Hayır, bu bir hata değil. İşte danışman. M1'den H1'e değiştirilen zaman dilimleri

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   Print ( "DeinitReason " ,DeinitReason);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+  
19:20:02 111 CADJPY,M15: başlatıldı
19:20:09 111 CADJPY,M15: DeinitNeden 3
19:20:09 111 CADJPY,M15: başlatılmamış
19:20:09 111 CADJPY,M15: uninit neden 3
19:20:09 Süper Trend[1] CADJPY,M15: başlatılmamış
19:20:09 Supertrend[1] CADJPY,M15: uninit sebep 3
19:20:09 HLC CADJPY,M15: başlatılmamış
19:20:09 HLC CADJPY,M15: uninit neden 3
19:20:09 AMA optimize edilmiş1 CADJPY,M15: başlatılmamış
19:20:09 AMA optimize1 CADJPY,M15: uninit neden 3
19:20:09 AMA optimize edilmiş1 CADJPY,M15: başlatılmamış
19:20:09 AMA optimize1 CADJPY,M15: uninit neden 3
19:20:09 Supertrend[1] CADJPY,H1: başlatıldı
19:20:09 HLC CADJPY,H1: başlatıldı
19:20:09 AMA optimize1 CADJPY,H1: başlatıldı
19:20:09 AMA optimize1 CADJPY,H1: başlatıldı
19:20:09 111 CADJPY,H1: başlatıldı
 
Mislaid :

Hayır, bu bir hata değil. İşte danışman. M1'den H1'e değiştirilen zaman dilimleri

İyi iyi! Ve sonra ben de, her şey deinitialization nedenlere güçlü bir şekilde bağlı.

Kayıp :

Aslında init() içinde siparişleri kapatmamak daha iyidir. Orada MarketInfo () genellikle beklendiği gibi çalışmıyor.

Evet. Yasaktır. Yardım kısmında yazıyor.

saat :

Fonksiyonun döngü etrafında sürüleceğini hayal bile edemiyorum ...
Her zamanki şey.
 
Zhunko :

İyi iyi! Ve sonra deinitialization nedenlerine bağlı birçok şeye sahibim.

Evet. Yasaktır. Yardım kısmında yazıyor. Her zamanki şey.

İşte test için son sürüm. Bir önceki çok başarılı değildi, çünkü init()/deinit() bazen print() ile uyumlu değildir.

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

int     DeinitReason = 0 ; // определяем переменную на глобальном уровне
bool firststart = true ;
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason ( );
   firststart = true ;
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if ( firststart )
  {
       Print ( "DeinitReason " , DeinitReason, " " , Period ( ) );
      firststart = false ;
  }
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

Kendimden bir fonksiyon yazmamı istedim. Sonuç olarak, N -mumlar belirli bir yönde geri döndüğünde, mum sayısını hesaplamak gerekir. ANCAK. Bunun için birkaç koşul var, daha doğrusu zamanla bunların bir listesi olacak.

Diyelim ki, örneğin, eğilim aşağı yönlü, ... bir geri dönüş başladı. 5 mum tükendiyse ve her mum yükselişteyse ve örneğin, her mumun boyutu belirtilen i_sizeOfCurrBar değerinden ve diğerlerinden daha büyükse istiyorum. koşullar, sonra sürekli yükseliş çubuklarının sayısını görüntüler ve işlevden bazı sonuçlar döndürürüz.

Bunu yazmanın en iyi yolu nedir? Şu anda yazmaya başladım ve burada bir çubuk döngüsünden geçmenin ve bir şekilde tarihin derinliğindeki görüntülemeyi sabit sayıda çubukla değil, çubuklarla sınırlamanın gerekli olduğunu anlıyorum. koşullar bizi ilgilendiriyor.

İşte sahip olduğum şey:

 int LastCandlesType()
{
   bool up,     // Свеча направлена вверх
        dn;     // Свеча направлена вниз
   int cnt;     // Счётчик идущих друг за другом бычьих свечей
   
   for ( int i= Bars - 1 ; i>= Bars - 6 ; i--)
   {
       if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point)      // Пропускаем все бары, размера меньше заданного внешним параметром.
           continue ;
      
       if (Close[i] > Open[i])                               // 
          up = true ;

      cnt++;
   }
   if (cnt == 5 )
       return (BULL_CANDLES);
}

Şu anda, sondan bir önceki çubuktan sadece bir arama var, ardından indeks 6'ya sahip çubuk, yani. 5 bar üst üste. Ancak EA'nın yalnızca yükseliş gösteren çubukları hesaplamasına ihtiyacım var ve hepsi art arda değil. Bu nasıl daha iyi uygulanır?

Boyuta göre, doğru bir şekilde filtreledim.

Her şey zaten yazıldığında, sayaç zaten nht ile sürekli çubukların sayısını, aşağıdan etvsvb parametreleriyle hesaplayacak ve bu tür çubuklar yeterliyse, bir tür çubuk döndürülecektir. fonksiyon değeri.

 
Mislaid :

Size nasıl yapacağınız söylendi. Deinit()'de, son başlatmanın nedenini bulup global düzeyde bildirilen bir değişkenden geçiriyoruz. init()'te değişkenin değerini kontrol eder ve son deinitialization'ın nedenini bulursunuz. İşe yarıyor!.

PS Görünüşe göre, init () / deinit () fonksiyonlarının içindeki operatörlerde açıkça belirtilmemişse, küresel düzeyde bildirilen değişkenlerin değerlerini değiştirmediğini herkes anlamıyor.

Aslında init() içinde siparişleri kapatmamak daha iyidir. Orada MarketInfo () genellikle beklendiği gibi çalışmıyor.

Ve init () içindeki pozisyonları kapattığımı nerede görüyorsunuz? Yayından kaldırma isteğiyle ilgili bir soru sordum, ancak onları nereden sileceğim - bu konuda konuşmadım, sormayı çok bırakın. Neden düşünüyorsun?