Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 43

 
fxsaber:

Das verstehe ich nicht. Wenn sich etwas in der Datenbank geändert hat, kann man das nur durch einen Vergleich mit dem vorherigen Zustand der Datenbank herausfinden.

Sie können jedes entsprechende Datenbankelement vergleichen. Oder Sie können den Hash aus ihnen berechnen und die Hashes vergleichen.

Das Terminal weiß bereits von dieser Änderung (OnTrade). Deshalb möchte ich in meiner Funktion darüber Bescheid wissen.

 
fxsaber:

Besonders relevant für MT4, wo der time_msc-Schrittwechsel 1000ms beträgt.

Schade, das macht es unmöglich, die einfachste Option zu nutzen, die ich im Moment kenne.

 
Andrey Khatimlianskii:

Das Terminal weiß bereits von dieser Änderung(OnTrade). Deshalb möchte ich in meiner Funktion darüber Bescheid wissen.

In MT4 gibt es kein Handelsereignis.

 
fxsaber:

Das Handelsereignis ist nicht in MT4.

Es wurde nur nicht nach MKL weitergeleitet. Das Terminal aktualisiert die Liste der Geschäfte nicht nach einem Zeitplan.

 
Andrey Khatimlianskii:

Sie ist nur nicht mit der MCL verdrahtet worden. Das Terminal aktualisiert die Liste der Geschäfte nicht nach einem Zeitplan.

Daher nur durch Überprüfung.

 
Andrey Khatimlianskii:

1. Wie kann man am einfachsten feststellen, dass der Funktionsaufruf zum gleichen Zeitpunkt erfolgt wie der vorherige Aufruf?

Zeit (TimeCurrent) kann gleich bleiben, Zeit in ms von SymbolInfoTick, theoretisch auch.

Der Vergleich der Bid-, Ask- und Ms-Zeiten ist recht teuer.

Ich schlage nicht vor, die Steuerung im Expert Advisor selbst zu organisieren, ich möchte eine universelle unabhängige Funktion erhalten.


Die gleiche Frage stellt sich bei Handelsgeschäften. Woher wissen wir, dass sich in der Liste der Aufträge/Positionen (einschließlich der offenen Level, SL und TP) seit dem letzten Lauf etwas geändert hat?

Ich müsste ein Flag in OnTrade setzen (und es zurücksetzen, wenn ich fertig bin), das ist der billigste Weg, es zu tun.

Aber auch hier würde ich mir eine universelle Lösung wünschen.


Wer hat eine Idee?

Richtig:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Ja:

Ich danke Ihnen.

Andrey Khatimlianskii:

Ich schlage nicht die Möglichkeit vor, die Steuerung im EA selbst zu organisieren, ich möchte nur eine universelle, unabhängige Funktion erhalten.

 
Andrey Khatimlianskii:

Danke.

Da es noch nicht vorgeschlagen wurde, gebe ich Ihnen eine Idee, wo ich graben würde, überprüfen Sie die Zeit der letzten PostMessage oder etwas, wahrscheinlich Unsinn, ich bin nicht so versiert in Api.

 
Aleksey Mavrin:

Die Zeit der letzten PostMessage oder so zu prüfen ist wahrscheinlich Unsinn, ich kenne mich mit Api nicht so gut aus.

Ja, es sieht nach Unsinn aus)

Danke für den Versuch.

 
Andrey Khatimlianskii:

Unrealistisch ohne Kontrolle durch den EA selbst.

Und nicht nur das, es ist auch nicht notwendig. Die angeforderte Funktion wird im EA aufgerufen, d.h. es handelt sich im Wesentlichen um die gleiche Kontrolle im EA, nur weniger invasiv