COCO研究院

 找回密碼
 註冊
搜索
樓主: kilroy

[教學] [分享] 用AB踏入外期程式交易

  [複製鏈接]
發表於 14-7-20 23:32 | 顯示全部樓層
osdak 發表於 14-7-20 21:48
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
發表於 14-7-21 13:49 | 顯示全部樓層
osdak 發表於 14-7-20 21:48
Hi, jack, 可不可以舉個例子?你意思是,如果原來的buyprice是10元, 而那根bar的H和L是12和8, 如果我加5 ...

會給 12
超過K棒的區間時會給H或是L價格
發表於 14-7-21 14:38 | 顯示全部樓層
skyler 發表於 14-7-21 13:49
會給 12
超過K棒的區間時會給H或是L價格

請教S大台期滑價是否不太嚴重?
港期在滑價方面是比較嚴重
發表於 14-7-21 17:08 | 顯示全部樓層
jacklcl 發表於 14-7-21 14:38
請教S大台期滑價是否不太嚴重?
港期在滑價方面是比較嚴重

闗於滑價問題這我就不知了我是以美期測試
我之前測的寫法如果同前k大PO的
buyprice=o+2*ticksize;
shortprice=o-2*ticksize;

在回測時理論上的買價超過K棒的H時會以H當買價
反之亦然



發表於 14-7-21 19:32 來自手機 | 顯示全部樓層
skyler 發表於 14-7-21 17:08
闗於滑價問題這我就不知了我是以美期測試
我之前測的寫法如果同前k大PO的
buyprice=o+2*ticksize;

那我就不太明白,default設定是true, 但我都覺得應該要用超出H/L的理論價才合理,為什麼AMIBROKER會這樣定?背後思想是有原因吧
 樓主| 發表於 14-7-22 04:07 | 顯示全部樓層
本帖最後由 kilroy 於 14-7-22 04:13 編輯
osdak 發表於 14-7-21 19:32
那我就不太明白,default設定是true, 但我都覺得應該要用超出H/L的理論價才合理,為什麼AMIBROKER會這樣 ...

我想最主要的原因是因為

歷史價格是已經成立的事實

既便是 slippage 加計之後高於 high 或 低於 low

但在歷史數據裡是沒有成交在這個價位的

實際交易有可能 high 或是 low 是你買出來的

而使用 SetOption("PriceBoundChecking", False );


就可以在回測報表上的價位顯示加計滑價後的價位而不受限於歷史資料的 high/low 了










發表於 14-7-23 14:26 | 顯示全部樓層
請教各位我剛開通了IB paper account
AB亦連接到TWS
但我入symbol時拿不到價格
想請問IB的symbol是否就是在我附件中那裡看到呢
例如7月恒指期貨是HSIN14, 我直接打進去又不行
後來改成HSIN14-HKFE-FUT, 但又不行
謝謝指教
IB TWS.jpg
發表於 14-7-24 00:13 | 顯示全部樓層
jacklcl 發表於 14-7-23 14:26
請教各位我剛開通了IB paper account
AB亦連接到TWS
但我入symbol時拿不到價格

解決了
原來要再加HKD
HSIN14-HKFE-FUT-HKD
開始將各大大的下單範例在paper account實測一下
發表於 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();

感謝!!
 樓主| 發表於 14-7-25 01:19 | 顯示全部樓層
jacklcl 發表於 14-7-25 01:01
K大, 我將你們之前討論的code改寫了一下
將Short及Cover分開寫了
但發覺還是會出現不停下單的情況

請問重覆下單是否為 ex. BUY... SELL... BUY... SELL... 持續不間斷
發表於 14-7-25 09:49 | 顯示全部樓層
kilroy 發表於 14-7-25 01:19
請問重覆下單是否為 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 | 顯示全部樓層
很棒介紹...對我來說是條長的路..慢慢走
發表於 14-7-25 11:12 | 顯示全部樓層
本帖最後由 skyler 於 14-7-25 11:14 編輯
jacklcl 發表於 14-7-25 01:01
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 )


直接判斷倉位是否有多單跟空單
才進去平倉

以上供參考


評分

參與人數 1金錢 +2 收起 理由
jacklcl + 2 感謝分享

查看全部評分

發表於 14-7-25 11:16 | 顯示全部樓層
skyler 發表於 14-7-25 11:12
j兄您好
我在 250樓 也曾遇過這樣的問題
簡單說

感謝S大回覆
我會試試
我發覺原來paper trade account會設限額
因為我戶口港元那邊負錢下不到單了
剛去重設賬戶
現用ES試試
發表於 14-7-25 11:20 來自手機 | 顯示全部樓層
jacklcl 發表於 14-7-25 09:49
是的, K大
昨晚我再檢查code時
發現有2句寫錯 (紅色標示)

我之前也試過,是因為同一個static variable在不同analysis windows同一時間在跑,互相干擾,後來那一下variable的名字改一下,就解決了。
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-22 17:08

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |