OEM gösterge rengi

 

Tünaydın!

Standart göstergenin rengi programlı olarak nasıl değiştirilir?

teşekkürler Michael

 
Mikalas :

Standart göstergenin rengi programlı olarak nasıl değiştirilir?

Asla böyle bir soruyla ilgilenmedim, ancak düşünce aşağıdaki gibidir. Standart gösterge kodunu açmanız ve orada gösterge_renk* ile satırları bulmanız gerekir.

Eh, gibi bir şey

 //--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

Ardından istediğiniz rengi yapıştırın. Ayrıca bkz. MQL5 Referansı / Özel Göstergeler / Gösterge Özellikleri ve İşlevleri ile MQL5 Referansı / Standart Sabitler, Numaralandırmalar ve Yapılar / Gösterge Sabitleri / Çizim Stilleri Arasındaki İlişki

 

Tabii ki teşekkür ederim.

Ancak, kodu her düzenlemeniz gerektiğinde ortaya çıkıyor?

Michael

 
Mikalas :

Tabii ki teşekkür ederim.

Ancak, kodu her düzenlemeniz gerektiğinde ortaya çıkıyor?

"Normal" göstergeyi kendiniz yapın - ve seçeneklerinizi buna ekleyin. Örneğin (tamamen bir fikir): renkleri giriş parametrelerinde görüntüleyin ve ardından onları PlotIndexSetInteger (N-1, PLOT_LINE_COLOR , nColor) işleviyle Oninit() içinde işleyin. El Kitabındaki örnekler yardımcı olabilir. Ardından, kodun kendisini düzenlemek değil, başlatıldığında veya değiştirildiğinde göstergenin özellikleri aracılığıyla istenen rengi ayarlamak mümkün olacaktır.
 
Mikalas :

Tabii ki teşekkür ederim.

Ancak, kodu her düzenlemeniz gerektiğinde ortaya çıkıyor?

Senin mantığında yanlış olan bir şey var. Başlangıçta sordunuz:

Mikalas :

Standart göstergenin rengi programlı olarak nasıl değiştirilir?

 
abolk :

Senin mantığında yanlış olan bir şey var. Başlangıçta sordunuz:

Sevgili Abolk!

Açıkçası kodunuzdan.

Michael

 
Yedelkin :
"Normal" göstergeyi kendiniz yapın - ve seçeneklerinizi buna ekleyin. Örneğin (tamamen bir fikir): renkleri giriş parametrelerinde görüntüleyin ve ardından onları PlotIndexSetInteger (N-1, PLOT_LINE_COLOR , nColor) işleviyle Oninit() içinde işleyin. El Kitabındaki örnekler yardımcı olabilir. Ardından, kodun kendisini düzenlemek değil, başlatıldığında veya değiştirildiğinde göstergenin özellikleri aracılığıyla istenen rengi ayarlamak mümkün olacaktır.

Çok teşekkürler.

Geliştiricilerin bunu düşünmemesi çok kötü.

Bu kod işe yaramalıydı, AMA .... ne yazık ki...

params[ 0 ].type = TYPE_INT ;
        params[ 0 ].integer_value = 10 ;
        
        params[ 1 ].type = TYPE_INT ;
        params[ 1 ].integer_value = 0 ;
        
        params[ 2 ].type = TYPE_INT ;
        params[ 2 ].integer_value = MODE_SMA ;
        
        params[ 3 ].type = TYPE_INT ;
        params[ 3 ].integer_value = PRICE_MEDIAN ;
        
        params[ 4 ].type = TYPE_COLOR ;
        params[ 4 ].double_value = clrBlue ;
        
        ma_handle = IndicatorCreate ( NULL , PERIOD_CURRENT , IND_MA , 5 , params );
         if ( ma_handle != INVALID_HANDLE )
      {
         ChartIndicatorAdd ( 0 , 0 , ma_handle );
      }
 
Mikalas :

Bu kod işe yaramalıydı, AMA .... ne yazık ki...

IndicatorCreate() işleviyle çalışmadı - kendi özel göstergelerinizi oluşturmanın daha kolay olduğu ortaya çıktı. Yine de, kodun yalnızca bir kısmını sağladığınız için soru şudur: kullanmaya başlamadan önce params değişkenini sıfırladınız mı? Peki, örneğin, şöyle:

 MqlParam params;
