Lombardreport.comToptradercup.comLombardforum.com

RICONOSCERE IL TREND COL KLINGER VOLUME OSCILLATOR - parte 2

Enrico Malverti - 11/02/2009 10.26.00

Proseguiamo con la disamina di questo utile strumento di screening:

Nello scorso articolo ( http://www.toptrader-mag.com/ttm/riconoscere-trend-col-klinger-volume-oscillator-parte-1)  avevamo visto la teoria di base e la formula matematica alla base dell'indicatore.

Oggi vedremo il codice:

 

{*********************************************

KVO-INDICATOR

OmegaResearch.com

**********************************************}

Inputs: FastX(34), SlowX(55), TrigLen(13), Smooth(1);

Vars: Trigger(0);Trigger = XAverage(KVO(FastX, SlowX), TrigLen);

IF Smooth <= 1 Then Begin

Plot1(KVO(FastX, SlowX), "KVO");

Plot2(Trigger, "KVO Trigger");

End

Else Begin

Plot1(Summation(KVO(FastX, SlowX), Smooth), "KVO");

Plot2(Summation(Trigger, Smooth), "KVO Trigger");

End;

Plot3(0, "Zero");

IF Plot1 Crosses Above Plot2 OR Plot1 Crosses Below Plot2 OR Plot2 Crosses Above Plot3 OR Plot2 Crosses Below Plot3 Then

Alert = True;

 

{*****************************************

Function – VForce

*****************************************}

Vars: TSum(0), Trend(0), DM(0), CM(0);

TSum = High Low Close;

IF TSum > TSum[1] Then Trend = 1

Else Trend = -1;

IF Trend = Trend[1] Then CM = CM Range

Else CM = Range Range[1];

IF CM <> 0 Then VForce = Volume * AbsValue(2 * (DM/CM) -1) * Trend * 100;

 

{*******************************************

Function – KVO

*******************************************}

 

Inputs: FastX(Numeric), SlowX(Numeric);

Vars: FXAvg(0), SXAvg(0);

FXAvg = XAverage(VForce, FastX);

SXAvg = XAverage(VForce, SlowX);

KVO = FXAvg - SXAvg;

 

Nella codifica dell’indicatore gli input  FastX e SlowX determinano la lunghezza (rispettivamente più corta e più lunga) della media mobile esponenziale della forza esercitata dai volumi mentre Trigger è la lunghezza della media mobile esponenziale del KVO.

Il Klinger Oscillator può essere impiegato in due modi: nel primo modo se il trend è ascendente bisogna prendere una posizione al rialzo quando l’oscillatore scende sotto lo zero e poi risale incrociando la trigger line. Viceversa per l’apertura di una posizione ribassista. Abbiamo creato un signal in linguaggio Easy language di Tradestation che prende posizione sul mercato rispettando la logica appena descritta, ossia il trading system compra quando il KVO incrocia, superandola, la trigger line e contemporaneamente la media mobile a 10 periodi è maggiore della media mobile a 50 periodi.

{****************************************

KVO Signal by Stephen J. Klinger

programmed by Enrico Malverti

*****************************************}

 

Inputs: FastX(34), SlowX(55), TrigLen(13);

Vars: Trigger(0), Klinger(0);

Trigger = XAverage(KVO(FastX, SlowX), TrigLen);

Klinger = KVO(FastX, SlowX);

 

{Long entry}

IF marketposition = 0 and  Klinger Crosses over Trigger and average(C, 10) > Average(C, 50) and Klinger > 0 Then Buy on C;

{Short entry}

{IF marketposition = 0 and  Klinger Crosses under Trigger and average(C, 10) < Average(C, 50) Then Sell on C;}

 

Per testare velocemente gli ingressi l’uscita dalla posizione rialzista è stata realizzata con un trailing stop basato sul parabolic denominato Parabolic ModStop Lx implementato dagli sviluppatori di Omega Research.

 

{*******************************************************************

Description      : Modified Parabolic Long Exit

Provided By     : Omega Research, Inc. (c) Copyright 1999

********************************************************************}

 

Inputs: Acceleration(.2), FirstBarMultp(1.5);

Variables: SAR(0), AF(0), StopPrice(0), MP(0), HighValue(0);

MP = MarketPosition;

If High > HighValue Then

            HighValue = High;

If MP = 1 Then Begin

            If MP[1] <> 1 Then Begin

                        StopPrice = Low - Average(TrueRange, 3) * FirstBarMultp;

                        AF = Acceleration;

                        HighValue = High;

            End

            Else Begin

                        StopPrice = StopPrice AF * (HighValue - StopPrice);

                        If HighValue > HighValue[1] AND AF < 0.2 Then

                                   AF = AF MinList(Acceleration, 0.2 - AF);

            End;

            If StopPrice > Low Then

                        StopPrice = Low;

End;

If MP = 1 Then

            ExitLong ("PM") Next Bar at StopPrice Stop;

 

La strategia di base, testata su dati giornalieri chiude in utile sulla maggior parte dei titoli azionari italiani senza alcun adattamento al time frame e senza un risk management particolarmente sofisticato, quindi la base di partenza data dal Klinger Volume Oscillator è certamente valida. Come si vede anche dalla fig. 1. l’oscillatore consente spesso di entrare in acquisto sulla base di un movimento direzionale massimizzando i guadagni, anche se non è esente da qualche falso segnale di troppo che potrebbe essere limitato ad esempio aggiungendo l’ulteriore condizione che l’oscillatore, al momento dell’incrocio col trigger sia maggiore di zero. 

 

 

Nel prossimo articolo Proveremo ad applicarlo su dati storici reali.

 

 

Commenti all'articolo

  • ipotizzo che Lei abbia fatto confusione non incollando la function al posto giusto. Le invierò l'ELS funzionante via email.
    em - 16/02/2009 19.21.44
  • Ho provato a fare il check della sintassi del codice del KVO e mi segnala un errore al listato 10 "token sconosciuto".Ringrazio e saluto cordialmente.Ugo Bonecchi.
    Ugo Bonecchi - 13/02/2009 10.26.33
  • Per un bug del sito mancano dei segni algebrici e il codice non gira
    em - 11/02/2009 22.27.22
Toptrader Magazine 2007 - Tutti i diritti riservati - Sottoscrivi il nostro feed RSS
Web design & Promozione: Vitamino