MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 696

 
Northwest :

1. Her şeyi yerine koyun, bilgisayarınıza eziyet etmeyin .

Üzgünüz, ancak iade edemezsiniz, göstergenin soldan sağa sayması gerekir.

Ve ben ona işkence etmiyorum, onu amacına uygun olarak kullanıyorum.

2. iBandsOnArray, dizide depolanan veriler üzerinde hesaplanan iStdDevOnArray

Evet, bbMacd[] dizisindeki veriler üzerinden hesaplanırlar, peki ya sonra?

3. Dizi 1 döngüde doldurulur

Bir mi yoksa ilk mi?

Bir diziyi doldurmak için, bunun içinde olduğu kişisel bir döngüye ihtiyacınız olduğunu söylemek istiyorsunuz.

dizi dolduruldu ve daha fazla işlem yapılamaz mı?


Göstergenin neden yavaşladığını ve gerçekleştiği yerleri nasıl hesaplayacağımı bulmak benim için önemli.

Daha fazla soru ve cevap yok.

Maalesef öyle demedin.

Bir dizi üzerine bir şey inşa edilecekse, önceden hazırlanmış bir dizi üzerine inşa edilmelidir. Ve bu, diziyi hazırlamanın bir döngüsü ve göstergeyi bu diziye dayalı olarak oluşturmanın ikinci döngüsü. Bu genel durumda. Özel olanlar da var, ancak bunları özel olarak düşünmeniz gerekiyor - örneğin, yalnızca bir hesaplanmış çubuktan değer döndüren işlevler yapabilirsiniz:

 //+------------------------------------------------------------------+
//| BandsOnArray                                                     |
//+------------------------------------------------------------------+
double BandsOnArray( const int rates_total, const int index, const int period, const double deviation_bb, const double &array[], const int line, const bool as_series= true )
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period- 1 : index>=period- 1 );
   if (period< 1 || !check_index)
       return 0 ;
   //--- calculate StdDev
   double dev=StdDevOnArray(rates_total,index,period,array);
   //--- base line
   double mid= 0 ;              
   for ( int i= 0 ; i<period; i++)
       mid+=array[index+i];    
   mid/=period;               
   //--- upper line
   double top=mid+dev*deviation_bb;
   //--- lower line
   double btm=mid-dev*deviation_bb;
   return (line== UPPER_BAND ? top : line== LOWER_BAND ? btm : mid);
  }  
//+------------------------------------------------------------------+
//| StdDevOnArray                                                    |
//+------------------------------------------------------------------+
double StdDevOnArray( const int rates_total, const int index, const int period, const double &array[], const bool as_series= true )
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period- 1 : index>=period- 1 );
   if (period< 1 || !check_index)
       return 0 ;
//--- calculate value
   double avg= 0 ;              
   for ( int i= 0 ; i<period; i++)
       avg+=array[index+i];    
   avg/=period;               
   double sd= 0 ;
   for ( int i= 0 ; i<period; i++)
      sd+=(avg-array[index+i])*(avg-array[index+i]);
   return ( sqrt (sd/period));
  }  
//+------------------------------------------------------------------+

Ancak, StdDevOnArray ve BandsOnArray Simple-smoothing kullandıklarından, girdi olarak önceden hazırlanmış bir veri dizisini de gerektirirler, bu da Doldurma Dönemi değerine eşit bir miktarda doldurulmuş veri gerektirir.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.11.18 20:21

PlotIndexSetInteger(0,PLOT_OK,140);

Ancak hafta sayısına eşit sayıda arabellek oluşturmanız gerekir. Ve her arabellek için ok kodunu 140'tan 149'a ayarlayın - 1,2,3,4,5,6,7,8,9,10 - bir yıl için on hafta yeterli mi? Sadece 70 gün. Ya da nasıl istersin?


SetIndexArrow'u vaka üzerinden değiştirmek mümkün müdür?

Veya en azından histogramda sayıları göster?


Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.11.18 20:02

Tampon saatin değeri ile doldurulur. Ve saat sıfırsa, histogram çizilmeyecektir. Bu nedenle, saatin sıfıra eşit olup olmadığını (sıfır saati aramak için ayarladığınız ayarlarda) kontrol etmeniz ve sıfıra eşitse, tampona saatin değerini (sıfır) değil, girin. 0.1 - histogram sütununu görüntülemek için. Bu durumda, göstergenin Rakamları sıfıra ayarlandığından, veri penceresi 0,1 değil 0 değerini gösterecektir.


Şimdi anlaşıldı, teşekkürler.

 
psyman :

SetIndexArrow'u vaka üzerinden değiştirmek mümkün müdür?

Veya en azından histogramda sayıları göster?



Şimdi anlaşıldı, teşekkürler.

Tüm arabellek üzerinde hemen etki eder .

Ayrıca bulunan çubuğa bir hafta numarası simgesi koymanız gerekir ve bunlar bir yıldaki hafta sayısına göre olmalıdır. Wingdings'te sayılarla oklar açıkça eksik.

Metin nesnelerinin yardımıyla dışarı çıkabilir ve çubukları hafta numaralarıyla işaretleyebilirsiniz, ancak arabellek simgesini 32'ye - boş bir sembole ayarlayın. Çubuktaki değer olacak, ancak görüntülenmeyecek. Ardından değer, yıldaki haftanın numarası olabilir ve nesnede istediğiniz her şeyi belirtin ve nesneyi bulunan çubukta görüntüleyin.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.11.19 10:50

Tüm arabellek üzerinde hemen etki eder .

Ayrıca bulunan çubuğa bir hafta numarası simgesi koymanız gerekir ve bunlar bir yıldaki hafta sayısına göre olmalıdır. Wingdings'te sayılarla oklar açıkça eksik.

Metin nesnelerinin yardımıyla dışarı çıkabilir ve çubukları hafta numaralarıyla işaretleyebilirsiniz, ancak arabellek simgesini 32'ye - boş bir sembole ayarlayın. Çubuktaki değer olacak, ancak görüntülenmeyecek. Ardından değer, yıldaki haftanın numarası olabilir ve nesnede istediğiniz her şeyi belirtin ve nesneyi bulunan çubukta görüntüleyin.


Haftanın günü hakkında yazdım - Pzt, Sal, Çar .., bir sayı değil. Bunların grafikte sadece 5 farklı işarete ihtiyacı var.

 
psyman :

Haftanın günü hakkında yazdım - Pzt, Sal, Çar .., bir sayı değil. Bunların grafikte sadece 5 farklı işarete ihtiyacı var.

O zaman beş arabelleğe ihtiyacınız var ve her birine 140'tan 144'e kadar farklı bir ok numarası atayın.

 
Artyom Trishkin :

Bir dizi üzerine bir şey inşa edilecekse, önceden hazırlanmış bir dizi üzerine inşa edilmelidir. Ve bu, diziyi hazırlamanın bir döngüsü ve göstergeyi bu diziye dayalı olarak oluşturmanın ikinci döngüsü. Bu genel durumda. Özel olanlar da var, ancak bunları özel olarak düşünmeniz gerekiyor - örneğin, yalnızca bir hesaplanmış çubuktan değer döndüren işlevler yapabilirsiniz:

Ancak, StdDevOnArray ve BandsOnArray Simple-smoothing kullandıklarından, girdi olarak önceden hazırlanmış bir veri dizisini de gerektirirler, bu da Doldurma Dönemi değerine eşit bir miktarda doldurulmuş veri gerektirir.

Durumu açıkladığınız için teşekkür ederiz.
 

Selamlar

düğmelerle açılır pencere nasıl yapılır? İşlemin manuel olarak onaylanması/iptal edilmesi için gerekli

 
Andrey Sokolov :

Selamlar

düğmelerle açılır pencere nasıl yapılır? İşlemin manuel olarak onaylanması/iptal edilmesi için gerekli

Mesaj Kutusu()
 
Artyom Trishkin :
Mesaj Kutusu()

teşekkürler

 

Merhaba.

Test cihazında olduğu gibi maksimum düşüş yüzdesi nasıl elde edilir?

İşte kod:

 double   MaxPeak,DD, MaxDD, DD2, MaxDD2;
--------------------------------------
--------------------------------------
это вывод:

 SM( "Maximal drawdown        : " + DoubleToString (MaxDrawdown_Money(), 2 )+ " (" + DoubleToString (MaxDrawdown_Protsent(), 2 ) + " %)" );

-------------------------------------
-------------------------------------

//--------------------Рассчет % относительной просадки----------
double MaxDrawdown_Protsent()
{
if ( AccountEquity () > MaxPeak)
{
MaxPeak = AccountEquity ();
}
if ( AccountEquity () < MaxPeak)
{
DD2 = NormalizeDouble ((MaxPeak - AccountEquity ())/MaxPeak* 100 , 2 );
}
if (MaxDD2< DD2)
{
MaxDD2 = DD2;
}
return (MaxDD2);
}
//---------------------Рассчет суммы максимальной просадки--------
double MaxDrawdown_Money()
{
if ( AccountEquity () > MaxPeak)
{
MaxPeak = AccountEquity ();
}
if ( AccountEquity () < MaxPeak)
{
DD = NormalizeDouble (MaxPeak - AccountEquity (), 2 );
}
if (MaxDD< DD)
{
MaxDD = DD;
}
return (MaxDD);
}

Test cihazında olduğu gibi maksimum düşüşün toplamı bire bir gösterilir, göreceli düşüşün yüzdesi de test cihazında olduğu gibi görüntülenir.

Test cihazında olduğu gibi maksimum düşüşün yüzdesi nasıl alınır?