ZeroMemory (params); 

Ve gönderiniz hangi hata kodunu döndürüyor?

Ve bunu yaptılar:

 ArrayResize (params, 5 );
?

Ayrıca, IND_MA( iMA ) göstergesinin "Renk" gibi bir parametresi yoktur ve siz belirtmişsinizdir. Burada iMA kullanımına ilişkin bir örneğe bakın: MQL5 Reference / Timeseries and Indicators Access / IndicatorCreate.

 
Mikalas :

Bu kod işe yaramış olmalı

Nedenmiş? İlk olarak, rengin neden gerçek bir sayı olduğunu açıklayın.

        params[ 4 ].type = TYPE_COLOR ;
        params[ 4 ].double_value = clrBlue ;
 

İyi günler stringo ve Yedelkin!

Muhtemelen yazımı dikkatli okumadınız.

"Ne yazık ki geliştiriciler bunu düşünmedi."

Ve şimdi yukarıdaki kodu neden yazdığımı açıklayacağım.

Göstergenin 7 parametresi (5 ana + 2 satır) olduğu Hareketli Ortalama ayarlarından açıktır.

Sekmede "Ayarlar" yazıyor

TÜM parametreleri "manuel" olarak değiştirmek mümkünse,

TÜM parametreleri programlı olarak değiştirme yeteneği! Geliştiriciler ne yaptı

IndicatorCreate işlevinde, ancak sonuna kadar değil (veya bu bir HATA).

MA

MqlParam yapısı bir renk girmenize izin verir - TYPE_COLOR( ENUM_DATATYPE ) ;

MQL5 referansından:

Renk türü , renk bilgilerini depolamak için tasarlanmıştır ve bellekte 4 bayt alır. İlk bayt dikkate alınmaz, kalan 3 bayt RGB bileşenleri içerir.

......

Bir tamsayı gösterimi, onaltılık veya ondalık sayı olarak yazılır. Onaltılık sayı 0x00BBGGRR'dir

//--- tamsayı gösterimleri
0xFFFFFF // beyaz
16777215 // beyaz
0x008000 // yeşil
32768 // yeşil

Alıntı sonu.

yapı MqlParam
{
ENUM_DATATYPE tip ; // parametre türü, ENUM_DATATYPE numaralandırma değeri gir
uzun tamsayı_değeri ; // bir tamsayı değeri depolamak için alan
çift çift değer ; // çift veya kayan değerleri saklamak için alan
sicim string_value ; // string türünde bir değerin saklanacağı alan
};

(İlk başta uzun süre denedim, işe yaramadı ve sonra iki kez denedim - o da işe yaramadı, kodda kaldı).

Bunun gibi olması gerekirdi:

MqlParam parametreleri[5];


.........

params[ 4 ].type = TYPE_COLOR ;
params[ 4 ].integer_value = clrBlue; // - mavi renk 0х00FF0000 (16711680)

stringo, sorunuza "hangi korkuyla" cevap verdim?

Bir kez daha tekrar ediyorum, geliştiricilerin rengi değiştirmemesi üzücü.

Saygılarımla, Mihail

 
Mikalas :

İyi günler stringo ve Yedelkin!

Muhtemelen yazımı dikkatli okumadınız.

"Ne yazık ki geliştiriciler bunu düşünmedi."

Mikalas, pek çok uzman burada başkaları için sonuçlar çıkarmak için boşandı, bu sadece bir gardiyan. Sayılarını artırmayın lütfen.

Daha ileri. Sana yardım etmek için duygusal olmayan belirli sorular sordum. Onlara cevap vermek yerine "nasıl böyle bir hayata geldin" diyorsunuz. Ne alırsınız? - Birini tanımladığınız hataların varlığına ikna etmek mi yoksa seçtiğiniz kodu "programlı olarak" iyileştirmek mi? Belirli bir "hata" görürseniz - durumun tam açıklaması ile Servis Masası ile iletişime geçin. "Programlı" çalışmak istiyorsanız - göstergelerin yaratılmasının ve çalışmasının özünü araştırın.