HSP程式交易論壇 >> 程式交易 >> 論壇主區 >> 程式交易討論區 >> 不同策略放在同程式一程式中的操作訊號問題
不同策略放在同程式一程式中的操作訊號問題 unicorn666,2013-04-06 00:53:25

請教版主
 
例如
使用不同策略的個別進出場在同一個程式中時
 
A策略  操作訊號(多單建倉,A程式口數,A程式進場價)
A策略未平倉時,B策略即符合條件要進場,可是為反向
B策略 操作訊號(空單建倉,B程式口數,B程式進場價)
 
此時會出現"空單建倉有誤,因部位中尚有多單"
那該用什麼方式執行??
 
謝謝!!
 

Hunta,2013-04-06 08:23:32

應該是部位中尚有多單時,就下達空單命令。用Debug函數檢查一下「目前部位」的狀況。
unicorn666,2013-04-06 10:33:21

板主你好

因為如果AB策略口數不相同時
要先平倉再建倉反而需要使用多餘的變數去計算
如果不使用操作訊號可以執行嗎?

如A策略為多單3口,B策略直接進空單2口
總部位則為多單1口,
直接使用命令檔為1,讓API自行判別原口數而下單
此方法能用嗎?

Hunta,2013-04-06 13:11:36

操作訊號是系統用來統計倉位變化之用,在多空轉換之時,最好先平倉再建倉,才不會錯誤。
unicorn666,2013-04-06 16:07:46

版主你好

我有於進出場前先增加判別"平倉的口數"及"建倉的口數"

//空單出場
If B程式部位<0 Then
  ...
If 目前部位(倉位多空) < 0 Then
If 目前部位(口數) >= 出場單位 Then
   平倉口數 = 出場單位
   建倉口數 = 0
ElseIf 目前部位(口數) < 出場單位 Then
   平倉口數 = 0
   建倉口數 = 出場單位-目前部位(口數)
End If
ElseIf 目前部位(倉位多空) >= 0 Then
   平倉口數 = 0
   建倉口數 = 出場單位
End If
If 單K計數器 = 0 Then
...
...
[COLOR=#ff0000]操作訊號(空單平倉,平倉口數#口,出場價位#)[/COLOR]
操作訊號(多單建倉,建倉口數#口,出場價位#)
...
...
單K計數器 = 出場價位
End If
...
...
...


B策略原為進場空單2口,B策略尚未平倉時
A策略進場部位為多單3口,所以執行平倉2口空單並建倉1口多單
再來B策略的出場應為平倉0口空單並建倉2口多單
 
但是有加入操作訊號時,即使讓平倉口數為0
在K線圖及回測執行上也是會出現"空單平倉有誤,因目前部位為多單"
但是在圖上用DEBUG檢查及回測的交易明細時,則是無誤!!

可否麻煩版主
將操作訊號的口數為0不會出現此現象

謝謝


unicorn666,2013-04-06 16:53:21

版主你好

不好意思補充一下
只要有加入操作訊號
就算目前部位(口數) = 0 時
目前部位(倉位多空)依舊會有出現 = 1 or = -1 的情況

Hunta,2013-04-07 00:06:59

平倉時口數可選「全部」,因為有時自己下平倉口數時,有可能系統中記錄的口數不見得跟自已想像的口數一致。
unicorn666,2013-04-07 15:12:07

版主你好

將判別式放置於單K計數器後問題就可以解決了!!
謝謝版主的建議,減少了一些執行錯誤!!

unicorn666,2013-04-08 15:59:05

版主你好
 
可否建議版主在操作訊號不要分成[COLOR=#ff0000]平倉[/COLOR]跟[COLOR=#ff0000]建倉[COLOR=#000000]或新增一個無分別的操作訊號[/COLOR]
[/COLOR]直接以操作訊號(多單,口數,價位)及操作訊號(空單,口數,價位)來使用
可使系統提供更多元化的應用

因為下列的判別式在每個進場每個出場都需要加入
If 目前部位(倉位多空) < 0 Then
If 目前部位(口數) >= 出場單位 Then
   平倉口數 = 出場單位
   建倉口數 = 0
ElseIf 目前部位(口數) < 出場單位 Then
   平倉口數 = 0
   建倉口數 = 出場單位-目前部位(口數)
End If
ElseIf 目前部位(倉位多空) >= 0 Then
   平倉口數 = 0
   建倉口數 = 出場單位
End If
甚至於ELSE之後也需要再加入一次
單以上述的"[COLOR=#ff0000]額外再判別需平倉跟需建倉的程式碼[/COLOR][COLOR=#000000]"就多加了幾百行了...已經是原程式碼的1/3以上[/COLOR]
今日實際執行程式時速度降低非常多,會導致滑價變更多
 
感謝版主

Hunta,2013-04-08 22:42:14

不用自行記錄平倉口數,只要在下平倉指令時,口數的部份選「全數」即可。
unicorn666,2013-04-09 00:36:58

版主你好

不好意思 上面的策略有打錯
應該為
If 目前部位(倉位多空) < 0 Then
If 目前部位(口數) >= 進場單位 Then
   平倉口數 = 進場單位
   建倉口數 = 0
ElseIf 目前部位(口數) < 進場單位 Then
   平倉口數 = 目前部位(口數)
   建倉口數 = 進場單位-目前部位(口數)
End If
ElseIf 目前部位(倉位多空) >= 0 Then
   平倉口數 = 0
   建倉口數 = 進場單位
End If


因為如果A策略原先的口數為多單3口
之後B策略的進場單位為空單2口時
總部位應該會為多單1口

如果口數部位選用"全數"的話~
就會連那1口多單都一起平倉

謝謝版主

Hunta,2013-04-09 09:38:11

你應該用部位總量的觀點來處理,因為就算自動下單的部份也是以「最終部位」來處理,可以這樣寫:
If 目前部位(倉位多空) < 0 Then
  If 目前部位(口數) >= 進場單位 Then
    操作訊號(空單平倉,進場單位#口)
  ELSE
    操作訊號(空單平倉,全數)
    Va = 進場單位 - 目前部位(口數)
    操作訊號(多單建倉,Va口)
  End If

 97 1 2 8: 此主題共有13帖 此頁12帖 每頁12帖 

[查看完整模式]

LeadBBS 5.0 耗時125毫秒 請求2次