Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1345

 
Vitaly Muzichenko # :

Yine, bir sonraki kopyayı yüklerken öneki değiştirmeniz gerekiyor mu?

Ve kelimelerdeki amaç nedir?

düğmeler pencerenizde oluşturulamaz ve kontrol edilemez.


o ne olacak?

 
Igor Makanu # :

Ve kelimelerdeki amaç nedir?

düğmeler pencerenizde oluşturulamaz ve kontrol edilemez.


o ne olacak?

Bilmiyorum ama bunu şu şekilde yapmanız gerekiyor: Alt pencerenizde oluşturun ve tıkladığınızda bu alt pencerenin numarasını alın. Hiçbir şey çizmenize gerek yok, sadece tıklandığında Uyarı'da alt pencerenin numarasıyla ilgili bilgileri görüntüleyen bir düğme var.

 
Vitaly Muzichenko # :

Bilmiyorum ama bunu şu şekilde yapmanız gerekiyor: Alt pencerenizde oluşturun ve tıkladığınızda bu alt pencerenin numarasını alın. Hiçbir şey çizmenize gerek yok, sadece tıklandığında Uyarı'da alt pencerenin numarasıyla ilgili bilgileri görüntüleyen bir düğme var.

ilk kaynağımda test edildi:

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2
#include <Controls\Button.mqh>
CButton button;

//--- indicator buffers
double          Label1Buffer[];
input int MASlow = 21 ; // Период медленной МА
input int MAFast = 8 ;   // Период быстрой МА
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
   string short_name = MQLInfoString ( MQL_PROGRAM_NAME ) + "=Set (" + ( string )MASlow + "/" + ( string )MAFast + ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME , short_name);

   // IndicatorSetString(INDICATOR_SHORTNAME, "IndicatorSetString() Demo");
   SetIndexBuffer ( 0 , Label1Buffer, INDICATOR_DATA );
   srand ( GetTickCount ());
   long c_id = ChartID ();
   int c_wf = ChartWindowFind ();
   Print (c_id, " / " , c_wf);
   button.Create(c_id, "button" + ( string ) rand (), c_wf, 10 , 10 , 100 , 100 );
   button.Text( "Button" );
//---
   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[])
{
   for ( int i = prev_calculated == 0 ? 0 : prev_calculated - 1 ; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return (rates_total);
}
//+------------------------------------------------------------------+


ne yazık ki, her şey yazdığınız gibi - bu göstergenin birkaç kopyasını varsayılan parametrelerle çalıştırırsanız, düğme yalnızca alt penceredeki ilk göstergede olacaktır

ve başlangıçta parametreleri değiştirirseniz, her şey yolundadır.


genel olarak anlaşılmaz durum

 
Igor Makanu # :

ilk kaynağımda test edildi:

ne yazık ki, her şey yazdığınız gibi - bu göstergenin birkaç kopyasını varsayılan parametrelerle çalıştırırsanız, düğme yalnızca alt penceredeki ilk göstergede olacaktır

ve başlangıçta parametreleri değiştirirseniz, her şey yolundadır.

genel olarak anlaşılmaz durum

Soru şu: Ayarlara girmeden parametreler otomatik olarak nasıl değiştirilir?

Şimdiye kadar hiçbir şey çalışmıyor ...

---

PS İdeal, ama ne yazık ki

 input long MASlow = TimeLocal (); //
 
Vitaly Muzichenko # :

Şimdiye kadar hiçbir şey çalışmıyor ...

ve işe yaramayacak:

ilave:

 int OnInit ()
{
   Print ( __FUNCTION__ );

Bir gösterge çiziyorum - günlükte OnInit alıyorum, ancak bir sonraki gösterge zaten sessiz, yani. gerçekten, göstergenin yalnızca bir kopyası çalışıyor ve göstergelerin geri kalanı yalnızca grafik bir kabuk

 
Igor Makanu # :

ve işe yaramayacak:

ilave:

Bir gösterge çiziyorum - günlükte OnInit alıyorum, ancak bir sonraki gösterge zaten sessiz, yani. gerçekten, göstergenin yalnızca bir kopyası çalışıyor ve göstergelerin geri kalanı yalnızca grafik bir kabuk

Bu böyle. MT5 mimarisi bir eğri gibi görünüyor. MT4'te her şey mükemmel çalışıyor.

Bunu MT5'te yapmaya karar verirseniz, aynı giriş parametreleriyle göstergenin bir kopyasını başlatmayı yasaklarsınız, aksi takdirde öyle görünür, ancak aslında değildir.

 
Vitaly Muzichenko # :

Bu böyle. MT5 mimarisi bir eğri gibi görünüyor. MT4'te her şey mükemmel çalışıyor.

Bunu MT5'te yapmaya karar verirseniz, aynı giriş parametreleriyle göstergenin bir kopyasını başlatmayı yasaklarsınız, aksi takdirde öyle görünür, ancak aslında değildir.

Göstergenin hesaplanan kısmı, grafik kısmı ile aynı değildir. Bu nedenle, hepsinin hesabı aynıdır. Birkaç grafik.

Tüm alt pencereleri tek bir göstergede aramak ve alt pencere numarasına sahip etiketleri bunlara koymak mümkün müdür? Aynı zamanda, zamanlayıcıdaki grafik alt pencerelerinin sayısını yakalayın: artırıldı - yeni alt pencereye bir etiket ekleyin. Ama aynı zamanda içine ne tür bir gösterge yerleştirildiğine de bakın - farklıysa, eklemeyin...

Sadece denenmemiş bir fikir.

not. "Eğrilik" konusunda katılmıyorum. 20 özdeş gösterge için hesaplanmış bir parça, 20 özdeş gösterge için hesaplanmış 20 parçadan daha iyidir.

 
Artyom Trishkin # :

Göstergenin hesaplanan kısmı, grafik kısmı ile aynı değildir. Bu nedenle, hepsinin hesabı aynıdır. Birkaç grafik.

Tüm alt pencereleri tek bir göstergede aramak ve alt pencere numarasına sahip etiketleri bunlara koymak mümkün müdür? Aynı zamanda, zamanlayıcıdaki grafik alt pencerelerinin sayısını yakalayın: artırıldı - yeni alt pencereye bir etiket ekleyin. Ama aynı zamanda içine ne tür bir gösterge yerleştirildiğine de bakın - farklıysa, eklemeyin...

Sadece denenmemiş bir fikir.

not. "Eğrilik" konusunda katılmıyorum. 20 özdeş gösterge için hesaplanmış bir parça, 20 özdeş gösterge için hesaplanmış 20 parçadan daha iyidir.

Yaptım, düğmeye tepki yok - kopyanın OnChartEvent'i çalışmıyor ve alt pencerenin numarasını anlamıyor.

Genel olarak, çalışmayan şey budur ve bununla birlikte kodun geri kalanı

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

Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5

İgor Makanu , 2021.09.12 21:53

ve işe yaramayacak:

ilave:

 int OnInit ()
{
   Print ( __FUNCTION__ );

Bir gösterge çiziyorum - günlükte OnInit alıyorum, ancak bir sonraki gösterge zaten sessiz, yani. gerçekten, göstergenin yalnızca bir kopyası çalışıyor ve göstergelerin geri kalanı yalnızca grafik bir kabuk


 
Vitaly Muzichenko # :

Yaptım, düğmeye tepki yok - kopyanın OnChartEvent'i çalışmıyor ve alt pencerenin numarasını anlamıyor.

Genel olarak, çalışmayan şey budur ve bununla birlikte kodun geri kalanı


ANCAK!!! "Debug.tpl" adı altında bu göstergelerin 2-3'ünü içeren bir şablon oluşturur ve göstergede hata ayıklamaya başlarsanız, OnInit() beklendiği gibi çalışır.

Temel olarak, aşağıdaki deneyi yaptım:

Gösterge oluşturulana kadar OnInit()'in yürütüleceği ve penceredeki göstergelerin sayısına bağlı olarak göstergenin kısa adının yapılacağı beklentisiyle #özellik maksimuma OnInit()'e taşındı.

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
//#property indicator_label1  "Label1"
//#property indicator_type1   DRAW_LINE
//#property indicator_color1  clrRed
//#property indicator_style1  STYLE_SOLID
//#property indicator_width1  2
//--- indicator buffers
double          Label1Buffer[];
input int MASlow = 21 ; // Период медленной МА
input int MAFast = 8 ;   // Период быстрой МА
//input string shortName = "1";  // Префикс…
long chart_id = ChartID ();
string short_name = "" ;
/********************************************************************\
|           Custom indicator initialization function                 |
\********************************************************************/
int OnInit ()
 {
//--- indicator buffers mapping
   long windows_total = ChartGetInteger (chart_id, CHART_WINDOWS_TOTAL );
  short_name = ( string )windows_total;
   Print (short_name);
   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , clrRed );
   PlotIndexSetInteger ( 0 , PLOT_LINE_STYLE , STYLE_SOLID );
   PlotIndexSetInteger ( 0 , PLOT_LINE_WIDTH , 2 );
   PlotIndexSetString ( 0 , PLOT_LABEL , "Label1" );
   IndicatorSetString ( INDICATOR_SHORTNAME , short_name);
   SetIndexBuffer ( 0 , Label1Buffer, INDICATOR_DATA );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

Ama yardımcı olmadı:

İlk kopyayı çalıştırma

Gösterge Adı 2………

İkinci kopyayı çalıştırıyorum - gösterge adı her iki gösterge için hala 2

Hata ayıklamaya başlıyorum ve ne görüyorum !!! Henüz yüklenmemiş göstergesi yazdırılıyor… ikinci ve üçüncü satırları okuyun…

nasıl olabilir?


Ayrıca, OnInit () girişinde hata ayıklama durdurulur, windows_total değişkeni çöp içerir, short_name hala boş bir dizedir ...

Merhaba……… ama bunların hepsi zaten basıldı… nasılmış???

Ve short_name zaten değişti

Sonuç olarak, gösterge hata ayıklama modunda tamamen yüklendikten sonra, göstergelerin adları bunlardır.

Belki de geliştiricilerin dikkatini bu tür hatalara çekmemiz gerekiyor ...

 
Merhaba arkadaşlar, belki konu dışıyım, ancak "Yeni başlayanlardan gelen sorular MQL5 MT5 MetaTrader 5" başlıklı bölüme bakın. Bu nedenle, soru şudur: Demo danışmanını Market'ten test etmek için indirirdim, şimdi sadece MT 5 yapmadım, Demo.MT4'ü sorunsuz indiremiyorum, MT 5 hayır sebebi nedir?