Prezzo per pip - pagina 3

 

Hehe un altro cliente felice :)- già che ci siamo, LEHayes ti dispiace darmi una mano a calcolare il money management in percentuale senza arrotondare i pips. Ecco quello che uso attualmente quando voglio puntare l'1% del mio conto:

double Profit_F=0.00001,Lots=0.1;
Lots=NormalizeDouble((AccountEquity()*Profit_F),1);
se (Lotti < 0,1) Lotti=0,1;
se (Lotti > 1.0) Lotti=1.0;

Questo funziona bene per il mio stoploss di 100 quando ho un $ 10.000 per esempio. Come $10.000 X 0,00001 = 0,1 Lotto. Ma quando ho $15.000 la dimensione del lotto ora è uguale a 0.15, ma si arrotonda a 2.0 forse perché il mio broker non permette macro lotti. Come posso forzarlo a rimanere a 0,1 fino a quando le azioni non raggiungono i 20.000 dollari? Sono sveglio da molto tempo, dopo aver letto il tuo thread, sono troppo stanco per cercare e studiare. Se avete un'altra equazione per calcolare il mm, vi prego di fornirla al suo posto.

 
LEHayes:

Questo mi sta facendo impazzire, sono mesi che cerco un algoritmo esistente che non faccia altro che calcolare il Prezzo per Pip, indipendentemente dalla coppia su cui si trova. Ho trovato 2 strategie di gestione del denaro davvero buone che dipendono entrambe da questo valore come un modo per precalcolare le dimensioni degli scambi e la gestione del rischio di denaro, ma non riesco a trovare un singolo esempio di un calcolo che gestisca il Prezzo per Pip.

Sono disposto a offrirvi il mio sistema di gestione del denaro in cambio di questa funzione. Vi fornirò entrambe le tecniche suggerite dai mentori con cui ho lavorato.


Per prima cosa dobbiamo riconoscere che ci sono cinque tipi di simbolo di base. Questo è importante quando si tratta di questioni come il calcolo del tick_value, la leva finanziaria e così via.

Non esiste una definizione formale di tipo di simbolo, ma per un conto denominato in USD ecco come enumero i tipi di simbolo: (questi sono esempi specifici, non tutti inclusi)
            SymbolType 1:  Symbol() = USDJPY
                           
                           Base = USD
                           Counter = JPY
            
            SymbolType 2:  Symbol() = EURUSD
                           
                           Base = EUR
                           Counter = USD

            SymbolType 3:  Symbol() = CHFJPY
                           
                           Base = CHF
                           Counter = JPY
                           
                           USD is base to the base currency pair - USDCHF
                           
                           USD is base to the counter currency pair - USDJPY
            
            SymbolType 4:  Symbol() = AUDCAD
                           
                           Base = AUD
                           Counter = CAD
                           
                           USD is counter to the base currency pair - AUDUSD
                           
                           USD is base to the counter currency pair - USDCAD
            
            SymbolType 5:  Symbol() = EURGBP
                           
                           Base = EUR
                           Counter = GBP
                           
                           USD is counter to the base currency pair - EURUSD
                           
                           USD is counter to the counter currency pair - GBPUSD

La rilevanza è come la denominazione del conto è legata alla valuta di base e alla contro valuta dello strumento finanziario di interesse. È lo stesso per i CFD così come per le coppie di valute.

Una volta che hai il tipo di simbolo puoi calcolare la leva per strumento finanziario - per esempio ecco il codice necessario per calcolare la leva per AUDCAD:

CalculatedLeverage=NormalizeDouble(MarketInfo(Symbol(),MODE_LOTSIZE)*(MarketInfo(CalculatedBasePairForCross,MODE_BID)+MarketInfo(CalculatedBasePairForCross,MODE_ASK))/(2*MarketInfo(Symbol(),MODE_MARGINREQUIRED)),2)
In questo esempio la funzione di chiamata che ho codificato avrebbe già determinato che per AUDCAD il CalculatedBasePairForCross è AUDUSD:
CalculatedBasePairForCross=StringConcatenate(SymbolBase,AccountCurrency(),postfix);
E il SymbolBase (cioè la valuta base dello strumento finanziario Symbol()) è:
SymbolBase=StringSubstr(Symbol(),0,3);
E così via.

Per il calcolo del valore del tick è necessario tenere conto del tipo di simbolo, poiché questo ha importanza quando la valutazione cambia sia nello strumento finanziario di interesse - Symbol() - sia nella coppia di valute di collegamento che riporta alla denominazione del conto. Continuando l'esempio precedente in cui stiamo discutendo il tipo di simbolo 4 - AUDCAD quando il conto è denominato in USD - il valore di tick è esplicitamente definito come:

CalculatedTickValue=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID)
Dove la variabile CalculatedCounterPairForCross per AUDCAD è stata precedentemente determinata come USDCAD:
CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);
E SymbolCounter è stato determinato da:
SymbolCounter=StringSubstr(Symbol(),3,3);

Programmando il calcolo di questi valori esplicitamente in questo modo è possibile effettuare determinazioni di informazioni di mercato indipendenti dal broker.

Tenete presente che questo codice è utile solo per symboltype = 4 in cui la valuta di denominazione del conto è la contro valuta quando è accoppiata alla valuta base di Symbol() e allo stesso modo la valuta di denominazione del conto è la valuta base quando è accoppiata alla contro valuta che forma la coppia Symbol().

(AUDCAD -> AUDUSD & USDCAD)

Si scopre che mentre ci sono cinque tipi di simboli universali è necessario categorizzarne solo quattro per calcolare la leva, il margine e il valore del tick. E la matematica diventa un punto critico specifico solo quando si tratta di coppie di valute incrociate relative alla denominazione del conto.

Ho elaborato le relazioni specifiche tra tutte le combinazioni di base e contatore perché il mio approccio di gestione del denaro è quello di definire esplicitamente il valore a rischio di perdita per ogni operazione e ciò richiede di conoscere esattamente il valore del prezzo al quale l'operazione deve essere abbandonata in modo che la perdita sia conforme al budget di perdite precedentemente definito. Per le coppie di valute si scopre naturalmente che il valore a rischio si basa sul prezzo di due coppie di valute in qualsiasi momento (a meno che non si copra contro una o l'altra).

Queste informazioni sono di qualche aiuto?

 
cloudbreaker:

TICKVALUE, se usato da solo, può essere inaffidabile.

Sarebbe interessante sapere a quali broker questo si applica, o se ci sono altre considerazioni come l'essere intorno all'apertura/chiusura del mercato. Non sono mai stato in grado di replicare questi vostri risultati.

 
Ha ha. Mi rendo conto che jjc. Ma non fa male usare il rapporto. La maggior parte delle volte divideremo per 1. Meglio prevenire che curare, eh? CB
 
1005phillip:

Queste informazioni aiutano in qualche modo?

Non ho mai notato la distinzione che hai fatto tra il tipo di simbolo 3-5 (o forse non ci ho pensato in questo contesto). Comunque, buoni spunti di riflessione... Complimenti per l'eccellente riassunto!
 

Wow, non mi ero mai reso conto che ci fosse così tanto da calcolare il valore di un pip, nel mio EA l'ho fatto lasciando che l'ea lo calcolasse usando il primo ordine aperto, se è un acquisto, current bid price - order open price /order profit = valore pip nella valuta base corrente, o se è una vendita, currentask+openprice/orderprofit= valore pip, questo non funziona correttamente?

Edit: mi rendo conto che ho scritto al contrario, volevo dire orderprofit/(currentbid-openprice)=valore pip

 
SDC:

Wow, non mi ero mai reso conto che ci fosse così tanto da calcolare il valore di un pip, nel mio EA l'ho fatto lasciando che l'ea lo calcolasse usando il primo ordine aperto, se è un acquisto, prezzo di offerta corrente - prezzo aperto dell'ordine / profitto dell'ordine = valore pip nella valuta di base corrente, o se è una vendita, currentask+openprice/orderprofit= valore pip, questo non funziona correttamente?


Questo calcolo è valido nel limite in cui ogni pip ha la stessa valutazione indipendentemente dal prezzo corrente di acquisto o di vendita.

Questo è rigorosamente vero per le coppie di valute che sono di tipo simbolo = 2 come le ho definite sopra, cioè EURUSD, ecc. (qualsiasi coppia di valute in cui la denominazione del conto è la contro-valuta della coppia).

Per la maggior parte delle persone le differenze non sono probabilmente importanti, gli errori risultanti sono piccoli. Nel mio caso volevo calcolare in modo robusto i valori con espressioni analitiche corrette.

Per esempio, se metto in preventivo 200 dollari per la massima perdita possibile su un'operazione imminente e i miei stop sono impostati a 200 punti, allora voglio sapere la dimensione del lotto per il mio ordine in modo che le mie perdite non possano superare i 200 dollari... per essere robusto su questo, devo calcolare correttamente la valutazione dei pip al punto del prezzo dello stoploss. Il wing it non era un'opzione accettabile per me o per i miei clienti ;)
 

Sono contento che LEHayes abbia risolto tutto. E Phillip, hai completamente demistificato TickValue & coppie di layout-sintetizzando molto bene per tutti di beneficiare. Fantastico!

Vorrei solo aggiungere: le operazioni di sintetizzazione ...

CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);

SymbolCounter=StringSubstr(Symbol(),3,3);

... bisogna fare attenzione alle appendici extra come USDJPYm in alcuni broker di mini-lotto. Non so se un broker potrebbe/dovrebbe alterare le prime sei lettere dei simboli mettendo o aggiungendo una lettera davanti o tra base e contatore, se stai cercando la robustezza, IMO leggere da un file .set o .sel è una scommessa più sicura.

 
cameofx:

Sono contento che LEHayes abbia risolto tutto. E Phillip, hai completamente demistificato TickValue & coppie di layout-sintetizzando molto bene per tutti di beneficiare. Fantastico!

Vorrei solo aggiungere: le operazioni di sintetizzazione ...

CalculatedCounterPairForCross=StringConcatenate(AccountCurrency(),SymbolCounter,postfix);

SymbolCounter=StringSubstr(Symbol(),3,3);

... bisogna fare attenzione alle appendici extra come USDJPYm in alcuni broker di mini-lotto. Non so se un broker potrebbe/dovrebbe alterare le prime sei lettere dei simboli mettendo o aggiungendo una lettera davanti o tra base e contatore, se stai cercando la robustezza, IMO leggere da un file .set o .sel è una scommessa più sicura.


Tuttavia non sto cercando questo tipo di robustezza quando parlo di calcoli robusti.

I broker possono chiamare le loro coppie di valute come vogliono, si spera che io abbia la presenza di spirito di notare ciò e modificare i miei codici di conseguenza prima di tentare il trading dal vivo con un nuovo broker usando il simbolo di valuta lovelyUSDmoonCADcheese! :P

Questo codice si occupa semplicemente del 100% dei casi in cui mi sono imbattuto finora (Alpari, CitiFX, CMS forex, forex.com, FXCM, FXDD, IBFX, MIG, e ODL)... non mi preoccupo di renderlo a prova di futuro, semplicemente a prova di presente. Ora, se hai qualcosa in mente per renderlo a prova di futuro... beh, questo è un buon momento per dire la tua :)

 

lovelyUSDmoonCADcheese! ...

Lol! Ho visto broker sbagliare la descrizione del Symbol nella proprietà del simbolo (non il parametro Symbol() ma devono digitare anche questo a un certo punto!) Chi lo sa! :))

Non so dire se sarebbe mai infallibile al 100% (cosa lo è?). Ma sto pensando a qualcosa del genere:

  • creare una lista/inventario di possibili 3 lettere maiuscole di nome base/contatore.
  • Leggere la stringa di coppia da .set o .sel.
  • Cerca una possibile corrispondenza spostando una lettera alla volta. Ignorando le possibili combinazioni maiuscole/minuscole (il valore ASCII differirebbe di x interi, bisogna controllare) possiamo usare un ciclo per trasformare tutte le lettere in maiuscole per esempio.
  • Se viene trovata una corrispondenza, salvarla come nome 'broker'/'alias' in contrapposizione al nome 'inventario' che abbiamo. Continuate a cercare la seconda parte della coppia e fate lo stesso.
  • dobbiamo controllare anche se il nome di una base / contatore è coerente attraverso al Symbol(). E salvare anche i suoi 'alias'.
  • usare gli alias per sintetizzare la coppia.
  • se un nuovo nome di base/contatore è alterato o aggiunto. Aggiungetelo agli alias.

Gordon qualche tempo fa mi offre la sua opinione su quali meriti avrebbe un controllo automatico a prova di errore in un EA. Avendo questo in mente (e rispettandolo) penso ancora che questo possa essere qualcosa di utile, anche solo per il gusto di farlo! :)