[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 656

 
artmedia70 :
Yığın taşmasına ne sebep olabilir? Alım boyutu büyük olan bir pozisyon açarken (alış volatiliteden hesaplanır ve 100 ile çarpılır, boyut 41*100 çıktı), stack taşması loga kaydedilir ve...sağlıklı olun. Bu kapanana kadar artık tek bir pozisyon açılmıyor ve bu da büyük bir alım nedeniyle kapanmıyor... Ve danışman artık düzgün çalışmıyor çünkü. önceden belirlenmiş toplam açık pozisyon karına ulaşıldığında tüm pozisyonları kapatması gerekir... Ama bu olmaz, bu pozisyon uzun süredir büyük bir karda, yaklaşık iki bin puan olmasına rağmen, bu şekilde... Nasıl başa çıkılır? Bugün nasılsın? Sonuçta, açık pozlar birlikte yığını taştığında ve her şey takla attığında böyle bir duruma karşı sigortalanamaz ...


yığın, türün aralığı dışında olan bir sayı ile basitçe taşamaz - başka bir hata olacaktır

yığın, bir işleve geçirilen verilerle veya özyinelemeli bir işlev çağrısından çıkmadan taşabilir

start() aynı işlevdir - belki orada çok fazla değişkeniniz vardır

yığın, işlevin ara değerlerinin (yerel değişkenler) depolandığı bir bellek alanıdır, dinamik diziler kullanıyorsanız ve dizinin aralığını doğru bir şekilde kontrol etmediyseniz, belki de yığını kendiniz yok edersiniz, yani verileri diziye değil, diziden hemen sonra gelen bellek alanına yazdı

bazı dizileri global değişkenlere taşımaya çalışın - yani danışmanı en tepeye çıkar

Not: en azından tüm programlama dillerinde durum böyle - mql içinde aynı şeyin geçerli olduğunu düşünüyorum

 
IgorM :


yığın, türün aralığı dışında olan bir sayı ile basitçe taşamaz - başka bir hata olacaktır

yığın, bir işleve geçirilen verilerle veya özyinelemeli bir işlev çağrısından çıkmadan taşabilir

start() aynı işlevdir - belki orada çok fazla değişkeniniz vardır

yığın, işlevin ara değerlerinin (yerel değişkenler) depolandığı bir bellek alanıdır, dinamik diziler kullanıyorsanız ve dizinin aralığını doğru bir şekilde kontrol etmediyseniz, belki de yığını kendiniz yok edersiniz, yani verileri diziye değil, diziden hemen sonra gelen bellek alanına yazdı

bazı dizileri global değişkenlere taşımaya çalışın - yani. danışmanı en tepeye çıkar

Not: en azından tüm programlama dillerinde durum böyle - mql içinde aynı şeyin geçerli olduğunu düşünüyorum

Igor, biliyorsun, şimdilik dizileri kullanmaktan kaçınıyorum... Kodumda sadece birkaç dizi var - bir onay işaretinden önce bir dizi sipariş ve bir onaydan sonra bir dizi sipariş. Bunlar benim küresel değişken kapsamımda ayarlanır. Bu pozisyonları açma kodunu danışmanda başka bir yere taşımam ve hatanın ortadan kalkması komik. Bunun hakkında fazla düşünmeme rağmen, açılış emirleri için fonksiyonlara özyinelemeli bir çağrı varmış gibi görünüyordu. Az önce toplam karı elde etmek ve tüm pozisyonları kapatmak için kontrol kodunda, açılışı kapanıştan hemen sonra yapmanın uygun olmayacağına karar verdim... Yığın, kahretsin... :)
 
artmedia70 :
Igor, biliyorsun, şimdilik dizileri kullanmaktan kaçınıyorum... Kodumda sadece birkaç dizi var - bir onay işaretinden önce bir dizi sipariş ve bir onaydan sonra bir dizi sipariş. Küresel değişken alanımda ayarlanmışlar. Bu pozisyonları açma kodunu danışmanda başka bir yere taşımam ve hatanın ortadan kalkması komik. Bunun hakkında fazla düşünmeme rağmen, açılış emirleri için fonksiyonlara özyinelemeli bir çağrı varmış gibi görünüyordu. Az önce toplam karı elde etmek ve tüm pozisyonları kapatmak için kontrol kodunda, açılışı kapanıştan hemen sonra yapmanın uygun olmayacağına karar verdim... Yığın, kahretsin... :)

Uzun zamandır kendime bir danışman oluşturmak için bir şablon yaptım - sipariş verirken hemen bu tür bir siparişin varlığına dair bir işaret (bayrak) koydum ve sonra bu tür yeni bir sipariş açmadan önce her zaman bayrağı kontrol ediyorum - öyle bir emir var mı ama ben danışmanları tek bir emirle yazıyorum
 
IgorM :

Uzun zamandır kendime bir danışman oluşturmak için bir şablon yaptım - sipariş verirken hemen bu tür bir siparişin varlığına dair bir işaret (bayrak) koydum ve sonra bu tür yeni bir sipariş açmadan önce her zaman bayrağı kontrol ediyorum - öyle bir emir var mı ama ben danışmanları tek bir emirle yazıyorum
Yani sonuçta ben de ama bence herkesin kendine göre geliştirmeleri, şablonları ve başka faydalı şeyleri var... Bu ayrı bir konu. Hala dezavantajlarla savaşıyorum, bu yüzden çeşitli yöntemler-yöntemler-fonksiyonlar ve benzerlerini büküyorum ve büküyorum. İşi tamamen ve kesinlikle trende göre yaparsanız, çok az pozisyon bile açılır, her birinin kendi trendi / düz olduğu birkaç zaman diliminde çalışırsanız, o zaman trend tükenmesinin nasıl yakalanacağı net değildir. daha eski bir zaman diliminde trend zaten düz hale geldi ve daha genç olanda hala orada, ama zaten bitiyor. Alçakta bir poz açarken, zamanında kapanmadan bir düşüş verme olasılığı yüksektir. Şimdi yönü belirlediğimiz 4 saatlik grafiklerle çalışmaya çalışıyorum ve tüm gençler için sadece bu yönde çalışıyoruz. Sonuçlara bakmak için bir trendden düz, aşağı yukarı bir patlamaya geçiş anını belirledim.
 
