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...
[Deleted]  

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!

[Eliminato]  
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...