電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus

公開程式交易原始碼 - 最大震盪值(GSV)



價格變動的原因並不是因為有多少股票或期貨契約被買進和賣出,而是因為它們最終會成交。價格振盪的原因是由其中一方(不管是買方或賣方)忽視了對方的存在。
換句話說,買賣的某一方為了自己的利益,因而願意付出更高的價格買進,或以更低的價格賣出。這種造成價格振盪失衡的原因,並不是因為成交量,而是急迫性……想要擁有,而且馬上就要擁有的那一方,因此就把價位拉高或殺低。



每一天你都會遇到買進振盪和賣出振盪,而收盤價加/減開盤價,則將告訴我們是哪一方獲勝。如果我把過去幾天從開盤價到最低價的振盪幅度加總,就可以得出過去幾天賣出振盪的平均值,據此可以推論,今天開盤後所出現的振盪值如果超過這個平均值,就可能是一個賣出信號。

最大振盪值(Greatest Swing Value)

我稱這種觀念為“最大振盪值”,它可以運用到許多能夠產生獲利的交易上。如果經常使用這個觀念,你就會更欣賞這種在下跌的日子裏找上漲振盪、在上漲的日子裏找下跌振盪的邏輯。我把這種振盪歸類為“失敗振盪”;雖然市場出現這麼大的振盪,可是無法堅持到底,收盤時反而出現相反方向的振盪變動。

讓我們看看你可以用振盪值做些什麼。你可以先確定過去幾個交易日的失敗振盪平均值是多少,然後將當天的開盤加加上或減去這個數值,得出你的進場點。或者你也可以根據X日的失敗振盪值所計算出的標準差,將標準差乘以1倍或2倍加上失敗振盪的平均值,作為你的進場點。--- 摘譯 Larry Williams 短線交易祕訣

做多邏輯

  • 今天的收盤價必須低於前5天的收盤價。
  • 前4天每天從開盤價到最高價的差距,加起來除以4,計算出“買進振盪”的平均值。
  • 價格已經上漲超過開盤價加上4天振盪平均值的1.8倍。

做空邏輯

  • 今天的收盤價必須高於前5天的收盤價。
  • 把前4天從開盤價到最低價的差距除以4,計算出“賣出振盪”的平均值。
  • 價格已經下跌超過開盤價加上4天振盪平均值的1.8倍。

GSV 指標程式碼


input:Ref_L(4),Ref_S(4),Ratio_L(1.8),Ratio_S(1.8) ;
Vars:SW_L(0),SW_S(0) ;

if DataCompression < 2 then Begin { 判段時間週期是日K或分K , < 2為分K }

{ 計算買進振盪值 }

Value2 = 0 ;
For value1 = 0 to Ref_L-1 Begin { 也可以使用 1 ~ Ref_L }
Value2 = Value2 + HighD(Value1)-OpenD(Value1) ;
end;
Value3 = Value2/Ref_L*Ratio_L ;

{ 計算賣出振盪值 }

Value5 = 0 ;
For value4 = 0 to Ref_S-1 Begin
Value5 = Value5 + OpenD(Value4)-LowD(Value4) ;
end;
Value6 = Value5/Ref_S*Ratio_S ;

{ 多空進場價格 }

SW_L = OpenD(0)+ Value3 ;
SW_S = OpenD(0)- Value6 ;

end else Begin { 計算日K }

Value2 = 0 ;
For value1 = 0 to Ref_L-1 Begin
Value2 = Value2 + High[Value1]-Open[Value1] ;
end;
Value3 = Value2/Ref_L*Ratio_L ;

Value5 = 0 ;
For value4 = 0 to Ref_S-1 Begin
Value5 = Value5 + Open[Value4]-Low[Value4] ;
end;
Value6 = Value5/Ref_S*Ratio_S ;

SW_L = Open + Value3 ;
SW_S = Open - Value6 ;
end;

Plot1(SW_L,"SW_L") ;
Plot2(SW_S,"SW_S") ;


策略程式碼


input:EntryType(1),ExitType(0);
input:Ref_L(4),Ratio_L(1.8),Ref_S(4),Ratio_S(1.8),TrendL(30),RetraceL(5),TrendS(30),RetraceS(5) ;
input: NBarL(2),NBarS(2),TradeProfit(0.05),TradeStopLoss(0.05),ATRs_L(2),ATRs_S(2);
Vars: SW_L(0),SW_S(0) ;
vars: IsBalanceDay(False),MP(0),PF(0),PL(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 ;

if DataCompression < 2 then Begin
Value2 = 0 ; For value1 = 0 to Ref_L-1 Begin
Value2 = Value2 + HighD(Value1)-OpenD(Value1) ;
end;
Value3 = Value2/Ref_L*Ratio_L ;


Value5 = 0 ;
For value4 = 0 to Ref_S-1 Begin
Value5 = Value5 + OpenD(Value4)-LowD(Value4) ;
end;
Value6 = Value5/Ref_S*Ratio_S ;
SW_L = OpenD(0)+ Value3 ;
SW_S = OpenD(0)- Value6 ;
end else Begin

Value2 = 0 ;

For value1 = 0 to Ref_L-1 Begin
Value2 = Value2 + High[Value1]-Open[Value1] ;
end; Value3 = Value2/Ref_L*Ratio_L ;

Value5 = 0 ;
For value4 = 0 to Ref_S-1 Begin
Value5 = Value5 + Open[Value4]-Low[Value4] ;
end;
Value6 = Value5/Ref_S*Ratio_S ;
SW_L = Open + Value3 ;
SW_S = Open - Value6 ;
end;

if EntryType = 1 then Begin
if Close < CloseD(RetraceL) then Buy next bar at SW_L stop ;
if Close > CloseD(RetraceS) then Sell next bar at SW_S stop ;
end;

加入均線濾網

if EntryType = 2 then Begin
if Close > Average(Close,TrendL) and Close < CloseD(RetraceL) then Buy next bar at SW_L stop ;
if Close < Average(Close,TrendS) and Close > CloseD(RetraceS) then Sell next bar at SW_S 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 IsBalanceDay then setExitonClose ;
EntryTYpe = 1


績效報表

台指期 60分K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200

你隨時都可以利用最大振盪值的觀念,來確定市場的支撐或壓力區。依照Larry Williams外期商品實務經驗,逆勢反轉振盪1.8倍,搭配2.25倍的止損點效果相當好。

0 意見: