Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1852

 
EVGENII SHELIPOV #:

Não entendo porque, se eu bloquear a bandeira nesta função, a EA abrirá e fechará 100-200 pedidos de cada vez

Deixe-me explicar usando seu código:

Inicialmente, uma bandeira é hasteada.

int flag_close=0;
//+------------------------------------------------------------------+

Depois abre pedidos

//-------------------------------------------------------------------+  Команда на открытие первых ордеров в сетке
   if((UseHour==1 && Hour() >= StartTime && Hour()<=StopTime)||UseHour==0)
     {

Se surgir uma condição de fechamento do pedido (você tem três deles)

//-------------------------------------------------------------------+  Команда на закрытие сетки ордеров при условии (Суммарный профит сетки >=0 и Просадка больше заданного уровня)
   if(CalculiteProfit() >= 0 && Drawdown > DrawdownClosingTakeprofitZero)
     {
      flag_close=1;
//-------------------------------------------------------------------+  Команда на закрытие сетки ордеров
   if((CountTrade(0) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==0)||(CountTrade(1) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==1))
     {
      flag_close=1;
//-------------------------------------------------------------------+  Команда на закрытие первых ордеров
   if((CountTrade(0) == 1 && CalculiteProfit() >= 0 &&  OrderCloseSignal()==0)||(CountTrade(1) == 1 && CalculiteProfit() >= 0 &&  OrderCloseSignal()==1))
     {
      flag_close=1;

Esta bandeira recebe o valor "1" e começa a fechar as encomendas

//-------------------------------------------------------------------+  Команда на закрытие ордеров
      if(flag_close==1)ClosseAll();

E quando todas as ordens são fechadas, a bandeira recebe "0".

   if(CountTrade() == 0)
     {
      flag_close=0;
 
Tretyakov Rostyslav #:
Porque se a bandeira não é "0", ela chama constantemente a função ClosseAll()

Este pode ser o caso, desde que seja dada a ordem de abertura de uma ordem. Portanto, há uma espécie de "VERIFICAÇÃO" em curso.

 
EVGENII SHELIPOV #:

Este pode ser o caso, desde que seja dada a ordem de abertura de uma ordem. Portanto, há uma espécie de "CÁLCULO" em andamento.

Você tem um cartão de crédito?

Você vai a uma loja e compra uma garrafa de cerveja uma de cada vez e cada vez que você paga com o cartão até obter "0" no cartão,

depois vá e recarregue o cartão e vá e pegue outra cerveja.

 
Mihail Matkovskij #:

Sim. Mas a fechadura se abre com o mesmo lote. E duas ordens dirigidas de forma diferente são abertas simultaneamente. E hedging é quando um comércio entrou em um drawdown, e o comerciante abre uma posição com um lote maior na mesma direção (com direções diferentes eu me misturei) implicando que o preço irá reverter para obter lucro em um comércio com um lote maior e cobrir a perda de um comércio com um lote menor ou média a 0. Se eu tiver algo errado, então me corrija.

A cobertura não é absolutamente um bloqueio, ou bloqueio parcial, mas um sistema completamente diferente.

 
Vitaly Muzichenko #:

A cobertura não é absolutamente um bloqueio, ou bloqueio parcial, mas um sistema completamente diferente.

Mas não estou dizendo que é uma perda. Só fiquei confuso ontem (eu disse: você deveria abrir uma posição oposta ao invés de uma posição unidirecional). O tempo estava atrasado. E hoje entendi onde eu estava errado.

 
Mihail Matkovskij #:

Mas não estou dizendo que é uma perda. Só fiquei confuso ontem (eu disse: você deveria abrir uma posição oposta ao invés de uma posição unidirecional). O tempo já estava atrasado. E hoje eu percebi onde eu estava errado.

Faz sentido então, acontece :)

 
EVGENII SHELIPOV #:

Este pode ser o caso, desde que seja dada a ordem de abertura de uma ordem. Portanto, há uma espécie de "CLICKING" acontecendo.

Precisamos criar uma lista de pedidos, com carrapatos, para fechar (como muitos já disseram aqui). Se o robô detectou um sinal para sair, as ordens correspondentes (bilhetes) devem ser adicionadas à lista para fechar. A lista é passada por um ciclo que envia pedidos de fechamento (OrderClose). Então, precisamos verificar constantemente se há alguma ordem em aberto com as passagens que foram adicionadas à lista. Se um ou mais bilhetes não forem encontrados, devemos excluí-los da lista. Desta forma, a função não enviará um pedido de fechamento de pedidos que não existem.

O que fazer com os novos sinais e pedidos, que apareceram durante o período da lista preenchida? Você também pode adicioná-los à lista a ser fechada por um sinal de saída. Dessa forma, eles também serão fechados na sua vez. Isso é tudo. Criar tal lista e fechar os pedidos pelo bilhete ciclicamente. Você pode fazer isso com um intervalo de um segundo ou alguns segundos por uma passagem do ciclo. Tudo o que temos para realizar este algoritmo, e tudo vai funcionar.

 
Mihail Matkovskij #:

Precisamos criar uma lista de pedidos para fechar (como muitos já disseram aqui) com ingressos. Se o robô detectar um sinal de saída, então adicione as ordens correspondentes (bilhetes) à lista de fechamento. A lista é passada por um loop que envia um pedido de fechamento (OrderClose). Então você deve verificar constantemente se há alguma ordem em aberto com as passagens que foram adicionadas à lista. Se um ou mais bilhetes não forem encontrados, devemos excluí-los da lista. Desta forma, a função não enviará um pedido de fechamento de pedidos que não existem.

O que fazer com os novos pedidos, que apareceram durante o período da lista preenchida? Você também pode adicioná-los à lista de fechamento. Dessa forma, eles também serão fechados na sua vez. Isso é tudo. Crie tal lista e feche os pedidos na etiqueta de forma cíclica. Você pode fazer isso com um intervalo de um segundo ou alguns segundos por passagem de um ciclo. Tudo o que temos para realizar este algoritmo e tudo vai funcionar.

Quando a grelha for tão longa, fechará cada uma delas por sua vez.
Quando a última ordem for fechada, pode acontecer que haja 10 ordens a serem fechadas e todas elas serão fechadas uma a uma e isso levará um tempo infinito.

 
Alexander Avksentyev #:

Quando a grade leva tanto tempo, ela fechará as corretas, por sua vez.
Quando você fecha o último, pode acontecer que haja 10 pedidos a serem fechados, então ele fecha todos eles um por um e isso leva um tempo infinito.

Este não é exatamente o caso. Todos os pedidos são fechados pelo terminal um a um. No ciclo OrderSend, ele pode acionar muitas vezes por segundo (dependendo de seu hardware). Mas a OrderSend apenas adiciona os comandos apropriados à fila de fechamento. Em seguida,o terminal envia estes comandos ao servidor em um intervalo especificado ou após receber a resposta do servidor sobre a solicitação anterior, não imediatamente. Portanto, um grande número de pedidos (posições) são fechados muito mais lentamente do que um único pedido, de qualquer forma.

 
Alexander Avksentyev #:

Quando a grade leva tanto tempo, ela fechará as corretas uma a uma.
Quando você fecha o último, pode acontecer que haja 10 pedidos a serem fechados e ele fecha todos eles um por um e leva um tempo infinito.

Este processo é um processo ininterrupto.

Se verdadeiro, continuamos; se falso, processamos um erro; erro crítico, saímos; não-crítico (escorregamento), continuamos.

Se o negócio não for uma cozinha completa, 15-20 EAs fecham rapidamente, em torno de 2-3 segundos, caso contrário, até 15 segundos. Editar, houve casos de até 2 minutos.

Se for mt5, ele fecha quase instantaneamente.