COCO研究院

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

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

  [複製鏈接]
發表於 14-7-25 11:26 | 顯示全部樓層
osdak 發表於 14-7-25 11:20
我之前也試過,是因為同一個static variable在不同analysis windows同一時間在跑,互相干擾,後來那一下v ...

想問問是什麼意思?
我沒用scan去下單
只開了圖表
發表於 14-7-25 11:42 來自手機 | 顯示全部樓層
jacklcl 發表於 14-7-25 11:26
想問問是什麼意思?
我沒用scan去下單
只開了圖表

我同一時間有兩個afl在跑,後來發現,原來名字相同會互相干擾,如果你同一時間跑一個afl, 那就應該不是的遇見的問題
發表於 14-7-25 11:47 | 顯示全部樓層
osdak 發表於 14-7-25 11:42
我同一時間有兩個afl在跑,後來發現,原來名字相同會互相干擾,如果你同一時間跑一個afl, 那就應該不是的 ...

我應該不是這個問題了
我只有1個AFL在跑
師兄你現在下單順利嗎
發表於 14-7-25 11:57 | 顯示全部樓層
jacklcl 發表於 14-7-25 11:47
我應該不是這個問題了
我只有1個AFL在跑
師兄你現在下單順利嗎

我還在papertrade呢, 之前試過不停下單, 因為我同一時間開幾個圖和scan, 後來改了statics variable的名字, 就可以, 但奇怪的, 我測試了個多月, 平均一個月總有兩,三次下單出問題, 所以我剛剛加了一個條間, position size大於1時(我的口數)或小於-1時, 就會馬上平倉停止, 但這只是治標, 我還未找出問題在那裡....
發表於 14-7-25 12:21 | 顯示全部樓層
osdak 發表於 14-7-25 11:57
我還在papertrade呢, 之前試過不停下單, 因為我同一時間開幾個圖和scan, 後來改了statics variable的名字 ...

你意思是否指那些OrderID要在不同AFL設定不同的名?

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

S大, 這個Code你能用嗎
我試過還是會有重複下單的問題
這次不是連續Buy及Sell
而是連續Sell

發表於 14-7-25 18:16 | 顯示全部樓層
本帖最後由 skyler 於 14-7-25 18:17 編輯
jacklcl 發表於 14-7-25 16:41
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 );
        }
    }
}

評分

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

查看全部評分

發表於 14-7-25 18:29 | 顯示全部樓層
skyler 發表於 14-7-25 18:16
我貼一下我自己闗於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 );        
    }

由於我之前並沒有學過程式語言
有時要想很久才明白它的含意
K大這個貼子真的幫了很多!






發表於 14-7-25 19:39 | 顯示全部樓層
本帖最後由 skyler 於 14-7-25 19:42 編輯
jacklcl 發表於 14-7-25 18:29
S大, 我明白了!
我根據你指導加了GetPositionSize
但在下面紅色那2句我仍然用ClosePosition來寫

是的!
問題就是在那裡
因為 sell 與 short 的id
永遠都是""
因為if 的條件永遠都會執行
我後來加倉位的判斷就不會有這種問題了

k大開的這樓
裡面有很多的問題與解答
對於初接觸的人
能得到很多的解答
所以值得從頭到尾看一看


評分

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

查看全部評分

發表於 14-7-25 21:11 | 顯示全部樓層
skyler 發表於 14-7-25 19:39
是的!
問題就是在那裡
因為 sell 與 short 的id

是的, 這個帖子我經常重看
還打算把它列印出來XD
相信大部份在香港用AB的人都跑到COCO了
在香港, 做程式交易的人少
用AB的人相信更少了, 而且聽回來的評價都不怎麼樣
反而用MC的人會較普遍
發表於 14-7-26 09:10 來自手機 | 顯示全部樓層
jacklcl 發表於 14-7-25 21:11
是的, 這個帖子我經常重看
還打算把它列印出來XD
相信大部份在香港用AB的人都跑到COCO了

很同意,我之前都沒有聽過程式交易,也不知道amibroker, mc什麼的,偶然看到這裡,實在很感謝kilroy兄和一眾網上朋友大大。
發表於 14-7-26 11:30 | 顯示全部樓層
試了一天, 基本上重複下單問題已解決
但我發現我策略會出現K大之之前說的那種bug
有些時候H及L同時符合出場及入場條件
而之前我把策略出場設定為H > 某條件就不出場
但真實交易時有可能是L已符合出場條件
那時候我在真實交易時已出場, 但在回測中我還在持有倉位!
發表於 14-7-28 10:09 | 顯示全部樓層
大大真是佛心來的!不知道國外哪裡有比較多的Amibroker參考程式碼,之前都研究MultiChart,但最近也想研究一下Amibroker,因為Amibroker真的效能很不錯
 樓主| 發表於 14-7-28 10:30 | 顯示全部樓層
tuan 發表於 14-7-28 10:09
大大真是佛心來的!不知道國外哪裡有比較多的Amibroker參考程式碼,之前都研究MultiChart,但最近也想研究一下 ...

最大宗的範例網站就是這個了
http://www.wisestocktrader.com

評分

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

查看全部評分

發表於 14-7-29 11:54 | 顯示全部樓層
試了幾天, 基本上連續下單已解決
但我發現有一個問題
我用突破策略試下的
有時當突破後, 會連續出現2次多單或空單
我在想會不會是突破後OrderID未傳回就再出現突破
因H會不斷變動, 當第2次突破後
此時第1次突破的OrderID應已傳回
所以我看見最多只出現2次重複下單
簡單說是OrderID傳回速度慢過第2次的signal出現
這個問題要看看怎樣解決
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-5-17 13:08

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook