Chi vuole una strategia? Molto e gratis) - pagina 61

 
Stellarator >> :

I miei amici mi hanno chiamato per barare sulla macchina...

>> bene...

E dicono crisi ;)

 

Sembra che dobbiamo iniziare a confrontare uno per uno fino a quando non si risolvono tutti i problemi.

Qui ho confrontato FSB Accelerator Oscillator con MT iAC(...):



Come fare:

1. Aggiornare i tassi forex di FSB con quelli attuali usati in MT (da MT Ctrl+S e salvare il file xxxxxx.csv nella directory FSB ./Data). Se i tuoi dati sono in una cartella diversa - usa Market -> Data Directory da FSB per puntarla).

2. Fare lo script Indicator_Values.mq4 stampando l'indicatore desiderato. (Lo script è sulla pagina del forum precedente).

3. Impostare questo indicatore in FSB. (Assicurati di usare gli stessi parametri.) Esporta l'indicatore FSB con la funzione Esporta -> Indicatori.

4. Se vedete qualche differenza, per favore segnalatela.


Buona fortuna!


------------

Modifica:

Si prega di utilizzare l'ultimo FSB v2.8.3.5 Beta

 
Miroslav_Popov >> :

La formula classica è: Momentum(n) = Close - Close(n)

Questa è la formula che usa FSB.

MT usa: Momentum(n) = 100 * Close / Close(n)

Lo so, mi riferivo ai parametri dell'indicatore. Periodo di lisciatura. Metodo di levigatura. Non lo impostiamo noi. Quali parametri sono presi di default: 0,0?

 

Ciao zfs,


Puoi vedere i parametri predefiniti nella finestra di dialogo Parametri dell'indicatore. (Stampa predefinita)



Si noti che il periodo di "lisciatura supplementare" = 0. Ciò significa che non viene applicato alcuno smoothing.


Il secondo posto dove potete vedere i valori predefiniti è nel codice sorgente:


        /// <summary>
        /// Sets the default parameters for the designated slot type
        /// </summary>
        public Momentum( SlotTypes slotType)
        {
            sIndicatorName  = "Momentum";
            parameters      = new IndicatorParam();
            component       = new IndicatorComp[] { };
            bSeparatedChart = true;
            bIsCalculated   = false;

            // The indicator name
            parameters. IndicatorName = sIndicatorName;

            // The slot type
            parameters. SlotType = slotType;

            // The ComboBox parameters
            parameters. ListParam[0]. Caption  = "Logic";
            parameters. ListParam[0]. ItemList = new string[]
            {
                "The Momentum rises",
                "The Momentum falls",
                "The Momentum is higher than the Level line",
                "The Momentum is lower than the Level line",
                "The Momentum crosses the Level line upward",
                "The Momentum crosses the Level line downward",
                "The Momentum changes its direction upward",
                "The Momentum changes its direction downward"
            };
            parameters. ListParam[0]. Index    = 0;
            parameters. ListParam[0]. Text     = parameters. ListParam[0]. ItemList[ parameters. ListParam[0]. Index];
            parameters. ListParam[0]. Enabled  = true;
            parameters. ListParam[0]. ToolTip  = "Logic of application of the indicator.";

            parameters. ListParam[1]. Caption  = "Smoothing method";
            parameters. ListParam[1]. ItemList = Enum. GetNames( typeof( MAMethod));
            parameters. ListParam[1]. Index    = 0;
            parameters. ListParam[1]. Text     = parameters. ListParam[1]. ItemList[ parameters. ListParam[1]. Index];
            parameters. ListParam[1]. Enabled  = true;
            parameters. ListParam[1]. ToolTip  = "The Moving Average method used for smoothing the Momentum value.";

            parameters. ListParam[2]. Caption  = "Base price";
            parameters. ListParam[2]. ItemList = Enum. GetNames( typeof( BasePrice));
            parameters. ListParam[2]. Index    = 3;
            parameters. ListParam[2]. Text     = parameters. ListParam[2]. ItemList[ parameters. ListParam[2]. Index];
            parameters. ListParam[2]. Enabled  = true;
            parameters. ListParam[2]. ToolTip  = "The price the Momentum is based on.";

            // The NumericUpDown parameters
            parameters. NumParam[0]. Caption = "Period";  <----- Parameter Name
            parameters. NumParam[0]. Value   = 10;        <----- Default Value
            parameters. NumParam[0]. Min     = 1;
            parameters. NumParam[0]. Max     = 200;
            parameters. NumParam[0]. Enabled = true;
            parameters. NumParam[0]. ToolTip = "The period of Momentum.";
 
            parameters. NumParam[1]. Caption = "Additional smoothing"; <----- Parameter Name 
            parameters. NumParam[1]. Value   = 0;        <----- Default Value
            parameters. NumParam[1]. Min     = 0;
            parameters. NumParam[1]. Max     = 200;
            parameters. NumParam[1]. Enabled = true;
            parameters. NumParam[1]. ToolTip = "The period of additional smoothing.";

            parameters. NumParam[2]. Caption = "Level";  <----- Parameter Name
            parameters. NumParam[2]. Value   = 0;        <----- Default Value
            parameters. NumParam[2]. Min     = -100;
            parameters. NumParam[2]. Max     = 100;
            parameters. NumParam[2].Point   = 4;
            parameters. NumParam[2]. Enabled = true;
            parameters. NumParam[2]. ToolTip = "A critical level (for the appropriate logic).";

            // The CheckBox parameters
            parameters. CheckParam[0]. Caption = "Use previous bar value";
            parameters. CheckParam[0]. Checked = Data. Strategy. PrepareUsePrevBarValueCheckBox( slotType);
            parameters. CheckParam[0]. Enabled = true;
            parameters. CheckParam[0]. ToolTip = "Use the indicator value from the previous bar.";
        }
 
Miroslav_Popov >> :

Ciao zfs,

Non ho dubitato della sua impeccabilità in linea di principio. Il fatto è che, nonostante tutto questo, i valori finali degli indicatori non coincidono per me. O non l'hanno fatto? Non ho tempo di controllare ora, purtroppo.

 

Zfs,

Con l'aiuto di Stellarator ho risolto molti problemi in FSB. Ho anche cambiato i parametri predefiniti di FSB per essere così in MT. Spero che la maggior parte delle differenze siano già sistemate.


Non esitate a segnalare eventuali bug. Tutti i feedback e le critiche sono ben apprezzati.

 
Stellarator >> :

Devo dissuadervi! La sfumatura chiave è il "limite di un'iterazione dell'EA". Quindi, entro questi limiti, l'indicatore viene calcolato UNA sola volta (alla sua prima chiamata)! Lo dichiaro con il 100% di fiducia. Tutte le chiamate successive non lo avviano affatto, ma prendono solo i valori necessari dai buffer necessari. La condizione è 100% quando i parametri di ingresso rimangono invariati (tranne il buffer e l'offset). La regola funziona quando i calcoli vengono eseguiti all'interno di uno strumento. Ma penso che il principio sia valido anche quando iCustom si riferisce ad altri TF e strumenti.


Sono interessato a scrivere un Expert Advisor che si applica all'indicatore per il valore dell'indicatore nel minuto corrente sulla barra 0 per 240 volte. Cioè risulta che l'uscita ha sempre il primo valore? Confermate per favore, perché questa è una novità per me.

 
zfs >> :

Domanda off-topic, sono appena stato coinvolto nella scrittura di un Expert Advisor, che sulla 0a barra 240 volte accede all'indicatore per il valore dell'indicatore nel minuto corrente. Cioè risulta che l'uscita è sempre il primo valore? Confermate per favore, perché questa è una novità per me.

>>L'Expert Advisor riparte ad ogni nuovo tick e questa è un'iterazione diversa, e quindi i valori dell'indicatore saranno diversi.

 
rider >> :

L'EA ripartirà ad ogni nuovo tick, e questa è un'iterazione diversa, rispettivamente, e i valori degli indicatori saranno diversi.

Se usate correttamente il parametro "Use previous bar value" non avete bisogno del valore della barra corrente dell'indicatore.

Diciamo che si usa MA(semplice, 12, close) su un grafico giornaliero. Per calcolare correttamente questa MA hai bisogno dei prezzi di chiusura di 12 barre.

Se ora sono le 3PM, l'attuale prezzo di "chiusura" non è il vero prezzo di chiusura della barra. Verrà cambiato fino alle 12PM. Quindi l'utilizzo della MA per la barra corrente non include il prezzo di chiusura reale ma uno temporaneo. Allo stesso tempo il back test utilizza il prezzo di chiusura reale (già fissato) delle barre storiche. Questa pratica porterà delle differenze tra il backtest e il commercio reale.


Ancora peggio:

Vediamo la regola logica "Una FastMA va sopra una SlowMA" dove entrambe le MA sono basate sul prezzo di chiusura.

Se durante il giorno il mercato sale rapidamente, la FastMa può incrociare sopra la SlowMA, il che farà salire un segnale di acquisto. Comprerete seguendo il segnale. Lasciate che dopo l'accordo il mercato scenda e chiuda così in basso, che sposterà il FastMA sotto lo Slow. Vedi il problema? Avete già comprato prima della chiusura del bar. Se fai il backtest di questa strategia in seguito, vedrai che non c'è nessun segnale di acquisto per questa barra. E poi? Darai la colpa al backtester, ma il problema è nella logica della strategia sbagliata.


Il Forex Strategy Builder vi protegge da questi errori logici impostando automaticamente il parametro "Use previous bar value". FSB non usa mai indicatori mutevoli (non ancora fissati) per il backtesting. E in questa logica perché un EA deve calcolare un indicatore per ogni tick se la strategia non lo usa. Un calcolo per barra è sufficiente:

- se l'indicatore usa Open price - il calcolo deve essere all'apertura della barra;

- se l'indicatore usa Close, High, Low o qualsiasi combinazione dei prezzi - il calcolo deve essere alla chiusura della barra.






 

Buona sera a tutti!


Sono senza computer per il fine settimana :(. E oggi non avevo niente da fare a causa del lavoro, quindi... in qualche modo...

Ha avuto tempo per pensare, però. E (si spera) deciso strategicamente (in termini di quadro di indicatori).

In generale, la struttura interna degli indicatori d'ora in poi sarà simile (la descriverò più tardi, forse domani). Ciò che "sporge" verso l'esterno (parametri) - il più vicino possibile all'FSB. Cioè il loro numero, i loro valori (e i loro confini) e la funzionalità definita da essi - beh... quasi uno a uno :). Rimangono delle micro sfumature, ma lo decideremo man mano.


Molto brevemente per ora (ora vado a letto, non sarò qui domani o dopodomani, probabilmente, ho un sacco di cose da fare al lavoro) (sull'esempio della "nostra bella" RSI :D):

1. Parametri:

// -------- Indicator parameters
extern int     slotType = SLOT_TYPE_OPENFILTER; // SLOT_TYPE_LC
extern int     indLogic = INDICATOR_RISES;      // INDICATOR_RISES <= indLogic <= INDICATOR_CHANGES_DIR_DOWNWARD
extern int     maMethod = MA_METHOD_SMOOTHED;   // MA_METHOD_SIMPLE <= maMethod <= MA_METHOD_SMOOTHED
extern int     basePrice= BASE_PRICE_CLOSE;     // BASE_PRICE_OPEN <= basePrice <= BASE_PRICE_WEIGHTED
extern int     iPeriod  = 14;                   // 1 <= iPeriod <= 200
extern int     dLevel   = 30;                   // 0 <= dLevel <= 100
extern bool    iPrvs    = True;                 // True / False




Penso che sia più o meno chiaro dalla foto così com'è. L'unica cosa che può causare difficoltà: slotType, i suoi rispettivi valori (che forse differiscono da FSB, ma in questo caso non è un punto cruciale):

// Slot Types
#define  SLOT_TYPE_OPEN                   0  // Point of the Position
#define  SLOT_TYPE_CLOSE                  1  // Point of the Position
#define  SLOT_TYPE_OPENFILTER             2  // Logic Condition
#define  SLOT_TYPE_CLOSEFILTER            3  // Logic Condition

Il resto è semplice. I valori numerici sono impostati così come sono. I valori nei ComboBox sono numerati a partire da 0 (come gli array).

Ivalori numerici dei metodi di smoothing e delle costanti di prezzo sono DIVERSI da MT (ci ho pensato a lungo, ma ho deciso di rompere gli stereotipi per il bene della compatibilità FSB :) ). Tutto questo, infatti, è fatto in modo che in futuro gli Expert Advisors (o ciò che gli utenti scriveranno da soli) possano "twittare" gli indicatori facilmente e senza forzature :) (quello che hanno visto in FSB è quello che hanno impostato ("quello che vedo è quello che canto")). Più o meno:

double dRSI = iCustom(NULL, 0, "-FSB- RSI", 2, 0, 3, 3, 3, 3, 14, 30, 1, 0, 0);

per l'esempio precedente.


2. Valori restituiti:

I primi due buffer di ogni indicatore sono riservati ai prezzi di apertura delle posizioni (rispettivamente long/short), o alle condizioni logiche (1.0 - sì / qualsiasi altro valore - no). Inoltre abbiamo i valori dell'indicatore stesso (nel caso siano interessanti per qualcuno):


Il contenuto dei primi due buffer è determinato dalla logica dell'indicatore(slotType e indLogic) (cioè ancora una volta - ci sono o prezzi o 1 / 0 (consiglio di controllare con "1", perché altri valori possono essere non solo zero (in generale - come l'indicatore non ha valore ci può essere EMPTY_VALUE)).


Tutti gli indicatori sono stati ottimizzati tenendo conto di IndicatorCounted() (questo è il principale cambiamento del codice originale, in generale) (Miroslav ha ragione, in generale - si dovrebbero ricalcolare i valori degli indicatori una volta per barra (di nuovo - in generale... ;)). Ma per una corretta visualizzazione, e in generale (buon tono)... In generale, non dovrebbe rallentare molto.


Per il rendering di indicatori colorati e simili ("particolarmente dotati" :)) si usano oggetti grafici (per non occupare buffer extra). L'ho testato io stesso e funziona bene (quando viene visualizzato visivamente, è più lento dei buffer degli indicatori, ma non troppo critico, e quando iCustom viene chiamato, le funzioni grafiche non vengono chiamate affatto, quindi gli "eccessi" non influiscono sulla velocità).


Questo è tutto per ora, ho un paio di domande per Miroslav, ma sono già esausto :), proverò a farle domani (ma lo farò, come ho detto prima - in fretta)...


p.s. Prima di spostare i file dall'archivio - cancella i file fsb*.mq4 nella cartella ExpertsIndicators\. Il resto deve solo essere sovrascritto su quello vecchio. D'ora in poi le convenzioni di denominazione dei file non cambieranno (tutti gli indicatori avranno il prefisso "-FSB- " ).

File:
experts_1.rar  148 kb