
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
#Nesne Sırası
3 Nesne yarattım ve bu nesneler birbirini geçiyor.
#1 Yatay Çizgi , #2 Dikey Çizgi, #3 Trend Çizgisi
Onları z konumlarına ayarlamam gerekiyor.
Peki onlara nasıl z pozisyon değeri verebilirim?
Teşekkürler.
Peki, OnInit() içinde tüm satırları çizebilir ve ardından son çubuğun açık zamanı değiştiğinde yeni bir çubuk olduğunu bileceksiniz.
Ama tam olarak ne yapmak istediğinden emin değilim.
TAMAM! Bir şey deneyeceğim . Sonra buraya geri geleceğim .
Teşekkürler.
@Marco vd Heijden
Bununla ilgili araştırmaya başlamadan önce. Gerçekten sormam gerek , start() işlevi grafiği (/ MT4 Platformları) yavaşlatıyor mu?
ps Tüm kodları start() özel işlevine koydum, bu kod Dönem Satırları - H1, H4, D1, W1, MN1 için çalışıyor.
İyi hafta sonları ve şimdiden teşekkürler.
Yorumun için teşekkür ederim. (Yorumunuzdan sonra göstergelerimde bir şeyleri değiştirmeye karar verdim - çünkü neredeyse tüm göstergelerimi start() işlevinde yaptım.)
Aşağıdaki kodu start() işlevine koydum, bu yüzden göstergem için hangi yolun iyi olduğu konusunda bana yardımcı olabilir misiniz?
Aslında, sürekli güncellemeyi durdurmak için aşağıdaki kodu nasıl düzenleyebilirim hiçbir fikrim yok (tüm start() kodları init() işlevine konmadan) .
int _cnt_MN1 = 11 ; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0 ; i_MN < _cnt_MN1; i_MN++ )
{
if ( _Period < PERIOD_MN1 )
{
//---time convert
datetime _tltpMN1 = TimeToString ( iTime ( Symbol (), PERIOD_MN1 , i_MN ), TIME_DATE );
datetime _time = iTime ( Symbol (), PERIOD_MN1 , i_MN ); // + PeriodSeconds( PERIOD_MN1 );
//---name
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );
ObjectCreate ( 0 , _vlineName_MN, OBJ_VLINE , 0 , _time, 0 );
ObjectSetString ( 0 , _vlineName_MN, OBJPROP_TOOLTIP , _tltpMN1 );
ObjectSetInteger ( 0 , _vlineName_MN, OBJPROP_COLOR , C'180,160,080' );
ObjectSet ( _vlineName_MN, OBJPROP_BACK , true );
ObjectSet ( _vlineName_MN, OBJPROP_HIDDEN , true );
ObjectSet ( _vlineName_MN, OBJPROP_SELECTABLE , false );
ObjectSet ( _vlineName_MN, OBJPROP_STYLE , STYLE_SOLID );
} //---if Close
} //---for Close
Teşekkürler!
Gerçekten yardıma ihtiyacım var, lütfen biri soruma cevap versin.
Teşekkürler.
Yeni bir çubuk işlevi oluşturmaya katılmıyorum, çünkü her onay için yalnızca bir kez çağrılabilir. Bir değişken birden çok kez test edilebilir.
static datetime BOMcur= 0 ; dateTime BOMpre = BOMcur;
BOMcur = iTime ( _Symbol , PERIOD_MN1 , 0 ); bool isNewMonth = BOMcur != BOMpre;
if (isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );
Lütfen bunu gösterge yerine bir uzmana koyun, bu gelecekte ticaret stratejinizi eklemek istediğinizde daha kolay kullanım sağlar.
Çubuk sorunu için, çubuk açılış saatini bir tarih saat değişkeninde saklayın ve kaydedilen zamanı gerçek zamanla karşılaştırın, ardından yeni bir çubuk ortaya çıktığında tetiklenir.
İşte bir örnek:
int OnInit ()
{
//--- create timer
EventSetMillisecondTimer ( 250 );
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M1= iTime ( Symbol (), PERIOD_M1 , 0 );
M5= iTime ( Symbol (), PERIOD_M5 , 0 );
M15= iTime ( Symbol (), PERIOD_M15 , 0 );
M30= iTime ( Symbol (), PERIOD_M30 , 0 );
H1= iTime ( Symbol (), PERIOD_H1 , 0 );
H4= iTime ( Symbol (), PERIOD_H4 , 0 );
D1= iTime ( Symbol (), PERIOD_D1 , 0 );
W1= iTime ( Symbol (), PERIOD_W1 , 0 );
MN1= iTime ( Symbol (), PERIOD_MN1 , 0 );
//--- set timelines
ObjectMove ( 0 , "Time-M1" , 0 ,M1, 0 );
ObjectMove ( 0 , "Time-M5" , 0 ,M5, 0 );
ObjectMove ( 0 , "Time-M15" , 0 ,M15, 0 );
ObjectMove ( 0 , "Time-M30" , 0 ,M30, 0 );
ObjectMove ( 0 , "Time-H1" , 0 ,H1, 0 );
ObjectMove ( 0 , "Time-H4" , 0 ,H4, 0 );
ObjectMove ( 0 , "Time-D1" , 0 ,D1, 0 );
ObjectMove ( 0 , "Time-W1" , 0 ,W1, 0 );
ObjectMove ( 0 , "Time-MN1" , 0 ,MN1, 0 );
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
if (M1!= iTime ( Symbol (), PERIOD_M1 , 0 ))
{
M1= iTime ( Symbol (), PERIOD_M1 , 0 ); // overwrite old value with new value
//Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M1",0,M1,0);
}
if (M5!= iTime ( Symbol (), PERIOD_M5 , 0 ))
{
M5= iTime ( Symbol (), PERIOD_M5 , 0 );
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
if (M15!= iTime ( Symbol (), PERIOD_M15 , 0 ))
{
M15= iTime ( Symbol (), PERIOD_M15 , 0 );
//Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M15",0,M15,0);
}
if (M30!= iTime ( Symbol (), PERIOD_M30 , 0 ))
{
M30= iTime ( Symbol (), PERIOD_M30 , 0 );
//Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M30",0,M30,0);
}
if (H1!= iTime ( Symbol (), PERIOD_H1 , 0 ))
{
H1= iTime ( Symbol (), PERIOD_H1 , 0 );
//Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H1",0,H1,0);
}
if (H4!= iTime ( Symbol (), PERIOD_H4 , 0 ))
{
H4= iTime ( Symbol (), PERIOD_H4 , 0 );
//Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H4",0,H4,0);
}
if (D1!= iTime ( Symbol (), PERIOD_D1 , 0 ))
{
D1= iTime ( Symbol (), PERIOD_D1 , 0 );
//Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-D1",0,D1,0);
}
if (W1!= iTime ( Symbol (), PERIOD_W1 , 0 ))
{
W1= iTime ( Symbol (), PERIOD_W1 , 0 );
//Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-W1",0,W1,0);
}
if (MN1!= iTime ( Symbol (), PERIOD_MN1 , 0 ))
{
MN1= iTime ( Symbol (), PERIOD_MN1 , 0 );
//Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-MN1",0,MN1,0);
}
}
//+------------------------------------------------------------------+
static datetime BOMcur= 0 ; dateTime BOMpre = BOMcur;
BOMcur = iTime ( _Symbol , PERIOD_MN1 , 0 ); bool isNewMonth = BOMcur != BOMpre;
if (isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );
Yorumun için teşekkürler.
Yorumunuzdan beri yorumunuzu araştırmaya başladım. (çünkü 'Void OnTick()' işlevini hiç kullanmadım)
Her neyse, Bay William yorumunuz gerçekten bana fikir verdi ve bana bir şeyler öğretti.
(ps, yanlış düşünüyorsam lütfen bana bildirin)
Pre-build 600 (3 Şubat 20 14 ) sadece start() vardı. Şimdi OnTick (EA'lar), OnCalculate (göstergeler) ve OnStart (scriptler) var. Bir göstergeden bahsettiğinizi unutmuşum.
Yeni Olay İşleme İşlevleri-İşlevler-Dil Temelleri-MQL4 Başvurusunu kullanmaya başlayın. Geri incelemelerinizi nasıl doğru şekilde yapacağınıza bakın.