Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 843
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Para fechar uma posição com um bilhete, é necessário saber primeiro o número exato do bilhete da posição a ser fechada. Em seguida, você deve selecionar o pedido usando a função OrderSelect(ticket,SELECT_BY_TICKET), com verificação da seleção bem sucedida. Então precisamos verificar o horário de fechamento da ordem selecionada com sucesso. Por quê? Porque quando selecionamos por bilhete, o parâmetro de pool da função OrderSelect(..., ..., pool) é ignorado (é usado somente quando selecionamos por índice). E isso significa que mesmo que tenhamos selecionado com sucesso uma ordem, ainda precisamos saber em qual lista a escolhemos - a lista de posições fechadas ou abertas. É a verificação do tempo de fechamento que nos permite saber "se a ordem ainda está no mercado". Se o tempo de fechamento for igual a zero, a ordem ainda está no mercado. Se o tempo for diferente de zero, o pedido já foi fechado mais cedo. E depois de todo esse procedimento, podemos enviar uma ordem para fechar essa ordem.
Tenho um gráfico à minha frente. Vejo que uma ordem está aberta nele. Decidi fechá-lo. É isso aí. nada mais é necessário.
(Pergunto porque. Eu posso fechar com uma cruz de "um clique", mas estou muito confortável com as teclas de atalho)
int OrdensTotal(); - número de retorno, não verdadeiro-falso, isso é o que está errado. Não há ordens, significa 0, e se há ordens, não é apenas 1.
E não há ordens fechadas somente em uma conta recém-aberta que ainda não tenha sido negociada. Mais uma vez, este é um uso incorreto da função.
E por que RefreshRates(); APÓS o pedido ter sido enviado para o servidor? É como pagar por algo primeiro e depois perguntar "quanto é?
int OrdensTotal(); - número de retorno, não verdadeiro-falso, isso é o que está errado. Não há ordens, significa 0, e se há ordens, não é apenas 1.
E não há ordens fechadas somente em uma conta recém-aberta que ainda não tenha sido negociada. Mais uma vez, esta é uma má aplicação da função.
Mas por que atualizar(); APÓS o pedido ter sido enviado para o servidor? É como pagar por algo e depois perguntar "quanto é?
Depois de ouvir a expressão "O nome da capital russa comete dois erros", fiquei chocado. Onde eles poderiam ser encontrados lá? Então eu percebi que você pode cometer dois erros.
O que quero dizer é que também há mais de um erro na linha de código que estamos discutindo.
se(negação -> expressão == verdadeiro) Claro que podemos entender, como explica Artem, se 0 então tudo o resto é falso Então acontece que se negarmos que há ordens abertas então... oops... é mais fácil escrever Moscou com dois erros.
Tenho um gráfico na minha frente. Vejo que uma ordem está aberta. Decidi fechá-lo. É isso. nada mais é necessário.
(Pergunto porque. Posso fechá-lo com uma cruz de "um clique", mas acho muito conveniente o uso de teclas de atalho)
Aqui estou lhes dizendo como fazer isso de forma programática correta.
1. Você tem uma tabela na sua frente com um pedido. Você pode ver o número do bilhete, e o programa? O programa precisa saber este número.
2. Você quer fechá-lo. Assim, você pode ver que o pedido com tal bilhete é aberto. E o programa? O programa não o conhece. Portanto, o programa precisa saber se o pedido com tal bilhete é aberto ou não.
3. Você pode clicar na cruz, e pronto. E o programa precisa dar um comando.
Portanto, a conclusão é a seguinte:
1. Descobrimos se há uma posição em aberto
2. Se assim for, procuramos o bilhete do pedido solicitado
3. Selecionamos o pedido com base no bilhete encontrado. Se o tivermos selecionado com sucesso, então...
4. Verifique o horário de fechamento do pedido selecionado pelo bilhete. Se o tempo de fechamento for igual a zero, então...
5. Nós a encerramos.
Eu corrigiria sua resposta desta forma.
1. Na sua frente está uma tabela com uma ordem. Você pode ver seu número de bilhete
2. Você quer fechá-lo.
3. Você pode clicar na cruz e no ponto...
5. Feche isso.
Eu corrigiria sua resposta desta forma.
Ainda está brincando?
Sim. É o dia de folga.
Então, não podemos fazer um roteiro fechado semelhante ao roteiro de ordem aberta? Por ser tão simples...eu estava pensando...
A abertura de uma ordem também não é tão simples - não com um único comando de envio de ordem comercial. Todos esses comandos precisam ser "embrulhados" em uma função completa com a verificação dos códigos de retorno do servidor comercial e a reação a essas respostas. Verificação de níveis válidos, recalculando-os se um nível calculado incorreto for dado na ordem, etc., etc.
E fechamento - a mesma coisa: uma função separada de busca da ordem correta, que chama uma função completa de fechamento, em vez de apenas uma linha de código com o envio de uma ordem ao servidor.
A abertura de uma ordem também não é tão simples - não com um único comando de envio de ordem comercial. Todos esses comandos precisam ser "embrulhados" em uma função completa com a verificação dos códigos de retorno do servidor comercial e a reação a essas respostas. Verificação de níveis válidos, recalculando-os se um nível calculado incorreto for dado na ordem, etc., etc.
Espere... finalmente entender o que eu preciso...
Aqui está a abertura do pedido que eu precisava - OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0); . E este roteiro funciona.
Agora eu preciso fechar......