kilroy
發表於 14-6-30 13:25
skyler 發表於 14-6-30 10:49 static/image/common/back.gif
k大您好
又來叨擾您了
按下 yes 後
之後 IB Controller 透過 IB TWS API 丟出去的單就不會再跳出警示視窗
會直接送單
這就是我們要的 XD
skyler
發表於 14-6-30 13:51
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
skyler
發表於 14-6-30 16:38
本帖最後由 skyler 於 14-6-30 16:43 編輯
kilroy 發表於 14-6-30 13:25 static/image/common/back.gif
按下 yes 後
之後 IB Controller 透過 IB TWS API 丟出去的單就不會再跳出警示視窗
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
-----
雖然IB的報價斷線
但我們是連eSignal
而且下單與IB的報價源沒關
所以應該不會影響我們下單到市場上對吧?
不知我的理解有沒錯
如果將IB TWS 上的報價資料刪除
是不是能避免這種斷線的訊息出現?
-----
在IB Controller 裡的 紅底黃色驚嘆號 ( Close all orders/positions )
點下去除了刪除掉委託單外
是不是連留倉中的單也會直接以市價平倉?
感謝大大的指導
kilroy
發表於 14-6-30 16:45
skyler 發表於 14-6-30 16:38 static/image/common/back.gif
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
當按下 yes 之後就不會再詢問了
因為在 IB TWS -> configuration -> API -> Precautions 裡
bypass Order Precautions for API Orders 會被打勾
---
用 eSignal 為報價遇到 IB TWS 的 market data farm 斷線 不影響下單
有訊號就會丟出去給 TWS
除非是伺服器斷了,才會影響
訂閱 eSignal 就是避免這個問題了
參考看看
skyler
發表於 14-6-30 16:51
kilroy 發表於 14-6-30 16:45 static/image/common/back.gif
當按下 yes 之後就不會再詢問了
因為在 IB TWS -> configuration -> API -> Precautions 裡
k 大再問一下
IB TWS
照你這麼說
這四個選項我是不是都要打勾才對呢?!
kilroy
發表於 14-6-30 17:03
skyler 發表於 14-6-30 16:51 static/image/common/back.gif
k 大再問一下
IB TWS
照你這麼說
打勾第一個就可以了
kilroy
發表於 14-6-30 17:55
skyler 發表於 14-6-30 16:38 static/image/common/back.gif
如果 TWS 重開
是不是遇到下單情況還會再問一次呢?
在IB Controller 裡的 紅底黃色驚嘆號 ( Close all orders/positions )
點下去除了刪除掉委託單外
是不是連留倉中的單也會直接以市價平倉?
感謝大大的指導
會取消所有"未成交"委託
已成交的部位會全部以市價單平倉
skyler
發表於 14-7-1 08:45
本帖最後由 skyler 於 14-7-1 09:30 編輯
k大您好
請問一下
已將 bypass Order Precautions for API Orders 打勾
但下單時我必須點選 transmit 才能真的送到市場上
這跟我目前在 paper account 測試是否有關
謝謝
kilroy
發表於 14-7-1 09:25
skyler 發表於 14-7-1 08:45 static/image/common/back.gif
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);
}
不過上次看你的語法應該會直接送單才對
skyler
發表於 14-7-1 09:30
kilroy 發表於 14-7-1 09:25 static/image/common/back.gif
跟 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 );
}
skyler
發表於 14-7-1 09:35
kilroy 發表於 14-7-1 09:25 static/image/common/back.gif
跟 paper account 無關
跟 ibc.placeorder... 有關
如您所言
上一樓是我的程式碼
我有將參數設成 true
搞不懂那裡有問題
問一下大大 IB TWS的版本是多少嗎?
我灌的是最新的 6/3號版本
kilroy
發表於 14-7-1 09:38
skyler 發表於 14-7-1 09:30 static/image/common/back.gif
我剛看了一下自己的code
並回頭看了一下69樓 osdak 大寫的程式
與他發生的問題會一直下 sell 跟 buy
這樣的話
把 sell 和 cover 個別寫一組
或是在 clear 加上一行
StaticVarSetText("ClearID"+Name(),ClearID,true);
kilroy
發表於 14-7-1 09:46
skyler 發表於 14-7-1 09:35 static/image/common/back.gif
如您所言
上一樓是我的程式碼
我有將參數設成 true
如果語法沒有問題
那檢查 IB Controller -> file -> unlock 是否開啟
---
今年 5/1 起 IB TWS 一定要用新版 IB TWS,才可以使用 API
skyler
發表於 14-7-1 09:51
kilroy 發表於 14-7-1 09:38 static/image/common/back.gif
這樣的話
把 sell 和 cover 個別寫一組
可是即使在 Clear 上加這行
StaticVarSetText("ClearID"+Name(),ClearID,true);
ClearID 還是等於 ""
那在下面的判斷式不是依然成立
然後會進去執行嗎?
skyler
發表於 14-7-1 09:55
本帖最後由 skyler 於 14-7-1 10:10 編輯
kilroy 發表於 14-7-1 09:46 static/image/common/back.gif
如果語法沒有問題
那檢查 IB Controller -> file -> unlock 是否開啟
難怪我剛移除Jun 3 2014 的版本
改灌 May 5 2014
登入進去後 API 居然是闗閉
原來是要用新版本
這樣是不是三不五時就要去看一下是否有新版
不然API就不能用了?!