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

 
Alekseu Fedotov :

her şey basit

 void OnStart ()
  {
// Формируем время  
   Alert ( "14.30  позавчерашнего дня = " , StrToTime ( TimeToStr ( iTime ( NULL , 1440 , 2 ), TIME_DATE )+ " " + "14:30" ));

//14.30  позавчерашнего дня
   datetime time= StrToTime ( TimeToStr ( iTime ( NULL , 1440 , 2 ), TIME_DATE )+ " " + "14:30" );

//Бар 14.30  позавчерашнего дня
   int      shift= iBarShift ( NULL , 0 ,time);

//Машка 14.30  позавчерашнего дня  
   double ma= iMA ( NULL , 0 , 13 , 0 , MODE_SMMA , PRICE_MEDIAN ,shift);

   Alert ( "Машка 14.30  позавчерашнего дня = " , DoubleToString (ma, Digits ));

Bunun gibi bir şey


Alekseu Fedotov, Maalesef durum böyle değil. Çubuk numarasını TF ile alırsınız, ardından aynı TF'yi kullanırsınız, ancak başka birine ihtiyacınız vardır (sorun bu). TF ile çubuğun numarasını (örneğin, 30) almanız ve ardından TF ile MA'yı (1440), bu çubuktan TF 30 ile başlayarak almanız gerekir. Yani. Sanki şimdi (saat 14.30'da) TF 1440 ile MA almak istemişsiniz gibi. Şimdi bu bir problem değil, ama birkaç gün geriye almak, bu bir problem.

 
STARIJ :
Evet. M1 kullanılmalıdır ve M5, ... - doğrulama için. Belki enterpolasyon kullanın? MT5'in kene geçmişi var. Bana kârın nerede olduğunu söylersen - tekrar bakarım

Bu analizi, sanki şimdi oluyormuş gibi, geriye dönüp bakmam ve sonucuna bakmam gerekiyor. Onlar. sanki dün 14.30'da TF 1d ile MA analizini yaptım ve bugün dünün MA'daki fiyat hareketinin sonuçlarını aldım. Bugün TF 1440'ı kullanırsam ve dünün bakış açısından bakarsam, o zaman bu analizlerin verileri farklı olacaktır ve bu nedenle sonuçların farklı olması beklenmelidir.

 
Roman Sharanov :

Yardım edin, önceki mumun tepesinden 200p yukarısına bir dikdörtgen çizmem gerekiyor ve ileride bir bar zamanı.

Kodu yazdım ama dikdörtgenin sol noktası neden hareket etmiyor anlamıyorum? Ve sağdaki yükseklerin arkasına kayar

Beklenmeyen işlev davranışı... Önceden, var olanın adıyla bir nesne oluşturmaya çalışırken bir hata döndürüldü ve nesne mevcut parametreleri yenileriyle değiştirmedi. Ve şimdi, görünüşe göre, değişiklikler yapıldı ve her yüksek[0] değiştiğinde veya yeni bir çubuk göründüğünde, yüksek[1] zaten farklı bir değere sahip ve yeni bir dikdörtgen oluşturulduğunda parametrelerden biri değişiyor.

Çıkış yolu çok basit: Oluşturmadan önce nesnenin varlığını kontrol edin.

 
STARIJ :

hareketli



Hayır, bu kodla hiçbir şey çizemiyorum

 
Roman Sharanov : Hayır, bu kodla hiçbir şey çizemem

tam dosyama bakın

Dosyalar:
PR.mq4  3 kb
 
STARIJ :

dosyamı gör


Ve MQL4'e sahip olduğunuzu anlıyorum :)
Zaman dizilerinde diziler yaptım ve işe yaradı, hala neden benim için işe yaramadığını anlamıyorum

 
Boss11 : Bu analizi, şimdi oluyormuş gibi, geriye dönüp bakmam ve sonucuna bakmam gerekiyor. Onlar. sanki dün 14.30'da TF 1d ile MA analizini yaptım ve bugün dünün MA'daki fiyat hareketinin sonuçlarını aldım. Bugün TF 1440'ı kullanırsam ve dünün bakış açısından bakarsam, o zaman bu analizlerin verileri farklı olacaktır ve bu nedenle sonuçların farklı olması beklenmelidir.

TF 1440 ile her şey açıktır. ve M1 ile nasıl büyük bir hata yazdınız?

 
STARIJ :

TF 1440 ile her şey açıktır. ve M1 ile nasıl büyük bir hata yazdınız?


M1 ile denemedim ama hatanın daha az olacağını düşünüyorum. M1->M5, M30->1d'den daha doğru olacaktır

 

Lütfen belirli bir soruya yanıt verin. Bollinger'ı yeniden işlemek.

Birkaç çizgi değişti, çizgi çizmiyor. Sorun ne, logaritmalarda?

Oynaklık formülü https://research-journal.org/social/analiz-razlichnyx-metodov-ocenki-istoricheskoj-volatilnosti-dlya-opcionnoj-torgovli/

 int start()
  {
   int     i,k,counted_bars= IndicatorCounted ();
   double deviation;
   double sum,oldval,newres,oldpos;
//----
   if ( Bars <=BandsPeriod) return ( 0 );
//---- initial zero
   if (counted_bars< 1 )
       for (i= 1 ;i<=BandsPeriod;i++)
        {
         MovingBuffer[ Bars -i]= EMPTY_VALUE ;
         UpperBuffer[ Bars -i]= EMPTY_VALUE ;
         LowerBuffer[ Bars -i]= EMPTY_VALUE ;
        }
//----
   int limit= Bars -counted_bars;
   if (counted_bars> 0 ) limit++;
   for (i= 0 ; i<limit; i++)
      MovingBuffer[i]= iMA ( NULL , 0 ,BandsPeriod,BandsShift, MODE_EMA , PRICE_WEIGHTED ,i);
//----
   i= Bars -BandsPeriod+ 1 ;
   if (counted_bars>BandsPeriod- 1 ) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
      sum= 0.0 ;
      k=i+BandsPeriod- 1 ;
      oldval=MovingBuffer[i];
      oldpos=i;
       while (k>=i)
        {
         //newres=Close[k]-oldval;
         //sum+=newres*newres;
          sum+= log ( fabs ( High [k]/ Close [k]))* log ( fabs ( High [k]/ Open [k]))+ log ( fabs ( Low [k]/ Close [k]))* log ( fabs ( Low [k]/ Open [k]));
         k--;
        }
      deviation=BandsDeviations* MathSqrt ( fabs (sum/BandsPeriod));
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
Dosyalar:
 

Lütfen bana grafik nesnesini nasıl kaldıracağımı söyleyin. Değişkenin değerlerinden isimleri oluşturulmuş dikey çizgiler vardır.

stringname=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,zaman,cena); Test1 adında yalnızca dikey çizgiler nasıl kaldırılır?