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

 
Artyom Trishkin :

Burada en iyi tavsiye, yardımı daha sık okumaktır .

Grafik için elde edilebilecek/ayarlanabilecek belirli özellikler vardır.

Özellikle - farenin sol tuşu ile grafiği kaydırmak .

Bu yeri belgelerde okudum.

Grafik için CHART_EVENT_MOUSE_MOVE = 1 ayarlandığında, grafik fare hareketi mesajlarını alır ve CHART_EVENT_MOUSE_MOVE = 0 ise almaz. Bu temiz.
Ama bu benim sorum için geçerli değil... CHART_EVENT_MOUSE_MOVE için hangi değer ayarlanırsa ayarlansın AUTOSCROLL kapalıyken her zaman seçeneğim var
Penceredeki grafiği geçmişe (zamana göre) "kaydırın", sadece farenin sol düğmesine basarak ve düğmeyi bırakmadan fareyi sağa hareket ettirin.
Bu durumda, penceredeki grafik DAİMA kaydırılır.
Ancak, Ctrl + F'ye basarsam (Crosshair'i çağırır) - o zaman farenin sol düğmesine bastığımda, basılı tutun ve grafikte hareket edin, bir ışın göreceğim
yanında bir araç ipucu şeklinde farenin hareketi ve fare işaretçisinin şu anda bulunduğu seviyenin fiyatı hakkında veri olacağı bir artı işareti ile biter.
Ve en önemlisi - PROGRAMIN KENDİ ŞU ANDA PENCEREDE HAREKET ETMEYECEKTİR.

Bu, Crosshair'ı açmadan bu efekti nasıl elde edeceğimiz ile ilgili, soruyorum...

PS Ekrandan bir video çekebilir ve nasıl göründüğünü gösterebilirim.

 
Maksims Ignatovs :

Bu yeri belgelerde okudum.

Grafik için CHART_EVENT_MOUSE_MOVE = 1 ayarlandığında, grafik fare hareketi mesajlarını alır ve CHART_EVENT_MOUSE_MOVE = 0 ise almaz. Bu temiz.
Ama bu benim sorum için geçerli değil... CHART_EVENT_MOUSE_MOVE için hangi değer ayarlanırsa ayarlansın AUTOSCROLL kapalıyken her zaman seçeneğim var
Penceredeki grafiği geçmişe (zamana göre) "kaydırın", sadece farenin sol düğmesine basarak ve düğmeyi bırakmadan fareyi sağa hareket ettirin.
Bu durumda, penceredeki grafik DAİMA kaydırılır.
Ancak, Ctrl + F'ye basarsam (Crosshair'i çağırır) - o zaman farenin sol düğmesine bastığımda, basılı tutun ve grafikte hareket edin, bir ışın göreceğim
yanında bir araç ipucu şeklinde farenin hareketi ve fare işaretçisinin şu anda bulunduğu seviyenin fiyatı hakkında veri olacağı bir artı işareti ile biter.
Ve en önemlisi - PROGRAMIN KENDİ ŞU ANDA PENCEREDE HAREKET ETMEYECEKTİR.

Bu, Crosshair'i açmadan bu efekti nasıl elde edeceğimiz ile ilgili, soruyorum...

PS Ekrandan bir video çekebilir ve nasıl göründüğünü gösterebilirim.

cevap vermedim mi
Fare ile grafik üzerinde bir şey hareket ettirirseniz, o anda grafiği kaydırmayı yasaklayın. Fare düğmesi bırakıldığında, grafik kaydırmaya izin verildi.

 

İndeksleme kullanarak bir yapının alanlarına erişmek mümkün müdür, yani. tek boyutlu diziye ne dersiniz? Bir dizi yapı alanı oluşturmak mümkün müdür?

Yani fikir şu. bir yapı var

 struct MyStruct { int qw; double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{ int qw[ 5 ]; double qe[ 5 ];}; MyStruct1 qr1;

Ayrıca, herhangi bir yapıyı bir işleve geçirirken, her öğeye ayrı ayrı adlarıyla atıfta bulunmanız gerekir.

qr.qw qr.qe, vb. Bu işi bir döngüye sokmak ve tek bir iş parçacığında işlemek doğaldır. Bu öğeleri böyle depolayacak bir dizi alan oluşturmak istiyorum

Massiv[ 2 ];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

Sonuç olarak, indekslemeyi kullanarak bu öğelere erişme yeteneğine sahibiz ve elbette ikinci yapı zaten bir döngüye yerleştirilebilir ve qw qe zaten döngü aracılığıyla işlenebilir.

Bunu yapmak mümkün mü, internette uzun zaman önce bu tür kayıtları gördüm ama siteyi kaybettiğim için bir şeyi yanlış anladım mı? typedef enum union makroları bu konuda yardımcı olabilir mi?

 
Artyom Trishkin :
cevap vermedim mi
Fare ile grafik üzerinde bir şey hareket ettirirseniz, o anda grafiği kaydırmayı yasaklayın. Fare düğmesi bırakılır bırakılmaz, grafik kaydırmaya izin verildi.

Grafikte hiçbir şeyi hareket ettirmiyorum. CHART_EVENT_MOUSE_MOVE = 0 olarak ayarlarsam bu yardımcı olmaz - grafik yine de taşınabilir.
Grafik işleme nasıl devre dışı
bırakılır ChartNavigate bilmiyorum. Ve belgelerde bulamadım.
Aynı zamanda, "artı işareti" bir şekilde bu konuyla başa çıkıyor. Bu yüzden soruyorum - nasıl?
Bana cevap veriyorsun - CHART_EVENT_MOUSE_MOVE için istediğiniz değeri ayarlayın. Denedim - yardımcı olmuyor.
Herhangi bir
CHART_EVENT_MOUSE_MOVE değeri için, grafik üzerinde farenin sol tuşunu basılı tutup fareyi hareket ettirerek grafiği fare ile zamanda ileri geri hareket ettirmek hala mümkündür.
Aynı zamanda, fareyi yatay olarak hareket ettirme yönüne bağlı olarak, fareyi sağa hareket ettirirsem grafik pencerede kayar - grafik sola kayar (tarihte geçmişe),
ve fareyi sola hareket ettirirsem, grafik mevcut çubuk görünene kadar geleceğe hareket eder. Bundan sonra, fare ile pencerede sola hareket ettirmeye çalışmak hiçbir şey vermeyecektir. Ama bu anlaşılabilir.
Ancak
, penceredeki grafiği geçmişte belirli bir tarihe yeniden düzenlemek için ChartNavigate kullanırsam - ne yapmalıyım ki hiçbir koşulda (grafik üzerinde tıklamalar ve fare hareketleri ile herhangi bir manipülasyon yok) grafiğin gördüğüm kısmı kaydırmak değil mi? Bunun için özel olarak ne yapılması gerekiyor?


 
Maksims Ignatovs :

Grafikte hiçbir şeyi hareket ettirmiyorum. CHART_EVENT_MOUSE_MOVE = 0 olarak ayarlarsam bu yardımcı olmaz - grafik yine de taşınabilir.
Grafik işleme nasıl devre dışı
bırakılır ChartNavigate bilmiyorum. Ve belgelerde bulamadım.


 ChartSetInteger ( 0 , CHART_MOUSE_SCROLL , 0 ); // Выключим прокрутку графика
 
İyi günler, lütfen göstergeyi düzeltin, düğmenin orijinal konumunda görünmesi koşuluyla sunucu saatini düğme aracılığıyla görüntülemeniz gerekir.
İşte benim için işe yaramayan şey:
 #property copyright "Copyright 2014, ForexDE"
#property link        ""
#property version    "1.00"
#property strict
#property indicator_chart_window

string s1= "" ;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{

   PutButton( "B" , 50 , 50 , "KNOPKA" );
   
   if (DayOfWeek()== 1 )
      s1= "Понедельник  /  " ;
   if (DayOfWeek()== 2 )
      s1= "Вторник  /  " ;
   if (DayOfWeek()== 3 )
      s1= "Среда  /  " ;
   if (DayOfWeek()== 4 )
      s1= "Четверг  /  " ;
   if (DayOfWeek()== 5 )
      s1= "Пятница  /  " ;
   if (DayOfWeek()== 6 )
      s1= "Суббота  /  " ;
   if (DayOfWeek()== 0 )
      s1= "Воскресенье  /  " ;

   ObjectCreate ( "WeekDay1" , OBJ_LABEL , 0 , 0 , 0 );          
   ObjectSet( "WeekDay1" , OBJPROP_CORNER , CORNER_RIGHT_LOWER );
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 5 );
   ObjectSet( "WeekDay1" , OBJPROP_YDISTANCE , 2 );
   ObjectSet( "WeekDay1" , OBJPROP_SELECTABLE , false );
   ObjectSet( "WeekDay1" , OBJPROP_HIDDEN , true );
   ObjectSet( "WeekDay1" , OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   ObjectSet( "WeekDay1" , OBJPROP_COLOR ,Black);
   ObjectSet( "WeekDay1" , OBJPROP_SELECTABLE , false );
   ObjectSet( "WeekDay1" , OBJPROP_SELECTED , false );
   ObjectSetText( "WeekDay1" ,s1+ TimeToString (CurTime(), TIME_DATE )+ "  -  " + TimeToString (CurTime(), TIME_SECONDS ), 13 , "Arial" ,Red);
   
   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 (DayOfWeek()== 1 )
      s1= "Понедельник  /  " ;
   if (DayOfWeek()== 2 )
      s1= "Вторник  /  " ;
   if (DayOfWeek()== 3 )
      s1= "Среда  /  " ;
   if (DayOfWeek()== 4 )
      s1= "Четверг  /  " ;
   if (DayOfWeek()== 5 )
      s1= "Пятница  /  " ;
   if (DayOfWeek()== 6 )
      s1= "Суббота  /  " ;
   if (DayOfWeek()== 0 )
      s1= "Воскресенье  /  " ;
 
   ObjectSetText( "WeekDay1" ,s1+ TimeToString (CurTime(), TIME_DATE )+ "  -  " + TimeToString (CurTime(), TIME_SECONDS ), 13 , "Arial" ,Red);

   return (rates_total);
 } /*******************************************************************/

/********************************************************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {

   if (id == CHARTEVENT_CLICK )
   {
   
         if (! ObjectGetInteger ( 0 , "B" , OBJPROP_STATE , false ))
           {
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 7000 ); // скрываю 
           }
         else
           {
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 5 );     // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton( string name, int x, int y, string text)
  {
   ObjectCreate ( 0 ,name, OBJ_BUTTON , 0 , 0 , 0 );
//--- установим координаты кнопки
   ObjectSetInteger ( 0 ,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger ( 0 ,name, OBJPROP_YDISTANCE ,y);
//--- установим размер кнопки
   ObjectSetInteger ( 0 ,name, OBJPROP_XSIZE , 80 );
   ObjectSetInteger ( 0 ,name, OBJPROP_YSIZE , 30 );
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger ( 0 ,name, OBJPROP_CORNER , 2 );
//--- установим текст
   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,text);
//--- установим шрифт текста
   ObjectSetString ( 0 ,name, OBJPROP_FONT , "Arial" );
//--- установим размер шрифта
   ObjectSetInteger ( 0 ,name, OBJPROP_FONTSIZE , 12 );
//--- установим цвет текста
   ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,Red);
//--- установим цвет фона
   ObjectSetInteger ( 0 ,name, OBJPROP_BGCOLOR ,White);
//--- установим цвет границы
   ObjectSetInteger ( 0 ,name, OBJPROP_BORDER_COLOR ,Blue);
  }
 

vebster005 :
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

özellikle sizin için ne işe yaramadı? yani kendi deyimiyle yapmak istedikleri...

bir buton yapılır, basıldığında ekrandan çıkar (geniş değilse)

Sonuçtan neden memnun değilsin?

 
Maxim Kuznetsov :

özellikle sizin için ne işe yaramadı? yani kendi deyimiyle yapmak istedikleri...

bir buton yapılır, basıldığında ekrandan çıkar (geniş değilse)

Sonuçtan neden memnun değilsin?

düğmeye basıldığında, hesap makinesinde olması nedeniyle güncellendiğinden zamanın ortadan kaybolması ve hemen görünmesi gerçeği

 
Maxim Kuznetsov :

özellikle sizin için ne işe yaramadı? yani kendi deyimiyle yapmak istedikleri...

bir buton yapılır, basıldığında ekrandan çıkar (geniş değilse)

Sonuçtan neden memnun değilsin?

Terminalde olduğu gibi saniyeler ve diğer her şeyin işe yarayacağı sonucu elde edebilir ve düğmeyi devre dışı bırakabilirsiniz.
çünkü butonu kapattığımda (ekrandan kaldır) zaman tekrar görünüyor

 
vebster005 :

Terminalde olduğu gibi saniyeler ve diğer her şeyin işe yarayacağı sonucu elde edebilir ve düğmeyi devre dışı bırakabilirsiniz.
çünkü butonu kapattığımda (ekrandan kaldır) zaman tekrar görünüyor

Burada, çoğu hemen hemen her sonuca ulaşabilir.

Bunları kendiniz elde etmeye çalışmanız ve başkalarına bunu sizin için yapmaları için yalvarmamanız önemlidir. Burada yardım her zaman hazır, ama yardım etmek için, sizin için değil.