Fragen von einem "Dummy" - Seite 56

 
Interesting:

Im Gegensatz zum Tick-Handler wird der Timer nach einer bestimmten Zeitspanne, die durch die Periode festgelegt wird, ausgeführt.

In schweren Timer-Verarbeitung ist es natürlich besser, es für eine Zeit durch Schlupf oder zum ersten Tick (es gibt eine Menge von Varianten) zu deaktivieren, aber wenn Timer-Verarbeitung ist nicht sehr schwer und Zeitraum ist lang genug Timer deaktiviert werden kann.

Auch in der Timer-Verarbeitung können Sie überprüfen, ob es sich um einen Werktag handelt oder nicht.

Bei Bedarf können Sie umfangreiche Berechnungen für das Wochenende einplanen (z. B. die automatische Optimierungvon EA) und diesen Prozess über den Timer laufen lassen. Am Ende der Berechnungen (oder zu Beginn der Berechnungen) kann der Timer korrekt deaktiviert werden.

Wie für die Prüfung in der Tester mit OnTimer() Funktion der Multi-Währung EA. Angenommen, der Timer ist auf 10-Sekunden-Intervalle eingestellt. Wird sie an allen Wochenenden des Testzeitraums ticken? Ich glaube, das ist es, was Vladimir meinte. Wenn wir also dem Timer mitteilen, dass Samstag und Sonntag übersprungen werden, geht die Prüfung viel schneller.
 
tol64:
Was das Testen im Tester durch die OnTimer()-Funktion des Multi-Currency Expert Advisors betrifft. Angenommen, der Timer ist auf ein Intervall von 10 Sekunden eingestellt. Wird es während des Testzeitraums an allen Wochenenden laufen? Ich glaube, das ist es, was Vladimir meinte. Wenn wir also dem Timer mitteilen, dass Samstag und Sonntag übersprungen werden, geht die Prüfung viel schneller.

1. Ich habe versucht, die Zeitschaltuhr am Wochenende auszuschalten, wenn die Berechnungen nicht sehr kompliziert waren, ich habe keinen großen Unterschied gespürt (obwohl es natürlich Unterschiede gab), jetzt habe ich beschlossen, die Zeitschaltuhr vorerst nicht auszuschalten.

2. Ja, wenn der Timer eingestellt ist, macht es keinen Unterschied, ob das Prüfgerät oder der normale Modus ausgelöst wird, bis der Timer ausgeschaltet wird. Wenn es sich um ein Prüfgerät handelt, wird es im Abstand von 10 Sekunden für die gesamte Prüfdauer ausgelöst - alle 10 Sekunden.

Für das Anhalten des Timers über das Wochenende gibt es mehrere Lösungen:

а. Beenden Sie den Timer, indem Sie den Status in eine Variable schreiben. Beim ersten Ticken durch das Hauptprogramm (oder durch ein "Spion"-Signal) kann der Timer erneut gestartet werden. Diese Methode hat Nachteile, die mit der Wahrscheinlichkeit des Überspringens von Ticks oder mit der Tick-Verzögerung auf einem illiquiden Markt zusammenhängen. Das Überspringen von Ticks kann auch durch eine fehlende Verbindung zum Handelsserver verursacht werden.

б. Schlupfbremsen, für eine bestimmte Zeitspanne. Das Gute daran ist, dass der Zeitraum genau festgelegt wird, das Schlechte ist, dass bei dieser Methode nicht nur der Timer, sondern der gesamte Expert Advisor bis zur Stunde X inaktiv ist.

Allerdings werden alle Positionen und Aufträge im Tester bearbeitet.

в. Es ist möglich, eine Pause zu realisieren, indem man die Dauer des Timers erhöht. Es ist praktisch, im Voraus zu wissen, wann der Timer "aufwachen" muss, damit die Arbeit des Experten nicht unterbrochen wird. Unangenehm ist die Tatsache, dass Sie den Timer im Arbeits- oder Standby-Modus im Auge behalten müssen.

в. Die erste Gruppe wird ständig ausgeführt (z. B. zur Ermittlung des Verbindungsstatus), die zweite je nach den Bedingungen (Arbeitstage, Verbindung vorhanden, Handel erlaubt usw.).

 
Interesting:


Bei Bedarf können umfangreiche Berechnungen für das Wochenende geplant werden (z.B. Auto-Optimierungdes EA) und dieser Prozess von der Zeitschaltuhr ausgeführt werden. Am Ende (oder zu Beginn) der Berechnungen kann der Timer korrekt deaktiviert werden.

Hallo! Ich hatte gestern eine ähnliche Idee, hatte aber keine Zeit, einen Beitrag mit Fragen dazu zu schreiben:

1. ist es möglich, dies zu tun? wie dies in den Code, insbesondere Eröffnung und Schließung Trades aussehen kann.oder nur ihre Lage und Berechnung-Berechnungen.dh am Wochenende auf dem Timer geht an eine definierte Funktion, die zyklisch Geschichte zurückspult, und bestimmt die besten Parameter.für diese Online-Ticks sind nicht erforderlich, und die Funktion wird nur in den Zyklus zu drehen ...

Kann man irgendwo auf der Welt darüber lesen, egal in welcher Branche?

3. wenn auf die Meisterschaft angewendet, wird nicht auf das Auto geladen werden? Dies ist wahrscheinlich eine Frage für die Organisatoren.

 
MetaDriver:
Berechnen Sie dann alles im Expert Advisor auf einem geeigneten Zeitrahmen, und drucken Sie das Ergebnis in OnTester() aus. Sie brauchen nicht zu handeln. Haben Sie irgendwelche Probleme?

Herzlichen Dank!

Ich habe noch eine Frage: Wieschließe icheine Position nach Zeit, wenn der Kurs weder Take noch Stop Loss erreicht hat?

Ich habe die Bibliotheken gelesen, wie man mit Aufträgen arbeitet... Ich habe es angeschlossen... Das Programm schwört, dass es ein solches Verfahren nicht gibt...

Also, meine Frage ist, welche Art von Code sollte, um zu schließen, um nach einer bestimmten Zeit (zum Beispiel 1 Tag)

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

So muss ich prüfen, ob ein Geschäft offen ist...

OrdersTotal ()!=0 funktioniert nicht )))) sehr interessante Panne )

 
papaklass:
Für Positionen gibt es PosirionTotal(). OrdersTotal() nur für Pending orders.

wenn ( PositionenGesamt() == 1 )

das Gleiche ... keine Reaktion

// öffnet normal

wenn ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// kann nicht vor Take oder Stop geschlossen werden

wenn ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

 
BaTTLeBLooM:

Herzlichen Dank!

Also Frage, welcher Code sollte ungefähr sein, um den Auftrag nach einer bestimmten Zeit zu schließen ( zum Beispiel 1 Tag )

Ich bitte Sie.

Ungefähr so: Sie sparen die Zeit für das Öffnen in einer Variablen. Addieren Sie sofort die gewünschte Zeitspanne dazu (z. B. 1 Tag = 60*60*24).

Dann überwachen Sie bei jedem Tick (oder jeder Zeit), ob die aktuelle Zeit länger ist als die Kontrollzeit. Wenn ja, schließen Sie sie // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

wenn ( PositionenGesamt() == 1 )

das Gleiche ... keine Reaktion

// öffnet normal

wenn ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// kann nicht vor Take oder Stop geschlossen werden

wenn ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

Eigentlich ist es nicht klar, was Sie hier geschrieben haben, aber PositionTotal() hat eindeutig nichts damit zu tun.

Setzen Sie Print() vor die Prüfung, =1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

Konstantin Gruzdev hat in seinem Artikel eine interessante Methode mit "Spionen" und "Agenten" vorgeschlagen. )) Aber sein "Agent" exSpy Control Panel MCM will nicht für mich arbeiten.

Ich werde nun einen Blick auf die im Artikel vorgestellte Variante werfen. So weit gemacht mehrere Experten auf Spione, funktioniert super.

MetaDriver:

Ich denke, dass diese Technologie im Testgerät nicht funktionieren wird.

Es funktioniert.

 
MetaDriver:

Ich bitte Sie.

Ungefähr so: Sie müssen den Zeitpunkt der Öffnung in einer Variablen speichern. Fügen Sie sofort das erforderliche Zeitintervall hinzu (z. B. 1 Tag = 60*60*24).

Dann überwachen Sie bei jedem Tick (oder jeder Zeit), ob die aktuelle Zeit länger ist als die Kontrollzeit. Wenn ja, schließen Sie sie // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Wenn Sie jedoch einen zuverlässigeren Abschluss benötigen, selbst nach einem Neustart des Terminals/Beraters, können Sie einen Medjic verwenden, um den Auftrag zu identifizieren und den Zeitpunkt seiner Öffnung zu überprüfen.

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}
Grund der Beschwerde: