Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 417

 
evillive:



Portanto, preciso de um número inteiro...
 

Pessoal, a ajuda é necessária. A função tem que fechar metade das ordens necessariamente começando com a mais antiga. No primeiro caso, as ordens são fechadas uma a uma por alguma razão, e no segundo, começam a fechar na ordem errada.

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0; double CTbuy = CountTrades(OP_BUY); double CTsell = CountTrades(OP_SELL); 
  for (int i = 0; i<=OrdersTotal;i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CTbuy/2 && CTbuy>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
             Sleep(1000);
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CTsell/2 && CTsell>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           Sleep(1000);
           
         }
       }
     }
   }
   
 }
 for (int i = OrdersTotal()-1; i>=0; i--)
 
vadynik:

Portanto, preciso de um número inteiro...
MathRound
 
evillive:
MathRound


por isso isto é arredondamento, o número não se torna intrigante, ele permanece o dobro
 
vadynik:

por isso, isto é arredondamento, o número não se torna int, mas permanece o dobro

Então? Existe uma diferença fundamental entre 1 e 1,0 para os cálculos? É claro que o formato é o dobro, mas o valor é inteiro.


Uma variante especialmente pervertida então: DoubleToStr e depois StringToInteger

 
vadynik:

Por favor, me diga como remover o aviso no novo compilador

possível perda de dados devido à conversão do tipo

int    SizeB      =MathAbs(Open[1]-Close[1])/Point;

Так помогает 

int    SizeB      =(int) ( MathAbs(Open[1]-Close[1])/Point );

 
Zhunko:



Obrigado, então não há pré-aviso, já está comendo meu olho)
 

Olá, procurei no Kim's, mas não encontro nada que me permita saber: De qual ordem (pendente) abriu a posição? De uma ordem de limite ou de uma ordem de parada?

Eu tentei comparar os preços do último pedido aberto

if(MathAbs(GetOrderOpenPrice()-LastPrice) <= slip)

com uma posição aberta sobre ela, mas toda a lógica está quebrada. Talvez haja algo mais adequado? Obrigado!

 
Trader7777:

Pessoal, a ajuda é necessária. A função deve fechar metade das ordens necessariamente começando com a mais antiga. No primeiro caso, as ordens são fechadas uma a uma por alguma razão, e no segundo, começam a fechar na ordem errada.


Houve uma pergunta como esta, como fechar pedidos começando com o mais antigo, um par de páginas depois há uma resposta e o código correto.


https://www.mql5.com/ru/forum/145455/page406

 
borilunad:

Olá, procurei no Kim's, mas não encontro nada que me permita saber: De qual ordem (pendente) abriu a posição? De uma ordem de limite ou de uma ordem de parada?

Eu tentei comparar os preços do último pedido aberto

com uma posição aberta sobre ela, mas toda a lógica está quebrada. Talvez haja algo mais adequado? Obrigado!

Boris. Tente escrever no comentário das ordens - limitar a limitar, parar a parar. Então, a partir destes comentários de posições em aberto, você saberá do que as pernas cresceram. Somente o fechamento parcial destes comentários os apagará. Talvez algo mais possa matar os comentários. Somente as posições eliminadas são salvas no histórico. Os que funcionaram não estão lá. Você tem que passar... você descobre o que tem que passar...
Razão: