Mais uma vez, sobre multithreading - página 5

 

Estou longe de ser um perito, por isso peço desculpa antecipadamente.

Estou a escrever um EA.

A tarefa:

1) Utilizar vários indicadores. Um mesmo indicador pode ser utilizado com diferentes configurações (períodos) - como fazê-los funcionar em paralelo, para reduzir o tempo de obtenção de sinais?

2) Paralelamente à recepção dos sinais dos indicadores, efectuar uma verificação constante e fechar posições lucrativas ou perdedoras. Além disso, temos muitas posições em aberto, pelo que este processo deve ser paralelizado em partes. Por exemplo, podemos verificar 1000 encomendas em 3 ou 4 fios.

3) Paralelamente aos processos acima referidos, utilizar os sinais recebidos dos indicadores do ponto 1 para comprar ou vender.


O mais interessante é como paralelizar todas estas tarefas para que o testador esteja disponível e as optimizações no testador sejam possíveis.

Apontar o caminho, de preferência com exemplos. Obrigado de antemão.

 
dd:

Estou longe de ser um perito, por isso peço desculpa antecipadamente.

Tarefa:

1) Utilizar vários indicadores. Um mesmo indicador pode ser utilizado com diferentes configurações (períodos) - como fazê-los funcionar em paralelo, para reduzir o tempo de recepção de sinais.

2) Paralelamente à recepção dos sinais dos indicadores, proceder a uma verificação constante e ao encerramento de posições rentáveis ou perdedoras. Além disso, temos muitas posições em aberto, pelo que este processo deve ser paralelizado em partes. Por exemplo, podemos verificar 1000 encomendas em 3 ou 4 fios.

3) Paralelamente aos processos acima referidos, utilizar os sinais recebidos dos indicadores do ponto 1 para comprar ou vender.


O mais interessante é como paralelizar todas estas tarefas para que o testador esteja disponível e as optimizações no testador sejam possíveis.

Apontar o caminho, de preferência com exemplos. Obrigado de antemão.

Já alguma vez abriu o terminal? Em geral, o testador e o optimizador estão sempre disponíveis em paralelo com a negociação na conta.

Pergunto-me quanto tempo demora a receber sinais dos indicadores, se existe a questão da necessidade de os paralelizar.

 
Dmitry Fedoseev:

Já abriu sequer o terminal uma vez? O testador e o optimizador estão sempre disponíveis em paralelo com a negociação na conta.

Pergunto-me quanto tempo demora a receber sinais dos indicadores, se há alguma questão sobre a necessidade de os paralelizar?

Fi-lo, e obviamente mais tempo do que o seu. Um tique é um segundo. Durante este tempo, é necessário verificar, digamos, 4 indicadores - construir gráficos. Receber sinais, comprar ou vender, fechar 1000 encomendas e assim por diante ... E como cada milissegundo conta... Mais precisamente, em contas a menos. Tempo é dinheiro :)
 
dd:

1) Utilizar vários indicadores. Um e o mesmo indicador pode ser usado com diferentes definições (períodos) - como fazê-los funcionar em paralelo, para reduzir o tempo de obtenção de sinais?

2) Paralelamente à recepção dos sinais dos indicadores, efectuar uma verificação constante e fechar posições lucrativas ou perdedoras. Além disso, temos muitas posições em aberto, pelo que este processo deve ser paralelizado em partes. Por exemplo, podemos verificar 1000 encomendas em 3 ou 4 fios.

3) Paralelamente aos processos acima referidos, utilizar os sinais recebidos dos indicadores do ponto 1 para comprar ou vender.

Os indicadores lançados sobre um símbolo funcionam num só fluxo. Mas se estiverem bem escritas, não haverá atraso (será contada em milissegundos).

Mas todas as operações comerciais podem ser paralelas utilizando Expert Advisors / scripts adicionais. Chamá-los da EA principal, se necessário, ou mantê-los em funcionamento o tempo todo. Um exemplo da implementação pode ser encontrado neste artigo. Ou utilizar o OrderSend assíncrono, mas, neste caso, será um pouco mais difícil de controlar.


dd:

E o mais interessante = como paralelizar todas estas tarefas para que o testador e a optimização no testador estejam disponíveis?

