COCO研究院

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

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

  [複製鏈接]
 樓主| 發表於 14-6-30 13:25 | 顯示全部樓層
skyler 發表於 14-6-30 10:49
k大您好
又來叨擾您了

按下 yes 後
之後 IB Controller 透過 IB TWS API 丟出去的單就不會再跳出警示視窗

會直接送單
這就是我們要的 XD

發表於 14-6-30 13:51 | 顯示全部樓層
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
發表於 14-6-30 16:38 | 顯示全部樓層
本帖最後由 skyler 於 14-6-30 16:43 編輯
kilroy 發表於 14-6-30 13:25
按下 yes 後
之後 IB Controller 透過 IB TWS API 丟出去的單就不會再跳出警示視窗

如果 TWS 重開
是不是遇到下單情況還會再問一次呢?

-----
雖然IB的報價斷線
但我們是連eSignal
而且下單與IB的報價源沒關
所以應該不會影響我們下單到市場上對吧?
不知我的理解有沒錯

如果將IB TWS 上的報價資料刪除
是不是能避免這種斷線的訊息出現?


2014-06-30_163427.png

-----
在IB Controller 裡的 紅底黃色驚嘆號 ( Close all orders/positions )
點下去除了刪除掉委託單外
是不是連留倉中的單也會直接以市價平倉?

感謝大大的指導


 樓主| 發表於 14-6-30 16:45 | 顯示全部樓層
skyler 發表於 14-6-30 16:38
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?

當按下 yes 之後就不會再詢問了
因為在 IB TWS -> configuration -> API -> Precautions 裡

bypass Order Precautions for API Orders 會被打勾

---
用 eSignal 為報價遇到 IB TWS 的 market data farm 斷線 不影響下單

有訊號就會丟出去給 TWS

除非是伺服器斷了,才會影響

訂閱 eSignal 就是避免這個問題了

參考看看
發表於 14-6-30 16:51 | 顯示全部樓層
kilroy 發表於 14-6-30 16:45
當按下 yes 之後就不會再詢問了
因為在 IB TWS -> configuration -> API -> Precautions 裡

k 大再問一下
IB TWS
照你這麼說
2014-06-30_164915.png

這四個選項我是不是都要打勾才對呢?!

 樓主| 發表於 14-6-30 17:03 | 顯示全部樓層
skyler 發表於 14-6-30 16:51
k 大再問一下
IB TWS
照你這麼說

打勾第一個就可以了

評分

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

查看全部評分

 樓主| 發表於 14-6-30 17:55 | 顯示全部樓層
skyler 發表於 14-6-30 16:38
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
在IB Controller 裡的 紅底黃色驚嘆號 ( Close all orders/positions )
點下去除了刪除掉委託單外
是不是連留倉中的單也會直接以市價平倉?

感謝大大的指導


會取消所有"未成交"委託

已成交的部位會全部以市價單平倉

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 按一個讚

查看全部評分

發表於 14-7-1 08:45 | 顯示全部樓層
本帖最後由 skyler 於 14-7-1 09:30 編輯

k大您好
請問一下

已將 bypass Order Precautions for API Orders 打勾

但下單時我必須點選 transmit 才能真的送到市場上
這跟我目前在 paper account 測試是否有關

謝謝

2014-07-01_083956.png


 樓主| 發表於 14-7-1 09:25 | 顯示全部樓層
skyler 發表於 14-7-1 08:45
k大您好
請問一下

跟 paper account 無關

跟 ibc.placeorder... 有關

  if( BuyTrigger AND BuyOrderID == "" )
  {
   ibc.CloseAllOpenPositions(ContractMonth);
   BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
   StaticVarSetText("BuyOrderID"+Name(),BuyOrderID,true);
  }


不過上次看你的語法應該會直接送單才對


發表於 14-7-1 09:30 | 顯示全部樓層
kilroy 發表於 14-7-1 09:25
跟 paper account 無關

跟 ibc.placeorder... 有關


我剛看了一下自己的code
並回頭看了一下69樓 osdak 大寫的程式
與他發生的問題會一直下 sell 跟 buy
因為我也有發生

我大概知道問題在那了
想跟k 大您討論一下
如何改比較好

