OrderModify() pergunta - página 3

 

Simon,

Estou tentando pensar como eu faria isso, mas nada está surgindo. Estou vasculhando o dicionário no MetaEditor em busca de possíveis rotas. Estou considerando o uso das funções OrderSymbol() e OrderSelect() em conjunto. Se você está me dando uma opção para uma dica, obviamente eu a aceito. Qual é a dica? ;) Considero isto mais como uma discussão do que como um desafio. Se você considerar isto um desafio, eu concordo com nenhuma dica. Tenho plena confiança na minha capacidade.

Obrigado.

 

Por que você usaria MarketInfo() ? para lhe dizer o que ?


Antes que você possa codificar isto, você precisa descobrir como fazê-lo e então ser capaz de expressar isto usando linguagem simples, e não código.


O código necessário para atender a esta exigência contém muitos aspectos do que você precisava fazer com o código que você colocou na Base de Código.


É hora de dormir para mim agora . . . então aqui está uma dica para você começar, você tem várias ordens, então você precisa passar por todas elas para encontrar a certa . . . ou talvez mais de uma, cobrir tantas opções quanto você possa ver.

Se você não conseguir encontrar uma maneira de me informar e eu encontrarei uma solução e afixarei . . . então você pode lê-la, compreendê-la e rasgá-la e me pedir para justificar qualquer parte dela que você ache errada ou desnecessária.

De qualquer forma, estou convencido de que você aprenderá no processo.

 

Simon,