Craft :


Evet, gerçekten "0", ama ne yapacağım, söyle bana - bu şekilde çalışmıyor (ve eşit süreler ayarla) Her iki seçeneği de denedim (yeni ve eski) Print("NormalizeDouble(c1b_1..., sıfır verir (yalnızca c1b[i] değerini gösterir, c1s[i] - sıfırlar dahil geri kalan her şeyi gösterir), seçeneklerden birini çalışır duruma getirmeye yardımcı olur veya en azından bir ipucunu paylaşır, kusuru kim görecek?

Yeni:

Eskimiş:

Tüm:


Yuri, gelecek için, eğer kod tekrarlanırsa  en az iki kez, bir yönteme tahsis edilmesi gerekir ve kodu karıştıran dizi yığınlarına gerek kalmaz.
İşte size bir yöntem:

 //+------------------------------------------------------------------+
double iCCIAverage( string cci_symbol, int cci_timeframe, int cci_period, int cci_applied_price, int ma_period, int ma_method, int ma_shift){
   double array[];
   int loop_array;
   ArrayResize (array,ma_period + ma_shift);
   for ( int loop = ma_period + ma_shift - 1 ; loop >= 0 ; loop--, loop_array++)array[loop_array] = iCCI (cci_symbol, cci_timeframe, cci_period, cci_applied_price, loop);
   return (iMAOnArray(array, 0 , ma_period, 0 , ma_method, ma_shift));
}
//+------------------------------------------------------------------+

Parametrelerde her şeyin açık olduğunu düşünüyorum, verileri girin ve ma_shift parametresini değiştirerek ihtiyacınız olan vardiyayı elde edin. Bu yöntemin bir şablon olarak kullanılabileceğini unutmayın, erişim yöntemlerini i…(…) veya iCustom(…) göstergelerine değiştirin . Artık alım satım karar bloğunuz olması gerektiği gibi görünüyor:

 //--------------------------------------------------------------- 5 --
   // Торговые критерии
if ( NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodB, PRICE_TYPICAL , AvgB, MODE_SMA , 1 ), 4 )< NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodB, PRICE_TYPICAL , AvgB, MODE_SMA , 2 ), 4 ) &&
   NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodB, PRICE_TYPICAL , AvgB, MODE_SMA , 2 ), 4 )> NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodB, PRICE_TYPICAL , AvgB, MODE_SMA , 3 ), 4 ))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if ( NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodS, PRICE_TYPICAL , AvgS, MODE_SMA , 1 ), 4 )> NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodS, PRICE_TYPICAL , AvgS, MODE_SMA , 2 ), 4 ) &&
   NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodS, PRICE_TYPICAL , AvgS, MODE_SMA , 2 ), 4 )< NormalizeDouble (iCCIAverage( Symbol (), 0 , PeriodS, PRICE_TYPICAL , AvgS, MODE_SMA , 3 ), 4 ))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --

Buna göre artık "eski" ve "yeni" seçeneklere gerek kalmıyor, belirtilen kriterlere göre anlaşmalar açılıyor (anladığım kadarıyla düzleştirilmiş iCC'nin üç çubuklu bir üst/alt kalıbı var). Dosyanın düzeltilmiş bir sürümü var.

Dosyalar:
21_2.mq4  14 kb
 

Merhaba.

Lütfen siparişin açılmasından bu yana diziye fiyat yazacağım kodu söyleyin.

Her yeni fiyatın diziye eklenmesi için nasıl yapılır.

 
zelek :

Merhaba.

Lütfen siparişin açılmasından bu yana diziye fiyat yazacağım kodu söyleyin.

Her yeni fiyatın diziye eklenmesi için nasıl yapılır.


soru hakkında daha spesifik ol

Eğer bir emir verme anındaki cari fiyatla ilgileniyorsanız, koddaki bir emir vermekten sorumlu olan ve cari fiyatı bir değişiklikle global bir diziye yazmaktan sorumlu olacak bir fonksiyona bir çağrı ekleyebilirsiniz. daha sonra kodun herhangi bir yerinden görüntüleyebileceğiniz dizi indeks sayacında

 

bir danışmanın performansı nasıl kontrol edilir - Kod yürütme süresini milisaniye cinsinden görüntülemek istiyorum

MT5 vs MT4 ne kadar daha iyi

 
IgorM :

bir danışmanın performansı nasıl kontrol edilir - Kod yürütme süresini milisaniye cinsinden görüntülemek istiyorum

MT5 vs MT4 ne kadar iyi


GetTickCount, https://docs.mql4.com/ru/common/GetTickCount'a yardımcı olacaktır.
 
DDFedor :

GetTickCount, https://docs.mql4.com/en/common/GetTickCount'a yardımcı olacaktır.


ATP Evet öyle - aradığım şey, MT4 ve MT5 için aynı tip kodun hızını kim ölçtü?