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

 
Vladpedro:

Não faz qualquer diferença. Tenho uma suspeita de diferença, porque quando estabeleço ordens e posições, atribuí-lhes "comentários" para as minhas próprias posições, para ordens minhas. Como resultado, quando uma ordem passa para uma posição, ela herda o comentário da ordem.

Depois, quando verificámos as posições através de comentários, houve uma confusão... os comentários eram diferentes. Eu corrigi isso.

No seu código, não encontrei nem compreendi de todo como as posições estão fechadas para a condição SELL_LIMIT desencadeou. Equidade.

Parece que verificámos se todas as posições podem ser fechadas, e se a bandeira está colocada para o efeito

mas noCloseAllPositions();

falta qualquer coisa.

Não há verificação para fechar todas as posições para o caso - SELL_LIMIT desencadeou.

Talvez esta mesmam_account.Equity()>= m_account.Balance()+15é implementada de alguma outra forma?

Ou talvez seja porque expliquei incorrectamente o significado da média no meu contexto.

Já mencionei acima - as ordens pendentes não têm nada a ver com isso. Uma ordem pendente não pode ter lucro. A partir da palavra "de todo". Enquanto não deixar isso claro, não pode seguir em frente.


Adicionado: mostrei uma solução de exemplo para dois casos:

  1. Se tivermos apenas duas posições, então devemos procurar a que tem mais lucro e fechá-la.
  2. Se tivermos mais de duas posições, se o seu lucro total for superior ao especificado, então fechamos todas as posições.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Vladimir Karputov:

Já referi acima - as ordens pendentes não têm nada a ver com isso. Uma ordem pendente não pode ter lucro. A partir da palavra "de todo". Enquanto não deixar isto claro, não poderá avançar mais.

Vladimir. Bem, é claro, uma ordem pendente não pode ter lucro. Naturalmente, estamos a falar do lucro das posições em aberto.

Apenas a diferença está em como estas posições foram abertas. Precisamos de um método de fecho diferente para elas.

Se a segunda posição for aberta a partir de uma ordem de SELL_STOP inteligente, então uma delas deve ser fechada, a que tiver um lucro maior da posição. Isto funcionou para si e funciona.

Se a segunda posição for aberta a partir de uma ordem SELL_LIMIT, então ambos devem ser fechados por Equidade(m_account.Equity()>= m_account.Balance()+15) A menos que o SL de um deles seja accionado primeiro.

Adicionado.

Mostrei um exemplo de solução para dois casos:

  1. Temos apenas duas posições - por isso procuramos a que tem mais lucro e fechamo-la.
  2. Ter mais de duas posições - se o seu lucro total for superior ao especificado - fechar todas as posições

Tudo parece estar bem com a segunda condição. Mas por alguma razão tenho a segunda condição abre a segunda posição e fecha-a imediatamente perto de 0 -1,2.

Talvez eu especifique o lucro total num lugar errado?

InpProfitTarget = 15; se aqui, não funciona.


 
Vladpedro:

Vladimir. É claro que uma ordem pendente não pode ter lucro. Estamos a falar de lucros, claro, de posições em aberto.

Apenas existe uma diferença na forma como estas posições foram abertas. Precisamos de um método de fecho diferente para elas.

Se a segunda posição for aberta a partir de uma ordem de SELL_STOP inteligente, então uma delas deve ser fechada, a que tiver um lucro maior da posição. Isto funcionou para si e funciona.

Se a segunda posição for aberta a partir de uma ordem SELL_LIMIT, então ambos devem ser fechados por Equidade(m_account.Equity()>= m_account.Balance()+15) A menos que o SL de um deles seja accionado primeiro.

Desculpe:

Mostrei um exemplo de solução para dois casos:

  1. Temos apenas duas posições - por isso procuramos a que tem maior lucro e fechamo-la.
  2. Se tivermos mais de duas posições, se o seu lucro total for maior do que o especificado, fechamos todas as posições.


A seguir, por favor, faça você mesmo alguma coisa.

 
Vladimir Karputov:

Desculpe:

Mostrei um exemplo de solução para dois casos:

  1. Temos apenas duas posições, por isso procuramos aquela com o maior lucro e fechamo-la.
  2. Temos mais de duas posições - se o seu lucro total for superior ao dado, fechamos todas as posições.


A partir daqui, por favor, faça você mesmo alguma coisa.

Obrigado pela sua ajuda Vladimir, estou a tentar.

2. temos mais de duas posições - se o seu lucro total for superior ao especificado, fechamos todas as posições.

Mas eu não precisava, precisava de duas ou mais posições onde a segunda fosse aberta com o accionamento doSELL_LIMIT.

De qualquer forma, obrigado pela vossa paciência e esforços. É claro que o resolverei à minha maneira, sofrerei e o resolverei))))

 
Boa noite rapazes, para não multiplicar tópicos - a minha pergunta é esta - o guião estabelece uma ordem de paragem pendente com uma tomada e paragem bem definida, não é executado, e nos comentários é prescrito [iliquidez] - como lutar - para fazer um loop do guião antes da execução, definir um deslize maior, ou prescrever o número de tentativas ou o quê ? Ou dê-me uma dica onde escavar.
 
neitrino22:
Boa noite rapazes, para não multiplicar os fios, eis uma questão - o guião coloca uma ordem de paragem pendente com um take and stop bastante específico, não é executado, e nos comentários é escrito [iliquidez] - como lidar com ele - fazer um loop do guião antes da execução, definir um deslize maior, ou especificar o número de repetições ou o quê ? Ou dê-me uma dica onde escavar.

Deve sempre procurar na documentação

ORDER_TIME_GTC

A ordem permanecerá na fila até ser retirada

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Viktorov:

Deve sempre procurar na documentação

ORDER_TIME_GTC

A ordem permanecerá na fila até ser retirada

Obrigado, deve ser isso

 

Boa noite!

Há 1 posição em aberto.

O Expert Advisor fecha uma posição utilizando o método PositionClose();

O resultado é impresso ResultRetcode= 10009. Descrição do código: feito às 0.00

Abaixo do código, há uma verificação se(PositionSelect(_Symbol)), que é bem sucedida.

Isto é, passa algum tempo entre a execução da PositionClose() e o desaparecimento da posição aberta, durante o qual o programa consegue fazer uma saída errada.

Como resolver esta situação correctamente?


 

Porque é que tenho de reiniciar o terminal sempre depois de um teste para fazer um novo teste?

2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Core 01 connecting to 127.0.0.1:3000
2020.04.27 15:19:08.415 Core 01 connected
2020.04.27 15:19:08.425 Core 01 authorized (agent build 2361)
2020.04.27 15:19:08.427 Tester  XAUUSD,M15 (Alpari-MT5-Demo): testing of Experts\ExpertTest.ex5 from 2017.07.26 00:00 to 2020.02.06 00:00
2020.04.27 15:19:08.466 Core 01 disconnected
2020.04.27 15:19:08.466 Core 01 connection closed

Apago todos os objectos. Encerro os ficheiros. Aqui está o registo quando eu parar de testar:

2020.04.27 15:15:43.188 Core 01 disconnected
2020.04.27 15:15:43.188 Core 01 connection closed
2020.04.27 15:15:43.189 Tester  stopped by user

Mas não vai começar da próxima vez - tenho de fechar o terminal e abri-lo novamente. Construir 2361.

 
Como posso obter um comentário de posição fechada na OnTradeTransaction?