
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
#Objekt Bestellung
Ich habe 3 Objekte erstellt, die sich gegenseitig überschneiden.
#1 Horizontale Linie, #2 Vertikale Linie, #3 Trendlinie
Ich muss ihre z-Positionen festlegen.
Wie kann ich ihnen also einen Wert für die z-Positionen geben?
Danke!
Nun, Sie können alle Linien in OnInit() zeichnen und dann neue zeichnen, wann immer die opentime aus dem letzten bar ändert, werden Sie wissen, es war ein neuer bar.
Aber ich bin nicht sicher, was genau Sie tun wollen.
OK! Ich werde etwas ausprobieren. Dann werde ich hierher zurückkommen.
Danke!
@Marco vd Heijden
Bevor ich anfange, darüber zu recherchieren. Ich muss wirklich fragen, ist start() Funktion verlangsamt Chart (/ MT4 Plattformen)?
p.s Ich habe alle Codes in start() spezielle Funktion, dass Code's funktioniert für Period Lines- H1, H4, D1, W1, MN1.
Ein schönes Wochenende und vielen Dank im Voraus.
Ich danke Ihnen für Ihren Kommentar. (nach Ihrem Kommentar habe ich beschlossen, dass ich etwas in meinen Indikatoren ändern werde - weil ich fast alle meine Indikatoren in start() Funktion gemacht habe).
Ich habe den folgenden Code in die start() -Funktion eingefügt, können Sie mir also helfen, welcher Weg für meinen Indikator gut ist?
Eigentlich habe ich keine Ahnung, wie ich den untenstehenden Code bearbeiten kann, um die kontinuierliche Aktualisierung zu stoppen (ohne alle start() Codes in die init() Funktion zu setzen).
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
Vielen Dank!
Ich brauche wirklich Hilfe, bitte jemand meine Frage zu beantworten.
Danke!
Ich bin nicht damit einverstanden, eine neue Bar-Funktion zu machen, weil sie nur einmal pro Tick aufgerufen werden kann. Eine Variable kann mehrere Male getestet werden.
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 );
Bitte legen Sie sie in einem Experten anstelle eines Indikators an, damit Sie sie in Zukunft leichter verwenden können, wenn Sie Ihre Handelsstrategie hinzufügen möchten.
Für das Problem mit den Balken speichern Sie die Eröffnungszeit des Balkens in einer datetime-Variablen und vergleichen Sie einfach die aufgezeichnete Zeit mit der realen Zeit, die dann jedes Mal ausgelöst wird, wenn ein neuer Balken auftaucht.
Hier ist ein Beispiel:
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 );
Vielen Dank für Ihren Kommentar.
Seit Ihrem Kommentar habe ich versucht, Ihren Kommentar zu recherchieren. (weil ich nie die Funktion 'Void OnTick()' benutzt habe)
Wie dem auch sei, Mr. William, Ihr Kommentar hat mich wirklich auf eine Idee gebracht und mir auch etwas beigebracht.
(p.s. wenn ich falsch denke, lassen Sie es mich bitte wissen)
Vor Build 600 (3. Februar2014) gab es nur start(). Jetzt gibt es OnTick (EAs), OnCalculate (Indikatoren) und OnStart (Skripte). Ich vergaß, dass Sie über einen Indikator sprechen.
Beginnen Sie mit der Verwendung der neuen Ereignisbehandlungsfunktionen - Funktionen - Grundlagen der Sprache - MQL4 Referenz. Siehe Wie Sie Ihre Rückblicke korrekt durchführen.