Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1443

 

Eu me deparei com um momento inexplicável. A conta é real. O robô define uma ordem p endente e segue o preço. Depois que o preço "capturou" a ordem pendente, ele abre uma posição de VENDA com um stop loss e take profit especificados. Até esse ponto, não há problemas. Em seguida, o preço se move na direção que eu quero e, pela ideia, deveria funcionar no take profit, que é de 50 pontos. Mas isso não aconteceu. Apesar do fato de o preço atual ter caído abaixo do nível do preço em que a posição foi aberta mais o tamanho do spread, ou seja, 50 + 14 pips, a posição foi fechada com o tamanho de 36 pips do preço de abertura. E assim se repete de tempos em tempos, de transação em transação. Executo o robô no testador e vejo que todas as posições fechadas têm o tamanho de 50 pips, como deveria ser.

Existe realmente um desvio constante e com um tamanho aproximadamente igual ao tamanho do spread de 14 pips? Algo estranho, você não acha? Aqui está o registro de uma das negociações de ontem.

KE      0       05:36:02.089    Trades  '1000008949': modify #1021600709 sell stop 0.04 EURUSDrfd -> price: 1.07870, sl: 1.07970, tp: 1.07820) done in 8.663 ms
RK      0       05:45:14.097    Trades  '1000008949': deal #1021883094 sell 0.04 EURUSDrfd at 1.07870 done (based on order #1021600709)
RJ      0       07:49:46.015    Network '1000008949': scanning network for access points
PJ      0       07:49:46.873    Network '1000008949': scanning network finished
IR      0       10:51:16.238    Trades  '1000008949': market buy 0.04 EURUSDrfd, close #1021600709 sell 0.04 EURUSDrfd 1.07870
FF      0       10:51:16.258    Trades  '1000008949': accepted market buy 0.04 EURUSDrfd, close #1021600709 sell 0.04 EURUSDrfd 1.07870
JF      0       10:51:16.558    Trades  '1000008949': market buy 0.04 EURUSDrfd, close #1021600709 sell 0.04 EURUSDrfd 1.07870 placed for execution
OI      0       10:51:16.558    Trades  '1000008949': order #1021607738 buy 0.04 / 0.04 EURUSDrfd at market done in 316.213 ms
EF      0       10:51:16.558    Trades  '1000008949': deal #1021888944 buy 0.04 EURUSDrfd at 1.07834 done (based on order #1021607738)

Saudações, Vladimir.

 
MrBrooklin ordem p endente e segue o preço. Depois que o preço "capturou" a ordem pendente, ele abre uma posição de VENDA com um stop loss e take profit especificados. Até esse ponto, não há problemas. Em seguida, o preço se move na direção que eu quero e, pela ideia, deveria funcionar no take profit, que é de 50 pontos. Mas isso não aconteceu. Apesar do fato de o preço atual ter caído abaixo do nível do preço em que a posição foi aberta mais o tamanho do spread, ou seja, 50 + 14 pips, a posição foi fechada com o tamanho de 36 pips do preço de abertura. E assim se repete de tempos em tempos, de transação em transação. Executo o robô no testador e vejo que todas as posições fechadas têm o tamanho de 50 pips, como deveria ser.

Existe realmente um desvio constante, e com o mesmo tamanho, aproximadamente igual ao tamanho do spread de 14 pips. Algo estranho, você não acha? Aqui está o registro da transação.

Saudações, Vladimir.

Talvez eu esteja deixando passar alguma coisa, mas acho que você precisa entender o que são obid e oask.

 
Vladimir Deryagin #:

Talvez eu esteja perdendo alguma coisa, mas acho que você precisa descobrir o que são oslances e ask

Também comecei a duvidar e achei que o problema estava no código. Mas então eu teria os mesmos problemas no testador de estratégias. Mas tudo está bem no testador de estratégias! Destaquei o tempo de execução em vermelho no processo de fechamento de uma negociação. Talvez seja esse o problema?

Atenciosamente, Vladimir.

P.S. Hoje fiz três negociações e elas fecharam com desvio de 10, 14 e 15 pontos. Parece um desvio. ((

 
Olá, um spread de 15 a 20 pips em um preço de cinco dígitos é normal. E 50 pips não são suficientes para um take. Se o lucro for da mesma ordem que o spread, você não terá sorte. Embora isso dependa de quem você é.
 
Aleksei Stepanenko #:
Olá, um spread de 15 a 20 pips em um preço de cinco dígitos é normal. E 50 pips não são suficientes para um take. Se o lucro for da mesma ordem que o spread, você não terá sorte. Embora isso dependa de quem você é.

Olá Alexey, concordo que essa não é a estratégia mais ideal para um robô, mas, desde que proporcione um lucro estável, deixe-a funcionar. Menos é melhor, mas é melhor.

Agora sobre minha pergunta. Examinei todos os registros e notei que, a partir de 1º de fevereiro, o tempo de fechamento das negociações aumentou drasticamente - de 50-70 msk para 330-450 msk. Vou me informar com minha corretora de câmbio sobre o que aconteceu.

Atenciosamente, Vladimir.


 

Você poderia me dizer se é possível alterar o ID de um Expert Advisor na tabela "Trade"?

Ou digamos que haja um script que defina ordens SellLimit,

trade.BuyLimit(1,10.75,NULL,0,0,0,0,0,0,0,0,0,0,NULL);

Como e onde especificar o número de ID no comando para que essa ordem possa ser capturada por um Expert Advisor com ID semelhante?

 
BOBEF #:

Você poderia me dizer se é possível alterar o ID de um Expert Advisor na tabela "Trade"?

Ou digamos que haja um script que coloque ordens SellLimit,

trade.BuyLimit(1,10.75,NULL,0,0,0,0,0,0,0,0,0,0,NULL);

Como e onde especificar o número de ID no comando para que essa ordem possa ser capturada por um Expert Advisor com um ID semelhante?

 trade.SetExpertMagicNumber(magic);
 trade.BuyLimit(1,10.75,NULL,0,0,0,0,NULL);
 
Alexey Viktorov #:

Obrigado, senhor
 

O que pode estar errado

int aaa = StringFind(Set, txt);

Set - a string que estamos procurando.

txt - o que estamos procurando.

por que aaa = -1 ???

E, em geral, uma variável de cadeia de caracteres pode ser de alguma forma diferente da mesma variável de cadeia de caracteres.

string a = "A";

string c = "A";

Em que casos é possível que a!=c ?

 

Existe alguma maneira de cancelar a saída de erros de conexão com o banco de dados?
Por exemplo, a função DatabaseOpen() imprime um erro sempre que o banco de dados está bloqueado e a função não consegue acessá-lo.
Mas essa é uma situação normal de trabalho para mim, eu mesmo capturarei esse erro e o emitirei, se necessário.

Como resultado, todo o registro está cheio de mensagens sobre a base bloqueada.

2023.02.13 18:57:21.917 database error, database is locked
Razão: