kilroy
發表於 14-6-17 16:48
skyler 發表於 14-6-17 16:06 static/image/common/back.gif
k大請問一下
我沒記錯的話 YM ZC ZS ZW 這四種
是在CBOT吧
照上面的訂閱就可以了
kilroy
發表於 14-6-17 17:43
skyler 發表於 14-6-17 16:06 static/image/common/back.gif
k大請問一下
我沒記錯的話 YM ZC ZS ZW 這四種
是在CBOT吧
再補一下 eSignal 的好處
1. 報價穩定
2. 回補速度快
3. 省去資料整理的麻煩 (ex. MC 用 QM 去做 mapping)
4. 資料維護幫你做好了
但是如果你的策略可以改寫成 easy/power language
其實你可以開 TS 比較快也比較省啦
參考看看
skyler
發表於 14-6-17 19:48
本帖最後由 skyler 於 14-6-17 19:56 編輯
TS 不是比較貴嗎?!
而且再改去TS 又要再多學一套與設定
我在MC上光回測結果與AB差異太多
我就不想再接下去研究如何接下單機了
實在是太耗心力了
您那時測試沒有遇過 AB 與 MC 結果不同的情況嗎 ?
----------
另外想到 IB要下多少口才能享有 eSignal 的CME免費優惠?
kilroy
發表於 14-6-17 20:03
本帖最後由 kilroy 於 14-6-17 20:29 編輯
skyler 發表於 14-6-17 19:48 static/image/common/back.gif
TS 不是比較貴嗎?!
而且再改去TS 又要再多學一套與設定
TS 是方便在 historical data, real time data feed, brokerage 都整合在一起
而手續費跟 IB 比起來是貴一點點
但如果考量上述三點,算是經濟實惠的平台了
大大可以參考看看
---
我是先在 AB 做單策略多商品
但沒想過要把他重新組譯成 MC 的 power language
所以也沒在 MC 上測過相同策略
會有差異,可能會是在計算結果上的不同吧
ex. AB+eSignsal v.s. MC+eSignal
---
只要開 IB 帳戶,就有資格訂閱 CME Group fee-waived
沒有下單量的限制
---
AB 最麻煩的地方就是部位的處理
ex. marketposition 這類的函數,AB 要自己做
還有停損的寫法,也是傷腦筋的事情
所以直接寫多空對翻是最省事的
因為固定點數或百分比停損停利、移動停損停利、持有時間停損停利、特定時間停損停利
我是覺得比較容易去 fitting
但沒有一個正確和絕對的答案
參考看看了
skyler
發表於 14-6-17 21:12
本帖最後由 skyler 於 14-6-17 22:54 編輯
原來TS整合了這三個
謝謝您的分享
不過目前首先要吸收您在前面寫的 IB Controller 的程式碼
自己是
Buy = ExRem( Buy, Short );
Sell = ExRem( Sell , Buy );
Short = ExRem( Short, Buy );
Cover = ExRem( Cover , Short );
所以還要吸收消化
才能改寫符合自己需求呀
{:4_93:}
之後還要麻煩k 大指導了
----
小弟跟大大相同
也是單策略多商品
只是策略沒有很複雜
所以才比較容易改寫成 Power Language
不過結果不同分析後
1.資料上的差異 或是 同資料歸分的差異
2.計算後值的不同
不過由於資料上的差異所以像MACD 或RSI 這種計算出來的值是否AB與MC會相同我就不確定了
不過搞不好跟AB 32bit 與 64bit 一樣算出來會有差異
回測結果不同
那就要看你要選擇相信什麼了
{:4_202:}
簡單的策略不去優化
配合多種商品的測試
與回測時間從08年到現在
能呈現比較正向的結果
那就只能硬著頭皮相信這是個可行的策略了
---
大大有寫到
"所以後來改為各別商品一個圖表的方式,加上了開關按鈕
當按下 off 之後,我可以做商品合約名稱的修改,按下 on 之後就開始自動下單啦"
這是指每一個商品搭配一個策略AFL
每個AFL都相同只差在裡面的
ContractMonth
方面能停止後修改名稱再起動
是嗎?!
kilroy
發表於 14-6-17 22:52
skyler 發表於 14-6-17 21:12 static/image/common/back.gif
原來TS整合了這三個
謝謝您的分享
1. 啟用 safty card
2. 非專業
skyler
發表於 14-6-17 22:56
本帖最後由 skyler 於 14-6-17 23:03 編輯
kilroy 發表於 14-6-17 22:52 static/image/common/back.gif
1. 啟用 safty card
2. 非專業
啓用 safty card
不會影響IB Controller嗎?!
沒想到大大回覆我了
我修改了之前的留言了
想要詢問您這個問題
---
大大有寫到
"所以後來改為各別商品一個圖表的方式,加上了開關按鈕
當按下 off 之後,我可以做商品合約名稱的修改,按下 on 之後就開始自動下單啦"
這是指每一個商品搭配一個策略AFL
每個AFL都相同只差在裡面的
ContractMonth
方面能停止後修改名稱再起動
是嗎?!
----
另外 IB 的paper account
是否能如實際狀況
我下了一張 OPEN價的單在K棒開始時
實際的市場上可能因為滑價的關係或是要排
所以不會馬上成交
但在回測上是一定會成交
所以IB 的paper account是否也會如實際情況一樣呢?
還是下出去的單都會成交?
謝謝大大指導~
kilroy
發表於 14-6-17 23:14
本帖最後由 kilroy 於 14-6-17 23:19 編輯
skyler 發表於 14-6-17 22:56 static/image/common/back.gif
啓用 safty card
不會影響IB Controller嗎?!
沒想到大大回覆我了
1. 安全卡只會在登入 IB TWS 時會用到
基本上除非當機、停電跳電、重開機之外
IB TWS 不會需要一直去登入
若網路斷線、IB伺服器斷線、IB伺服器維護等
IB TWS 會自動重新連線(並不會關閉,除非 auto log-off 請參考此篇)
若不是上述狀況,須重新開啟IB TWS外
整個禮拜、整個月,甚至更長的時間,都不會需要再次登入 IB TWS
IB Controller 是 AB 與 IB TWS API 的橋梁
它會偵測是否與 IB TWS 正常連線,才可以正常下單
2. 開關是方便避免在修改月份時,有訊號
不過這只是比較消極的方式,因為換約都是手動換的
所以勢必要先將當月合約平倉、同向建立新月份新倉、更改合約月份
其實開關可有可無 ^^"
3. IB paper account 是依照實際狀況(包含 ask/bid)
所以下限價單會與真實操作時一樣
需要排隊的
skyler
發表於 14-6-18 23:06
kilroy 發表於 14-3-28 01:58 static/image/common/back.gif
Hi,
沒辦法下出去是因為
k大
從頭到尾看完後
有幾個問題不是很懂想跟您請教一下
-----
"AB 可以透過 SCAN 方式(不開圖表)"
在沒有圖表只有Analysis 視窗時
我要掃一小時的K線圖
只要將 Periodicity 設成 1小時即可對吧?
另外在General 裡 對於實際下單有影響的
應該只有Periodicity 其它都在AFL設定了
不知我理解對不對
------
"後來改為各別商品一個圖表的方式,加上了開關按鈕"
請問這是不是將AFL以拖拉的方式
拖放到到圖表中顯示指標?
-----
在89樓您回覆osdak 大
"沒辦法下出去是因為
barcomplete 和 newbar 相互抵觸
所以 new那邊要改寫一下"
我不太懂為什麼會造成衝突?
以及該如何改寫?
-----
前天您在 170樓的回覆
"SCAN 模式下,會在當根K開始時判斷是否符合買賣條件"
那是不是表示
我如果是在Scan的模式下
根本不用去判斷 barcomplete 呢?
-----
ibc.CloseAllOpenPositions(ContractMonth);
這句的語法的功用是什麼?
是取消所有尚未成交的委託單嗎?
-----
另外如果要平掉多單空單
是否跟委買委賣一樣?
假設我要以 1000 分別平多單跟空單
是否如下寫法?
平多單
ibc.PlaceOrder(ContractMonth, "SELL", Shares, "LMT", 1000, 0, "DAY", True);
平空單
ibc.PlaceOrder(ContractMonth, "BUY", Shares, "LMT", 1000, 0, "DAY", True);
-----
承上面
1000 之後的 0這個參數代表的是在建倉時給的停損價對吧?
------
以現在
6A #F 的報價是 0.9281
但澳幣409的報價是 9281
以連續月來判斷是否有策略成立
而下單時是下在近月的情況下
我下單的價格是要以連續月的報價 X 10000 來下嗎?
感謝您的指導~
kilroy
發表於 14-6-19 10:19
skyler 發表於 14-6-18 23:06
k大
從頭到尾看完後
有幾個問題不是很懂想跟您請教一下
Hi,
沒錯,Periodicity 設定就是掃描的週期
其他資金或是手續費等設定,大多都可以寫在AFL裡,不用另外設定
---
可以用 drag-drop 方式,也可以直接寫在同一AFL檔裡
---
new bar 是判斷是否為新的bar
它會洗掉 staticvarset
所以可能會有互相抵觸的情況
staticvarset 最主要是用來避免重複送單
---
如果你的語法裡有類似 cross(c,condition)
之類的,就要用 barcomplete
只要是用到 c 的都要在 bar 走完之後
---
closeallposition
是把所有部位平倉
加上該合約月份就可以指定平倉那個商品
---
限價單要有價位才能送單
ibc.PlaceOrder("contractmonth", "BUY", 數量, "LMT", 價格, 0, "DAY", True );
這樣子的語法才可以
---
報價和下單要一樣
看你是接那種單位的資料源
不過下市價單應該沒差
參考看看了
skyler
發表於 14-6-19 11:30
本帖最後由 skyler 於 14-6-19 11:36 編輯
kilroy 發表於 14-6-19 10:19 static/image/common/back.gif
Hi,
沒錯,Periodicity 設定就是掃描的週期
感謝k大您的回覆
跟您確認一下我的理解有沒有誤
-----
PrevTN = StaticVarGet("TimeNumber"+Name());
TN = LastValue(TimeNum());
NewBar = TN != PrevTN;
我想問NewBar的變化
假設以小時K來看(用開盤時間表示)
-1 (前根K棒):時間是 09:00:00
0 (目前K棒):時間是 10:00:00
scan 是1秒執行一次
系統時間在 09:59:59 的scan : NewBar = false
系統時間在 10:00:00 的scan : NewBar = true
系統時間在 10:00:01 的scan : NewBar = false
Buy = ExRem( Buy, Short );
假設在這三個時間點都有buy訊號成立
系統時間在 09:59:59 時 BuyOrderID != "" 所以不會有買訊送出
系統時間在 10:00:00 時 BuyOrderID != "" 會送出買訊
系統時間在 10:00:01 時 BuyOrderID != "" 所以不會有買訊送出
今天若加上
barcomplete = BarIndex() < LastValue(BarIndex());
系統時間在 09:59:59 時 -1K尚未走完 barcomplete = false 買訊不成立
系統時間在 10:00:00 時 -1K走完 barcomplete = true 買訊成立
系統時間在 10:00:01 時 0K尚未走完 barcomplete = false 買訊不成立
最後應該只有 10:00:00 時會有單子送出才對呀
想不出來為什麼會有單子送不出去的情境?!
-----
另外想問一下
如果下出去的單是限價單目前正在排而沒有立即成交時
那麼我在以下
BuyOrderID = StaticVarGetText("BuyOrderID"+Name());
SellOrderID = StaticVarGetText("SellOrderID"+Name());
是否就取不到值呢?
-----
ibc.CloseAllOpenPositions(ContractMonth);
這會是以市價單平掉目前留倉並且也也包含委託中尚未成交單嗎?
如果要用限價來平倉
是否就是如下寫法
平多單(sell):
ibc.PlaceOrder("contractmonth", "SELL", 數量, "LMT", 價格, 0, "DAY", True );
平空單(cover):
ibc.PlaceOrder("contractmonth", "BUY", 數量, "LMT", 價格, 0, "DAY", True );
-----
下市價單就不用管邏輯中的
BuyPrice = CoverPrice = O;
ShortPrice = SellPrice = O;
只要管進出場
buy 或 cover:
ibc.PlaceOrder("contractmonth", "BUY", 數量, "MKT", 價格, 0, "DAY", True );
short 或 sell:
ibc.PlaceOrder("contractmonth", "SELL", 數量, "MKT", 價格, 0, "DAY", True );
所以大大都是下市價單
是為了確保所下的單能成交嗎?
------
突然想到
AB的回測能如果MC那樣
模擬各K線的上下振動來回測嗎
例如
我資料源是1分鐘
但回測K線圖是1小時
是否能做到 ?
再次謝謝您了~
kilroy
發表於 14-6-19 16:29
skyler 發表於 14-6-19 11:30 static/image/common/back.gif
感謝k大您的回覆
跟您確認一下我的理解有沒有誤
Hi,
new bar 是以 timenum() 來抓的
ex. hourly 2:00 ->2:59 都是 2:00
若當根出現BUY 訊號,則 BUY 恆為 true
而透過 scan 或 圖表,這個值一直都會是 true
那你的送單語法...
ex. if(lastvalue(buy))
{
ibc.PlaceOrder( Name(), "Buy", 100, "MKT", 0, 0, "Day", Transmit);
}
這個部份就會一直去執行,所以會重覆著送單
我們必須用 StaticVarGetText 來紀錄送單出去成交後的 ID (暫存位置)
如此,當根K只會送這麼一次 BUY ORDER 了
而判斷是否為 new bar 是為了要將這個暫存的狀態清掉
請參考此網址
---
barcomplete 最主要是用在 cross(close,value) 這種進場策略
如果你的進場條件沒用到 Close 價
不用太執著這個部分
---
有成交才會有 order ID 產生
ibc.closeallopenpositions 是市價平倉沒錯
IB Controller 的下單語法與測試
建議開好 IB 後,在 paper account 上實際測試操作最快、最符合需求
---
這個部分可以用 bar replay 功能來觀察
不過 AB 沒有細部回測
---
參考看看了
greg
發表於 14-6-22 12:35
K 大可否跟您請教一下, 如何把 trailling stop 的語法寫進策略裡 ? 再次謝謝 K 大!
kilroy
發表於 14-6-23 22:49
目前的寫法會變成
回測跑 applystop (但實際無法下單)
實測下單是把條件分離開來寫
符合條件後取得IB TWS 倉位再動作
IB Controller(多單停損或停利)
而且發現網路相關範例居然很少 ^^”
---
小弟是從開始就以多空對翻不空手的方式
trailling stop 還真不好寫
寫了還有一些問題需要確定是否送單無誤
我再努力看看
skyler
發表於 14-6-24 16:12
kilroy 發表於 14-6-17 15:18 static/image/common/back.gif
Hi,
申請 eSignal 可以到這個網站
k大您好
我在 http://chinafinpipe.com/category_list/realtime/
找不到
Extended Intraday History
CME Group Fee-Waived Globex Data
不知那裡選錯了?!
感謝~