Portanto, deinit é chamado quando eu excluo um robô de um gráfico - não consigo rastrear esta condição de outra forma..... é provavelmente mais fácil escrever um script separado que apague todos os robôs pendentes restantes, não há outra forma.
A propósito, outro pensamento sobre o assunto:
Acho que resolvi o problema da eliminação de ordens pendentes. Eu determino a quantidade de ordens "necessárias" (a serem removidas) em uma função separada, chamada esta função e depois, enquanto com condição (Total>0), então o ciclo de remoção para(int i=Total-1;i<=0l; i--), novamente calculando"necessário" e contador de tentativas de remoção com saída deenquanto quando o nível dado for alcançado. Desta forma, tudo é apagado.
Um loop infinito pode ocorrer aqui caso uma das ordens desapareça após o momento da contagem por qualquer motivo
Por que isso não pode ser feito? Por exemplo, criar uma variável global em nível terminal, atribuir um valor a ela e verificar o início e a mudança de valor desta variável através do serviço -->variáveis globais antes de ser desligada.
Bom dia!!! Não é possível encontrar uma solução bonita para a situação. Aqui está uma configuração típica de ordem. Mas se eu der zero ao meu robô em parâmetros, ou seja, sem paradas e takeprofits, nada vai funcionar.
Esta função retorna o número de posições abertas no momento. A seleção mais precisa das posições contadas é especificada por parâmetros externos:
sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
mn - identificador de posição, MagicNumber. O valor padrão de -1 significa qualquer identificador.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
E posso perguntar o que eles estão tentando fazer com isso?
for(int i=0; i<OrdersTotal(); i++)
parece que estão a tentar contar as posições em aberto...
...Mas não ceda aos seus sentimentos, mas consulte as regras. Neste caso, o loop está tentando parâmetros (na "lista" de ordens) envolvendo uma variável inteira i, e seu valor é incrementado em 1 a cada iteração. O número da ordem está sendo testado. :)))
Esta função retorna o número de posições em aberto no momento. Uma seleção mais precisa das posições a serem contadas é especificada por parâmetros externos:
sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão "" significa qualquer instrumento de mercado. NULL significa o instrumento atual.
op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
mn - Identificador de posição, MagicNumber. O valor padrão -1 significa qualquer identificador.
obrigado...vou adicionar esse tópico do fórum aos meus favoritos. :))
eh...porque não foi possível escrever assim a condição para verificar as ordens abertas:
se EncomendasTotal() > 0
tudo é claro e compreensível... seria...
Há uma hora que estou tentando descobrir COMO escrever esta condição...
Por que não? Você pode, mas será acionado se houver ordens abertas ou pendentes sobre qualquer símbolo.
Por que não? você pode, mas será acionado se houver ordens em aberto ou pendentes em qualquer instrumento.
Gostaria que funcionasse - tenho uma posição e uma ferramenta.
Mas não funciona!
Diz que há um erro no código.
a isto
---------------------------
int start()
{
//----
se EncomendasTotal()>0
PlaySound ("alert.wav");
//----
retorno(0);
}
-----------------------------
desiste de 8 erros!!!
Que tal isso?
Que tal isso?
:)))))))))))))))))))
lindíssimo! Obrigado
Portanto, deinit é chamado quando eu excluo um robô de um gráfico - não consigo rastrear esta condição de outra forma..... é provavelmente mais fácil escrever um script separado que apague todos os robôs pendentes restantes, não há outra forma.
A propósito, outro pensamento sobre o assunto:
Acho que resolvi o problema da eliminação de ordens pendentes. Eu determino a quantidade de ordens "necessárias" (a serem removidas) em uma função separada, chamada esta função e depois, enquanto com condição (Total>0), então o ciclo de remoção para(int i=Total-1;i<=0l; i--), novamente calculando"necessário" e contador de tentativas de remoção com saída deenquanto quando o nível dado for alcançado. Desta forma, tudo é apagado.
Um loop infinito pode ocorrer aqui caso uma das ordens desapareça após o momento da contagem por qualquer motivo
Por que isso não pode ser feito? Por exemplo, criar uma variável global em nível terminal, atribuir um valor a ela e verificar o início e a mudança de valor desta variável através do serviço -->variáveis globais antes de ser desligada.
E assim ?
E posso perguntar: o que eles estão tentando fazer com isso?
for(int i=0; i<OrdersTotal(); i++)
parece que eles estão tentando contar posições abertas usando o método da força bruta.
Bom dia!!! Não é possível encontrar uma solução bonita para a situação. Aqui está uma configuração típica de ordem. Mas se eu der zero ao meu robô em parâmetros, ou seja, sem paradas e takeprofits, nada vai funcionar.
Também podemos definir um "se" e inserir um pedido com zeros pela segunda vez, mas isso é um pouco incômodo.
E posso perguntar o que eles estão tentando fazer aqui?
for(int i=0; i<OrdersTotal(); i++)
parece que está a tentar contar as posições em aberto...
Bem, ele seleciona as ordens por parâmetros especificados.
por exemplo, https://www.mql5.com/ru/forum/131859/page3#434221
Função NúmeroOfPosições().
Esta função retorna o número de posições abertas no momento. A seleção mais precisa das posições contadas é especificada por parâmetros externos:
E posso perguntar o que eles estão tentando fazer com isso?
for(int i=0; i<OrdersTotal(); i++)
parece que estão a tentar contar as posições em aberto...
Desta forma, ele seleciona as ordens de acordo com determinados parâmetros.
por exemplo, https://www.mql5.com/ru/forum/131859/page3#434221
Função NúmeroOfPosições().
Esta função retorna o número de posições em aberto no momento. Uma seleção mais precisa das posições a serem contadas é especificada por parâmetros externos:
obrigado...vou adicionar esse tópico do fórum aos meus favoritos. :))