jacklcl
發表於 14-7-20 23:32
osdak 發表於 14-7-20 21:48 static/image/common/back.gif
Hi, jack, 可不可以舉個例子?你意思是,如果原來的buyprice是10元, 而那根bar的H和L是12和8, 如果我加5 ...
我之前的經驗是
我用breakout入市的
如當根bar H是12, 而我的breakout價是是10的話
設了3點slippage後
回測是不會以13作買入價計算的, 因為當根BAR沒有13這個價位
必需加上我那句AFL回測才會以13作買入價計算
至於如不加這句會以10還是12作買入價計算
我不太記得了, 因之後我如要設slippage都加上這句AFL
skyler
發表於 14-7-21 13:49
osdak 發表於 14-7-20 21:48 static/image/common/back.gif
Hi, jack, 可不可以舉個例子?你意思是,如果原來的buyprice是10元, 而那根bar的H和L是12和8, 如果我加5 ...
會給 12
超過K棒的區間時會給H或是L價格
jacklcl
發表於 14-7-21 14:38
skyler 發表於 14-7-21 13:49 static/image/common/back.gif
會給 12
超過K棒的區間時會給H或是L價格
請教S大台期滑價是否不太嚴重?
港期在滑價方面是比較嚴重
skyler
發表於 14-7-21 17:08
jacklcl 發表於 14-7-21 14:38 static/image/common/back.gif
請教S大台期滑價是否不太嚴重?
港期在滑價方面是比較嚴重
闗於滑價問題這我就不知了我是以美期測試
我之前測的寫法如果同前k大PO的
buyprice=o+2*ticksize;
shortprice=o-2*ticksize;
在回測時理論上的買價超過K棒的H時會以H當買價
反之亦然
osdak
發表於 14-7-21 19:32
skyler 發表於 14-7-21 17:08
闗於滑價問題這我就不知了我是以美期測試
我之前測的寫法如果同前k大PO的
buyprice=o+2*ticksize;
那我就不太明白,default設定是true, 但我都覺得應該要用超出H/L的理論價才合理,為什麼AMIBROKER會這樣定?背後思想是有原因吧
kilroy
發表於 14-7-22 04:07
本帖最後由 kilroy 於 14-7-22 04:13 編輯
osdak 發表於 14-7-21 19:32 static/image/common/back.gif
那我就不太明白,default設定是true, 但我都覺得應該要用超出H/L的理論價才合理,為什麼AMIBROKER會這樣 ...
我想最主要的原因是因為
歷史價格是已經成立的事實
既便是 slippage 加計之後高於 high 或 低於 low
但在歷史數據裡是沒有成交在這個價位的
實際交易有可能 high 或是 low 是你買出來的
而使用 SetOption("PriceBoundChecking", False );
就可以在回測報表上的價位顯示加計滑價後的價位而不受限於歷史資料的 high/low 了
jacklcl
發表於 14-7-23 14:26
請教各位我剛開通了IB paper account
AB亦連接到TWS
但我入symbol時拿不到價格
想請問IB的symbol是否就是在我附件中那裡看到呢
例如7月恒指期貨是HSIN14, 我直接打進去又不行
後來改成HSIN14-HKFE-FUT, 但又不行
謝謝指教
jacklcl
發表於 14-7-24 00:13
jacklcl 發表於 14-7-23 14:26 static/image/common/back.gif
請教各位我剛開通了IB paper account
AB亦連接到TWS
但我入symbol時拿不到價格
解決了
原來要再加HKD
HSIN14-HKFE-FUT-HKD
開始將各大大的下單範例在paper account實測一下
jacklcl
發表於 14-7-25 01:01
本帖最後由 jacklcl 於 14-7-25 01:06 編輯
K大, 我將你們之前討論的code改寫了一下
將Short及Cover分開寫了
但發覺還是會出現不停下單的情況
不知哪裡出現問題, 希望指導一下
_SECTION_BEGIN("IB Controller");
{ ibc = GetTradingInterface("IB");
ContractMonth = "ESU4-GLOBEX-FUT";
BuyTrigger = LastValue( Buy );
SellTrigger = LastValue( Sell );
ShortTrigger = LastValue( Short );
CoverTrigger = LastValue (Cover);
Reset = ParamTrigger( "Reset All", "RESET" );
PrevTN = StaticVarGet( "TimeNumber" + Name() );
TN = LastValue( TimeNum() );
NewBar = TN != PrevTN;
StaticVarSet( "TimeNumber" + Name(), TN );
BuyOrderID = StaticVarGetText( "BuyOrderID" + Name() );
SellOrderID = StaticVarGetText( "SellOrderID" + Name() );
ShortOrderID = StaticVarGetText( "ShortID" + Name() );
CoverOrderID = StaticVarGetText( "CoverID" + Name() );
BuyPending = ibc.IsOrderPending( BuyOrderID );
SellPending = ibc.IsOrderPending( SellOrderID );
ShortPending = ibc.IsOrderPending( ShortOrderID );
CoverPending = ibc.IsOrderPending( CoverOrderID );
Shares = 1;
if ( NewBar )
{
if ( NOT BuyPending ) StaticVarSetText( "BuyOrderID" + Name(), "" );
if ( NOT SellPending ) StaticVarSetText( "SellOrderID" + Name(), "" );
if ( NOT ShortPending ) StaticVarSetText( "ShortOrderID" + Name(), "" );
if ( NOT CoverPending ) StaticVarSetText( "CoverOrderID" + Name(), "" );
}
if ( BuyTrigger AND BuyOrderID == "" )
{
BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "BuyOrderID" + Name(), BuyOrderID, true );
}
else if ( SellTrigger AND SellOrderID == "" )
{
ibc.CloseAllOpenPositions( ContractMonth );
StaticVarSetText( "SellOrderID" + Name(), SellOrderID, true );
}
else if ( ShortTrigger AND ShortOrderID == "" )
{
ShortORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "ShortOrderID" + Name(), ShortOrderID, true );
}
else if ( CoverTrigger AND CoverOrderID == "" )
{
ibc.CloseAllOpenPositions( ContractMonth );
StaticVarSetText( "CoverOrderID" + Name(), CoverOrderID, true );
}
else if ( Reset )
{
StaticVarSetText( "BuyOrderID" + Name(), "" );
if ( BuyPending ) ibc.CancelOrder( BuyOrderID );
StaticVarSetText( "SellOrderID" + Name(), "" );
if ( SellPending ) ibc.CancelOrder( SellOrderID );
StaticVarSetText( "ShortOrderID" + Name(), "" );
if ( ShortPending ) ibc.CancelOrder( ShortOrderID );
StaticVarSetText( "CoverOrderID" + Name(), "" );
if ( CoverPending ) ibc.CancelOrder( CoverOrderID );
}
_SECTION_END();
感謝!!
kilroy
發表於 14-7-25 01:19
jacklcl 發表於 14-7-25 01:01 static/image/common/back.gif
K大, 我將你們之前討論的code改寫了一下
將Short及Cover分開寫了
但發覺還是會出現不停下單的情況
請問重覆下單是否為 ex. BUY... SELL... BUY... SELL... 持續不間斷
jacklcl
發表於 14-7-25 09:49
kilroy 發表於 14-7-25 01:19 static/image/common/back.gif
請問重覆下單是否為 ex. BUY... SELL... BUY... SELL... 持續不間斷
是的, K大
昨晚我再檢查code時
發現有2句寫錯 (紅色標示)
ShortOrderID = StaticVarGetText( "ShortID" + Name() );
CoverOrderID = StaticVarGetText( "CoverID" + Name() );
及後我將它改回ShortOrderID及CoverOrderID
但問題仍不能解決
我觀察下, 發現重複下單會在我平倉時出現
只要一平倉, 它就會不停自動Buy/Sell或Short/Cover
我還在研究是哪裡出現問題
絕無心
發表於 14-7-25 10:54
很棒介紹...對我來說是條長的路..慢慢走
skyler
發表於 14-7-25 11:12
本帖最後由 skyler 於 14-7-25 11:14 編輯
jacklcl 發表於 14-7-25 01:01 static/image/common/back.gif
K大, 我將你們之前討論的code改寫了一下
將Short及Cover分開寫了
但發覺還是會出現不停下單的情況
j兄您好
我在 250樓 也曾遇過這樣的問題
簡單說
你在平倉是用ibc.CloseAllOpenPositions( ContractMonth );
來做因此並沒有像建立多單或空單的倉位
是用
BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
或
SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
由於沒有set SellOrderID 跟 CoverOrderID的值
因此
( SellTrigger AND SellOrderID == "" )
( CoverTrigger AND CoverOrderID == "" )
這個判斷式會一直成立因而導致會一直送單
我自己後來是用以下來寫平倉
if ( SellTrigger AND SellOrderID == "" AND ibc.GetPositionSize( ContractMonth ) > 0 )
if ( CoverTrigger AND CoverOrderID == "" AND ibc.GetPositionSize( ContractMonth ) < 0 )
直接判斷倉位是否有多單跟空單
才進去平倉
以上供參考
jacklcl
發表於 14-7-25 11:16
skyler 發表於 14-7-25 11:12 static/image/common/back.gif
j兄您好
我在 250樓 也曾遇過這樣的問題
簡單說
感謝S大回覆
我會試試
我發覺原來paper trade account會設限額
因為我戶口港元那邊負錢下不到單了
剛去重設賬戶
現用ES試試
osdak
發表於 14-7-25 11:20
jacklcl 發表於 14-7-25 09:49
是的, K大
昨晚我再檢查code時
發現有2句寫錯 (紅色標示)
我之前也試過,是因為同一個static variable在不同analysis windows同一時間在跑,互相干擾,後來那一下variable的名字改一下,就解決了。