Dear 小幫手,
若我選擇當沖,但又想設定策略交易金額上限,就出現一個問題就是,當已經買進,要回補時,系統會檢查有否超過交易金額,若超過的話,不就不能執行回補了?
有什麼方式可以做到一定的保護機制,又可以做當沖回補以結束一買一賣的交易嗎?
謝謝!
若我選擇當沖,但又想設定策略交易金額上限,就出現一個問題就是,當已經買進,要回補時,系統會檢查有否超過交易金額,若超過的話,不就不能執行回補了?
有什麼方式可以做到一定的保護機制,又可以做當沖回補以結束一買一賣的交易嗎?
謝謝!
Hello boku,
目前最新版本(.06.03 211008)中安控設定裡面已經修改為 每日進場金額上限,出場金額並不會被納入計算,因此也不會影響您的出場。
除了用安控中心,您也可以在策略裡設變數來控制每個商品的進出次數不可超過您設定的上限。
Dear 小幫手,
"除了用安控中心,您也可以在策略裡設變數來控制每個商品的進出次數不可超過您設定的上限。"
請問有可以寫個範例嗎? (因為現在我寫的程式似乎沒法控制當日進出限制1次)
另外想請問, 若是進場張數想與股價連結(例如 當天只1次進場,>100元以上的話就張數為1張,<100元以下的,當次進場2張)。但可能分批出場。
如此的話,可以在交易腳本理寫程式,還是由自動交易中心做控制?
感謝!
想請問如何下載安裝您所提到的最新版本? 目前我的版本是210923
Hello boku,
目前最新版本(.06.03 211008)中安控設定裡面已經修改為 每日進場金額上限,出場金額並不會被納入計算,因此也不會影響您的出場。
除了用安控中心,您也可以在策略裡設變數來控制每個商品的進出次數不可超過您設定的上限。
請問小幫手 如果設定單一商品每日交易金額上限為50萬 不同價格商品可能買進張數會不一樣,如果停利出場條件打算分批出場,假設達標1%先出場1/3,達標2%再出場1/3,類似這樣的腳本該如何寫出呢??謝謝
Hello boku,
假設您使用分鐘頻率的話,進出場控制的簡單範例:
input: entry_time(1, "最多進場次數");
var: count(0); //計算進場次數
if getfielddate("Date") <> getfielddate("Date")[1] then count = 0; //每日重置
condition1 = 進場條件...;
if condition1 and count < entry_time then begin //進場次數需小於最多進場次數
setposition(1, market);
count += 1; //每次進場進場次數就加1
end;
如果您要用股價判斷進場張數,並分批出場的話,這些只能在腳本中撰寫。
關於您執行異常的部分,就圖片上看來問題並不是出在XS腳本,而是您交易帳號的設定。
需要麻煩您提供 交易中心匯出檔勾選(包含)交易腳本 以及 XQ Log 來檢驗。
Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。
您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。
感謝。
Hello MT,
您可以設個input輸入交易金額,然後以此為依據計算要進場幾張。
出場時可以用 round 或 floor 函數來計算 1/3 口數的整數為幾張,在每次符合條件時只出場該數目。
小幫手這邊寫個簡單的範例:
input: amount(500000, "交易金額");
var: entry_position(0); //進場張數
condition1 = 進場條件......;
if condition1 and position = 0 then begin
entry_position = floor(amount / (close*1000)); //計算總共可以買幾張
value1 = floor(entry_position / 3); //計算分成3次出場一次要出幾張
setposition(entry_position, market); //交易金額可以買進幾口就買幾口
end;
if position > 0 and filled > 0 then begin
if close >= filledavgprice * 1.01 and position = entry_position then setposition(entry_position - value1, market); //第一次出場。
if close >= filledavgprice * 1.02 and filled = entry_position - value1 then setposition(entry_position - (2 * value1), market); //第二次出場
if close >= filledavgprice * 1.03 and filled = entry_position - (2 * value1) then setposition(0, market); //第三次全出。
end;
請問為什麼 第一次出場 是用 position=.. 判斷,第二跟第三次是用 filled?
是否第一次也可以用 filled=entry_position 來判斷?
if position > 0 and filled > 0 then begin
if close >= filledavgprice * 1.01 and position = entry_position then setposition(entry_position - value1, market); //第一次出場。
if close >= filledavgprice * 1.02 and filled = entry_position - value1 then setposition(entry_position - (2 * value1), market); //第二次出場
if close >= filledavgprice * 1.03 and filled = entry_position - (2 * value1) then setposition(0, market); //第三次全出。
end;
Hello boku,
用 position 來判斷 => 即使委託沒有成交,position也會改變。
用 filled 來判斷 => 除非委託成交,不然filled不會改變。
舉例來說您現在手上有3張股票,想要在9點半時賣掉一張,10點時賣掉一張。
但您9點半掛上去後沒有成交一直延續到10點都沒有成交。
此時用position來判斷的話:
會把原本的那張單取消掉,重掛2張賣單。
此時用filled來判斷的話:
由於沒有成交,filled沒有改變,所以還會維持一張賣單。
您可以自行選擇符合您需求的使用。
Hello boku,
關於郵件裡的問題,就您附的圖和腳本來看,print出來的 filledAvgPrice, stop_point, moving_point 都顯示為0。
小幫手推測可能是目前系統有一個問題是腳本有觸發且賣出,但自動交易中心這邊會顯示庫存為0。
所以會導致停損停利等出場策略有問題的狀況。
工程師修正後先包了一個特別版,您可以使用看看還會不會發生異常的情況。
http://203.67.19.14/dassvr/installer/daq/tw/7.06.03_211109/pkgsetup.exe
http://203.67.19.14/dassvr/installer/daqxqlite/tw/3.06.03_211109/xqlitesetup.exe
如果還是有問題的話,需要麻煩您提供 自動交易中心匯出檔勾選(包含)交易腳本 以及 XQ Log 來檢驗。
Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。
您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。
感謝。
16 評論