FORTS: Per aiutare i principianti - pagina 3

 

Funzioni usate frequentemente e utili:

Controllo del prezzo limite della sessione:

//+------------------------------------------------------------------+
//| 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 );
}
 

Funzioni usate frequentemente e utili:

Funzione GetPositionPrice() ridisegnata:

//+------------------------------------------------------------------+
//| 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 );
} 
 

Una piccola modifica alla funzione (per la versatilità)

invece di:

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

fare in questo modo:

if ( volume_in > 0 )
{
  int symb_digits = int( SymbolInfoInteger( aSymbol, SYMBOL_DIGITS ) );
  return( NormalizeDouble( price_in / volume_in, symb_digits ) );
}
 
Build 1241. conto reale. se un ordine in sospeso è impostato e parzialmente eseguito, il suo stato non cambia in ORDER_STATE_PLACED, ma rimane ORDER_STATE_PARTIAL.
 

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Quando è la nuova versione di MT5 e dove scoprire cosa ci si aspetta in essa

comp, 2016.03.21 08:52

Se, per esempio, lo faccio io: apro un account reale e metto l'accesso agli investimenti sul forum in modo che tutti possano vedere il feed reale di FORTS in tempo reale e avere accesso ai normali test, potrebbe esserci un problema? O è chiaro?

 
Ciao, c'è un modello di trading system semplice o un esempio di un EA per FORTS, tenendo conto delle caratteristiche descritte in questo thread? Ho bisogno che funzioni correttamente con gli ordini su FORTS.
 

"Raccomandazione:

Nel progettare EAs per FORTS, non raccomando di usare l'evento Tick, ma piuttosto

È meglio usarel'evento BookEvent".

Non si spiega perché sia meglio, forse in alcuni casi è meglio, in altri casi è meglio onTick. Potrebbe essere più specifico?

 
Alexander:

"Raccomandazione:

Quando si progettano EAs per FORTS, non raccomando di usare l'evento Tick, ma piuttosto

È meglio usarel'evento BookEvent".

Non si spiega perché sia meglio, forse in alcuni casi è meglio, in altri casi è meglio onTick. Potrebbe essere più specifico.

L'autore è al bando e non sentirete una risposta qui per qualche tempo.

Ecco cosa ne penso:

L'evento Tick si verifica solo quando Bid, Ask, Last sono cambiati. Anche l'evento Tick è cumulativo (come hanno detto gli sviluppatori), per diversi cambiamenti di prezzo può venire un Tick.

L'evento BookEvent arriva ad ogni cambiamento di ordini nel mercato delle scommesse e all'esecuzione delle compravendite. L'evento BookEvent è molto più frequente.

È meglio usare OnTick() se non avete bisogno di analizzare la liquidità del mercato.

Sui simboli altamente liquidi l'evento BookEvent arriva molto spesso e se ci sono calcoli pesanti o diversi indicatori pesanti nel gestore, funzionerà come un ciclo.

Se il tuo Expert Advisor ha altri gestori di eventi, come OnTimer, puoi perdere questi eventi.Non conosco gli eventiOnTradeTransaction eOnTrade, forse possono essere saltati.

Ecco alcune informazioni per voi:

La lunghezza della coda delle transazioni è di 1024 elementi. Se OnTradeTransaction() impiega troppo tempo per elaborare un'altra transazione, le vecchie transazioni nella coda possono essere sostituite da quelle più recenti.

 
Sergey Chalyshev:

L'autore è in divieto e non lo sentirete più qui per un po'.

È passato un po' di tempo da quando Michael è stato liberato dal bagno... Qui ha cambiato il suo nome da nubile.
 
Alexey Kozitsyn:
È passato molto tempo da quando Michael è stato liberato dal bagno... Qui ha cambiato il suo avatar.
Cosa c'entra la sua ava? Non può scrivere sul forum, è bannato per sempre.