已經通過編譯的開拓者順勢模型源碼 已經在做paper的壓力測試
作者:開拓者 TB 來源:cxh99.com 發布時間:2013年03月23日
|
- 讓大家不要再在這里坑掉,浪費寶貴時間去查信號消失,能專心寫策略.
說明:這是一個很簡單的順勢模型,已經通過編譯,沒有 IF while的問題.
進程:已經在做paper的壓力測試,所以offset我一般會設置大點,或者極端點. 老外一般都很喜歡把事情做極端,這樣才不會出問題,一般問題都小CASE了.中國人都喜歡把問題往好了改.
問題:paper測試中出現的問題. 1.出現最后的bar的交易時間提示,模型算法無效. 2. KD信號消失,提示與模型不符,要我檢查算法.
排查:1.基本的公式計算. 2.系統的函數.
針對:1.RSV這個是標準的KD代碼,我只是簡單的移植,這個出問題的概率不大.
我查了下資料,有2種說法,一是說是crossover有問題,我看了下別人的源碼,也有用crossover.為了避免K=D的假信號,我用必須'大于'(或者是小于)來過濾假信號.
2.就是大家詬病的close函數,這個我正在換算法.或者換其它函數. 現在用的是open等結果.
//源碼:
Params
Numeric Length(30); //N 30
Numeric SlowLength(10); //M1
Numeric SmoothLength(10); //M2
Numeric lots(1);
Numeric offset(2);
Numeric Stoploss(40);
Vars
NumericSeries HighestValue;
NumericSeries LowestValue;
NumericSeries KValue;//TB中的K值
NumericSeries DValue;//TB中的K值
NumericSeries RSV;
NumericSeries K1;//正規的K值
NumericSeries D1;//正規的D值
Numeric i_offset;//程序化交易 www.tumamayizhan.com
Numeric BuyPosition;
Numeric SellPosition;
Numeric myEntryPrice;
Numeric myExitPrice;
Begin
{
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
RSV = (Close-LowestValue)/(HighestValue-LowestValue)*100;
K1 = SMA(RSV,SlowLength,1);
D1 = SMA(K1,SmoothLength,1);
KValue = SummationFC(Close - LowestValue,SlowLength)/SummationFC(HighestValue-LowestValue,SlowLength)*100;
DValue = AverageFC(KValue,SmoothLength);
PlotNumeric("RSV",RSV);
if(MarketPosition == 0)
{
if(K1 > D1)
{
buy(lots,high); //<---原來這里用的buy(lots,close[1]);
Return;
}
}
else if (MarketPosition == 1) //平多
{
if(K1 < D1)
{
sell(lots,open);//<--這里用的是sell(lots,close);
Return;//程序化交易 www.tumamayizhan.com
}
}
//止損
If(MarketPosition == 1)
{
If(Low < EntryPrice - StopLoss * MinMove*PriceScale)
{
myExitPrice = EntryPrice - (StopLoss+1) * MinMove*PriceScale;
myExitPrice = max(low,myExitPrice);
Sell(lots,myExitPrice);
}
}
Else If(MarketPosition == -1)
{
If(High > EntryPrice + StopLoss * MinMove*PriceScale)
{
myExitPrice = EntryPrice + (StopLoss+1) * MinMove*PriceScale;
myExitPrice = min(high,myExitPrice);
BuyToCover(lots,myExitPrice);
}
}
}
end