Richard Bhauer me enviou uma versão revisada do que eu postei anteriormente. Definitivamente NÃO é a minha preferência de estilo de codificação, mas acho que é impressionante. Pensei em compartilhá-lo com você para ver se este código tem alguma conexão com um método que você está promovendo para seleção e fechamento de pedidos. Obrigado novamente a Richard. Além disso, uma razão pela qual eu pensei em tentar o OrderSymbol() foi porque eu escrevi EAs usando pedidos múltiplos de OrderSend("GBPUSD"...); ou qualquer par de moedas. Eu assumi que poderia simplesmente tentar um processo similar para fechar pedidos. Aparentemente, o trabalho de selecionar a ordem (a fim de fechá-la) é feito dentro da função OrderSelect(). No post anterior, você mencionou como uma dica, para tentar executar um loop para localizar o número correto do bilhete (estou supondo que o loop é executado primeiro e quando o bilhete for encontrado, desça para o próximo bloco de código contendo primeiramente a função OrderSelect(). Dentro da função OrderSelect() estaria a variável usada no bloco de código anterior do laço para encontrar o número correto do bilhete. A função OrderSelect() usaria a variável para selecionar o bilhete. Uma vez selecionado o bilhete, tudo o resto é bastante direto. Lerei sua resposta pela manhã.

Obrigado.

Arquivos anexados:
 
WhooDoo22:

Aparentemente, o trabalho de selecionar a ordem (para fechá-la) é feito dentro da função OrderSelect().

Leia a Documentação para as seguintes funções, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() todos eles têm o seguinte enunciado:Nota: A ordem deve ser previamente selecionada pela funçãoOrderSelect().

OrderClose() não tem esta declaração porque você passao número do bilhete para OrderClose() como primeiro parâmetro . . . com todas as funções listadas acima você não tem, então para usá-las você primeiro tem que selecionar a ordem que você está interessado, isto é, o trabalho de OrderSelect() . . então você pode encontrar seu tamanho de posição com OrderLots() ou seu preço aberto com OrderOpenPrice(), mas primeiro tem que ser selecionado.


Você deve entender este conceito e compreendê-lo ... . .

WhooDoo22:

No post anterior, você mencionou como uma dica, para tentar executar um loop para localizar o número correto do ticket (estou supondo que o loop é executado primeiro e quando o ticket for encontrado, desça para o próximo bloco de código contendo primeiramente a função OrderSelect(). Dentro da função OrderSelect() estaria a variável usada no bloco de código anterior do laço para encontrar o número correto do bilhete.

Como você vai encontrar o número correto do bilhete dentro de um loop ? você não sabe qual é o número correto do bilhete ... que informações você tem que você pode usar ?
 

Simon,

As seguintes funções, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() devem ser previamente selecionadas pela função OrderSelect().

A função OrderClose() não precisa ser selecionada previamente pela função OrderSelect() porque a função OrderClose() passa o número do bilhete como o primeiro parâmetro.

O objetivo da função OrderSelect() é selecionar uma ordem.

Conceitos entendidos, vou revisar a documentação.

Como você vai encontrar...

RE: Ainda estou trabalhando nisto.

Obrigado.

 

Simon,

Parece que você continua apontando o "número do bilhete". Eu entendo isso. Mas é o seguinte, estou ciente de apenas duas maneiras de isolar os bilhetes usando a função OrderSelect(). Posso usar o modo "Order pool", onde não há nenhuma variável específica de número de bilhete OU posso usar o outro modo, onde posso usar uma variável específica de nome "bilhete", "bababab22", "lambchops", qualquer coisa, para isolar o bilhete. Acredito que o uso da forma "Order pool" é muito prático, por isso estou considerando o uso desta função desta forma. Eu gosto disso.


Além disso, eu folheei a revisão de Robert e notei que quando ele fechou os pedidos, ele simplesmente usou a função OrderSelect(), (aquela onde você seleciona de um pool de pedidos) e a única condição "se" usada além do óbvio sinal de fechamento era o tamanho do lote e se o pedido era compra/venda. E foi isso. Eu gosto, mas esta não é atualmente a tarefa. Nesta tarefa, sim, com certeza, eu poderia digitar a mesma coisa, mas nada seria aprendido. O que é difícil atualmente é Como posso aprender o que você deseja ensinar, se eu não sei o que você está tentando me ensinar . Acredito que se você pudesse ser mais direto com seus pensamentos, eu poderia entender o que você deseja compartilhar com maior rapidez. Vou tentar ser mais compreensivo.

Obrigado.

 
WhooDoo22:

Simon,

Parece que você continua apontando o "número do bilhete". Eu entendo isso. Mas é o seguinte, estou ciente de apenas duas maneiras de isolar os bilhetes usando a função OrderSelect(). Posso usar o modo "Order pool", onde não há nenhuma variável específica de número de bilhete OU posso usar o outro modo, onde posso usar uma variável específica de nome "bilhete", "bababab22", "lambchops", qualquer coisa, para isolar o bilhete. Acredito que o uso da forma "Order pool" é muito prático, por isso estou considerando o uso desta função desta forma. Eu gosto disso.

Neste caso, você não pode armazenar o número do bilhete em uma variável, pois os pedidos são feitos manualmente, de modo que o código não conhece nenhum número de bilhete até que ele os descubra, de modo que você só pode usar a primeira opção usando um loop e OrderSelect().

Salvar números de bilhetes é um grande inconveniente e deve ser evitado a menos que você tenha que fazê-lo, o que significa que não há maneira possível de evitá-lo . . por quê ? porque seu código deve ser capaz de recuperar de um reinício do MT4, o que significa salvar as informações sobre os bilhetes em arquivos e, idealmente, copiar os arquivos para um 2º PC para uma capa de backup adicional. Então, quando o código reinicia, ele tem que ler o arquivo para obter os números dos bilhetes e tentar pegar de onde ele parou . . este tipo de complexidade não é necessário para a maioria das pessoas, mas muitas vezes elas pensam que salvar os números dos bilhetes é a opção mais simples . . . e não precisam realmente salvar as informações em arquivos, etc, etc . . . então quando tudo der errado, elas desejam ter.

OK, eu codifiquei minha versão do código para atender minha exigência, adicionei algumas verificações para detectar várias ordens USDJPY e modificar e fechar todas as ordens USDJPY . . . aqui estão algumas capturas de tela para mostrar como foi a versão final.


Os pedidos que eu fiz manualmente . .

Todos os pedidos

O USDJPYi pede meu código modificado (note o TP & SL) e fechado, e também o número do Ticket. Note também a mistura de pedidos de Compra e Venda.

Encomendas fechadas USDJPYi

Os pedidos restantes . .

Ordens remanescentes

 

Simon,

Neste caso, não se pode armazenar o número do bilhete em uma variável.

RE: Então você está indo com a rota de "pool de pedidos" para este exemplo, correto?

// order pool example

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Salvar números de bilhetes é um grande inconveniente...

RE: De acordo.

salvar as informações sobre os bilhetes para arquivos e, idealmente, copiar os arquivos para um 2º PC para uma cobertura adicional de backup...

RE: Sim, mas salvar informações sobre os tickets para arquivos, é um grupo separado de blocos de código para a minha situação atual. Eu não começaria a codificar isto até que os fundamentos estejam escritos.

Eu codifiquei minha versão do código para atender minha exigência...

RE: Sim, eu posso ver isso. Parece bem :)


Após completar esta tarefa, continuarei com o volume II. Não vai se escrever sozinho ;)

Obrigado.

 
WhooDoo22:

Simon,

Neste caso, não se pode armazenar o número do bilhete em uma variável.

RE: Então você está indo com a rota de "pool de pedidos" para este exemplo, correto?


Existe outra opção?
 

Simon,

Não, que eu saiba, não. Parece haver apenas duas opções e esta opção parece ser a melhor para o volume II. Além disso, parece menos complicado, e não me importo nem um pouco ;)

Então, voltando a esta tarefa, entendo que você usou o método de agrupamento de pedidos para selecionar o pedido no par usdjpy, mas que condição você usou para isolar o pedido no usdjpy?

Obrigado.

Razão: