Rilevamento di 5 cifre - pagina 2

 
7bit:
Sto cercando di scrivere un codice infallibile che non si rompa.

Se l'infallibilità è ciò che stai cercando, allora non scommetterei sulla struttura del file symbols.raw. È una struttura di file "interna" e non documentata. Nessuna garanzia che non cambierà nelle versioni future.

 

Ciao 7bit,

Penso che tu abbia ragione a cercare di creare un codice a prova di proiettile ....... ma ci saranno sempre dei limiti.

Basta guardare il feed demo di The Collective FX, dove stanno testando un feed indipendente combinato di diversi fornitori di liquidità (al contrario di un singolo feed concordato da più fonti), ognuno con il proprio suffisso di coppia di valute (abbiamo finalmente trovato un uso per il suffisso?), per rendersi conto della portata del problema. Questo significa che all'interno di 1 piattaforma si potrà scegliere tra EURUSD_fx o EURUSDm o EURUSD_dbfx come si vuole. Questo da solo sta andando a guidare un buco enorme nella vostra strategia come alcuni di questi sono 4 cifre di prezzo e altri 5 cifre.

Il "if (Digits == 3 || Digits == 5)" è il più completo che possiate trovare, in quanto funziona sulla semplice premessa che ci sono solo 2 tipi di broker, cioè quelli che hanno feed di pip interi e quelli che hanno feed di 1/10 di pip. Questo caso copre le 2/3/4/5 coppie di valute e i broker.

Per mia informazione, hai visto qualche caso che potrebbe essere un'eccezione? Nel caso dell'oro, è sempre stata una quotazione a 2 cifre e i nuovi broker 1/10 di pip la quotano a 3 cifre, quindi anche questo caso è ben coperto.

Suggerirei semplicemente di trattare tutte le eccezioni che trovate come tali e forse di fare un hard code su quel particolare problema piuttosto che cercare di trovare una soluzione holdall.

 
kennyhubbard:


Nel caso dell'oro, è sempre stata una quotazione a 2 cifre e i nuovi broker 1/10 di pip la quotano a 3 cifre, quindi anche questo caso è ben coperto.

Ho visto GOLD quotato con 1 cifra su un broker a 4 cifre. Non so il nome del broker perché era quando stavamo testando il mio generatore di segnali IRC in qualche canale IRC, ma uno dei miei tester ha fatto degli scambi su GOLD e le quotazioni sono venute con 1 cifra. Glielo chiesi e lui disse che il suo broker era a 4 cifre.

Questo è stato il momento esatto in cui ho deciso che l'approccio "3 o 5" deve essere fondamentalmente difettoso e ho iniziato a cercare qualcosa di meglio.
 
7bit:
Ho visto ORO quotato con 1 cifra su un broker a 4 cifre. [...] Questo è stato il momento esatto in cui ho deciso che l'approccio "3 o 5" deve essere fondamentalmente difettoso e ho iniziato a cercare qualcosa di meglio.

Su Alpari UK, che è generalmente un broker a 3/5 cifre, l'oro è quotato a 2DP con un tick di 0,05. Ho visto un riferimento da qualche parte su questo forum a qualcuno che commerciava titoli di stato americani che erano quotati a 3DP. Tuttavia, in questo caso la dimensione del tick non sarebbe stata 0,001.

Un possibile percorso è controllare che la precisione di un simbolo sia di 3/5 cifre e che la dimensione del tick sia 0.001/0.00001. In alternativa, a seconda di ciò che si sta cercando di ottenere esattamente, si potrebbe provare a rilevare le coppie di valute forex controllando che i primi sei caratteri consistano di due simboli di valuta conosciuti (cioè usando una lista hard-coded di valute riconosciute). Potreste anche essere in grado di usare MODE_PROFITCALCMODE come un modo per rilevare i simboli forex, al contrario di futures/azioni/ecc, ma sospetto che questo potrebbe non essere affidabile tra i vari broker.

 
Da qualche parte tra LotSize, TickSize, TickValue, Point, Margin, ecc... ci può essere un rapporto per risolvere questo.
Sono troppo ADD in questo momento per capire questo :)), ma se qualcuno è interessato qui è alcuni link di riferimento

