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 - asordens 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:
Se tivermos apenas duas posições, então devemos procurar a que tem mais lucro e fechá-la.
Se tivermos mais de duas posições, se o seu lucro total for superior ao especificado, então fechamos todas as posições.
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Já referi acima - asordens 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:
Temos apenas duas posições - por isso procuramos a que tem mais lucro e fechamo-la.
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?
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:
Temos apenas duas posições - por isso procuramos a que tem maior lucro e fechamo-la.
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.
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.
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
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.
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:
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:
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.
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:
A seguir, por favor, faça você mesmo alguma coisa.
Desculpe:
Mostrei um exemplo de solução para dois casos:
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 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
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?
Apago todos os objectos. Encerro os ficheiros. Aqui está o registo quando eu parar de testar:
Mas não vai começar da próxima vez - tenho de fechar o terminal e abri-lo novamente. Construir 2361.