张贴者: EasyTrader
这是一个应用统计资料分佈的峰度(kurtosis)和偏度(skewness)所作的交易策略。当资料呈现趋势性,并且潜在趋势为正时,我们做多。当资料呈现趋势性,并且潜在趋势为负时,我们做空。当趋势发生反转后,我们平仓。
那么,我们如何确定趋势和趋势的强度呢?让我们先来复习一下峰度和偏度的定义。
首先来看常态分佈 (normal distribution)的定义
分佈 (distribution):变项中所有数值出现次数的分佈情形,以横轴为变项数值,纵轴为出现频率的座标图呈现。常态分佈:又称高斯分佈 (Gaussian distribution)
标准常态分佈:以平均值 (mean) 为中心,标准差 (standard deviation) 为座标轴之基本单位所绘之常态分佈图。 形状为覆钟形的对称图形。
m ± 1s含有整个样本群之 68.26% 的个体。
m ± 2s含有整个样本群之 95.44% 的个体。
m ± 3s含有整个样本群之 99.74% 的个体。
95% 个体落在 m ± 1.96s 之间。
99% 的个体落在 m ± 2.58s 之间。
在统计学中,峰度(Kurtosis)衡量实数随机变量机率分布的峰态。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的。
峰度(kurtosis),是描绘一组资料的分佈形态的陡峭程度的统计量。常态分佈的峰度为3,所以我们把峰度大于3的称作尖峰,表示资料的分佈比常态分佈更集中和陡峭。我们把峰度小于3的作为平峰型,表示资料分佈比之正态分佈更为平滑。这里我们所指的是真实峰度减去3之后的值。在金融市场,峰度大于0表现为无趋势(sideway market),峰度小于0表现为趋势市(trending market)。
偏度(skewness)描绘的是资料分佈的对称性,或者说是资料中众数(mode)的位置。偏度等于0刻画的是完美的对称性。这个统计量同样需要和常态分佈比较:偏度大于0表明和常态分佈相比,该阵列呈现右偏,表现为右部的长尾并且极端值较多分佈于右部;反之为左偏,表现为左部的长尾并且极端值较多分佈于左部。在金融市场,偏度大于0可以解释为资料倾向于彙聚成向上的趋势,偏度小于0可以解释为资料倾向于彙聚成下降的趋势。
在机率论和统计学中,偏度衡量实数随机变量机率分布的不对称性。偏度的值可以为正,可以为负或者甚至是无法定义。在数量上,偏度为负(负偏态)就意味着在机率密度函数左侧的尾部比右侧的长,绝大多数的值(包括中位数在内)位于平均值的右侧。偏度为正(正偏态)就意味着在机率密度函数右侧的尾部比左侧的长,绝大多数的值(包括中位数在内)位于平均值的左侧。偏度为零就表示数值相对均匀地分布在平均值的两侧,但不一定意味着其为对称分布。
偏度分为两种:
因此,我们得出以下的交易法则: 当峰度小于0(市场处于趋势市),偏度大于N(趋势为上升),做多; 当峰度小于0(市场处于趋势市),偏度小于M(趋势为下降),做空;
input:ExitType(5) ;
input:NBarL(2),NBarS(2),TradeProfit(0.053),TradeStopLoss(0.023),ATRs_L(5.4),ATRs_S(10.9);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
inputs:Length(20),Trigger(3),UpSkew(3.4),DownSkew(2.2) ;
vars:KurtValue(0),SkewValue(0),BuyPoint(0),SellPoint(0);
MP = MarketPosition ;
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;
PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;
{计算峰度 }
KurtValue = Kurtosis(Close,Length) ;
{计算偏度}
SkewValue = Skew(Close,Length) ;
{ 峰度向下跌破 Trigger 线 ,建立买卖点 }
if KurtValue Cross under Trigger then Begin
BuyPoint = High 3;
SellPoint = Low-3;
end;
{ 偏度大于某数值后 ,趋势确认进场作多 }
if SkewValue > -UpSkew 2 then Buy next bar at BuyPoint stop ;
{ 偏度小于某数值后 ,趋势确认进场作空 }
if SkewValue < -DownSkew 2 then Sell next bar at SellPoint Stop ;
end;
if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;
if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;
if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;
if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;
if ExitType = 5 then Begin
{*******************************************************************
Description : ATR Trailing Stop Long Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{Inputs: ATRs_L(3);}
Variables: PosHigh(0), ATRVal_L(0);
ATRVal_L = AvgTrueRange(10) * ATRs_L;
If BarsSinceEntry = 0 Then PosHigh = High;
If MarketPosition = 1 Then Begin
If High > PosHigh Then PosHigh = High;
ExitLong ("ATR") Next Bar at PosHigh - ATRVal_L Stop;
End else ExitLong ("ATR eb") Next bar at High - ATRVal_L Stop;
{*******************************************************************
Description : ATR Trailing Stop Short Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
******************************************************************}
{Inputs: ATRs_S(3);}
Variables: PosLow(0), ATRVal_S(0);
ATRVal_S = AvgTrueRange(10) * ATRs_S;
If BarsSinceEntry = 0 Then PosLow = Low;
If MarketPosition = -1 Then Begin
If Low < PosLow Then PosLow = Low;
ExitShort ("ATR_1") Next Bar at PosLow ATRVal_S Stop;
End else ExitShort ("ATR_1 eb") Next bar at Low ATRVal_S Stop;
end;
if IsBalanceDay then setExitonClose ;
转载自 faruto的博客