Buongiorno Roberto e buongiorno a tutti.
Vorrei riportare all’attenzione il sistema “Kama & Sma” che in precedenza aveva subito dei problemi di funzionamento, forse non ancora risolti.
Negli ultimi mesi ho testato, in Demo ed in Reale, il sistema Kama con settaggio 2,2,30 e una SMA a 22 periodi (con Target a 150 e Stop a 40), in particolare con le coppie Eur/Usd, Aud/Usd e Nzd/Usd con risultati molto interessanti.
Purtroppo, come già accaduto, ad un certo punto il sistema non ha più funzionato (da ieri, 25 maggio, su Eur/Usd).
Ho quindi ritestato il sistema riportando i settaggi ai valori standard per Kama 10,2,30: i risultati rimangono interessanti ma i profitti sembrano ridursi nettamente.
Se qualcuno è interessato a svolgere dei backest più ampi e dettagliati, riproporrei il sistema qui di seguito.
Grazie
//************************************************************************
// Kama & Sma Trading System DAX mtf
//************************************************************************
//
DEFPARAM CumulateOrders = False
DEFPARAM PreLoadBars = 30
////////////////////////////////////////////////////////////////////////
TIMEFRAME (default)
ONCE nLots = 1
ONCE LongTrading = 1 //1=allowed 0=banned
ONCE ShortTrading = 1 //1=allowed 0=banned
//
ONCE TP = 150 //200 pips
ONCE SL = 40 //50 pips
//
TimeForbidden = OpenTime < 090000 AND OpenTime > 190000
LongCond = (Not TimeForbidden) AND LongTrading
ShortCond = (Not TimeForbidden) AND ShortTrading
//
TIMEFRAME (1 hour, updateonclose) //h1
IF Not OnMarket THEN
BarCount = 0
ELSE
BarCount = BarCount + 1
ENDIF
//------------------------------------------------------------------------------------
// Kama & Sma Strategy
//
//https://www.forexstrategiesresources.com/trend-following-forex-strategies/111-kama-strategy/
//
Period = 10 //2 (standard 10)
FastPeriod = 2 //standard
SlowPeriod = 30 //standard
//
Fastest = 2 / (FastPeriod + 1)
Slowest = 2 / (SlowPeriod + 1)
if barindex >= (Period + 1) then
Num = abs(close-close[Period])
Den = summation[Period](abs(close-close[1]))
ER = Num / Den
Alpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)
Kama = (Alpha * Close) + ((1 -Alpha)* Kama[1])
else
Kama = close
endif
//------------------------------------------------------------------------------------
Sma = average[22,0](close) //22
//------------------------------------------------------------------------------------
a1 = Kama CROSSES OVER Sma
// --- SHORT
b1 = Kama CROSSES UNDER Sma
////////////////////////////////////////////////////////////////////////
TIMEFRAME (default) //1 min
ONCE TradeON = 1
IF IntraDayBarIndex = 0 THEN
TradeON = 1
ENDIF
TradeBar = BarCount
IF Not OnMarket AND TradeBar <> TradeBar[1] THEN
TradeON = 1
ENDIF
//************************************************************************
// LONG trades
//************************************************************************
IF a1 AND TradeON AND LongCond THEN
BUY nLots CONTRACT AT MARKET
TradeON = 0
ENDIF
//************************************************************************
// SHORT trades
//************************************************************************
IF b1 AND TradeON AND ShortCond THEN
SELLSHORT nLots CONTRACT AT MARKET
TradeON = 0
ENDIF
//
SET TARGET pPROFIT TP
SET STOP pLOSS SL
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Trailing Stop
//------------------------------------------------------------------------------------
IF Not OnMarket THEN
TrailStart = 10 //10 Start trailing profits from this point
BasePerCent = 0.100 //10.0% Profit to keep
StepSize = 6 //6 Pips chunks to increase Percentage
PerCentInc = 0.100 //10.0% PerCent increment after each StepSize chunk
RoundTO = -0.5 //-0.5 rounds to Lower integer, +0.4 rounds to Higher integer
PriceDistance = 7 * pipsize//8.9 minimun distance from current price
y1 = 0
y2 = 0
ProfitPerCent = BasePerCent
ELSIF LongOnMarket AND close > (TradePrice + (y1 * pipsize)) THEN //LONG
x1 = (close - tradeprice) / pipsize //convert price to pips
IF x1 >= TrailStart THEN //go ahead only if N+ pips
Diff1 = abs(TrailStart - x1)
Chunks1 = max(0,round((Diff1 / StepSize) + RoundTO))
ProfitPerCent = BasePerCent + (BasePerCent * (Chunks1 * PerCentInc))
ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))
y1 = max(x1 * ProfitPerCent, y1) //y = % of max profit
ENDIF
ELSIF ShortOnMarket AND close < (TradePrice - (y2 * pipsize)) THEN//SHORT
x2 = (tradeprice - close) / pipsize //convert price to pips
IF x2 >= TrailStart THEN //go ahead only if N+ pips
Diff2 = abs(TrailStart - x2)
Chunks2 = max(0,round((Diff2 / StepSize) + RoundTO))
ProfitPerCent = BasePerCent + (BasePerCent * (Chunks2 * PerCentInc))
ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))
y2 = max(x2 * ProfitPerCent, y2) //y = % of max profit
ENDIF
ENDIF
IF y1 THEN //Place pending STOP order when y>0
SellPrice = Tradeprice + (y1 * pipsize) //convert pips to price
IF abs(close - SellPrice) > PriceDistance THEN
IF close >= SellPrice THEN
SELL AT SellPrice STOP
ELSE
SELL AT SellPrice LIMIT
ENDIF
ELSE
SELL AT Market
ENDIF
ENDIF
IF y2 THEN //Place pending STOP order when y>0
ExitPrice = Tradeprice - (y2 * pipsize) //convert pips to price
IF abs(close - ExitPrice) > PriceDistance THEN
IF close <= ExitPrice THEN
EXITSHORT AT ExitPrice STOP
ELSE
EXITSHORT AT ExitPrice LIMIT
ENDIF
ELSE
EXITSHORT AT Market
ENDIF
ENDIF
Ho provato , in seguito, ad “adeguare” il vecchio sistema utilizzando la media mobile adattiva ora presente tra gli indicatori di ProRealTime ed il sistema sembra funzionare correttamente anche con settaggio della Media adattiva 2,2,30.
Qualcuno ha già provato il sistema e può fornire informazioni a riguardo?
Grazie.
Di seguito fornisco il sistema con la Media Mobile Adattiva.
//************************************************************************
// Kama & Sma Trading System DAX mtf
//************************************************************************
//
DEFPARAM CumulateOrders = False
DEFPARAM PreLoadBars = 2000
////////////////////////////////////////////////////////////////////////
TIMEFRAME (default)
ONCE nLots = 1
ONCE LongTrading = 1 //1=allowed 0=banned
ONCE ShortTrading = 1 //1=allowed 0=banned
//
ONCE TP = 150 //200 pips
ONCE SL = 40 //50 pips
//
TimeForbidden = OpenTime < 090000 AND OpenTime > 190000
LongCond = (Not TimeForbidden) AND LongTrading
ShortCond = (Not TimeForbidden) AND ShortTrading
//
TIMEFRAME (1 hour, updateonclose) //h1
IF Not OnMarket THEN
BarCount = 0
ELSE
BarCount = BarCount + 1
ENDIF
//------------------------------------------------------------------------------------
// Kama & Sma Strategy
//
//https://www.forexstrategiesresources.com/trend-following-forex-strategies/111-kama-strategy/
//
Kama = AdaptiveAverage[2,2,30](close)
//------------------------------------------------------------------------------------
Sma = average[22,0](close) //22
//------------------------------------------------------------------------------------
a1 = Kama CROSSES OVER Sma
// --- SHORT
b1 = Kama CROSSES UNDER Sma
////////////////////////////////////////////////////////////////////////
TIMEFRAME (default) //1 min
ONCE TradeON = 1
IF IntraDayBarIndex = 0 THEN
TradeON = 1
ENDIF
TradeBar = BarCount
IF Not OnMarket AND TradeBar <> TradeBar[1] THEN
TradeON = 1
ENDIF
//************************************************************************
// LONG trades
//************************************************************************
IF a1 AND TradeON AND LongCond AND close[1] < Kama THEN
BUY nLots CONTRACT AT MARKET
TradeON = 0
ENDIF
//************************************************************************
// SHORT trades
//************************************************************************
IF b1 AND TradeON AND ShortCond AND close[1] > Kama THEN
SELLSHORT nLots CONTRACT AT MARKET
TradeON = 0
ENDIF
//
SET TARGET pPROFIT TP
SET STOP pLOSS SL
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Trailing Stop
//------------------------------------------------------------------------------------
IF Not OnMarket THEN
TrailStart = 10 //10 Start trailing profits from this point
BasePerCent = 0.100 //10.0% Profit to keep
StepSize = 6 //6 Pips chunks to increase Percentage
PerCentInc = 0.100 //10.0% PerCent increment after each StepSize chunk
RoundTO = -0.5 //-0.5 rounds to Lower integer, +0.4 rounds to Higher integer
PriceDistance = 7 * pipsize//8.9 minimun distance from current price
y1 = 0
y2 = 0
ProfitPerCent = BasePerCent
ELSIF LongOnMarket AND close > (TradePrice + (y1 * pipsize)) THEN //LONG
x1 = (close - tradeprice) / pipsize //convert price to pips
IF x1 >= TrailStart THEN //go ahead only if N+ pips
Diff1 = abs(TrailStart - x1)
Chunks1 = max(0,round((Diff1 / StepSize) + RoundTO))
ProfitPerCent = BasePerCent + (BasePerCent * (Chunks1 * PerCentInc))
ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))
y1 = max(x1 * ProfitPerCent, y1) //y = % of max profit
ENDIF
ELSIF ShortOnMarket AND close < (TradePrice - (y2 * pipsize)) THEN//SHORT
x2 = (tradeprice - close) / pipsize //convert price to pips
IF x2 >= TrailStart THEN //go ahead only if N+ pips
Diff2 = abs(TrailStart - x2)
Chunks2 = max(0,round((Diff2 / StepSize) + RoundTO))
ProfitPerCent = BasePerCent + (BasePerCent * (Chunks2 * PerCentInc))
ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))
y2 = max(x2 * ProfitPerCent, y2) //y = % of max profit
ENDIF
ENDIF
IF y1 THEN //Place pending STOP order when y>0
SellPrice = Tradeprice + (y1 * pipsize) //convert pips to price
IF abs(close - SellPrice) > PriceDistance THEN
IF close >= SellPrice THEN
SELL AT SellPrice STOP
ELSE
SELL AT SellPrice LIMIT
ENDIF
ELSE
SELL AT Market
ENDIF
ENDIF
IF y2 THEN //Place pending STOP order when y>0
ExitPrice = Tradeprice - (y2 * pipsize) //convert pips to price
IF abs(close - ExitPrice) > PriceDistance THEN
IF close <= ExitPrice THEN
EXITSHORT AT ExitPrice STOP
ELSE
EXITSHORT AT ExitPrice LIMIT
ENDIF
ELSE
EXITSHORT AT Market
ENDIF
ENDIF