Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 56

 
Andrey Khatimlianskii:

Avete misurato le prestazioni? Sono curioso di sapere quanto sarà più lento. Soprattutto con gli indicatori personalizzati.

Non misurato, ma non dovrebbe essere più lento che in MT4.

Misurazione
#define  AMOUNT 1 e7
void OnStart()
{  
  int handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);
  const ulong StartTime = GetMicrosecondCount();
  
  for (int i = 0; i < AMOUNT; i++)
    handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);

  Print((string)((GetMicrosecondCount() - StartTime) / AMOUNT) + " mcs per iMA");
  Print(handle);    
}


Il risultato è

0.3383469 mcs per iMA


Un terzo di microsecondo per testare. Questo significa che una singola corsa per ogni 10 milioni di tic rallenterà di tre secondi.

 
fxsaber:

Misura

Strano che tu non abbia confrontato la creazione di un handle + l'ottenimento di un valore nel ciclo con la tua versione originale, questa è la differenza che è interessante.

 
Andrey Khatimlianskii:

Strano che tu non abbia confrontato la creazione dell'handle + l'ottenimento del valore nel ciclo con la tua versione originale, che è la differenza che è interessante.

Perché i valori sono presi dallo stesso manico. iMA restituisce sempre lo stesso handle con gli stessi parametri.

 
fxsaber:
In MQL5 è abbastanza accettabile scriverlo così

Cioè "creare" una maniglia su ogni tick. Non verranno create nuove entità di indicatori, il tempo verrà sprecato solo nel confronto dei parametri di input di iMA con gli indicatori che sono stati avviati nei tick precedenti. Cioè esattamente la stessa cosa che si fa in MT4.

Design interessante.

Controllate la velocità con la creazione di un handle in OnInit, con questo approccio.

 
Vitaly Muzichenko:

Controllate la velocità con la creazione dell'handle OnInit, con questo approccio.

Forum sul trading, sistemi di trading automatico e test di strategia

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.10.05 09:09

Una singola corsa ogni 10 milioni di tic rallenterà di tre secondi.

Questo rispetto alla vostra opzione.

 

Come posso sostituire le funzioni standard OrderCalcProfit() e OrderCalcMargin() in modo che siano multipiattaforma? Sembra che sia già stato qui da qualche parte, ma non riesco a trovarlo qui - forse avevo sonno... Ma devo essermi svegliato entro un'ora dalla ricerca :)

 
Artyom Trishkin:

Come posso sostituire le funzioni standard OrderCalcProfit() e OrderCalcMargin() per renderle multipiattaforma? Sembra che sia già stato fatto da qualche parte, ma non riesco a trovarlo qui - forse ero sveglio... Ma devo essermi svegliato durante un'ora di ricerca :)

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

MQL5.Community
MQL5.Community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
fxsaber:

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

:)

SymbolInfoMarginRate() non è in quad. La domanda è stata posta come segue:

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

Peculiarità del linguaggio mql5, consigli e trucchi

Artyom Trishkin, 2017.10.06 06:36

Cosa può sostituire le funzioni standard OrderCalcProfit() e OrderCalcMargin() in modo che siano multipiattaforma? Sembra che ci fosse già da qualche parte, ma non riesco a trovarlo qui - forse ho troppo sonno... Ma avrei dovuto svegliarmi durante un'ora di ricerca :)

E non c'è niente su OrderCalcProfit()
 

Un dono, non un'opportunità linguistica

struct MQLTICK : public MqlTick
{
  bool operator >( const MqlTick &Tick )
  {
    return(this.bid > Tick.bid);
  }

  bool operator <( const MqlTick &Tick )
  {
    return(this.ask < Tick.ask);
  }
};

void OnStart()
{  
  MQLTICK Ticks[];
  
  Print(CopyTicks(_Symbol, Ticks));
  
  Print(Ticks[0] < Ticks[1]);
}
 
fxsaber:

Un dono, non un'opportunità linguistica

Un regalo sotto forma di un elusivo errore di runtime

struct MqlTick1 : MqlTick {        };
struct MqlTick2 : MqlTick { int i; };
void Copyticks( MqlTick& []) {}
void OnStart()
{
        MqlTick1 ticks1[];
        MqlTick2 ticks2[];
        int i1 = ::CopyTicks( _Symbol, ticks1 ); //нормально ??????????????
                   Copyticks(          ticks1 ); //error: 'ticks1' - parameter conversion not allowed
        int i2 = ::CopyTicks( _Symbol, ticks2 ); //нормально ??????????????
        Print( "i2=", i2, ":", GetLastError()); //Результат: -1:4006
}

In che modo ::CopyTicks è meglio di Copyticks?

E perché il risultato è sempre -1. Tali errori (4006) dovrebbero essere segnalati in fase di compilazione