Serviços. Eles já estão em funcionamento? - página 14

 
Maxim Dmitrievsky:

muitas plataformas têm esta opção, por exemplo. É prática comum usar uma ração e negociar com um corretor diferente

A arbitragem não tem nada a ver com isso.

Por exemplo, o outro fornecedor tem a profundidade do mercado, outros símbolos informativos (índices, futuros) e outros produtos

Sim, estou aprendendo a levar volumes com a Ninja Trader 8. Eu o fiz rapidamente e mal, através de arquivos. Vou tentar fazer isso através de serviços.

 
fxsaber:

Sem a DLL, você não pode "estender a GUI" do Terminal.

A comunicação via mapeamento de memória, ao mesmo tempo, será bidirecional.

 
fxsaber:

Eu entendo, o sonho de um árbitro é um API semelhante. A única maneira de resolver este problema é rodar vários terminais em paralelo.

Você pega um Terminal Mestre e usa o Serviço para coletar dados de outros terminais abertos. No total, no Terminal Principal você tem

EURUSD_Alpari.

EURUSD_Dukascopy

EURUSD_LMAX

----


Caso o Terminal Mestre esteja funcionando em uma corretora lenta, pode-se escrever um Expert Advisor elementar que não exceda o escopo do MQL. Todo o trabalho sujo é feito pelo Serviço.

Como funciona? Duas palavras, por favor.

 
Реter Konow:

Um processo definido pelo usuário no Terminal que pode ser acessado por cada EA. Você pode executar cálculos infinitos relacionados ao ambiente de mercado em threads separados nos serviços e obter os resultados atuais dos processos no momento certo.

Tampões para anéis.

É uma pena que, ao contrário dos serviços de winndows do MT5, sejam locais dentro do terminal.

 
Alexey Volchanskiy:

Sim, estou aprendendo a levar volumes com a Ninja Trader 8. Fiz uma rapidinha e foleira, através de arquivos. Vou tentar através de serviços.

NT é um projeto morto, imho.

 
Maxim Dmitrievsky:

NT é um projeto morto, imho.

Está vivo e crescendo

 
Alexey Volchanskiy:

Existe um exemplo de transferência de dados em tempo real através de recursos?

Uma busca deve encontrá-lo.

Alexey Volchanskiy:

Como fazer isso? Em poucas palavras.

FILE_COMMON ou DLL.

 
Maxim Dmitrievsky:

NT é um projeto morto, imho.

Quando digo isso, escrevo mais porque em primeiro lugar ..., em segundo lugar .... etc. Mas isso é apenas mais um peido no vácuo).

Ainda assim, é uma versão C#, .NET bastante recente, como 4.5 ou 4.6. Você pode escrever e depurar programas logo na VS2017, diz alguma coisa? Além de todo o poder das bibliotecas .NET. E o mais importante para mim, o acesso a volumes sobre futuros. Mas não a Bolsa de Valores de Moscou, onde tudo fica atrás das flutuações globais em dezenas de minutos. A propósito, há também o Mercado, embora eu não o tenha estudado, é muito cedo.

 
fxsaber:

FILE_COMMON ou DLL.

Ahh, eu pensava que algo novo havia sido inventado em termos de serviços.

 
Alexey Volchanskiy:

Ainda é C# completo, com uma versão bastante recente do .NET, como 4,5 ou 4,6. Você pode escrever e depurar programas na VS2017, isso diz alguma coisa?

Nós também não estamos aqui!

Eu reescrevi o indicador de momento da entrega MT5 em 10 minutos. Rewritten it... copy it to VS2017 )))

Código fonte 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 faz alocação de memória, C# faz cálculos

ZS: Eu não sei como passar o preço[] para C#sem copiar - qualquer variante?