FORTS: Um Anfängern zu helfen - Seite 3

 

Häufig verwendete und nützliche Funktionen:

Prüfung des Sitzungsgrenzpreises:

//+------------------------------------------------------------------+
//| Expert Check price range function                                |
//+------------------------------------------------------------------+
bool CheckPriceRange( const string a_symbol, const double price )
{
  double min_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MIN );
  double max_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MAX );
  if ( ( price >= min_price ) && ( price <= max_price ) )
  {
    return( true );
  }
  return( false );
}
 

Häufig verwendete und nützliche Funktionen:

Die Funktion GetPositionPrice() wurde neu gestaltet:

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  double price_out = 0;
  double volume_out = 0;
  double price = 0;
  double volume = 0;
//---  
  ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) );
    
  if ( pos_id > 0 )
  {
      if ( HistorySelectByPosition( pos_id ) )
      {
        int deals = HistoryDealsTotal();
      
        for( int i = 0; i < deals; i++ )
        {
          ulong deal_ticket = HistoryDealGetTicket( i );
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
        
          if ( order_ticket > 0 )
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) );
              
            if ( deal_entry == DEAL_ENTRY_IN )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
            else
            if ( deal_entry == DEAL_ENTRY_OUT )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_out += price * volume;
              volume_out += volume;  
            }
          }
        }
//---  
        price = price_in - price_out;
        volume = volume_in - volume_out;
//---
        if ( volume > 0 )
        {       
          return( NormalizeDouble( price / volume, _Digits ) );
        }
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  return( 0 );
} 
 

Eine kleine Änderung der Funktion (für mehr Vielseitigkeit)

anstelle von:

if ( volume_in > 0 )
{
  return( NormalizeDouble( price_in / volume_in, _Digits ) );
}

machen Sie es so:

if ( volume_in > 0 )
{
  int symb_digits = int( SymbolInfoInteger( aSymbol, SYMBOL_DIGITS ) );
  return( NormalizeDouble( price_in / volume_in, symb_digits ) );
}
 
Build 1241. Echtes Konto. Wenn ein schwebender Auftrag eingestellt und teilweise ausgeführt wird, ändert sich sein Status nicht zu ORDER_STATE_PLACED, sondern bleibt ORDER_STATE_PARTIAL.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wann gibt es die neue Version von MT5 und wo erfährt man, was darin zu erwarten ist?

comp, 2016.03.21 08:52

Wenn ich es zum Beispiel selbst tue: ein echtes Konto eröffnen und den Investitionszugang dazu in die Foren stellen, damit jeder den echten Feed von FORTS in Echtzeit sehen kann und Zugang zu normalen Tests hat, könnte es dann ein Problem geben? Oder ist das klar?

 
Hallo! Gibt es eine einfache Vorlage für ein Handelssystem oder ein Beispiel für einen EA für FORTS, der die in diesem Thread beschriebenen Funktionen berücksichtigt? Ich brauche es, damit es mit Aufträgen auf FORTS korrekt funktioniert.
 

"Empfehlung:

Bei der Entwicklung von EAs für FORTS empfehle ich, nicht das Tick-Ereignis zu verwenden, sondern eher

Es ist besser,das Ereignis BookEvent zu verwenden".

Es wird nicht erklärt, warum es besser ist, vielleicht ist es in einigen Fällen besser, in anderen Fällen ist es besser onTick. Könnten Sie etwas genauer sein?

 
Alexander:

"Empfehlung:

Bei der Entwicklung von EAs für FORTS empfehle ich, nicht das Tick-Ereignis zu verwenden, sondern eher

Es ist besser,das Ereignis BookEvent zu verwenden".

Es wird nicht erklärt, warum es besser ist, vielleicht ist es in einigen Fällen besser, in anderen Fällen ist es besser onTick. Könnten Sie etwas genauer sein?

Der Autor hat Hausverbot, und Sie werden hier in nächster Zeit keine Antwort erhalten.

Ich sage Ihnen, was ich davon halte:

Das Tick-Ereignis tritt nur ein, wenn Bid, Ask, Last geändert werden. Auch Tick-Ereignisse sind kumulativ (wie die Entwickler sagten), denn es können mehrere Preisänderungen in einem Tick erfolgen.

Das BookEvent-Ereignis tritt bei jeder Änderung von Aufträgen auf dem Wettmarkt und bei der Ausführung von Geschäften ein. Das Ereignis BookEvent tritt viel häufiger auf.

Es ist besser, OnTick() zu verwenden, wenn Sie die Liquidität auf dem Markt nicht analysieren müssen.

Bei sehr liquiden Symbolen wird das BookEvent-Ereignis sehr häufig ausgelöst, und wenn der Handler schwere Berechnungen oder mehrere schwere Indikatoren enthält, wird er als Schleife arbeiten.

Wenn Ihr Expert Advisor andere Event-Handler hat, wie OnTimer, können Sie diese Ereignisse verpassen.Ich weiß nicht, wie es mit den EreignissenOnTradeTransaction undOnTrade aussieht, vielleicht können sie übersprungen werden.

Hier sind einige Informationen für Sie:

Die Länge der Transaktionswarteschlange beträgt 1024 Elemente. Wenn OnTradeTransaction() zu lange braucht, um eine andere Transaktion zu verarbeiten, können die alten Transaktionen in der Warteschlange durch neuere ersetzt werden.

 
Sergey Chalyshev:

Der Autor ist gesperrt und Sie werden eine Weile nichts mehr von ihm hören.

Es ist schon eine Weile her, dass Michael aus dem Badehaus entlassen wurde... Hier hat er seinen Mädchennamen geändert.
 
Alexey Kozitsyn:
Es ist schon lange her, dass Michael aus dem Badehaus entlassen wurde... Hier hat er seinen Avatar geändert.
Was hat seine Ava damit zu tun? Er kann nicht im Forum schreiben, er ist für immer gesperrt.