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

 

Bazı nazik insanlar bana aşağıdaki şeyi nasıl yazacağımı söylüyor.

Her tik için iVolume'u hesaplayan bir eğitim göstergesi yaptım: iVolume seğirenler için pozitif, iVolume seğirenler için negatif. Bir eğri elde etmek için, tüm iVolume'u (pozitif ve negatif) çubuktan çubuğa değişen bir toplamda topluyorum. Bir eğri çıkıyor. Ancak 2 sorunla karşılaştım:

1) çizginin güçlü bir şekilde kırıldığı ortaya çıkıyor;

2) Danışmanı test etmek imkansızdır, çünkü ortaya çıkan iVolume grafiği yalnızca gerçek hayatı yaşar.

Soru:

1) arabelleğe yazdığım ortalama verilere dayanarak bir grafik oluşturmanıza izin veren kodu nasıl açıklarsınız?

2) Bu gösterge (gerçek modda elde edilen) üzerindeki verileri belirli bir dosyaya yazmak mümkün mü, böylece daha sonra, bu dosyaya atıfta bulunarak, önceden toplanmış onay işaretini uygulayarak geçmiş veriler üzerinde bir gösterge oluşturmak mümkün olacak mı? onlara hacim? Eğer öyleyse, bunu programlı olarak nasıl tanımlayabilirim? Yoksa mevcut iVolume bilgilerinin dosyaya yazılmasını gerektirmeyen başka bir çözüm var mı?

 #property version    "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1    "Вверх"
#property indicator_type1    DRAW_LINE
#property indicator_color1   Salmon
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2

#property indicator_label2    "Вниз"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrDarkTurquoise
#property indicator_style2    STYLE_SOLID
#property indicator_width2    2

datetime Время= 0 ;   // Время прошлого бара
double Bid1;
double    Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;   // отрицательные и положительные iVolume нарастающим итогом

void OnInit ()
{
   IndicatorDigits ( 0 );
   SetIndexBuffer ( 0 ,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1= Bid ;
   V5 = 0 ;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
      
   if ( Bid >= Bid1) 
{
   if ( Bid > Bid1) 
{   
   V1 = iVolume ( NULL , 0 , 0 ); // если повышающий цену тик
   V2 = V1 + V2;
}
   else
{
   V1 = 0 ;                 // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume ( NULL , 0 , 0 ); // если понижающий цену тик 
   V4 = V3 + V4;
}
  
   V5 = V2-V4;
   Bid1= Bid ;
   Buf_1[ 0 ]= V5; // в буфер сгружаем 
  
   
   return (rates_total);
}
 

Belki kodun sonuna ekleyin:

double macurrent= iMAOnArray (Buf_1[0],0,5,0, MODE_LWMA ,0);

Hayır! Derleyici dizi olmadığını söyleyen bir hata yazar.


 
merhaba, bana strateji ekmek kızartma makinesinde bu ünlem işaretlerinin ne anlama geldiğini söyle?
 

Yardım edebilecek olan var mı? Benim için çıkmaz görevim burada belirtilmiştir: https://www.mql5.com/en/forum/160683/page378#comment_6053255

 
YarTrade : (gerçek modda elde edilen) bu göstergeyle ilgili verileri belirli bir dosyaya yazmak mümkün mü, böylece daha sonra, bu dosyaya atıfta bulunarak, önceden toplanan verileri uygulayarak geçmiş verilere dayalı bir gösterge oluşturmak mümkün olacak mı? onlara kene hacimleri? Eğer öyleyse, programlı olarak nasıl tanımlanabilir? Yoksa mevcut iVolume bilgilerinin dosyaya yazılmasını gerektirmeyen başka bir çözüm var mı?

Bir dosyadaki verilere dayalı gösterge - aramaya bu satıra girdi ve bulundu

 

Bir tür kabus, neden böyle yayıldığını anlamıyorum:
Kod bölümü:


line[0]=MathFloor(Düşük[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(satır[0],D));
Print("Kod",DoubleToStr( MathFloor (Düşük[1]*MathPow(10,D-1)),D));

Çıktılar:

EURUSD,M15: Var 0.00000
EURUSD,M15: Kod 11754.00000


Atamadan sonra değere ne olur?

 
LuckySith : Kod parçacığı :

line[0]=MathFloor(Düşük[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(satır[0],D));
Print("Kod",DoubleToStr(MathFloor(Düşük[1]*MathPow(10,D-1)),D));

Çıktılar:

EURUSD,M15: Var 0.00000
EURUSD,M15: Kod 11754.00000

Atamadan sonra değere ne olur?

Atama sonrası değişkenlerin değerlerini ve D değişkeninin değerini yazdırın. Hesap makinesinde hesaplayalım...

 

Merhaba. Arkadaşlar lütfen biraz yardım edin. Birisi , gösterge ayarlarında satırın görüntülenmesi için ses dosyasının adını belirtebileceğiniz bir satır ayarlayabilir mi?

Dosyalar:
Awesome-33.ex4  16 kb
 
STARIJ :

Atama sonrası değişkenlerin değerlerini ve D değişkeninin değerini yazdırın. Hesap makinesinde hesaplayalım...


Bu yüzden, atanan tüm değerlerden sonra ben de bir kerede çıkarım. Yani temelde kod şöyle:


a=b;

yazdır (a);

Yazdır(b);

Ama a sıfır çıktı ve b doğru çıktı

 
LuckySith :

Yani tüm atanan değerlerden sonra ben de aynı anda çıkarım. Yani temelde kod şöyle:


a=b;

yazdır(a);

Yazdır(b);

Ama a sıfır çıktı ve b doğru çıktı


Sıfır görmüyorum, bir yerde hata yaptın

   int D= 5 ;
   double a= MathFloor ( Low [ 1 ]* MathPow ( 10 ,D- 1 )); 
   Print ( "Var " , DoubleToStr (a,D)); 
   Print ( "Code " , DoubleToStr ( MathFloor ( Low [ 1 ]* MathPow ( 10 ,D- 1 )),D));