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

 
hoz:

Ripeterò la domanda che ho fatto ieri. Non voglio postarlo in un thread separato. Se qualcosa non è chiaro, risponderò a tutte le domande.

Ho ancora difficoltà a chiudere le posizioni richieste. La situazione è la seguente:

1. La chiusura delle posizioni viene monitorata.

2. Non appena l'ultima posizione si è chiusa sulla linea di take... ...tutte le posizioni aperte e in sospeso dovrebbero essere chiuse subito. Tutto è chiuso ordinato per lotti, cioè grandi lotti in una volta sola, e poi più piccoli. Questo è inteso solo per fare esperienza con gli ordini.

L'implementazione è la seguente:

In start() su ogni tick:

Siamo interessati alla chiusura degli ordini a mercato poiché quello in sospeso viene cancellato come richiesto. Ecco cosa abbiamo:

Per qualche motivo alcuni ordini non vengono chiusi. Stampo alcuni segmenti quando li vedo, non ci capisco niente. Ecco un esempio:

Il commento mostra che lastOOTHist = 01:30:00, anche se questo non è effettivamente corretto. Se controlliamo lastOOTHist nella finestra dei risultati, vedremo che

i loro orari di chiusura sono diversi...

Cosa c'è di sbagliato qui?

Hai confuso tutto...

proprio qui:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Stampe i valori di tutte le celle dell'array prima del ciclo - forse c'è un cane lì dentro?

 
Forexman77:
Potete dirmi come scoprire lo spread al momento dell'apertura di un trade, o meglio ancora, come farlo visualizzare nel log?

Immediatamente dopo aver aperto un'operazione:

ticket=OrderSend(......);
if(ticket>=0)Print("ticket #",ticket," Spread=",doubleToStr(Ask-Bid,Digits)); 
Il tuo spread è nel registro.
 
Sepulca:

Subito dopo l'apertura dell'affare:

Il tuo spread è nel registro.



Grazie mille! Fatto un EA, sul tester fa soldi, sulla demo è peggio. Probabilmente farà ancora peggio sul reale. Non ho visto quante volte ho guardato le immagini.

Quando guardavo visivamente lo spread non vedevo più di tre pip. La mia idea è che durante le mosse più forti non viene mostrata per niente o si allarga così non ho abbastanza tempo per notarla.

Alpari ha uno spread basso, ma presumo che aumenti significativamente durante i movimenti forti. In DucasCopi lo spread è ancora più basso, ma le commissioni sono grandi, diventano più piccole se il conto è di diversi milioni di dollari.

Avete fatto qualche ricerca sulla dimensione dello spread, con movimenti superiori a 50 pips al minuto? A quale valore aumenta lo spread medio con questi movimenti?

Ho chiesto ad Alpari, non l'hanno detto.

 
FAQ:


Quando si passa una variabile (array) in una funzione per valore, viene creata una variabile locale all'interno della funzione e la si dichiara nell'intestazione: myFunct(int my_var). In questo modo, i cambiamenti di questa variabile non possono essere visti al di fuori della funzione. E nel caso di un array, il compilatore ve lo ricorderà.

Se volete che i cambiamenti nel valore della variabile siano visibili all'esterno (fuori dalla funzione), passate le variabili per riferimento: myFunct(int & my_var)


Ma sì. Dopo tutto, un array è dichiarato globalmente. Ma il cambiamento all'interno della funzione è locale. Per questo esistono funzioni come microstrutture. Per implementare localmente i microproblemi.
 

Buon profitto a tutti! Per favore, ditemi come fare in modo che OrderOpenPrice() restituisca il prezzo con cinque cifre decimali. Se il terminale restituisce 4 cifre, se è 5, restituisce ancora 4, arrotondando il quinto.

 
ivan180976:

Buon profitto a tutti! Per favore, ditemi come fare in modo che OrderOpenPrice() restituisca il prezzo con cinque cifre decimali. Se il terminale restituisce 4 cifre, se è 5, restituisce ancora 4, arrotondando il quinto.


DoubleToStr(numero, precisione)
 

Forexman77:
Forexman77:



Grazie mille! Fatto un EA, guadagna sul tester, è peggio sulla demo. Probabilmente farà ancora peggio sul reale. Ci sto lavorando da un po', ma ho visto quante volte ci sono passato.

Quando guardavo visivamente lo spread non vedevo più di tre pip. La mia idea è che durante le mosse più forti non viene mostrata per niente o si allarga così non ho abbastanza tempo per notarla.

Alpari ha uno spread basso, ma presumo che aumenti significativamente durante i movimenti forti. In DukasCopi lo spread è ancora più basso, ma le commissioni sono grandi, diventano più piccole se il conto è di diversi milioni di dollari.

Avete fatto qualche ricerca sulla dimensione dello spread, con movimenti superiori a 50 pips al minuto? A quale valore aumenta lo spread medio con questi movimenti?

Ho chiesto ad Alpari, non hanno detto.


Stavo analizzando lo spread proprio venerdì, solo su Alpari a proposito:

Quelli gialli sottili rappresentano lo spread massimo per barra (ho usato un minuto). Rosso in grassetto - spread minimo per barra. Come potete vedere, durante il giorno lo spread varia da 5 a 14 pip in cinque cifre. Ma dopo le 21:00 lo spread orario del server non scende sotto i 10 punti, e alla fine della giornata sale generalmente fino a 52 punti. Ho colto un momento interessante prima del brusco cambiamento di prezzo, lo spread sale bruscamente:

 
artmedia70:

È un po' un'ammucchiata...

proprio lì:

for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }

Questo è solo per facilità di percezione. Quando scrivevo, ma per il resto, sì, non è necessario. Ma non disturba neanche me.

Non stamperà alcun valore di array:

artmedia70:

Stampe il valore di tutte le celle di un array prima del ciclo - forse il cagnolino sta scavando lì?



//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

L'uscita è vuota a tutti...

 
hoz:

Non emette alcun valore di array:


Non emette assolutamente nulla...

Quanto vuoto? Non stampa proprio nulla, o ci sono ancora degli zeri nelle celle dell'array?
 

Perché aumentate i nel corpo del ciclo?

 for(i=0; i<=p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
          i++;    // ??????????????????????????????????????
      }

e questo: i<=p, perché "o uguale a"?