Não precisa de tudo isto para testar, funciona de forma sincronizada e não perde carraças. Fazer 2 variantes - para testador e para online (se ( IsTesting() ).

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
 
Andrey Khatimlianskii:

Os indicadores que funcionam com a mesma ferramenta funcionam todos na mesma rosca. Mas se os escrever correctamente, não haverá atrasos (serão contados em milissegundos).

Mas todas as operações comerciais podem ser paralelas utilizando Expert Advisors / scripts adicionais. Chamá-los da EA principal, se necessário, ou mantê-los em funcionamento o tempo todo. Um exemplo da implementação pode ser encontrado neste artigo. Ou, pode usar o OrderSend assíncrono, mas neste caso, o controlo será um pouco mais difícil.


Para o testador, tudo isto é desnecessário, funciona em sincronia e não salta carraças. Fazer 2 variantes - para testador e para online (se ( IsTesting() ).



Indicadores lançados numa única ferramenta funcionam todos num só fio. Mas se os escrever bem, não haverá atrasos (durarão milissegundos).

--- Não compreendo. Não vou escrever os meus próprios indicadores. Estou a utilizar indicadores OEM. E a questão é que quero utilizá-los em paralelo para reduzir o tempo de resposta.


Não precisa de tudo isto para testar, funciona de forma sincronizada e não salta carraças. Fazer 2 variantes - para testador e para online (se ( IsTesting() ).

---- Não compreendo de todo. Quem não precisa dele? Funciona em sincronia --- mas para mim precisa vice-versa, para ter em conta a minha assíncronia... Que diabo são duas variantes? Tenho uma variante da minha EA e quero executá-la no testador, mas quero paralelizar os meus processos e mostrá-la no testador.

Devido ao facto de tudo estar a correr sequencialmente, começo a ter drawdowns.

Arquivos anexados:
 
dd:

--- Não percebo. Não vou escrever os meus próprios indicadores. Estou a usar as normais. E a questão é que quero utilizá-los em paralelo para reduzir o tempo de resposta.

Mediu o tempo de resposta? Perderá mais no paralelismo.


dd:

---- Não percebo de todo. Quem não o quer? Funciona em sincronia --- mas preciso dele para ter em conta a minha assincronia... Que diabo são duas variantes? Tenho uma variante da minha EA e quero executá-la no testador, mas quero paralelizar os meus processos e mostrá-la no testador.

Uma EA:

if ( IsTesting() )
{
   // работаем нормально
}
else
{
   // распараллеливаем торговые приказы
}

Porquê testar a paralelização no Testador de Estratégia?

 
dd:

Devido ao facto de tudo ser executado sequencialmente, começo a ter drawdowns, e estou a ter um monte de drawdowns infernal.

Distribuir o envio de ordens de comércio ou utilizar OrderSendAsync

Se precisar de fechar um monte de negócios, pode abrir um grande balcão, trancar num lucro e depois fechar calmamente OrderCloseBy um sobre o outro.
 
Andrey Khatimlianskii:

Distribuir o envio de ordens de comércio ou utilizar OrderSendAsync

Por isso, não se trata apenas do envio da encomenda, há um monte de outras verificações a serem feitas. Mas todos eles são enfileirados até que uma função termine, a outra não é executada ....

Já o descrevi na declaração do problema. E é uma tarefa complexa. DLL ou chats ou o que quer que seja - o que me interessa é o cenário em que posso paralelizar estas tarefas e assim executá-las no testador para compreender o que é o quê...

 
dd:

por isso não se trata apenas do envio do mandado, há uma série de outros controlos a serem feitos. Mas todas elas estão enfileiradas até que uma função termine, a outra não é executada ....

Descrevi-o nos termos do problema. E é uma tarefa complexa. DLL ou chats ou o que quer que seja - o que me interessa é o cenário em que posso paralelizar estas tarefas e continuar a correr no testador para ver o que é o quê...

E quanto tempo precioso se perde e quais são as consequências? E qual seria o lucro se não houvesse "perda"?

 
Dmitry Fedoseev:

E quanto tempo precioso está a perder e quais são as suas consequências? E qual seria o lucro se não houvesse "perda"?

Demoro 5 dias a executar esta estratégia no testador com 24 núcleos à minha disposição. E apenas um núcleo funciona. Para não mencionar o facto de que o tronco, um estúpido ninguém precisa de tronco durante este tempo pode inchar até terabytes ou dois. E tudo isto sem optimizações. E este registo estúpido não pode ser desactivado de forma alguma ...

Como pensa que se eu acelerar o processo diga - 4 horários, cada um no seu núcleo - um aumento neste ponto 4 vezes. Mais um processo separado para fechar 1000 ofícios, digamos, ou quebrar este processo para 5 ou 10 fios - um aumento de 10x. Mais um processo separado para a abertura de posições por sinais ...

Penso que múltiplas e vezes ...

Mas cada milissegundo + atraso ao corretor + atraso do corretor à troca (se não for uma cozinha) é uma perda colossal. É estranho que isto não seja compreendido na Sibéria...
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...