以下貼出我的程式碼
我將問題的點 MARK 起來
問題出在 ClearID 沒有set 值
因為平倉是用
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 ClearID 的值
因此
if ( ClearTrigger AND ClearID == "" )
這個判斷式會一直成立因而導致會一直送單
要解決可能要將
sell 跟 cover 各寫成一個ID
然後仿照做多做空一樣寫
不知我的想法對嗎?


_SECTION_BEGIN( "IB Controller" );
{
    ibc = GetTradingInterface( "IB" );

    BuyTrigger = LastValue( Buy );
    SellTrigger = LastValue( Short );
    Clear = lastvalue( sell or cover );
    ClearTrigger = LastValue( Clear );
    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() );
    ClearID = StaticVarGet( "ClearID" + Name() );
    BuyPending = ibc.IsOrderPending( BuyOrderID );
    SellPending = ibc.IsOrderPending( SellOrderID );
    ClearPending = ibc.IsOrderPending( ClearID );
        
    Shares = 1;

    if ( NewBar )
    {
        if ( NOT BuyPending )
        {
            StaticVarSetText( "BuyOrderID" + Name(), "" );
        }

        if ( NOT SellPending )
        {
            StaticVarSetText( "SellOrderID" + Name(), "" );
        }

        if ( NOT ClearPending )
        {
            StaticVarSetText( "ClearID" + Name(), "" );
        }
    }

    if ( BuyTrigger AND BuyOrderID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
               
        StaticVarSetText( "BuyOrderID" + Name(), BuyOrderID, true );
    }
    else if ( SellTrigger AND SellOrderID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
               
        StaticVarSetText( "SellOrderID" + Name(), SellOrderID, true );
    }
    else if ( ClearTrigger AND ClearID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        
        StaticVarSetText( "ClearID" + Name(), ClearID );
    }
    else if ( Reset )
    {
        StaticVarSetText( "BuyOrderID" + Name(), "" );

        if ( BuyPending )
        {
                ibc.CancelOrder( BuyOrderID );
        }

        StaticVarSetText( "SellOrderID" + Name(), "" );

        if ( SellPending )
        {
                ibc.CancelOrder( SellOrderID );
        }
    }

    //LastTWSMsg = ibc.getLastError( 0 );
}


發表於 14-7-1 09:35 | 顯示全部樓層
kilroy 發表於 14-7-1 09:25
跟 paper account 無關

跟 ibc.placeorder... 有關

如您所言
上一樓是我的程式碼
我有將參數設成 true
搞不懂那裡有問題

問一下大大 IB TWS的版本是多少嗎?


我灌的是最新的 6/3號版本
 樓主| 發表於 14-7-1 09:38 | 顯示全部樓層
skyler 發表於 14-7-1 09:30
我剛看了一下自己的code
並回頭看了一下69樓 osdak 大寫的程式
與他發生的問題會一直下 sell 跟 buy

這樣的話
把 sell 和 cover 個別寫一組

或是在 clear 加上一行

   StaticVarSetText("ClearID"+Name(),ClearID,true);
 樓主| 發表於 14-7-1 09:46 | 顯示全部樓層
skyler 發表於 14-7-1 09:35
如您所言
上一樓是我的程式碼
我有將參數設成 true

如果語法沒有問題
那檢查 IB Controller -> file -> unlock 是否開啟

---
今年 5/1 起 IB TWS 一定要用新版 IB TWS,才可以使用 API




發表於 14-7-1 09:51 | 顯示全部樓層
kilroy 發表於 14-7-1 09:38
這樣的話
把 sell 和 cover 個別寫一組

可是即使在 Clear 上加這行
StaticVarSetText("ClearID"+Name(),ClearID,true);

ClearID 還是等於 ""
那在下面的判斷式不是依然成立
然後會進去執行嗎?



發表於 14-7-1 09:55 | 顯示全部樓層
本帖最後由 skyler 於 14-7-1 10:10 編輯
kilroy 發表於 14-7-1 09:46
如果語法沒有問題
那檢查 IB Controller -> file -> unlock 是否開啟

難怪我剛移除  Jun 3 2014 的版本
改灌 May 5 2014
登入進去後 API 居然是闗閉
原來是要用新版本
這樣是不是三不五時就要去看一下是否有新版
不然API就不能用了?!

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-12-23 18:50

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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