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

 

Taras, fareyi tıklayarak çerçeveyi değiştirmek için grafiğin böyle bir normalizasyonunu yapmak mümkün mü?

Bazen alışkanlıktan dolayı imleç düğmenin yanındayken basıyorum ama eylemin sonucunu hiç sevmiyorum.

Olay işleme listesinde uygun bir şey bulamadım, belirli bir açıklaması olmayan yalnızca CHARTEVENT_CHART_CHANGE var. Bir fare düğmesine basmayı bağlamayı deneyebilirsiniz, ancak anladığım kadarıyla kullanıcı, yalnızca kendi düğmelerinizi oluşturursanız sistem menüsü ile çalışamaz. Basit bir çözüm var mı?

 
psyman :

Taras, fareyi tıklayarak çerçeveyi değiştirmek için grafiğin böyle bir normalizasyonunu yapmak mümkün mü?

Bazen alışkanlıktan dolayı imleç düğmenin yanındayken basıyorum ama eylemin sonucunu hiç sevmiyorum.

Olay işleme listesinde uygun bir şey bulamadım, belirli bir açıklaması olmayan yalnızca CHARTEVENT_CHART_CHANGE var. Bir fare düğmesine basmayı bağlamayı deneyebilirsiniz, ancak anladığım kadarıyla kullanıcı, yalnızca kendi düğmelerinizi oluşturursanız sistem menüsü ile çalışamaz. Basit bir çözüm var mı?

Yani, fare ile grafikteki belirli "dokunma bölgelerine" tıklamak mı?
Yapabilirsin, imlecin koordinatlarını izlemen ve fare düğmelerine tıklaman gerekir.

CHARTEVENT_MOUSE_MOVE

 

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

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Taras Slobodyanik , 2018.10.04 09:37

Yani, fare ile grafikteki belirli "dokunma bölgelerine" tıklamak mı?
Yapabilirsin, imlecin koordinatlarını izlemen ve fare düğmelerine tıklaman gerekir.



İşin aslı, bunun sistem menüsündeki bir düğmeye değil, grafiğe bir tıklama olmasıdır. Bu olayla nasıl başa çıkacağımı bilmiyorum.
 
psyman :

İşin aslı, bunun sistem menüsündeki bir düğmeye değil, grafiğe bir tıklama olmasıdır. Böyle bir olayla nasıl başa çıkacağımı bilmiyorum.

mevcut sembol dönemini hatırlıyoruz ve " CHARTEVENT_CHART_CHANGE " olduğunda değişiklikleri kontrol ediyor ve ihtiyacımız olanı yapıyoruz

 
Tamam, tekrar teşekkürler.
 

Lütfen bana OnTick() danışmanının gövdesindeki aynı işlevin neden çalışmadığını (veya daha doğrusu, çalıştığını, ancak arızalı tüm çizelgelerde doğru şekilde çalışmadığını) söyleyin.

, ve OnInit() prosedüründen normal bir komut dosyasından da iyi çalışır. Danışman hemen 80 çizelgeye kurulur (her 4 pencere için 20 para birimi W1 D1 H4 H1) belki bilgisayar başa çıkamıyor? Lütfen bana söyle. Robotun görevi, çizelgelerden birinde bir sinyal algılandığında ekranda MessageBox mesajlarını görüntülemektir. Bu mesajların başlatıldığı sırada bilgisayar yavaşlayabilir mi?
 

Nedense olay işlemeden önceki dönemi hatırlayamıyorum, bunu nerede yapmalıyım?

Mesajları takip etmeye karar verdim, CHARTEVENT_CHART_CHANGE'ın tek tıklamada 2 kez işlendiği ortaya çıktı, ctime değişkeni sıfırlandı.


#mülkiyet katı

#özellik göstergesi_chart_window

int zaman;


geçersiz OnInit()

{

Print(" OnInit------------1 ", ChartPeriod(0));

Print("OnInit ctime = ", ctime);

// ctime=ChartPeriod(0);

}


int OnCalculate(const int oranları_toplam,

const int önceki_hesaplanmış,

const tarihsaat &saat[],

const double &aç[],

const çift &yüksek[],

const çift &düşük[],

const double &kapat[],

const uzun &tick_volume[],

const uzun &hacim[],

const int &spread[])

{

ctime=ChartPeriod(0);

dönüş(oranlar_toplam);

}

geçersiz OnChartEvent(const int kimliği,

const uzun &lparam,

const double &dparam,

const string &sparam)


