Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 417

 
evillive:



Quindi ho bisogno di un intero...
 

Gente, c'è bisogno di aiuto. La funzione deve chiudere necessariamente la metà degli ordini iniziando da quello più vecchio. Nel primo caso, gli ordini vengono chiusi uno per uno per qualche motivo, e nel secondo, iniziano a chiudersi nell'ordine sbagliato.

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:

Quindi ho bisogno di un intero...
MathRound
 
evillive:
MathRound


quindi questo è un arrotondamento, il numero non diventa int, rimane doppio
 
vadynik:

quindi questo è un arrotondamento, il numero non diventa int, ma rimane doppio

Quindi? C'è una differenza fondamentale tra 1 e 1.0 per i calcoli? Naturalmente il formato è doppio, ma il valore è intero.


Una variante particolarmente perversa: DoubleToStr e poi StringToInteger

 
vadynik:

Per favore, ditemi come rimuovere l'avviso nel nuovo compilatore

possibile perdita di dati a causa della conversione del tipo

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

Так помогает 

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

 
Zhunko:



Grazie, quindi nessun preallarme, mi sta già facendo incazzare)
 

Ciao, ho cercato da Kim, ma non riesco a trovare nulla che mi faccia sapere: da quale ordine (pendente) ha aperto la posizione? Da un ordine limite o un ordine stop?

Ho provato a confrontare i prezzi dell'ultimo ordine aperto

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

con una posizione aperta su di esso, ma l'intera logica è rotta. Forse c'è qualcosa di più adatto? Grazie!

 
Trader7777:

Gente, c'è bisogno di aiuto. La funzione dovrebbe chiudere necessariamente la metà degli ordini iniziando da quello più vecchio. Nel primo caso, gli ordini vengono chiusi uno per uno per qualche motivo, e nel secondo, iniziano a chiudersi nell'ordine sbagliato.


C'era una domanda come questa, come chiudere gli ordini a partire dal più vecchio, un paio di pagine dopo c'è una risposta e il codice corretto.


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

 
borilunad:

Ciao, ho cercato da Kim, ma non riesco a trovare nulla che mi faccia sapere: da quale ordine (pendente) ha aperto la posizione? Da un ordine limite o un ordine stop?

Ho provato a confrontare i prezzi dell'ultimo ordine aperto

con una posizione aperta su di esso, ma l'intera logica è rotta. Forse c'è qualcosa di più adatto? Grazie!

Boris. Prova a scrivere nel commento degli ordini - limite a limite, stop a stop. Poi da questi commenti di posizioni aperte saprete da cosa sono cresciute le gambe. Solo la chiusura parziale di questi commenti li cancellerà. Forse qualcos'altro può uccidere i commenti. Solo le posizioni cancellate vengono salvate nella cronologia. Quelli che funzionavano non ci sono. Devi passare attraverso... si capisce cosa si deve passare...