Consultor Multimoedas. De preferência, a opinião dos desenvolvedores. - página 3

 
Reshetov:
LeoV:
YuraZ escreveu (a): Para ser honesto e não é muito agradável ... digamos que o carrapato não veio para estes pares e você vai sentir falta dele novamente

Se você mostrar um pedaço de código que gera a entrada, você poderá encontrar o erro lógico mais rapidamente

Mas deveria haver uma solução comumente aceita na MQL, certo? Como "sincronizar" a abertura das barras para diferentes símbolos? Bem, aparentemente, deveríamos esperar pela abertura de uma nova barra para todos os símbolos que são usados. Mas como fazer isso corretamente?

Não há necessidade de sincronicidades e outras invenções de bicicletas. Tudo já foi inventado há muito tempo. A presença de uma nova barra formada é verificada apenas para aquele instrumento, no qual o Expert Advisor é instalado na chegada do primeiro tick. E o evento start() também aciona somente nesse símbolo na chegada de um novo tick. Eu lhe dei um código que realiza esta verificação para que a próxima posição, em caso de solicitações, não seja aberta no próximo bar e depois de uma falha ela tente abrir no mesmo bar. Tudo isso funciona bem para mim tanto no modo de moeda única quanto no modo de múltiplas moedas. O acordo em caso de solicitações é aberto no mesmo bar, mas somente com algum atraso, e portanto nem sempre ao preço aberto do bar, mas com alguma compensação. Isto é, haverá diferenças com o testador, mas não nos bares, mas no preço de abertura.


Yuri, o início de uma nova hora vai acontecer mesmo que o tique não tenha chegado!

Vamos começar uma nova hora, mesmo que o tique não tenha chegado!


é possível calcular uma nova barra com um tique em uma nova barra de QUALQUER instrumento


LeoV está esperando por um novo tick sincronizado para todos os pares utilizados

 
YuraZ:
O núcleo:

YuraZ escreveu (a):

francamente e não é exatamente bonito ... Se o carrapato não veio para estes pares e você vai sentir falta deles novamente

Se o carrapato não veio, você não pode fazer um pedido de imediato a menos que utilize um roteiro,

E somente se os carrapatos chegarem às empresas de corretagem e não os transmitirem ao seu terminal (durante o dia).

É por isso que, quando eu estava implementando um Expert Advisor Multimoedas, eu estava fazendo uma máquina estatal por Miles (ou Moore),

que monitorou os estados abertos de ordem para os pares necessários. É claro que nem sempre foi possível

Naturalmente, nem sempre foi possível abrir ao preço certo, mas esta abordagem garantiu que as ordens seriam EXATAMENTE abertas.

fácil ! é possível fazer um pedido :-) se o carrapato não veio

pense bem! se você não o fizer, eu lhe darei uma dica!

Normalmente com EAs de múltiplas moedas a situação é tal que se não há 100% de garantia de chegada do pedido

então a lógica do trabalho do assessor será destruída.

A propósito, não esqueça que sua EA está trabalhando nos carrapatos do par em que está pairando,

portanto, mesmo que houvesse um tique em outro par, e não houvesse um tique no par com seu EA anexado,

então a sincronização será quebrada.

Não se esqueça de coisas desagradáveis como perda de conexão com empresas de corretagem e solicitações (se você estiver lidando com uma conta real).

A propósito, nos micro-reais, tenho freqüentemente situações em que um pedido nunca é passado até que o terminal seja recarregado.

Mesmo no modo manual. Eles estão esperando por algo, esperando...

É por isso que há muito desisti dos sistemas baseados em pedidos de pares.

É muito incômodo.

 
thecore:
YuraZ:
o núcleo:

YuraZ escreveu (a):

francamente e não é exatamente bonito ... Se o carrapato não veio para estes pares e você vai sentir falta deles novamente

Se o carrapato não veio, você não pode fazer um pedido de imediato a menos que utilize um roteiro,

E somente se os carrapatos chegarem às empresas de corretagem e não os transmitirem ao seu terminal (durante o dia).

É por isso que, quando eu estava implementando um Expert Advisor com várias moedas, eu estava fazendo uma máquina estatal por Miles (ou Moore),

que monitorou os estados abertos de ordem para os pares necessários. É claro que nem sempre foi possível

Naturalmente, nem sempre fui capaz de abrir pelo preço necessário, mas esta abordagem garantiu que as ordens SEMPRE seriam abertas.

fácil ! é possível fazer um pedido :-) se o carrapato não veio

pense bem! se você não o fizer, eu lhe darei uma dica!

Normalmente com EAs de múltiplas moedas a situação é tal que se não há 100% de garantia de chegada do pedido

então a lógica do trabalho do assessor será destruída.

A propósito, não esqueça que sua EA está trabalhando nos carrapatos do par em que está pairando,

portanto, mesmo que houvesse um tique em outro par, e não houvesse um tique no par com seu EA anexado,

então a sincronização será quebrada.

Não se esqueça de coisas desagradáveis como perda de conexão com empresas de corretagem e solicitações (se você estiver lidando com uma conta real).

A propósito, nos micro-reais, tenho freqüentemente situações em que um pedido nunca é passado até que o terminal seja recarregado.

Mesmo no modo manual. Eles estão esperando por algo, esperando...

É por isso que há muito desisti dos sistemas baseados em pedidos de pares.

Dolorosamente incômodo.

Você provavelmente pretendia escrever TIC... mas você acabou de escrever a ordem.


Você entende que um EA pode entrar no EURUSD e usar USDCHF.

Basta escrever

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...



Pedaço de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID );
se ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red);


----

E o TIC por USDCHF pode não ser suficiente para obter um tique para qualquer par.


Espero que a MQL5 não precise receber carrapatos para que o programa funcione

eles prometeram fazer eventos, o que significa que qualquer peça de código pode ser acionada por um evento

----



a segunda questão relativa aos congelamentos no terminal - este problema pode ser resolvido reiniciando - isto é mais provável para os desenvolvedores.

Eu também já vi isso

isto também pode ser corrigido e há um exemplo aqui no fórum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

portanto, se você enviar um pedido mas ele não abrir, você pode enviar este pedaço de código para trabalhar

 

YuraZ писал (а):

Normalmente, com EAs de múltiplas moedas, geralmente acontece que se não houver garantia de uma encomenda de 100%,

Você provavelmente pretendia escrever TIC... Você deve ter querido dizer TIC, mas você escreveu ordem.

Eu estava me referindo a colocar um pedido a 100%.

 
thecore:

YuraZ escreveu (a):

Normalmente, com EAs de múltiplas moedas, é geralmente o caso de não haver garantia de um pedido de 100% de entrada,

Você provavelmente pretendia escrever TIC... Você deve ter querido dizer TIC

Eu estava me referindo a fazer um pedido 100%.


Mas você entende que isso não é apenas em um sistema de múltiplas moedas

Você não recebe uma garantia de 100% em um Expert Advisor comum. nunca uma garantia de 100%

porque existem fatores

INTERNET

O SEU FORNECEDOR

SEU FORNECEDOR DE DC

seu hardware

Equipamento DC

etc.

---

é para isso que servem as paradas... e leva, ou um computador de reserva com um fornecedor diferente (se o problema estiver do seu lado)

---


mas se for um erro na lógica do programa!!! então é outro assunto e é tratado

---


e a lógica não deve desmoronar porque a entrada não foi às 15:00, mas às 15:05 ou 15:02

isto é exatamente o que vemos com o autor do fio! ele está tentando entrar às 15:00:00:00:00

( os números são arbitrários)


ele não está fazendo as gratificações então entrar às 15:00 ou 15:01 - 15:07 não deve ser um problema muito grande para ele


É isso que estou dizendo: você não pode estar estritamente vinculado ao início de uma barra para todos os símbolos necessários - é o suficiente para obter o início de uma barra em qualquer um deles

 
YuraZ:
o núcleo:
YuraZ:
o núcleo:

YuraZ escreveu (a):

francamente e não é exatamente bonito ... Se o carrapato não veio para estes pares e você vai sentir falta deles novamente

Se o carrapato não veio, você não pode fazer um pedido imediatamente, a menos que você use um roteiro,

E somente se os carrapatos chegarem às empresas de corretagem e não os transmitirem ao seu terminal (durante o dia).

É por isso que, quando eu estava implementando um Expert Advisor Multimoedas, eu estava fazendo uma máquina estatal por Miles (ou Moore),

que monitorou os estados abertos de ordem para os pares necessários. É claro que nem sempre foi possível

Naturalmente, nem sempre fui capaz de abrir pelo preço necessário, mas esta abordagem garantiu que as ordens SEMPRE seriam abertas.

fácil ! é possível fazer um pedido :-) se o carrapato não veio

pense bem! se você não o fizer, eu lhe darei uma dica!

Normalmente com EAs de múltiplas moedas a situação é tal que se não há 100% de garantia de chegada do pedido

então a lógica do trabalho do assessor será destruída.

A propósito, não esqueça que sua EA está trabalhando nos carrapatos do par em que está pairando,

portanto, mesmo que houvesse um tique em outro par, e não houvesse um tique no par com seu EA anexado,

então a sincronização será quebrada.

Não se esqueça de coisas desagradáveis como perda de conexão com empresas de corretagem e solicitações (se você estiver lidando com uma conta real).

A propósito, nos micro-reais, tenho freqüentemente situações em que um pedido nunca é passado até que o terminal seja recarregado.

Mesmo no modo manual. Eles estão esperando por algo, esperando...

É por isso que há muito desisti dos sistemas baseados em pedidos de pares.

É muito incômodo.

Você provavelmente pretendia escrever TIC... mas você acabou de escrever a ordem.

Se seu consultor especializado está no EURUSD, você entende que ele pode entrar por USDCHF.

é suficiente para escrever

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Pedaço de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELLL,Lots,OpenLevel,3,0,0,0,0,0,sComment,mMagic,0,Red);

----

o TIC por USDCHF pode não ser suficiente para obter um tique para qualquer par

Espero que na MQL5 você não precise receber carrapatos para que o programa funcione

eles prometem fazer eventos, o que significa que qualquer pedaço de código pode ser escrito em um evento

----

a segunda questão relativa aos congelamentos no terminal - este problema pode ser resolvido reiniciando - é mais provável que seja endereçada aos desenvolvedores.

Eu também já vi isso -

isto também é tratado e há um exemplo aqui no fórum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ
4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import

//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

então se você enviar um pedido mas ele não abrir você pode, é claro, enviar uma peça de código similar para trabalhar

A reinicialização do terminal é ótima, mas o que você deve fazer com outros Conselheiros Especialistas neste momento que estão pendurados em outras janelas?

e sua lógica operacional é naturalmente diferente e não reage bem à recarga freqüente, pois os valores das variáveis se perdem,

que temos vindo a acumular há tanto tempo.

Mesmo que o Expert Advisor seja baseado em EURUSD, você percebe que ele pode entrar por USDCHF

É o suficiente para escrever

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

É claro que sim. Em uma EA com várias moedas, é exatamente assim que os outros pares são controlados.

Mas se no par principal o último tique da hora anterior chegou, por exemplo, às 7,50, e o primeiro tique da hora chegou,

às 8.10, e no símbolo secundário o primeiro tique da hora veio às 8.00,

então é difícil esperar que a EA pairando sobre o par de moedas principais faça uma encomenda sobre o par menor

às 8.00, na melhor das hipóteses às 8.10.

O caso quando a EA opera como um roteiro, ou seja, não dá uma pausa ao sistema, ela apenas flocos e flocos,

Eu não considero isso apesar dos carrapatos. É melhor escrever um roteiro.

 
thecore:
YuraZ:
o núcleo:
YuraZ:
o núcleo:

