Há algum tempo,, tenho tentado retrabalharo bloco de compra próxima para fechar apenas as duas últimasposições de compra, mas falhou. Você pode dizer a como refazero bloco?
É mais fácil e mais conveniente fazer uma função (bloco) para fechar uma última posição. E execute-o duas vezes. Em laço, ou apenas em fila.
Há algum tempo,, tenho tentado retrabalharo bloco de compra próxima para fechar apenas as duas últimasposições de compra, mas falhou. Você pode dizer a como refazero bloco?
Há algum tempo atrás eu dei a vocês um algoritmo de solução para encontrar as últimas posições. E então o que fazer com eles é IMPORTANTE: contar, apagar, modificar os STOPs. Se você não for capaz de escrever código pelo menos "na imagem e semelhança", não é seu (programação)...
peshihod: É mais fácil, e mais conveniente, fazer uma função (bloco) para fechar uma última posição. E execute-o duas vezes. Em laço, ou apenas em fila.
Eu preciso, que em qualquer variante de fechamento da última ordem, o seguinte tenha sido aberto em outra direção (quando as condições forem adequadas).
Todos os trabalhos, mas se eu tiver fechado por um stop loss, por exemplo, para vender, e as condições para abrir uma venda nessa direção, a abertura continua. O que precisamos é esperar por condições para comprar.
Ou seja, precisamos verificar o último pedido fechado, para que não coincida com o de abertura (alternância compra-venda-compra-venda). Apenas um pedido ou à espera de um sinal está em operação.
Entendo que provavelmente deveríamos usar o OrderHistoryTotal(), mas como seria em uma EA funcional?
Obrigado.
Este é provavelmente o caso em algum lugar. Mas se há muitos pedidos na história, é melhor usar seu próprio livro de pedidos. https://www.mql5.com/ru/articles/1404https://www.mql5.com/ru/articles/1390
Eu preciso, que em qualquer variante de fechamento da última ordem, o seguinte tenha sido aberto em outra direção (quando as condições forem adequadas).
Todos os trabalhos, mas se eu tiver fechado por um stop loss, por exemplo, para vender, e as condições para abrir uma venda nessa direção, a abertura continua. O que precisamos é esperar por condições para comprar.
Ou seja, precisamos verificar o último pedido fechado, para que não coincida com o de abertura (alternância compra-venda-compra-venda). Apenas um pedido ou à espera de um sinal está em operação.
Entendo que provavelmente deveríamos usar o OrderHistoryTotal(), mas como seria em uma EA funcional?
Obrigado.
Se você quiser aprender a programar, você pode olhar através do código dos outros (é para isso que serve CodaBase), ou proceder a partir do algoritmo da solução do problema. Pedir para escrever código para você é a maneira mais desesperada de aprender. Na maioria das vezes, você terá uma solução mal codificada para seu problema, algo como (alegoricamente) seu vizinho chamando-o à porta a cada minuto e perguntando "qual é seu nome" - trata-se de cálculos desnecessários (supérfluos).
O algoritmo para resolver seu problema pode ser o seguinte. Primeiro, você precisa ter certeza de que não tem "suas" ordens. Este problema, se não for para o testador (onde podemos limitar a solução à condição se (OrderTotal() == 0), é resolvido através de buscas de pedidos usando filtros para combinar OrderMagicNumber() e Symbol(). Em seguida, você verifica a condição (de acordo com sua estratégia) para abrir o pedido. Se houver um sinal, então usando a busca de OrderHistoryTotal() (geralmente é o último da lista), calcule o OrderType() da última ordem fechada. Se o sinal para abrir a ordem e o tipo da última ordem fechada não coincidirem, abra a ordem com base no sinal.
TarasBY: Há algum tempo atrás eu lhe dei o algoritmo para resolver a busca das últimas posições. E então o que fazer com eles não importa: contar, apagar, modificar STOP. Se você não for capaz de escrever código pelo menos "na imagem e semelhança", não é seu (programação)...
Sim, concordo, programação não é o meu forte, então estou aprendendo e fazendo perguntas aqui. Tentei adicionar fechamento de posição ao seu algoritmo mas falhou (todas as posições de compra estavam fechando) então decidi abordar o problema de outro ângulo e ver a solução de fechar as duas últimas posições de compra em um bloco de fechamento pronto que foi fornecido e oferecido a mim.
Eu ficaria muito grato se você pudesse me mostrar como fechar as duas últimas posições de compra. Vou entender onde cometi um erro.
double profits_buy_2pos()
{
int ordercount = 0, OpenOrders = OrdersTotal();
double pr_buy = 0;
for (int cnt = OpenOrders - 1; cnt >= 0; cnt--) // scan all orders and positions. ..
{
if (!OrderSelect (cnt, SELECT_BY_POS)) return (0.0);
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != magic) continue;
if (OrderType() != OP_BUY) continue;
pr_buy += OrderProfit();
ordercount++;
if (ordercount == 2) break;
}
Print ("::::::::::::::::::::::::: pr_buy2 = ", pr_buy);
Print ("::::::::::::::::::::::::: ordercount = ", ordercount);
return (pr_buy);
}
Se você quiser aprender a programar, ou analisar o código de outras pessoas (é para isso que serve CodaBase) ou seguir o algoritmo para a tarefa em questão. Pedir para escrever código para você é a maneira mais desesperada de aprender. Na maioria das vezes você não receberá o melhor código para sua tarefa, algo como (alegoricamente) quando seu vizinho toca a cada minuto sua campainha e pergunta "qual é seu nome" - trata-se de cálculos desnecessários (supérfluos).
Concordo plenamente com você. Você está 100% certo. Este é o caminho certo e eu tentei segui-lo. Entretanto, estudar a MQL4 sem os livros didáticos e ler sem motivo levou a nada. Eu tinha que analisar o código de outra pessoa de qualquer maneira, já que eu não podia colocar minhas próprias idéias malucas no programa na maior parte do tempo. Comecei a construir a estratégia em ....excel (está mais perto de mim e é mais compreensível). Quanto aos princípios básicos da estratégia, ela tem sido muito bem sucedida e clara (sobre a história, é claro). Mas além disso, devo levar em conta as peculiaridades do comércio: spread flutuante, swap, peculiaridades da corretora, é difícil encaixar tudo isso em fórmulas exelentes. Assim, decidi analisar a diferença entre lucro em excel e MQL. Francamente falando, a diferença é muito grande, não a meu favor. Ainda não sei, vou analisar cada posição, talvez o Conselheiro Especialista tenha cometido um erro, mas isso depende de mim.
De qualquer forma, boas pessoas neste fórum me ajudaram a resolver um problema específico, que grande agradecimento humano.
não, o problema de alterar o número de ordem de uma posição quando uma delas é fechada foi resolvido, eu verifiquei mais de uma vez pensando que pode haver um erro lá, mas tudo está bem lá, a ordem requerida é selecionada e o prejuízo é calculado corretamente para ela, mas a ordem não quer ser modificada...
O erro 1 é gerado somente se todos os parâmetros passados para a funçãoOrderModify( ) forem iguais a todos os parâmetros da ordem sendo modificada, que você( por número de bilhete) ou a funçãoOrderSelect() selecionada para modificação. Exemplo de uso do cheque:
abeiks:
Há algum tempo, , tenho tentado retrabalhar o bloco de compra próxima para fechar apenas as duas últimas posições de compra, mas falhou. Você pode dizer a como refazer o bloco ?
Há algum tempo, , tenho tentado retrabalhar o bloco de compra próxima para fechar apenas as duas últimas posições de compra, mas falhou. Você pode dizer a como refazer o bloco ?
Obrigado!
É mais fácil, e mais conveniente, fazer uma função (bloco) para fechar uma última posição. E execute-o duas vezes. Em laço, ou apenas em fila.
Obrigado, é uma boa opção que vou tentar também.
Devo ter escrito mal :(
Há um algoritmo para a abertura de pedidos.
Eu preciso, que em qualquer variante de fechamento da última ordem, o seguinte tenha sido aberto em outra direção (quando as condições forem adequadas).
Todos os trabalhos, mas se eu tiver fechado por um stop loss, por exemplo, para vender, e as condições para abrir uma venda nessa direção, a abertura continua. O que precisamos é esperar por condições para comprar.
Ou seja, precisamos verificar o último pedido fechado, para que não coincida com o de abertura (alternância compra-venda-compra-venda). Apenas um pedido ou à espera de um sinal está em operação.
Entendo que provavelmente deveríamos usar o OrderHistoryTotal(), mas como seria em uma EA funcional?
Obrigado.
Este é provavelmente o caso em algum lugar. Mas se há muitos pedidos na história, é melhor usar seu próprio livro de pedidos. https://www.mql5.com/ru/articles/1404https://www.mql5.com/ru/articles/1390
Uma opção mais rígida
Devo ter escrito mal :(
Há um algoritmo para a abertura de pedidos.
Eu preciso, que em qualquer variante de fechamento da última ordem, o seguinte tenha sido aberto em outra direção (quando as condições forem adequadas).
Todos os trabalhos, mas se eu tiver fechado por um stop loss, por exemplo, para vender, e as condições para abrir uma venda nessa direção, a abertura continua. O que precisamos é esperar por condições para comprar.
Ou seja, precisamos verificar o último pedido fechado, para que não coincida com o de abertura (alternância compra-venda-compra-venda). Apenas um pedido ou à espera de um sinal está em operação.
Entendo que provavelmente deveríamos usar o OrderHistoryTotal(), mas como seria em uma EA funcional?
Obrigado.
Se você quiser aprender a programar, você pode olhar através do código dos outros (é para isso que serve CodaBase), ou proceder a partir do algoritmo da solução do problema. Pedir para escrever código para você é a maneira mais desesperada de aprender. Na maioria das vezes, você terá uma solução mal codificada para seu problema, algo como (alegoricamente) seu vizinho chamando-o à porta a cada minuto e perguntando "qual é seu nome" - trata-se de cálculos desnecessários (supérfluos).
O algoritmo para resolver seu problema pode ser o seguinte. Primeiro, você precisa ter certeza de que não tem "suas" ordens. Este problema, se não for para o testador (onde podemos limitar a solução à condição se (OrderTotal() == 0), é resolvido através de buscas de pedidos usando filtros para combinar OrderMagicNumber() e Symbol(). Em seguida, você verifica a condição (de acordo com sua estratégia) para abrir o pedido. Se houver um sinal, então usando a busca de OrderHistoryTotal() (geralmente é o último da lista), calcule o OrderType() da última ordem fechada. Se o sinal para abrir a ordem e o tipo da última ordem fechada não coincidirem, abra a ordem com base no sinal.
Esta abordagem envolve cálculos mínimos e reduz muito o tempo de otimização do Expert Advisor no testador.
Há algum tempo atrás eu lhe dei o algoritmo para resolver a busca das últimas posições. E então o que fazer com eles não importa: contar, apagar, modificar STOP. Se você não for capaz de escrever código pelo menos "na imagem e semelhança", não é seu (programação)...
Sim, concordo, programação não é o meu forte, então estou aprendendo e fazendo perguntas aqui. Tentei adicionar fechamento de posição ao seu algoritmo mas falhou (todas as posições de compra estavam fechando) então decidi abordar o problema de outro ângulo e ver a solução de fechar as duas últimas posições de compra em um bloco de fechamento pronto que foi fornecido e oferecido a mim.
Eu ficaria muito grato se você pudesse me mostrar como fechar as duas últimas posições de compra. Vou entender onde cometi um erro.
Se você quiser aprender a programar, ou analisar o código de outras pessoas (é para isso que serve CodaBase) ou seguir o algoritmo para a tarefa em questão. Pedir para escrever código para você é a maneira mais desesperada de aprender. Na maioria das vezes você não receberá o melhor código para sua tarefa, algo como (alegoricamente) quando seu vizinho toca a cada minuto sua campainha e pergunta "qual é seu nome" - trata-se de cálculos desnecessários (supérfluos).
Concordo plenamente com você. Você está 100% certo. Este é o caminho certo e eu tentei segui-lo. Entretanto, estudar a MQL4 sem os livros didáticos e ler sem motivo levou a nada. Eu tinha que analisar o código de outra pessoa de qualquer maneira, já que eu não podia colocar minhas próprias idéias malucas no programa na maior parte do tempo. Comecei a construir a estratégia em ....excel (está mais perto de mim e é mais compreensível). Quanto aos princípios básicos da estratégia, ela tem sido muito bem sucedida e clara (sobre a história, é claro). Mas além disso, devo levar em conta as peculiaridades do comércio: spread flutuante, swap, peculiaridades da corretora, é difícil encaixar tudo isso em fórmulas exelentes. Assim, decidi analisar a diferença entre lucro em excel e MQL. Francamente falando, a diferença é muito grande, não a meu favor. Ainda não sei, vou analisar cada posição, talvez o Conselheiro Especialista tenha cometido um erro, mas isso depende de mim.
De qualquer forma, boas pessoas neste fórum me ajudaram a resolver um problema específico, que grande agradecimento humano.
não, o problema de alterar o número de ordem de uma posição quando uma delas é fechada foi resolvido, eu verifiquei mais de uma vez pensando que pode haver um erro lá, mas tudo está bem lá, a ordem requerida é selecionada e o prejuízo é calculado corretamente para ela, mas a ordem não quer ser modificada...
O erro 1 é gerado somente se todos os parâmetros passados para a funçãoOrderModify( ) forem iguais a todos os parâmetros da ordem sendo modificada, que você( por número de bilhete) ou a funçãoOrderSelect() selecionada para modificação. Exemplo de uso do cheque:
Somente "Funções úteis da KimIV".
Função ModifyOrder()https://www.mql5.com/ru/forum/131859