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

 
N çubuklarda OBJ_RECTANGLE olmadığını nasıl öğrenebilirim?
 
neverness :

MT5'te bir şey değişti mi???

MT4 veya MT5'te böyle bir şey yok.

MT5'te, mevcut dönemde, H2 üzerindeki yarılarda ayırıcının görüntülenmesiyle ilgili bir hata bile var.

 
Ghabo :
N çubuklarda OBJ_RECTANGLE olmadığını nasıl öğrenebilirim?
Deneyin belki?
   int n = Bars ( Symbol (), PERIOD_CURRENT , ObjectGetInteger ( 0 , "Rectangle" , OBJPROP_TIME , 1 ), TimeCurrent ());
   Print (n);
 
Vitaly Muzichenko :

MT4 veya MT5'te böyle bir şey yok.

MT5'te, mevcut dönemde, H2 üzerindeki yarılarda ayırıcının görüntülenmesiyle ilgili bir hata bile var.

Sonunda tüm bu "tartışmada" sorumun tek "yapıcı cevabını" gördüm.

Hatalara gelince, hem MT4 hem de MT5'teki mevcut (son) çerçevede tüm haftalık ayırıcılarda bulunurlar.

Geçen hafta her yerde ayırıcı MT4/MT5, 5 yerine 7 günlük bir ayırıcı çizer.

Ama mesele bu değil. Hatalar her zaman olmuştur ve olacaktır. Tüm bunlar, ayırıcıların çizilmesi için bir program kodu varsa düzeltilebilir.

Beni şaşırtan hatalar değil, tamamen farklı bir şey.

MT4/MT5'in tüm varlığı boyunca, öngörülen alanda ayırıcılar çizmek için bir program yazmak gerçekten kimsenin aklına geldi mi?

Sonuçta, program basittir.

Bu sorunu çözmek için, yalnızca son ayırıcının konumunu ve X ekseni boyunca zamanın "çözünürlüğünü" (yani, 1 piksele hangi zaman aralığının düştüğünü) bilmeniz gerekir.

Ve şimdiye kadar, hiç kimse ???

Beni asıl şaşırtan bu.

Yine, her şeyi kendin yapmalısın.

 
Igor Makanu :

zor değil, ama görünüşe göre MT'de göstergelerin nasıl çalıştığını ve avantajlarının ne olduğunu tam olarak anlamıyorsunuz.

Muhtemelen haklısın.

Bir matematik şakası var:

Bir matematikçiye sorulur: Su ısıtıcısında su nasıl kaynatılır?

Matematikçi cevap verir: - Boş bir su ısıtıcısı alın, içine su dökün, ocağa koyun, ocağı açın ve suyun kaynamasını bekleyin.

- İyi. Ama ya su ısıtıcısındaki su zaten dökülürse? - matematikçiye sorun.

- Su ısıtıcısından suyu boşaltın ve sorunu yukarıdaki şekilde çözün. - matematikçiye cevap verir.

Böyle.

Bu şaka seninle ilgili.

 
neverness :

Bu şaka seninle ilgili.

hmm, gülsem mi bilemem, yoksa .... tüm kaprislerini yerine getirecek bir ticaret terminalinin nerede olduğunu biliyorsan kendi başına hiçbir şey yapmayacağını söylerler, sorun nedir? MT4/5 bana %100 uyuyor, içinde her şeyi yapabilirim, çizelgede D1 noktalarını çizen bir gösterge bulundurur, programlamaya ilgi duyarsınız, görevlerinize uyacak şekilde değiştirin ...

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot line1
#property indicator_label1    "Period"
#property indicator_type1    DRAW_HISTOGRAM
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
#property indicator_label2    "Period"
#property indicator_type2    DRAW_HISTOGRAM
#property indicator_color2    clrRed
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- input parameters
input int       Days= 3 ;
//--- indicator buffers
double          Pmax[],Pmin[];
bool run= true ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Pmax);
   SetIndexBuffer ( 1 ,Pmin);
   run= true ;
   switch ( _Period )
     {
       case PERIOD_M1 :   SetIndexShift ( 0 , 1440 *Days); SetIndexShift ( 1 , 1440 *Days);   break ;
       case PERIOD_M5 :   SetIndexShift ( 0 , 288 *Days); SetIndexShift ( 1 , 288 *Days);     break ;
       case PERIOD_M15 :   SetIndexShift ( 0 , 96 *Days);   SetIndexShift ( 1 , 96 *Days);     break ;
       case PERIOD_M30 :   SetIndexShift ( 0 , 48 *Days);   SetIndexShift ( 1 , 48 *Days);     break ;
       case PERIOD_H1 :   SetIndexShift ( 0 , 24 *Days);   SetIndexShift ( 1 , 24 *Days);     break ;
       case PERIOD_H4 :   SetIndexShift ( 0 , 6 *Days);   SetIndexShift ( 1 , 6 *Days);       break ;
       default : run= false ; SetIndexShift ( 0 , 0 ); SetIndexShift ( 1 , 0 ); ArrayInitialize (Pmax, EMPTY_VALUE ); ArrayInitialize (Pmin, EMPTY_VALUE ); break ;
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if (prev_calculated== 0 )
     {
      run= true ;
       ArrayInitialize (Pmax, EMPTY_VALUE );
       ArrayInitialize (Pmin, EMPTY_VALUE );
     }
   if (run)
     {
       int i= 0 ,lastperiod= TimeDay (time[ 0 ]);
       double maxvalue;
       if (! ChartGetDouble ( ChartID (), CHART_PRICE_MAX , 0 ,maxvalue)) maxvalue= 1000.0 ;
      maxvalue*= 10.0 ;
       while (i<rates_total)
        {
         if ( TimeDay (time[i])!=lastperiod)
           {
            lastperiod= TimeDay (time[i]);
            Pmax[i- 1 ]=maxvalue;
            Pmin[i- 1 ]= 0.0 ;
           }
         else
           {
            Pmax[i]= EMPTY_VALUE ;
            Pmin[i]= EMPTY_VALUE ;
           }
         i++;
        }
      run= false ;
     }
//---
   return (rates_total);
  }
//+------------------------------------------------------------------+ 
Grafik EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd., MetaTrader 4, Demo


Not: gösterge oldukça basit, ancak nedense TF> D1'e geçerken bir hata görünüyor, TF'yi değiştirirken arabelleği başlatıyorum, neden anlamıyorum, ilk kez bununla karşılaştım

 
neverness :

Sonunda tüm bu "tartışmada" sorumun tek "yapıcı cevabını" gördüm.

Hatalara gelince, hem MT4 hem de MT5'teki mevcut (son) çerçevede tüm haftalık ayırıcılarda bulunurlar.

Geçen hafta her yerde ayırıcı MT4/MT5, 5 yerine 7 günlük bir ayırıcı çizer.

Ama mesele bu değil. Hatalar her zaman olmuştur ve olacaktır. Tüm bunlar, ayırıcıların çizilmesi için bir program kodu varsa düzeltilebilir.

Beni şaşırtan hatalar değil, tamamen farklı bir şey.

MT4/MT5'in tüm varlığı boyunca, öngörülen alanda ayırıcılar çizmek için bir program yazmak gerçekten kimsenin aklına geldi mi?

Sonuçta, program basittir.

Bu sorunu çözmek için, yalnızca son ayırıcının konumunu ve X ekseni boyunca zamanın "çözünürlüğünü" (yani, 1 piksele hangi zaman aralığının düştüğünü) bilmeniz gerekir.

Ve şimdiye kadar, hiç kimse ???

Beni asıl şaşırtan bu.

Yine, her şeyi kendin yapmalısın.

Sana cevap verdim - bir kereden fazla yaptığım şey. (hem piyasada hem de tek bir göstergede değil)

ve zaten kodu yazdığınızı söylediniz, tekrar yazar mısınız?)

 
Igor Makanu :

hmm, gülsem mi bilemem, yoksa .... tüm kaprislerini yerine getirecek bir ticaret terminalinin nerede olduğunu biliyorsan kendi başına hiçbir şey yapmayacağını söylerler, sorun nedir? MT4/5 bana %100 uyuyor, içinde her şeyi yapabilirim, çizelgede D1 noktalarını çizen bir gösterge bulundurur, programlamaya ilgi duyarsınız, görevlerinize uyacak şekilde değiştirin ...


Not: gösterge oldukça basit, ancak nedense TF> D1'e geçerken bir hata görünüyor, TF'yi değiştirirken arabelleği başlatıyorum, neden anlamıyorum, ilk kez bununla karşılaştım

Tabii ki teşekkür ederim.

Beklediğim gibi, kısmi günlerde nokta ayırıcılarınız standart olanlarla eşleşmiyor.

Ancak bu çok önemli değil, çünkü bence standart sınırlayıcıları yeniden çizmeye çalışmamalı, tahmin alanı sınırlayıcılarını geçmiş sınırlayıcılara yerleştirmeli.

O zaman geçmişin kısmi günlerinin ayırıcılarının konumu, tahminin ayırıcılarını etkilemeyecektir.

Ayırıcı göstergeniz ile standart ayırıcılar arasındaki bir diğer önemli fark, standart ayırıcıların grafiğin kendisindeki bir olayda güncellenmesi, göstergenizin ise her OnCalculate() olayında güncellenmesidir. Fark edeceğini düşündüm - ama aslında neredeyse hissedilmiyor.

Tabii ki, bu gösterge yeniden yapılmalı, ama yine de teşekkürler. Görmek ilginçti.

 
Ghabo :

Bu, belirtilen ada sahip nesnenin çubuğunun dizinini alır. Birden fazla nesne var, adları "QUADRO"+Zaman[i+1] On çubukta böyle bir nesnenin olmadığını nasıl anlarız?

Tampon ile açıktır, eğer değer boşsa, grafikte hiçbir şey görüntülenmez, peki ya nesne?

 if ( ObjectFind ( 0 , "QUADRO" + Time [ 10 ])< 0 )
        {
         //объекта нет на 10 баре
        }
 
Vitaly Muzichenko :
Deneyin belki?
   int n = Bars ( Symbol (), PERIOD_CURRENT , ObjectGetInteger ( 0 , "Rectangle" , OBJPROP_TIME , 1 ), TimeCurrent ());

Teşekkür ederim. Bu, belirtilen ada sahip nesnenin çubuk dizinini (120983) alır. Birden fazla nesne var, adları "QUADRO"+Zaman[i+1] On çubukta böyle bir nesnenin olmadığını nasıl anlarız?

Tampon ile açıktır, eğer değer boşsa, grafikte hiçbir şey görüntülenmez, peki ya nesne?