把 隔日衝程式 和 當衝程式
放在一起時的作法
第一個
當沖的部份 提早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;
好了...沒問題了