YuraZ escreveu (a):

francamente e não é exatamente bonito ... Se o carrapato não veio para estes pares e você vai sentir falta deles novamente

Se o carrapato não veio, você não pode fazer um pedido de imediato a menos que utilize um roteiro,

E somente se os carrapatos chegarem às empresas de corretagem e não os transmitirem ao seu terminal (durante o dia).

É por isso que, quando eu estava implementando um Expert Advisor Multimoedas, eu estava fazendo uma máquina estatal por Miles (ou Moore),

que monitorou os estados abertos de ordem para os pares necessários. É claro que nem sempre foi possível

Naturalmente, nem sempre fui capaz de abrir pelo preço necessário, mas esta abordagem garantiu que as ordens SEMPRE seriam abertas.

fácil ! é possível fazer um pedido :-) se o carrapato não veio

pense bem! se você não o fizer, eu lhe darei uma dica!

Normalmente com EAs de múltiplas moedas a situação é tal que se não há 100% de garantia de chegada do pedido

então a lógica do trabalho do assessor será destruída.

A propósito, não esqueça que sua EA está trabalhando nos carrapatos do par em que está pairando,

portanto, mesmo que houvesse um tique em outro par, e não houvesse um tique no par com seu EA anexado,

então a sincronização será quebrada.

Não se esqueça de coisas desagradáveis como perda de conexão com empresas de corretagem e solicitações (se você estiver lidando com uma conta real).

A propósito, nos micro-reais, tenho freqüentemente situações em que um pedido nunca é passado até que o terminal seja recarregado.

Mesmo no modo manual. Eles estão esperando por algo, esperando...

É por isso que há muito desisti dos sistemas baseados em pedidos de pares.

É muito incômodo.

Você provavelmente pretendia escrever TIC... mas você acabou de escrever a ordem.

Se seu consultor especializado está no EURUSD, você entende que ele pode entrar por USDCHF.

é suficiente para escrever

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Pedaço de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELLL,Lots,OpenLevel,3,0,0,0,0,0,sComment,mMagic,0,Red);

----

o TIC por USDCHF pode não ser suficiente para obter um tique para qualquer par

Espero que na MQL5 você não precise receber carrapatos para que o programa funcione

eles prometem fazer eventos, o que significa que qualquer pedaço de código pode ser escrito em um evento

----

a segunda questão relativa aos congelamentos no terminal - este problema pode ser resolvido reiniciando - é mais provável que isto seja endereçado aos desenvolvedores.

Eu também já vi isso -

isto também é tratado e há um exemplo aqui no fórum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

então se você enviar um pedido mas ele não abrir você pode, é claro, enviar uma peça de código similar para trabalhar

A reinicialização do terminal é ótima, mas o que você deve fazer com outros Conselheiros Especialistas neste momento que estão pendurados em outras janelas?

e sua lógica operacional é naturalmente diferente e não reage bem à recarga freqüente, pois os valores das variáveis se perdem,

que temos vindo a acumular há tanto tempo.

Mesmo que o Expert Advisor seja baseado em EURUSD, você percebe que ele pode entrar por USDCHF

É o suficiente para escrever

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

É claro que sim. Em uma EA com várias moedas, é exatamente assim que os outros pares são controlados.

Mas se no par principal o último tique da hora anterior chegou, por exemplo, às 7,50, e o primeiro tique da hora chegou,

às 8.10, e no símbolo secundário o primeiro tique da hora veio às 8.00,

então é difícil esperar que o assessor do par de moedas principais faça um pedido ao par de moedas menores

às 8.00, na melhor das hipóteses às 8.10.

O caso quando a EA opera como um roteiro, ou seja, não dá uma pausa ao sistema, ele apenas flocos e flocos,

Eu não considero isso apesar dos carrapatos. Seria melhor escrever um roteiro.



1 e você acha que o Reconnect chama a função Init () ? e reinicia a EA ?


Você está errado...


Além disso, é sábio salvar variáveis calculadas e valiosas


se eu não tenho código complexo eu os armazeno em GLOBAL VARIABLE

se o código é complexo eu o escrevo em disco e o leio no reinício - se o reinício foi por engano eu apenas o restauro

a propósito, é fácil determinar se foi ou não por engano




---

2 Se houver uma nova hora para algum par de moedas - não há carrapato para outros pares - então não importa quando há um carrapato

Uma NOVA BAR - ou mais precisamente uma nova hora pode ser considerada como tendo chegado.


e, portanto, é possível contar os pares tardios FECHAR pensando que eles também estão cobertos


os carrapatos lá virão mais tarde e o bar será deslocado no tempo!!! mas a verdadeira Hora já passou

---


não há problema em fazer um pedido a um par de moedas sem um tick - você sabe como

não estou dizendo que será exibido às 8:00 - ( figura convencional )


pode ser criado assim que um NOVO TICK chega a uma nova barra em qualquer par de moedas


---


>o se o último tique da hora anterior no par principal veio, por exemplo, às 7,50, e o primeiro tique da hora veio ,

>às 8.10, e em um par secundário, o primeiro tique da hora chegou às 8.00,

>É difícil esperar que uma EA pairando sobre o par principal de moedas coloque uma ordem sobre um par secundário

> às 8.00, ou na melhor das hipóteses às 8.10.


trabalhando no modo de múltiplas moedas, você não precisa contar o tempo do par principal ou não o principal

você só precisa pegar um sinal do início de uma nova barra em qualquer par de moedas - e calcular os indicadores por FECHAR, não por fechamento de barra

e dentro - fora.


porque a entrada estará no tique de uma nova barra de qualquer par controlado, porque será um sinal para uma nova hora! (neste caso, uma nova hora)





 
YuraZ:

se você trabalha em várias moedas, você não precisa cronometrar a barra principal ou não a barra principal

é necessário pegar uma marca de um novo início de barra - e calcular os indicadores por FECHAR, e não por fechar a barra

e dentro - fora


porque a entrada será precisamente no tique de uma nova barra de qualquer par controlado, porque será um sinal para uma nova hora! (neste caso, uma nova hora)

Mais como esta.......

 
LeoV:
YuraZ:

você não tem que cronometrar o par de moedas principal ou não o principal

você precisa pegar a marca de uma nova barra para qualquer par de moedas - e calcular os indicadores por FECHAR e não por fechamento de barra

e dentro - fora


porque a entrada será precisamente no tique de uma nova barra de qualquer par controlado, porque será um sinal para uma nova hora! (neste caso, uma nova hora)

Mais como esta.......

Reformular o Expert Advisor por esta lógica, e a probabilidade do PROBLEMA será reduzida muitas vezes

se você adicionar a captura de uma nova hora em TODOS os pares que estão em uma janela da revisão do mercado especialmente em ienes, então praticamente você não deve ter falhas


1 Apenas não pegue a nova barra em sincronia em todos os pares!!!

2 Apanhe NOVA BARRA em qualquer um dos pares CONTROLADOS, inicie o recálculo de todos os pares requeridos na corrente FECHADO ...

( a propósito, você pode precisar refazer alguns dos SEUS indicadores )


decidir entrar - sair - ou continuar a segurar

 
YuraZ:

Reformulando o Expert Advisor por esta lógica, a probabilidade de um problema será reduzida em alguns momentos

se você adicionar a captura de uma nova hora em TODOS os pares que estão na janela de visão geral do mercado especialmente em ienes, então praticamente você não deve ter falhas

1 simplesmente não pegue uma nova barra em sincronia em todos os pares!!!

2 Pegue uma NOVA BARRA em qualquer um dos pares CONTROLADOS, inicie o recálculo de todos os pares necessários no atual FECHADO ...

( a propósito, alguns dos SEUS indicadores podem precisar de ser recalculados )

e tomar a decisão de entrar - sair - ou de continuar mantendo

Obrigado veri Macha)))))))))))))