如何在日線層級 implement "Buy this bar at Close" + 今日慘痛經驗
本帖最後由 alexliou 於 15-6-5 16:50 編輯我有一個在日線層級跑的程式
包含好幾組買賣訊號
其中有一個訊號用到了"Buy this bar at close" (實際是空單平倉)
像昨天這個訊號在收盤時就被觸發了
實際上這種單子根本送不出去
只能靠第二天補下人工單
今天我就想嘗試利用 currenttime 和PlaceMarketOrder這兩個Keyword
來達成在某一特定時間送出市價賣單的功能
程式碼如下:
;
If currenttime_s>134400 then begin //不能用time 是因為日線bar 的timestamp 永遠是1345
oncebegin
PlaceMarketOrder(false, false,1);// 要下買單的話 把第一個false改為true
end;
end;
經過我的實驗 這是可行的
我在9:05分 將currenttime_s>134400 改為 currenttime_s>090700
系統果然在09:07送出市價單 把我在九點前買進的部位平倉了
具有高度實驗精神的我
決定再嘗試一下不用once 來控制 只下一次單
而採用自訂變數來控制
程式修改如下:
;
variables: orderPlaced(false);
If currenttime_s>101000 and last>9300 and orderplaced = false then begin
PlaceMarketOrder(false, false,1);
orderPlaced = true;
end;
在10:05 我把程式改好, 想說如果指數漲到9300以上, 系統可以把我在9290買進的人工單平掉
運氣真好!把autotrading的開關打開後
指數果然一如預期的往9300邁進
10:15左右指數觸到了9301
電腦發出一連串 " order submitted" "order filled"的響聲
一陣慌亂之下 我趕緊把AutoTrading的開關關掉
一檢查 系統竟然下了30口空單
平掉(憑弔)這多出來29口部位 一共虧了260點(稅費未計, 小台)
後來我檢查Log,其實在我關掉autotrading之前, 系統共嘗試下了130口
還好保證金帳戶錢不夠 後來的單子被期貨商拒絕了
不是place market order之後, orderplaced 被改成true
之後就不該再下單了呢?
各位看倌, 您有看出端倪了嗎? 問題在哪裡?
我的高度實驗精神仍未被這小小的虧損擊倒
後來我找出了原因
改正了程式碼可以用自訂變數來控制只執行一次
但保險起見 建議用once 比較好(或兩者合用)
PS: 實驗過程中我也發現 marketposition_at_broker 傳回的值並不包含昨天的部位
只計算今日在期貨商所有下單(人工+自動)所造成的部位口數
這種實驗以後還是先在凱衛模擬交易進行比較好
原來....那根出量黑K就是你..{:4_176:} 沒房子的阿捨 發表於 15-6-5 17:15 static/image/common/back.gif
原來....那根出量黑K就是你..
行情在那遲滯了一至二秒
然後就衝上去了
我回補的均價在9309-9310
{:4_205:}
有人看出用自訂變數來控制賣出次數那段程式的問題了嗎? alexliou 發表於 15-6-5 22:18 static/image/common/back.gif
有人看出用自訂變數來控制賣出次數那段程式的問題了嗎?
PlaceMarketOrder(IsBuy, IsEntry, Contracts)
[*] Works with auto trading turned off.
[*] Can be used as a mean of synchronization of strategy market position with a broker.
[*] Also see the related ChangeMarketPosition keyword.
他的意思好像是要自動交易關閉時使用!? 不知道這有沒有關聯呢
alexliou 發表於 15-6-5 22:18 static/image/common/back.gif
有人看出用自訂變數來控制賣出次數那段程式的問題了嗎?
If currenttime_s>101000 and last>9300 and orderplaced = false then begin
PlaceMarketOrder(false, false,1);
orderPlaced = true;
end;
請教大大~
orderplaced = false的判斷是否可改成 marketposition<>0 呢?
試試看?
variables: intrabarpersist orderPlaced(false);
不過, 建議先 dump 一些東西 確認 if 內只有跑一次
pcking2008 發表於 15-6-6 00:23 static/image/common/back.gif
試試看?
variables: intrabarpersist orderPlaced(false);
exactly. You are right.
打開IOG時用來控制下單次數的變數要非常小心
沒房子的阿捨 發表於 15-6-5 23:16 static/image/common/back.gif
If currenttime_s>101000 and last>9300 and orderplaced = false then begin
PlaceMarketOrder(false ...
可能不行
因為PlaceMarketOrder 並沒有在Chart上顯示部位
不過我會在凱衛模擬交易所測一下
alexliou 發表於 15-6-6 00:33 static/image/common/back.gif
可能不行
因為PlaceMarketOrder 並沒有在Chart上顯示部位
不過我會在凱衛模擬交易所測一下
請教alex大
一般我們用at 9600 stop可以在日K棒內丟出觸價單or停利單. (會滑價的市價單)
有沒有辦法在到價時, 當根日K丟出limit單呢?
(我目前能想到的是用圖表1分K, data2用日K,但這也只能在>9600後的下根1分Kbar才會丟limit單)
沒房子的阿捨 發表於 15-6-7 19:56 static/image/common/back.gif
請教alex大
一般我們用at 9600 stop可以在日K棒內丟出觸價單or停利單. (會滑價的市價單)
除了你提出的方法
我想不出其他丟Limit單的辦法
沒房子的阿捨 發表於 15-6-7 19:56 static/image/common/back.gif
請教alex大
一般我們用at 9600 stop可以在日K棒內丟出觸價單or停利單. (會滑價的市價單)
如果可以考慮不使用MC內建下單機的話
寫一個DLL 直接下單至期貨商可能是個選項
本帖最後由 alexliou 於 15-6-9 16:47 編輯
沒房子的阿捨 發表於 15-6-7 19:56 http://www.coco-in.net/static/image/common/back.gif
請教alex大
一般我們用at 9600 stop可以在日K棒內丟出觸價單or停利單. (會滑價的市價單)
仔細思考了一下
覺得您所提出的用兩個資料序列
而在1分K Chart 丟單 才是好的做法
原先我那個方法 硬要在日線丟單 可能必須開啟IOG模式
如果原先策略不採IOG模式會無法相容
alexliou 發表於 15-6-9 16:37 static/image/common/back.gif
仔細思考了一下
覺得您所提出的用兩個資料序列
而在1分K Chart 丟單 才是好的做法
大大您讓我忽然想通了...對吼
只要把1分K再縮小成1秒K or tick 圖, 就可以再最短時間丟單了{:4_149:}
本帖最後由 alexliou 於 15-6-10 09:35 編輯
剛剛在凱衛模擬交易所與實體帳戶測試
PlaceMarketOrder這個指令在IOG未開時也可作用
重點是控制好只能下單一次
頁:
[1]
2