Qual é o projeto correto? - página 6

 
valenok2003:
No código de enquanto , apenas para atrasar enquanto o fio está ocupado.

Depois é preciso atualizar as tarifas: RefreshRates(). Caso contrário, você usará os antigos valores asc e bid. Ou peça asc\i1 pelo MarketInfo.
 
VladislavVG:

Depois é preciso atualizar as tarifas: RefreshRates(). Caso contrário, você usará os antigos valores Ask e Bid. Ou pergunte no MarketInfo.

Então é aí que o cão está trabalhando.

Este projeto funcionou:

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

Ao menos funcionou bem na primeira vez.

Obrigado!

[Deleted]  
VladislavVG:

Depois é preciso atualizar as tarifas: RefreshRates(). Caso contrário, você usará os antigos valores asc e bid. Ou solicite asc\iTo no MarketInfo.

Obrigado!

Vou corrigir isso também no meu EA.

 
valenok2003:



Então é aí que o cachorro está.

Este é o projeto que o faz funcionar.

Ao menos funcionou bem na primeira vez.


Quase - uma condição a mais precisa ser corrigida :


  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    ...........................
Se a ordem não saiu, não há nada a fazer.

Boa sorte com isso.

 
VladislavVG:


Quase - uma condição a mais precisa ser corrigida :

Se o mandado não for emitido, não há nada a fazer.

Sim, isso faz sentido. Esta é uma supervisão do loop
while(OrdersTotal()>0)
 
valenok2003:
cinco
Aí você tinha escorregamento = 5, e isso não é suficiente para citações de cinco dígitos.
 

Portanto, em resumo:


//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slippage, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slippage, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

ou haverá algum outro comentário?

 
khorosh:
Aí você tinha escorregamento = 5, e isso não é suficiente para citações de cinco dígitos.
Em um mercado relativamente calmo, 5 é bastante IMHO.
 
Em uma ocasião, a base de código publicou seu próprio conjunto para fechar diferentes tipos.
Arquivos anexados:
 
https://www.mql5.com/ru/code/mt4