Wie eröffne ich einen Marktauftrag richtig? - Seite 7

 
prostotrader:

Übrigens ist es seltsam, dass Sie Sleep() von einem Indikator aus aufrufen, denn das ist verboten:

Die Funktion Sleep() kann nicht von benutzerdefinierten Indikatoren aufgerufen werden, da Indikatoren im Schnittstellen-Thread ausgeführt werden und diesen nicht verlangsamen dürfen. Die Funktion prüft alle 0,1 Sekunden den Status der Stoppflagge des Experten.


 
Alexey Kozitsyn:

Übrigens ist es merkwürdig, dass Sie Sleep() aus dem Indikator heraus aufrufen, denn das ist verboten:


Ich weiß nicht, was Sleep() überhaupt ist.
 
prostotrader:

Alexej!

Ein ziemlich flüssiges Instrument :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Es geht nicht um das Instrument (Liquidität), sondern um Verzögerungen, die bei JEDEM Instrument auftreten können.

Ich handele nun schon seit fast 4 Jahren aktiv mit EAs.

Ich habe keine Pausen in einem meiner EAs (außer Pausen, um auf Daten zu warten, die vom Server in INDICATORS heruntergeladen werden),

Wenn Sie eine Pause machen, ist das ein sicheres Zeichen dafür, dass der Algorithmus Ihres EAs nicht richtig funktioniert :(

Ich handele schon seit langer Zeit und verwende nur EAs. Aber meistens auf MT4. Ich habe auf MT5 nur mit Expert Advisors unter Verwendung von Limits gehandelt und es gab keine Probleme. Ich bin auch gegen zusätzliche Pausen in EAs, besonders wenn es sich um einen Scalper oder Pipsitter handelt, da man leicht einen Einstieg verpassen kann.
 
prostotrader:
Ich weiß nicht, was Sleep() überhaupt ist.
Dann ist es seltsam, dass wir beide jetzt über Pausen sprechen...
 
Alexey Kozitsyn:
Dann ist es seltsam, dass wir beide jetzt über Pausen sprechen...
Nicht im Sinne dessen, was Sleep() tut, sondern im Sinne seiner Anwendung in meinem Code.
 
prostotrader:
Nicht im Sinne dessen, was Sleep() tut, sondern im Sinne der Verwendung in meinem Code.
Wie setzen Sie eine Pause in Ihrem Indikator um?
 
Alexey Kozitsyn:
Wie setzen Sie eine Pause in Ihrem Indikator um?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

Dies ist ein altes Beispiel.

Da der GetTickCount-Fehler ziemlich hoch ist (bis zu 16 ms), verwende ich jetzt GetMicrosecondCount().

 
Gennady Mazur:
Im Prinzip tue ich das, aber in Forts wird die Order oft erfolgreich angenommen...aber beim nächsten Tick ist noch keine Position da...
Dies ist, wo die zusätzliche Öffnung verrutschen kann .... teilweise lösen das Problem auf diese Weise, wenn der Auftrag angenommen wird, ich die int-Variable zu erhöhen, und nach der Erhöhung die Bedingungen für die Öffnung sind etwas anders, so dass eine neue Öffnung nicht passieren, aber.... wenn der Auftrag nicht angenommen wird die Variable nicht erhöhen, aber hier ist der Trick ... Ich habe den Stand der Dinge falsch eingeschätzt, und es kamen weitere Aufträge hinzu.
Sie haben bereits Ihre eigene Frage beantwortet. Wir müssen den Befehl befolgen.
 
prostotrader:

Alexej!

Ein ziemlich flüssiges Instrument :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Es geht nicht um das Instrument (Liquidität), sondern um die Verzögerung, die bei JEDEM Instrument auftreten kann.

Ich handele nun schon seit fast 4 Jahren aktiv mit EAs.

Ich habe keine Pausen in einem meiner EAs (außer Pausen, um auf Daten zu warten, die vom Server in INDICATORS heruntergeladen werden),

Wenn Sie eine Pause machen, ist das ein sicheres Zeichen dafür, dass der Algorithmus Ihres EAs nicht richtig funktioniert :(

Und was ist, wenn Sie keine haben? Vielleicht ist der Algorithmus dort so beschaffen, dass dies nicht erforderlich ist.
 
Gennady Mazur:
Auch ich handele schon sehr lange und nur mit Hilfe von EAs. Aber meistens auf MT4. Ich habe auf MT5 nur mit Expert Advisors unter Verwendung von Limits gehandelt und es gab keine Probleme. Wenn ich ein Scalper oder ein Pipsder bin, mag ich keine Pausen in Expert Advisors, außerdem verpasse ich gerade einen Einstieg.
Dies ist nicht der Fall, wenn Sie eine Pause brauchen.