{


if(id==CHARTEVENT_CHART_CHANGE)

{

Print("CHARTEVENT_CHART_CHANGE başlatıldı ctime=", ctime);

if(ctime!=ChartPeriod(0))

{

Print(ChartPeriod(0), "DEĞİŞTİ!!!!!!!!!!!!!!!!", ctime);

}

}

}



Saate bir gösterge ekleme, ardından günlük bir göstergeye geçme

2018.10.05 01:04:45.171 _t1 CADJPY,Günlük: CHARTEVENT_CHART_CHANGE başlatıldı ctime=1440

2018.10.05 01:04:45.156 _t1 CADJPY,Günlük: 1440 DEĞİŞTİ!!!!!!!!!!!!!!!! 0

2018.10.05 01:04:45.156 _t1 CADJPY,Günlük: CHARTEVENT_CHART_CHANGE başlatıldı ctime=0

2018.10.05 01:04:45.156 _t1 CADJPY,Günlük: başlatıldı

2018.10.05 01:04:45.156 _t1 CADJPY,Günlük: OnInit ctime = 0

2018.10.05 01:04:45.156 _t1 CADJPY,Günlük: OnInit-----------1 1440

2018.10.05 01:04:45.156 _t1 CADJPY,H1: uninit neden 3

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE başlatıldı ctime=60

2018.10.05 01:02:02.000 _t1 CADJPY,H1: 60 DEĞİŞTİ!!!!!!!!!!!!!!!! 0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE başlatıldı ctime=0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: başlatıldı

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit ctime = 0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit------------1 60

2018.10.05 01:02:01.078 Özel gösterge _t1 CADJPY,H1: başarıyla yüklendi





 
psyman :

Nedense olay işlemeden önceki dönemi hatırlayamıyorum, bunu nerede yapmalıyım?

Mesajları takip etmeye karar verdim, CHARTEVENT_CHART_CHANGE'ın tek tıklamada 2 kez işlendiği ortaya çıktı, ctime değişkeni sıfırlandı.

Mesaja doğru kodu yapıştırın! Böyle okumak çok zor. Bu böyle olmalı.

 #property strict
#property indicator_chart_window
int ctime;
void OnInit ()
   {
     Print ( "  OnInit------------1  " , ChartPeriod ( 0 ));
     Print ( "OnInit ctime = " , ctime);
   //  ctime=ChartPeriod(0);   
   }
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[])
  {
   ctime= ChartPeriod ( 0 );         
   return (rates_total);
  }
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   if (id== CHARTEVENT_CHART_CHANGE )
      {
       Print ( "CHARTEVENT_CHART_CHANGE     is started  ctime=" , ctime);
       if (ctime!= ChartPeriod ( 0 ))
      {
       Print ( ChartPeriod ( 0 ), "  CHANGED!!!!!!!!!!!!!!!   " , ctime);
      }
      } 
}

Gösterge, grafik parametreleri değiştirildiğinde zorla yeniden yüklenir, başlatmadan kaldırma nedeni ve neden değişkeni için dokümanı okuyun.

Gerekli parametreleri depolamak için terminal global değişkenlerini kullanabilirsiniz.

 
Vitaly Gorbunov :

Doğru kodu mesaja yapıştırın! Böyle okumak çok zor. Bu böyle olmalı.

Gösterge, grafik parametreleri değiştirildiğinde zorla yeniden yüklenir, başlatmadan kaldırma nedeni ve neden değişkeni için dokümanı okuyun.

Gerekli parametreleri depolamak için terminal global değişkenlerini kullanabilirsiniz.

Evet, GlobalVariable'daki değerleri kaydetmeniz ve ardından başlangıçta varlıklarını kontrol etmeniz gerekiyor.

Yani, grafik numarasını, sembolü, noktayı kaydetmeniz gerekir.
Peki, o zaman gereksiz değişkenleri silin veya bunları başlangıçta geçici global değişkenler yapın.

not. bilgileri grafikteki nesnelerde de saklayabilirsiniz - çizelge varken - nesneler vardır

 

Çok daha kolay olacağını düşündüm :-)

O zaman tamamen çocukça bir soru - kodum ticaret veya grafik anlamına gelmiyor, ne tür programları kullanmak daha iyidir?

Komut dosyaları tek kullanımlıktır, ancak bir döngüde çalıştırılabilirler mi? Uzman Danışmanları hiç kullanmadığım için özel bir göstergeyi yalnızca atalete göre beyan ettim. Ama sonra kendini yeniden başlattığı ortaya çıktı, hiçbir şeye ihtiyacım olmadığı dikkate alınmalı. Genel olarak, lütfen tavsiyede bulunun.

ps

Nesneler görsel olarak karışmamaları için sıfır boyutta olabilir mi?