Rilevamento di 5 cifre - pagina 6

 
cameofx 2010.07.29 10:52

I use below functions now, and it's usable across different brokers & instruments.

double vPoint; 
if(Digits == 2 || Digits == 4) vPoint = Point; else
if(Digits == 3 || Digits == 5) vPoint = Point*10; // I use this for my indies; call once on init() & use where Point supposed to be used in start() 

double Poin() 
{ 
   int d = Digits;
   switch(d){
   case 2 : {return(Point); break;}
   case 4 : {return(Point); break; }
   case 3 : {return(Point*10); break;}
   case 5 : {return(Point*10); break:}
   default : return;
} // I just come up with this. Untested but should be ok/robust. To be used to replace Point for trade parameters calculations. 

cheers, ~ cameo

Ecco una soluzione alternativa al problema che uso io...

int init()
  {
   double SymPoint;
   if (Point == 0.00001) SymPoint = 0.0001; //5 digits
   else if (Point == 0.001) SymPoint = 0.01; //3 digits
   else SymPoint = Point; //Normal
   
   return(0);
  }

Allora basta usare la variabile SymPoint al posto della variabile Point. Molto simile a Cameo

 

Giusto per confondere un po' di più le cose, BrocoTrader ha titoli con cifre da 0 a 5 per i loro vari titoli...

 
kennyhubbard:

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 hard code quel particolare problema piuttosto che cercare di trovare una soluzione holdall.


Una cosa che ho notato quando questa conversazione viene fuori è che la gente parla di un suffisso, ma mai di un prefisso. È possibile avere anche un prefisso. Ho incontrato un broker che ha un prefisso.

I miei pensieri su questo sono in accordo con il poster originale qui, voglio prodotti il più possibile solidi per i miei clienti, non mi interessa rischiare più codici da correggere in seguito. Il mio intero codice potrebbe essere avvolto intorno a quell'unico cambiamento e potrebbe costarmi diverse ore di sviluppo per passare attraverso migliaia di linee di codice per modificarlo. Quindi farlo bene la prima volta riduce il rischio e la spesa di dover tornare indietro e correggerlo. Sono anche d'accordo che questo sia un bug, ma non un bug nel nostro codice, quanto una debolezza di MQL.

Tuttavia, ho anche contemplato una soluzione. Una delle mie soluzioni era quella di passare attraverso l'elenco dei simboli e trovare EURUSD usando la sottostringa per arrivarci. Poi ottenere il valore di offerta di esso. Una volta che avevo il valore dell'offerta, potevo fare un doubletostr, poi trovare un modo per contare i caratteri nella stringa, come strlen o qualcosa del genere. Un dolore nel didietro, ma potrebbe darmi la determinazione di 4 o 5 cifre che sarebbe abbastanza solida. Da questo potrei stabilire la mia base per stranezze come Gold.

Questa è solo una teoria, devo ancora tentare. Sono troppo occupato a cercare di occuparmi dei progetti attuali.

 

nel mio EA uso questo codice per il calcolo del Pip - questo Pip lo uso ovunque ho a che fare con bool esterni inseriti in pip come SL, TP, TS o voglio vedere il profitto in pip ... testato su 3 diversi broker - nessun problema su diverse coppie, DAX 1/2 numeri decimali ... sì lo so che sembra simile come nei post prima, ma è funzionale dal vivo ...


Pip = Point;
if(Digits==2 || Digits==4 || Digits==6) Pip = 100*Point;
else if( Digits==1 || Digits==3 || Digits==5) Pip = 10*Point; 

nei miei altri indici provo a cercare anche il simbolo JPY ... :-)

Tmp_int = StringFind(Symbol(), "JPY", 0);
if(Tmp_int<0) Pip = 10000;
else Pip = 100;
 
seic:

nel mio EA uso questo codice per il calcolo del Pip - questo Pip lo uso ovunque ho a che fare con bool esterni inseriti in pip come SL, TP, TS o voglio vedere il profitto in pip ... testato su 3 diversi broker - nessun problema su diverse coppie, DAX 1/2 numeri decimali ... sì lo so che sembra simile come nei post prima, ma è funzionale dal vivo ...


nei miei altri indici provo a cercare anche il simbolo JPY ... :-)

Invece di cercare JPY vorrei trovare il "Punto" per ogni valuta. Questo è quello che ho provato:

  ObjectSetText("pi_Pair01",MarketInfo(Pair01,MODE_POINT));

Quindi l'aspettativa sarebbe quella di dare il rispettivo valore per la coppia memorizzata in Pair01. Eppure questo restituisce solo 0. Perché? Pari01 nel mio esempio è "AUDCAD" e l'indicatore è collegato a un grafico EURUSD.

Sperimentando ulteriormente, ora vedo che funziona per alcune valute, ma non per altre. Questo è abbastanza confuso. MODE_DIGITS sembra funzionare meglio. Come può essere?

pi

 
seic:

nel mio EA uso questo codice per il calcolo del Pip - questo Pip lo uso ovunque ho a che fare con bool esterni inseriti in pip come SL, TP, TS o voglio vedere il profitto in pip ... testato su 3 diversi broker - nessun problema su diverse coppie, DAX 1/2 numeri decimali ... sì lo so che sembra simile come nei post prima, ma è funzionale dal vivo ...

if(Digits==2 || Digits==4 || Digits==6) Pip = 100*Point;

Solo perché sei su un broker a 5 cifre. Su un broker a 4 cifre PIP e Point sono la stessa cosa.
Cos'è un TICK?-MQL4 e MetaTrader 4 - Forum di programmazione MQL4

 

E InstaForex ha 4 cifre per USDSEK e USDNOK, mentre 5 per EURUSD.


Quindi penso che sia necessario disporre di una matrice con un'impostazione per ogni valuta di quotazione per ottenere la quantità di pips e non di ticks.