jacklcl
發表於 14-7-25 11:26
osdak 發表於 14-7-25 11:20 static/image/common/back.gif
我之前也試過,是因為同一個static variable在不同analysis windows同一時間在跑,互相干擾,後來那一下v ...
想問問是什麼意思?
我沒用scan去下單
只開了圖表
osdak
發表於 14-7-25 11:42
jacklcl 發表於 14-7-25 11:26
想問問是什麼意思?
我沒用scan去下單
只開了圖表
我同一時間有兩個afl在跑,後來發現,原來名字相同會互相干擾,如果你同一時間跑一個afl, 那就應該不是的遇見的問題
jacklcl
發表於 14-7-25 11:47
osdak 發表於 14-7-25 11:42 static/image/common/back.gif
我同一時間有兩個afl在跑,後來發現,原來名字相同會互相干擾,如果你同一時間跑一個afl, 那就應該不是的 ...
我應該不是這個問題了
我只有1個AFL在跑
師兄你現在下單順利嗎
osdak
發表於 14-7-25 11:57
jacklcl 發表於 14-7-25 11:47 static/image/common/back.gif
我應該不是這個問題了
我只有1個AFL在跑
師兄你現在下單順利嗎
我還在papertrade呢, 之前試過不停下單, 因為我同一時間開幾個圖和scan, 後來改了statics variable的名字, 就可以, 但奇怪的, 我測試了個多月, 平均一個月總有兩,三次下單出問題, 所以我剛剛加了一個條間, position size大於1時(我的口數)或小於-1時, 就會馬上平倉停止, 但這只是治標, 我還未找出問題在那裡....
jacklcl
發表於 14-7-25 12:21
osdak 發表於 14-7-25 11:57 static/image/common/back.gif
我還在papertrade呢, 之前試過不停下單, 因為我同一時間開幾個圖和scan, 後來改了statics variable的名字 ...
你意思是否指那些OrderID要在不同AFL設定不同的名?
jacklcl
發表於 14-7-25 16:41
skyler 發表於 14-7-25 11:12 static/image/common/back.gif
j兄您好
我在 250樓 也曾遇過這樣的問題
簡單說
S大, 這個Code你能用嗎
我試過還是會有重複下單的問題
這次不是連續Buy及Sell
而是連續Sell
skyler
發表於 14-7-25 18:16
本帖最後由 skyler 於 14-7-25 18:17 編輯
jacklcl 發表於 14-7-25 16:41 static/image/common/back.gif
S大, 這個Code你能用嗎
我試過還是會有重複下單的問題
這次不是連續Buy及Sell
我貼一下我自己闗於IB的那段程式碼
你參考看看
_SECTION_BEGIN( "IB Controller" );
{
ibc = GetTradingInterface( "IB" );
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( "ShortOrderID" + Name() );
CoverOrderID = StaticVarGetText( "CoverOrderID" + 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 == "" )
{
ibc.CloseAllOpenPositions( ContractMonth );
BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "BuyOrderID" + Name(), BuyOrderID, true );
}
else if ( SellTrigger AND SellOrderID == "" AND ibc.GetPositionSize( ContractMonth ) > 0 )
{
SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "SellOrderID" + Name(), SellOrderID, true );
}
else if ( ShortTrigger AND ShortOrderID == "" )
{
ibc.CloseAllOpenPositions( ContractMonth );
ShortOrderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "ShortOrderID" + Name(), ShortOrderID, true );
}
else if ( CoverTrigger AND CoverOrderID == "" AND ibc.GetPositionSize( ContractMonth ) < 0 )
{
CoverOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
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 );
}
}
}
jacklcl
發表於 14-7-25 18:29
skyler 發表於 14-7-25 18:16 static/image/common/back.gif
我貼一下我自己闗於IB的那段程式碼
你參考看看
S大, 我明白了!
我根據你指導加了GetPositionSize
但在下面紅色那2句我仍然用ClosePosition來寫
所以會重複下單
else if ( SellTrigger AND SellOrderID == "" AND ibc.GetPositionSize( ContractMonth ) > 0 )
{
SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "SellOrderID" + Name(), SellOrderID, true );
}
else if ( CoverTrigger AND CoverOrderID == "" AND ibc.GetPositionSize( ContractMonth ) < 0 )
{
CoverOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
StaticVarSetText( "CoverOrderID" + Name(), CoverOrderID, true );
}
由於我之前並沒有學過程式語言
有時要想很久才明白它的含意{:4_155:}
K大這個貼子真的幫了很多!
skyler
發表於 14-7-25 19:39
本帖最後由 skyler 於 14-7-25 19:42 編輯
jacklcl 發表於 14-7-25 18:29 static/image/common/back.gif
S大, 我明白了!
我根據你指導加了GetPositionSize
但在下面紅色那2句我仍然用ClosePosition來寫
是的!
問題就是在那裡
因為 sell 與 short 的id
永遠都是""
因為if 的條件永遠都會執行
我後來加倉位的判斷就不會有這種問題了
k大開的這樓
裡面有很多的問題與解答
對於初接觸的人
能得到很多的解答
所以值得從頭到尾看一看
jacklcl
發表於 14-7-25 21:11
skyler 發表於 14-7-25 19:39 static/image/common/back.gif
是的!
問題就是在那裡
因為 sell 與 short 的id
是的, 這個帖子我經常重看
還打算把它列印出來XD
相信大部份在香港用AB的人都跑到COCO了
在香港, 做程式交易的人少
用AB的人相信更少了, 而且聽回來的評價都不怎麼樣
反而用MC的人會較普遍
osdak
發表於 14-7-26 09:10
jacklcl 發表於 14-7-25 21:11
是的, 這個帖子我經常重看
還打算把它列印出來XD
相信大部份在香港用AB的人都跑到COCO了
很同意,我之前都沒有聽過程式交易,也不知道amibroker, mc什麼的,偶然看到這裡,實在很感謝kilroy兄和一眾網上朋友大大。
jacklcl
發表於 14-7-26 11:30
試了一天, 基本上重複下單問題已解決
但我發現我策略會出現K大之之前說的那種bug
有些時候H及L同時符合出場及入場條件
而之前我把策略出場設定為H > 某條件就不出場
但真實交易時有可能是L已符合出場條件
那時候我在真實交易時已出場, 但在回測中我還在持有倉位!
tuan
發表於 14-7-28 10:09
大大真是佛心來的!不知道國外哪裡有比較多的Amibroker參考程式碼,之前都研究MultiChart,但最近也想研究一下Amibroker,因為Amibroker真的效能很不錯
kilroy
發表於 14-7-28 10:30
tuan 發表於 14-7-28 10:09 static/image/common/back.gif
大大真是佛心來的!不知道國外哪裡有比較多的Amibroker參考程式碼,之前都研究MultiChart,但最近也想研究一下 ...
最大宗的範例網站就是這個了
http://www.wisestocktrader.com
jacklcl
發表於 14-7-29 11:54
試了幾天, 基本上連續下單已解決
但我發現有一個問題
我用突破策略試下的
有時當突破後, 會連續出現2次多單或空單
我在想會不會是突破後OrderID未傳回就再出現突破
因H會不斷變動, 當第2次突破後
此時第1次突破的OrderID應已傳回
所以我看見最多只出現2次重複下單
簡單說是OrderID傳回速度慢過第2次的signal出現
這個問題要看看怎樣解決