annuncio

Comprimi
Ancora nessun annuncio.

Aiutino per capire la logica di una funzione

Comprimi
X
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • Aiutino per capire la logica di una funzione

    Ciao a tutti ragazzi come avrete capito sono un cosiddetto neofita.Ho iniziato da poco a studiare mql anche grazie a voi..il materiale su cui sto lavorando è il libro di Yung.."Expert advisor programming"...sono riuscito ad assimilare i concetti di base e adesso sono arrivato alle prime funzioni articolate...prendo appunti e per imparare cerco di capire la logica di ogni codice ma mi sono bloccato su una che serve per assegnare al valore esterno "slippage" un valore diverso in base ai decimali usati dalla piattaforma..
    in pratica non riesco a capirne la logica e mi rendo conto che mi trovo ad un punto cruciale del mio percorso di apprendimento...
    qualcuno potrebbe aiutarmi a spiegare cosa vuole dire qusta istruzione?

    extern int Slippage = 5;

    // Order placement
    OrderSend(Symbol(),OP_BUY,LotSize,Ask,GetSlippage( Symbol(),Slippage),BuyStopLoss,
    BuyTakeProfit,"Buy Order",MagicNumber,0,Green);

    int GetSlippage(string Currency, int SlippagePips)
    {
    int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
    if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
    else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
    return(CalcSlippage);
    }

    ...ci provo....abbiamo uno slippage predefinito con valore 5...
    ...quando l'ordine sarà inserito il valore di questo slippage(fin ora predefinito) deve essere ricalcolato dalla funzione "GetSlippage"..
    ...la funzione "GetSlippage" dice :

    1)....int GetSlippage(string Currency, int SlippagePips)
    che significa? ....questa funzione darà come risultato un nuovo valore per la variabile "Currency"????? a cosa serve in definitivo questa riga???

    2)....{int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
    che dovrebbe significare .......sappi che la variabile "CalcDigits" risulta essere ..il numero di decimali usati da "Currency"...

    3)...if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
    che dovrebbe significare .......se il numero di decimali usati da "Currency" è 2 oppure 4 allora la variabile "CalcSlippage" deve
    essere inizializzata con il valore di "SlippagePips"...ma mi chiedo...quale è il valore di "SlippagePips"
    ????????e a cosa serve la variabile "CalcSlippage"?????

    4)...else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
    che dovrebbe significare ......se invece il numero di decimali usati da "Currency" è 3 oppure 5 allora la variabile "CalcSlippage" deve
    essere inizializzata con il valore di "SlippagePips" * 10.....

    5)...return(CalcSlippage);
    che dovrebbe significare ....alla fine il valore di questa funzione deve dare come risultato quello di "CalcSlippage"

    spero che qualcuno di voi abbia la pazienza e la bontà di potermi chiarire questi dubbi atroci...

  • #2
    ciao,
    partiamo dalla definizione di slippage.

    Slippage = è la differenza tra il prezzo teorico indicato dal trader ed il prezzo effettivo a cui si riesce ad eseguire il trade, senza che sia necessaria una richiesta di conferma al trader da parte del broker. Lo slippage diventa reale durante l'esecuzione dell'ordine. Ad esempio, il trader imposta un ordine BUY su EUR/USD a 1,3300 scegliendo uno slippage di + o – 3 pip: ciò significa che l’ordine può venire eseguito dal broker ad un valore che va da 1,3297 a 1,3303. Lo slippage non è quindi necessariamente un fattore negativo per il trader, potendo il trade venire eseguito ad un prezzo più basso rispetto al valore 1,3300. Se l’ordine viene eseguito a 1,3302 lo slippage effettivo del trade è di 2 pip. Se si fa scalping ovviamente più è contenuto lo slippage e meglio è, mentre se si fanno operazioni di lungo termine si possono accettare slippage superiori, perché influisce meno sulla qualità dell'operazione. La frequenza e l'ampiezza dello slippage è direttamente proporzionale alla volatilità del mercato: un mercato altamente volatile determinerà slippage frequenti e ampi.

    Il valore di slippage dipende dal numero di decimali gestiti dal broker;
    ad esempio se l'EURUSD è gestito con 4 cifre decimali dopo la virgola, vuol dire il broker su quel server che fornisce i dati di mercato scende fino al dettaglio del PIP (la 4a cifra decimale) e non ai decimi di PIP (la 5a cifra decimale che non c'è), perciò lo slippage, ad esempio, di 2 pip sarà espresso dal numero "2".
    Se invece (come ormai quasi sempre) il broker usa 5 cifre decimali dopo la virgola per l'EURUSD, vuol dire che il server del broker arriva fino ai decimi di PIP e uno slippage di 2 pip sarà espresso con il numero "20".

    Stessa cosa per EURJPY che può essere a 2 (quotazione fino al pip) o a 3 cifre (quotazione fino ai decimi di pip) dopo la virgola.

    Il modo più rapido per sapere il numero associato ai pip dello slippage è andare nello Strategy Tester come nella figura seguente, selezionando
    Symbol = coppia forex o CFD
    poi, click su Symbol properties , si apre la finestra EURUSD contract specification e nella prima riga leggi il valore dello spread da cui con la stessa logica scegli il valore dello slippage.
    Nel caso in figura se lo spread è 18 corrispondente a 1.8 pip, puoi scegliere 20 come slippage, corrispondente a 2 pip di slippage.

    slippage.JPG


    Riguardo le funzioni che hai elencato nei punti da 1 a 5 si tratta di funzioni e variabili create da un programmatore e non native di metaquote language.

    Posso dirti che
    Digits (https://docs.mql4.com/predefined/digitsvar)
    calcola il numero di cifre dopo la virgola per la coppia di valute / CFD sul grafico

    Marketinfo (https://docs.mql4.com/marketinformation/marketinfo)
    restituisce tantissime informazioni per la coppia di valute / CFD sul grafico, in funzione del parametro type

    La vita non è un giro di prova, cogli l’attimo.
    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio

    Commenta


    • #3
      umberto sm ti ringrazio tanto per avermi letto e risposto , devo dirti purtroppo però che i miei dubbi non riguardano affatto la logica dello slippage piuttosto che i decimali ....infatti opero già da tempo sul mercato ed ho abbastanza chiari questi concetti....sarebbe invece di fondamentale importanza per me , adesso che sto iniziando ad affacciarmi alle logiche di programmazione mql , capire il funzionamento delle stringhe che di volta in volta mi trovo a studiare.Insomma quello che non sono riuscito ad afferrare del codice che vi ho scritto è il significato delle richieste fatte al compilatore....se non ne capisco il linguaggio non posso procedere oltre....

      Commenta


      • #4
        ma allora quello che devi fare è studiare il linguaggio di programmazione, non è qualcosa che si fa al volo, servono almeno 3 mesi di studio del manuale.

        https://book.mql4.com/

        e poi al termine

        MQL4 NEW differenze vs Mql4 Old
        La vita non è un giro di prova, cogli l’attimo.
        Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio

        Commenta


        • #5
          sono pienamente d accordo con te e ti / vi sono grato proprio perchè mi avete reso cosciente del fatto che devo studiare e me ne avete fatto tornare lea voglia.....ed è proprio quello che sto facendo....sto studiando questo bellissimo manuale, ma forse per il fatto che non ho nessuna base di programmazione .... mi sono incartato.....e spero tanto che qualcuno mi possa chiarire un attimo dei concetti in modo che io possa proseguire nello studio....

          Commenta

          Sto operando...
          X