- da Ais : LotSize,
- da fbj : Leva, margine ecc
 
La teoria per la soluzione si trova in fondo alla pagina 1, a meno che tutti voi pensiate che sia così stupido da non preoccuparvi di commentare.
 
Ruptor:
La teoria per la soluzione si trova in fondo alla pagina 1, a meno che tutti voi pensiate che sia così stupido che non vi siete preoccupati di commentare.

Parlando personalmente, non ho capito il tuo post precedente. Penso che la domanda originale di 7bit stia chiedendo come gestire scenari come il seguente: "C'è un parametro esterno in cui l'utente inserisce un valore in pip. In alcuni casi, la dimensione del pip che l'utente ha in mente è diversa dal MODE_TICKSIZE riportato dal broker - ad esempio il broker ha una dimensione del tick di 0,00001 ma l'utente sta chiamando un pip 0,0001. C'è un modo affidabile per leggere la mente dell'utente e capire quando il valore del pip inserito deve essere regolato, e di quanto?" Non c'è una risposta puramente matematica a questo secondo le linee che sembri suggerire. È una questione di una convenzione semi-arbitraria che un pip su e.g. EURUSD è generalmente considerato come 0.0001 nonostante il fatto che la maggior parte dei broker citi il simbolo a 5DP.

EDIT: ...che è il motivo per cui l'oro ecc. è così difficile, perché c'è meno di una convenzione concordata. Su Alpari UK, l'oro si muove con incrementi di 0.05. Se tu facessi un sondaggio tra i trader e chiedessi quanti pips rappresentano, penso che otterresti un numero ragionevole di voti per ciascuna delle seguenti quattro risposte: 5, 1, 0.5 e 0.05.

 
Ruptor:
Non è solo una semplice (forse non così semplice in termini matematici) questione di capire cosa sia un punto rispetto a un dato prezzo e poi decidere in quale cifra si trova rispetto alle cifre del prezzo?
Un modo semplice per ottenere questo potrebbe essere prendere un prezzo, aggiungere un punto e confrontarlo con il vostro moltiplicatore + lo stesso prezzo, se il risultato non è lo stesso, aumentate il vostro moltiplicatore in un ciclo fino a quando non corrispondono.

Ruptor,

L'hai detto in modo così sottile che credo di non averlo capito la prima volta che l'ho letto. Non l'ho ancora capito :)). Potresti per favore approfondire?

Alcuni broker come GCI elencano anche simboli future come S&P 500, IBM, Intel e persino Disney... come si applicherebbe allora?

 
Ciao cameofx
Un'immagine dipinge mille parole o codice in questo caso. pipx è quello che devi moltiplicare Point per ottenere 1/10000 th per un punto che è il valore usuale per il commercio.
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
Non è ancora a prova di errore se la valuta si muove su o giù 10 volte il suo valore contro la sua coppia, ma è impermeabile alle cifre del broker nel forex credo.
 
Ruptor:
[...] Non è ancora a prova di errore se la valuta si muove su o giù 10 volte il suo valore contro la sua coppia, ma è impermeabile alle cifre dei broker nel forex, credo.

Sono francamente sconcertato da questo. Per esempio, se il prezzo di USDJPY scendesse sotto 90, allora questo codice comincerebbe a riportare diversi valori di pipx su un broker 3/5DP.

Al momento, con USDJPY a circa 92.5, e con un broker 3/5DP dove Point = 0.001, allora tmpx/pipx viene valutato come segue:

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil() arrotonda tmpx a 10
  • pipx viene impostato a 10

Se il prezzo di USDJPY scendesse sotto 90 (per esempio 89,5), allora la valutazione andrebbe come segue:

  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil() arrotonda tmpx a 9
  • pipx rimane impostato su 1, non su 10

In altre parole, per ragioni che non capisco assolutamente, la definizione di pip di questo codice è sensibile ai cambiamenti di prezzo, e il suo moltiplicatore passa da un ordine di grandezza a un altro in base al prezzo, non (solo) in base alle impostazioni del broker. Avrebbe dato risultati diversi in momenti diversi della scorsa settimana. Su un broker 2/4DP, il pipx rimarrebbe a 1 per tutto il tempo, piuttosto che variare tra 1 e 10.