Servizi. Sono già in funzione? - pagina 14

 
Maxim Dmitrievsky:

molte piattaforme hanno questa opzione, per esempio. È una pratica comune usare un feed e fare trading con un broker diverso

L'arbitraggio non c'entra niente.

Per esempio, l'altro fornitore ha la profondità del mercato, altri simboli informativi (indici, futures) e altre chicche

Sì, sto imparando a prendere i volumi con Ninja Trader 8. L'ho fatto rapidamente e male, attraverso i file. Cercherò di farlo attraverso i servizi.

 
fxsaber:

Senza la DLL, non si può "estendere la GUI" del terminale.

La comunicazione tramite Memory Mapping, allo stesso tempo sarà bidirezionale.

 
fxsaber:

Capisco, il sogno di un arbitro è un'API simile. L'unico modo per risolvere questo problema è quello di far funzionare diversi terminali in parallelo.

Si prende un Master Terminal e si utilizza il servizio per raccogliere dati da altri terminali aperti. In totale sul Terminale Master avete

EURUSD_Alpari.

EURUSD_Dukascopy

EURUSD_LMAX

----


Nel caso in cui il Master Terminal sia su un DC lento, si può scrivere un Expert Advisor elementare che non va oltre il MQL. Tutto il lavoro sporco è fatto dal Servizio.

Come funziona? Due parole, per favore.

 
Реter Konow:

Un processo definito dall'utente nel terminale a cui può accedere ogni EA. Puoi eseguire infiniti calcoli relativi all'ambiente di mercato in thread separati nei servizi e prendere i risultati attuali dai processi al momento giusto.

Buffer ad anello.

È un peccato che, a differenza di winndows, i servizi di MT5 siano locali nel terminale...

 
Alexey Volchanskiy:

Sì, sto imparando a prendere i volumi con Ninja Trader 8. Ne ho fatto uno veloce e smielato, attraverso i file. Proverò attraverso i servizi.

NT è un progetto morto, imho.

 
Maxim Dmitrievsky:

NT è un progetto morto, imho.

È vivo e sta crescendo

 
Alexey Volchanskiy:

C'è un esempio di trasferimento di dati al volo tramite risorse?

Una ricerca dovrebbe trovarlo.

Alexey Volchanskiy:

Come fare? In poche parole.

FILE_COMMON o DLL.

 
Maxim Dmitrievsky:

NT è un progetto morto, imho.

Quando dico questo, scrivo oltre perché in primo luogo..., in secondo luogo .... ecc. Ma questa è solo un'altra scoreggia nel vuoto).

Ancora è C# a tutti gli effetti, .NET versione piuttosto recente, come 4.5 o 4.6. Puoi scrivere e fare il debug di programmi direttamente in VS2017, dice qualcosa? Più tutta la potenza delle librerie .NET. E, cosa più importante per me, l'accesso ai volumi sui futures. Ma non la Borsa di Mosca, dove tutto è in ritardo rispetto alle fluttuazioni globali di decine di minuti. A proposito, c'è anche Market, anche se non l'ho studiato, è troppo presto.

 
fxsaber:

FILE_COMMON o DLL.

Ahh, pensavo che fosse stato inventato qualcosa di nuovo in termini di servizi.

 
Alexey Volchanskiy:

È ancora C# a tutti gli effetti, con una versione abbastanza recente di .NET, come 4.5 o 4.6. Si possono scrivere e fare il debug di programmi in VS2017, questo dice qualcosa?

Anche qui non siamo informati!

Ho riscritto l'indicatore Momentum dalla consegna di MT5 in 10 minuti... Riscritto... copiato in VS2017 )))

Codice sorgente MQL5:

#import "tst_momentum.dll"
#import
..... текст оригинала индикатора Momentum.mql5

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int StartCalcPosition;
   double pr[];
   ArrayCopy(pr,price);
   momentum::oncalculate(ExtMomentumPeriod,rates_total,prev_calculated,begin,pr,StartCalcPosition,ExtMomentumBuffer);
   if(begin>0) PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartCalcPosition+(ExtMomentumPeriod-1));
   return(rates_total);
  }

Fonte C#

namespace tst_momentum
{
    public class momentum
    {
        public static void oncalculate(int ExtMomentumPeriod,
                                int rates_total,
                                int prev_calculated,
                                int begin,
                                double[] price,
                                ref int StartCalcPosition,
                                ref double[] OUTArray)
        {
            StartCalcPosition = (ExtMomentumPeriod - 1) + begin;
            if (rates_total < StartCalcPosition) return;
            int pos = prev_calculated - 1;
            if (pos < StartCalcPosition) pos = begin + ExtMomentumPeriod;
            for (int i = pos; i < rates_total;  i++)
            {
                OUTArray[i] = price[i] * 100 / price[i - ExtMomentumPeriod];
            }
        }
    }
}

MQL5 fa l'allocazione della memoria, C# fa i calcoli

ZS: Non so come passare price[] a C#senza copiare - qualche variante?