2008年9月12日 星期五

隔日沖 - 更正錯誤

隔日沖這篇文章提到兩個

把 隔日衝程式 和 當衝程式

放在一起時的作法

第一個
當沖的部份 提早5分鐘平倉 然後在判斷隔日沖是否進場
這方法 簡單 但浪費成本

第二個
管他手上有沒有單 時間到 就判斷是否翻單 留倉 平倉

不過這個方法出問題了...

用圖形解釋會比較清楚



如圖 在 time = 1340 的時候 會做兩次判斷

在邏輯上 個人認為沒有問題 不過就是有問題



這是台指今日走勢 在1340時

TS有出現平倉訊號 並且在下一根K線平倉

但HTS沒有...他大概想明天再平倉吧

這就是問題所在 而且還不清楚哪邊出現問題

一樣的程式 兩套軟體跑的不一樣 不得不承認 程式在設計上就錯了

目前的想法是 用了兩次 if time=1340 then .... 造成的

改進方法...改變隔日沖的判斷時間

在 time=1335 時就先判斷是否要隔日沖

不過不動作 只用stay這變數紀錄結果

然後在 time=1340 時再把隔日沖的動作一起寫在當沖平倉裡

看圖說故事比較清楚



1335時 用stay判斷要不要執行隔日沖 ( 1:多 / -1:空 / 0:條件不滿足 )

然後來到1340 這時先判斷手中持倉 再判斷stay的值

持有多單時:
stay = 1 => 手中有多單,且滿足隔日沖多單,不動作,多單留到次日
stay = 0 => 手中有多單,但不滿足隔日沖任何訊號,收盤平倉
stay = -1 => 手中有多單,且滿足隔日沖空單,收盤翻單

持有空單時:
stay = 1 => 手中有空單,且滿足隔日沖多單,收盤翻單
stay = 0 => 手中有空單,但不滿足隔日沖任何訊號,收盤平倉
stay = -1 => 手中有空單,且滿足隔日沖空單,不動作,空單留到次日

空手時:
stay = 1 => 空手,且滿足隔日沖多單,收盤進多單
stay = 0 => 空手,但不滿足隔日沖任何訊號,不動作
stay = -1 => 空手,且滿足隔日沖空單,收盤進空單

把時間錯開 這樣問題就解決了

所以 程式要改寫成


{判斷隔日沖訊號}
if time = 1335.00 then begin

if 隔日沖多單訊號 then begin
stay=1;
end;

if 隔日沖空單訊號 then begin
stay=-1;
end;

end;


{次日平倉訊號}
if marketposition > 0 and time = 0850.00 then begin
exitlong("ExitDB") next bar at market;
end;

if marketposition < 0 and time = 0850.00 then begin
exitshort("ExitDS") next bar at market;
end;

{持倉去留訊號}
if time = 1340.00 then begin

if marketposition > 0 then begin

if stay=0 then begin
exitlong("ExitB") next bar at market;
end;
if stay=-1 then begin
sell("ST9-1") next bar at market;
end;

end;

if marketposition < 0 then begin

if stay=0 then begin
exitshort("ExitS") next bar at market;
end;
if stay=1 then begin
buy("BT9-1") next bar at market;
end;

end;

if marketposition = 0 then begin

if stay=1 then begin
buy("BT9-0") next bar at market;
end;
if stay=-1 then begin
sell("ST9-0") next bar at market;
end;

end;


好了...沒問題了
HEMiDEMi Technorati Del.icio.us MyShare?犖?貊惜 Yahoo