Consigli utili per i partecipanti ai campionati - pagina 11

 
VNIK писал (а):

Scusate la domanda indiscreta agli organizzatori del campionato:

Come sarà gestita la tassazione del premio (perché l'importo di ogni premio è molto grande):

Ogni vincitore del premio dovrà pagare le proprie tasse? (e a quale ritmo?) O sarà centralizzato? (cioè le tasse sono già prese in considerazione?).

Sarebbe un peccato rinunciare a metà del premio per le tasse!

Sono d'accordo con te, anche a me dispiacerebbe dare la metà del tuo premio per pagare le mie tasse...
In realtà, è meglio non vincere affatto per non sentirsi dispiaciuti... .
 
VNIK:

Scusate la domanda indiscreta agli organizzatori del campionato:

Come sarà gestita la tassazione del premio (perché l'importo di ogni premio è molto grande):

Ogni vincitore del premio dovrà pagare le proprie tasse? (e a quale ritmo?) O sarà centralizzato? (cioè le tasse sono già prese in considerazione?).

Sarebbe un peccato rinunciare a metà del premio per le tasse!


Sì, i vincitori dei premi pagano le loro tasse - questa è una pratica standard per i premi in tutto il mondo.
 
Non c'è modo di testare se questa chiusura degli ordini funzionerà sempre correttamente:
while (OrdersTotal()>0)
   {
      OrderSelect(0,SELECT_BY_POS);
      if (OrderType()==OP_BUY)       OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      else if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      
      err=GetLastError();
      if (err==135 || err==138) RefreshRates();
   }
La domanda è: se il codice di errore non è 135 o 138, ci sarà un loop? Se sì, come si può evitare questo, con la garanzia che gli ordini si chiudano?
 
MAEstro:
Non c'è modo di testare se questa chiusura degli ordini funzionerà sempre correttamente:
Qui c'è un errore dopo l'altro. Ho contato 4 errori e sono tutti catastrofici.
Leggete di nuovo l'articolo sui consigli, per favore.
 
Ricordo questo consiglio a memoria, ma sembra essere poco utile :(

Grave trascuratezza del controllo degli errori con il looping
(Ho il controllo degli errori, gli ordini pendenti non sono utilizzati, o devo fare anche una condizione di uscita del ciclo? Cosa fare allora con la garanzia di chiusura dell'ordine? O forse non ho elaborato tutti i codici di errore?

Mancanza di controllo di OrderSelect - processi asincroni in azione
(sì, non controllo cosa restituisce Order_Select! Bene, diciamo che se in questo caso particolare restituisce false, cosa cambierà all'interno del ciclo, o cosa non sarà corretto? Non sto modificando l'ordine, lo sto chiudendo!)

Saltare la funzione di aggiornamento dell'ambiente di mercato attraverso RefreshRates()
(Penso di averla rinfrescata, tutto dovrebbe essere a posto qui)

Forse c'è un pezzo di codice pronto per la chiusura di TUTTI gli ordini? Vi sarei grato se poteste postarlo!

P.S. quello che Rosh ha suggerito http://www.alpari-idc.ru/ru/experts/articles/9.html , non garantisce di chiudere gli ordini!
 
Ci sono anche 5 errori:
  1. Il risultato di OrderSelect non è controllato
  2. il risultato di OrderClose() non è controllato esplicitamente
  3. GetLastError() può essere chiamato senza alcuna operazione di trading (per esempio, se si è incontrato un ordine in sospeso)
  4. RefreshRates() è chiamato non sempre, ma solo quando c'è un fallimento - questo è un errore grossolano
  5. se ci sono ordini pendenti nella lista, questo è un ciclo al 100%
Risultato: ci sono 5 errori in 9 righe - il codice può essere solo buttato via.
 
Renat:
Anche 5 errori:
  1. Il risultato di OrderSelect non è controllato
  2. il risultato di OrderClose() non è controllato esplicitamente
  3. GetLastError() può essere chiamato senza alcuna operazione di trading (per esempio, se si è incontrato un ordine in sospeso)
  4. ...
Risultato: ci sono 5 errori in 9 righe - il codice può essere solo buttato via.
E perché stipare tutto in un esperto per la competizione? Per leggere il registro?
L'OrderSelect dovrebbe selezionare e l'OrderClose dovrebbe chiudere gli ordini necessari.
E non dovrebbero esserci errori :-)
O a spese del cliente :-)
 
Renat писал (а):
Ci sono anche 5 errori:
  1. OrderSelect non controlla
  2. esplicitamente
  3. il risultato
  4. OrderClose()
  5. GetLastError() può essere chiamato senza alcuna operazione di trading (per esempio, se si incontra un ordine pendente)
  6. RefreshRates() non è sempre chiamato, ma solo in caso di fallimento - un errore grossolano
  7. se la lista contiene ordini pendenti, quindi 100% looping
Risultato: ci sono 5 errori in 9 righe - il codice può essere solo buttato via.

Obiettivo: chiudere tutti gli ordini con una garanzia del 100%.
Restrizioni: gli ordini in sospeso non sono utilizzati

1. Perché dovremmo controllare il risultato se dobbiamo chiudere un ordine? Se restituisce falso, vi ritornerà nel prossimo passaggio, poiché viene utilizzato un ciclo while.
2. Vedi punto 1.
3. C'è un controllo dei codici di errore per questo scopo.
4. Se si aggiorna sempre, allora non ha senso controllare gli errori :(
5. Nessun ordine in sospeso

Tutti gli esempi di chiusura degli ordini che ho trovato nella mia ricerca sono a passaggio singolo e funzionano solo se tutto va bene con il server, senza requotes, ecc. E tutti portano al fatto che un giorno un ordine non si chiuderà e otterremo un buon profitto... Se mi sbaglio, correggetemi, o datemi un link dove posso essere convinto che mi sbaglio.

Naturalmente sono ben consapevole che il mio codice può portare ad un loop, ma a mio parere è meglio del rischio di non chiudere un ordine, che potrebbe portare a gravi perdite finanziarie.
Anche se sarebbe meglio se tutti gli ordini fossero chiusi con il 100% di garanzia e non ci fosse la possibilità di un ordine in sospeso, questo è il codice che vorrei che tu mi dessi =)

Ecco un codice leggermente modificato, che dovrebbe anche tenere conto degli ordini in sospeso:
while (OrdersTotal()>0)
   {
      OrderSelect(0,SELECT_BY_POS);
      if (OrderType()==OP_BUY)       OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      else if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      else OrderDelete(OrderTicket());
      
      RefreshRates();
      err=GetLastError();
      if (err!=135 && err!=138 && err!=0) break;
   }

Non è così "spericolato" come il precedente?
Ancora non capisco, perché controllare OrderSelect e OrderClose in questo caso?
 
Purtroppo, nessuno darà garanzie sulle operazioni di trading. Il codice di cui sopra è molto meglio di quello precedente.

OrderSelect deve essere sempre controllato, questo è esplicitamente indicato nei Consigli utili:
  • Mancanza di controllo di OrderSelect - processi asincroni in azione


    Di solito un trader percepisce il suo programma come monotematico e unico. Ma in realtà, ci sono molti cambiamenti asincroni nel conto di trading proprio durante il funzionamento dell'Expert Advisor. Le posizioni vengono modificate, aggiunte e cancellate. Se il risultato di ogni chiamata di OrderSelect() non è controllato, allora può succedere che ad un certo momento l'esperto operi con dati sbagliati (zero) e faccia una mossa sbagliata.

 
Renat:
Purtroppo, non ci sono garanzie sulle operazioni di trading. Il codice di cui sopra è molto meglio di quello precedente.

OrderSelect deve essere sempre controllato, questo è esplicitamente indicato nei Consigli utili:
  • Nessun controllo di OrderSelect - processi asincroni in azione

    ... Le posizioni vengono modificate, aggiunte e rimosse. ...

Supponiamo che una posizione sia modificata. C'è una richiesta di selezionare un ordine in base a qualche condizione. Si è verificato un errore. Cosa può essere cambiato? Le condizioni iniziali potrebbero non essere disponibili al prossimo tick, quindi perché dovrei fare di nuovo lo stesso errore?
Nessun commento su "aggiunto e rimosso" :-(
Per favore, datemi un esempio funzionante di codice che usi OrderSelect per ottenere OrderCloseTime.