Programmazione Excel TS Giorno e Notte (3 lettori)

Skarso

Forumer attivo
(No, Francesco, non è facile..... farlo in VBA.... nè in Amibroker nè in C..... non è facile in nessun linguaggio..... io non mi ci metto perchè - scusa la franchezza - ho altre priorità.....)


come non è facile ? ma se ci riesce pure un neanderthal man ( v. foto a lato ) in ritardo con l' evoluzione . . . :D
 

Imar

Forumer attivo
.... posto come si calcola l'Omega di Skarso col CBT di Amibroker)

Ogni promessa è debito e dunque di seguito posto il codice che ricava Omega in Skarso Style (esiste anche una versione di calcolo "normalizzata" tra 0 ed 1.... ma è sostanzialmente la stessa cosa).

Uno dei modi forse più opportuni di usarlo è di richiamarlo nel codice del TS inserendo all0inizio una istruzione

#include.

Questo codice aggiunge una nuova misura di performance al report di Back test (vedere jpeg) che - come diceva Angio - capita sia abbastanza simile al profit factor :D:D

PS Nel Custom Backtester il linguaggio AFL si evolve in una vera e propria programmazione per oggetti (metodi e proprietà)
Inoltre, notare come nel caso in esame il FOR... LOOP non è più tra le "barre" dei dati ma è effettuato sui "closed trades"
Ci sarebbero probabilmente altre cose da dire, ma come già scritto da altri..... non è questo l'intento (inoltre lungi da me l'idea di essere un programmatore... :lol::lol:).... per cui rimando dubbi e considerazioni all'abbondante materiale che si trova on line sul CBT di Amibroker.


Codice:
/////////////////////////////////////////////////////////////////////

SetCustomBacktestProc("");
if (Status("action") == actionPortfolio)
{
    bo = GetBacktesterObject();                // Get backtester object
    bo.Backtest();                                  // Run backtests
    stat = bo.GetPerformanceStats(0);      // Get Stats object for all trades
    SumPercentGain =0;                           
    SumPercentLoss =0;

    for (trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade())   
        {                                     // Loop through all closed trades

            if (trade.GetPercentProfit() > 0)  // If winning trade... then
                {
                SumPercentGain = SumPercentGain + trade.GetPercentProfit;
                }
            if (trade.GetPercentProfit() < 0)   // If losing trade... then
                {
                SumPercentLoss = SumPercentLoss + trade.GetPercentProfit;
                }

        }                                     // End of for loop over all trades

    Omega = SumPercentGain / abs (SumPercentLoss);        
    bo.AddCustomMetric("Omega ", Omega);         // Add to results display
}
DISCLAIMER: non si garantisce la correttezza del codice, realizzato in passato al solo scopo di provare a programmare nel linguaggio del CBT (questo si ostico, almeno per chi rimpiange ancora oggi il QuickBasic, come il sottoscritto....)
 

Allegati

  • Omega.JPG
    Omega.JPG
    9,7 KB · Visite: 496

quicksilver

Forumer storico
a questo punto possiamo raggruppare i 3 sub-TS in un unico sistema ( v. file FIB –overnight.2.2 su Dropbox ) ottenendo un risultato discreto
Trades = 912
Vinti = 56%
Utile netto = 26581 punti
MDD = - 1897 punti
Sharpe = 1.465
Omega = 1.586
Skewness risultati = + 2.98


nel periodo di? il solito storico?
non male :)
 

Skarso

Forumer attivo
ora se e quando gli amibrokeristi confermeranno i risultati potremmo passare ad aggredire il TS "giorno" . . . ;)
 

reef

...
ora se e quando gli amibrokeristi confermeranno i risultati potremmo passare ad aggredire il TS "giorno" . . . ;)

Finalmente ci siamo. Il primo TS viene simulato perfettamente, usando il codice di Ender :bow: un po' ripulito.
Ora guardo gli altri due, ma a questo punto speriamo di andare spediti.
Se vuoi partire con la parte day cerco di seguirti..

E' un bel progetto, complimenti :up:

E per me è un'ottima occasione per impratichirmi con Ami.

Codice:
djopen = Foreign(ext_symb,"O",0);
djopen = ValueWhen(djopen != 0, djopen);
ddj = djopen - Ref(djopen,-1); //Open - Open giorno precedente DJ
ydj_1 = 100*ddj/djopen ; //Open - Open in %
yield2 = 100*(Ref(O,1)/C -1);
avgrx = AMA(ydj_1,alpha);
dvstx=0;
for (i=1;i<BarCount;i++) {
dvstx[i] = sqrt( ( 1 - alpha ) * dvstx[i-1] * dvstx[i-1] + alpha * ( ydj_1[i] - avgrx[i] ) * ( ydj_1[i] - avgrx[i] ) ); }
inputx=(ydj_1-avgrx)/dvstx;

//Sliding window
kfor=20;
finestra = 50;
BuyPrice = Close;
SellPrice = Open;
Short=Cover=0;

//Genero le 21 equity per k = 0 -> 2 step 0.1
for ( kappa = 0; kappa <= kfor; kappa++ )  {
    //Scrivo le condizioni operative di amibroker e salvo i risultati in equity
    Buy = inputx < -kappa / 10;
    Sell = Ref(Buy,-1);
    eq = Equity();
    VarSet( "Equity" + kappa, Ref(eq,-1) - Ref( eq, -finestra ) );//questo è il nostro indice di performance
}

bestequity = tmp = setkappa = 0;
//trovo la migliore e salvo il kappa corrispondente
for ( i = 1; i < BarCount - 1; i++ ) {    //apro la modalita candela per candela
    bestequity[i] = 0;
    for ( kappa = 0;kappa <= kfor;kappa++ ) {
        tmp = VarGet( "equity" + kappa );//recupero le equity
        if ( tmp[i] > bestequity[i] ) { //confronto per trovare la migliore
            setkappa[i] = kappa;
            bestequity[i] = tmp[i];//memorizzo il valore della equity
        }
    }
}
Buy = inputx < -setkappa / 10;
Sell = Ref(Buy,-1);
 
Ultima modifica:

Skarso

Forumer attivo
Finalmente ci siamo. Il primo TS viene simulato perfettamente, usando il codice di Ender :bow: un po' ripulito.

ottimo se i risultati coincidono :up:
il sistema dunque sarebbe stato tradabile con 1 contratto x prudenza con 28500 euro sul conto che anche se arrotondati a 30000 avrebbero reso oltre il 50% annuo
lo sarà anche in futuro ? non possiamo assicurarlo anzi sconsigliamo di usarlo, il FIB è pericoloso . . . :eek:
 

Skarso

Forumer attivo
passiamo ora alla parte “giorno” con acquisto in apertura e chiusura a varie ore della giornata ( h1230, h1600, close )
alle ore 9 del mattino la situazione è spesso cambiata rispetto alla chiusura delle 1740
possiamo tentare di basarci sulle chiusure del Nikkey o di altri indici asiatici oppure sui futures europei che aprono alle ore 8.00 e che dovrebbero incorporare le nuove informazioni
scegliamo dunque come predittore il rendimento h 9.00 vs close ieri del DJ Euro Stoxx 50 ( in pratica ci serviremo sul valore delle 8.59 il che cambia poco) anche perché sono gli unici dati che ho tra quelli citati . . .
procediamo nella stessa maniera del sistema “notte” quindi possono valere le stesse spiegazioni fornite precedentemente
otteniamo così il file FIB-morning-1.1.xlsm inserito su Dropbox
i risultati sono positivi anche se + modesti rispetto al sistema “notte”
interventi = 299
vincenti = 63%
utile netto = 17962 punti
Omega = 1.705
MDD = - 2676
Skewness = + 0.20
forse essendo la durata dell’ intera giornata un po’ eccessiva proveremo ad introdurre qualche tipo di stop oppure una soglia di volatilità x cercare di migliorare i risultati


 
Ultima modifica:

quicksilver

Forumer storico
Skarso io ho un idea che si potrebbe provare a codificare e utilizzare, interessa?
non è complicata però vorrei spiegarla per bene quindi mi serve tempo per scrivere, lo faccio questa sera se riesco o appena posso :)
 

Users who are viewing this thread

Alto