COCO研究院

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

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

  [複製鏈接]
 樓主| 發表於 14-6-26 17:07 | 顯示全部樓層
skyler 發表於 14-6-26 17:02
K大您好
在回測時加上這二行
SetPositionSize( 1 , spsShares );

Hi,

maxopenpositions 這個部份我不能肯定跟你保證實際下單順序會與回測相同

---
加上 true 可以把暫存的資料在關閉AB時寫出,開啟AB時再讀入

SYNTAX StaticVarSetText( ''varname'', ''value'', persist = False )
RETURNS
FUNCTION Sets the value of static string variable. Returns 1 on success 0 on failure. Static variable - the variable has static duration (it is allocated when the program begins and deallocated when the program ends) and initializes it to Null unless another value is specified. Static variables allow to share values between various formulas.
Starting from version 5.80 there is a new parameter 'persist'. If it is set to True then static variable will be stored in PersistVars.bin file when AmiBroker is closing and reloaded automatically on next startup, preserving the values of static variables between application runs). In addition to saving them automatically on exit, persistent static variables can be auto-saved at user-specified intervals using SetOption("StaticVarAutoSave", interval );

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 好文章,我推薦

查看全部評分

發表於 14-6-26 19:00 | 顯示全部樓層
kilroy 發表於 14-6-26 17:07
Hi,

maxopenpositions 這個部份我不能肯定跟你保證實際下單順序會與回測相同

沒錯
所以實際在paper account 驗證比較實際
-----
我發現白天有時
AB接近來的最新商品K棒時間與現在系統時間有一段落差
例如 下午時我看到 NG顯示時間是15:15 但系統時間已經16:26分了
而 6A 6E 等則顯示正常
我推測因為當時沒有交易量
所以K棒不會成形
不知我的推測對不對?

-----

我剛跑paper account scan 時
出現
2014-06-26_185508.png

與 IB Controller 連接的程式如下
標示的地方是報錯的位置

因找不到問題
所以麻煩您指點一下了
感謝

_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, "LMT", BuyPrice, 0, "DAY", True );

        StaticVarSetText( "BuyOrderID" + Name(), BuyOrderID, True );
    }
    else if ( SellTrigger AND SellOrderID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        SellOrderID = ibc.PlaceOrder( ContractMonth, "SELL", Shares, "LMT", ShortPrice, 0, "DAY", True );

        StaticVarSetText( "SellOrderID" + Name(), SellOrderID, True );
    }
    else if ( ClearTrigger AND ClearID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        StaticVarSetText( "ClearID" + Name(), ClearID, true );
    }
    else if ( Reset )
    {
        StaticVarSetText( "BuyOrderID" + Name(), "" );

        if ( BuyPending )
        {
                ibc.CancelOrder( BuyOrderID );
        }       
                       
        StaticVarSetText( "SellOrderID" + Name(), "" );
               
        if ( SellPending )
        {
                ibc.CancelOrder( SellOrderID );
        }
    }

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







 樓主| 發表於 14-6-26 19:40 | 顯示全部樓層
skyler 發表於 14-6-26 19:00
沒錯
所以實際在paper account 驗證比較實際
-----

有部分商品像是 ZS ZC ZW 中間有幾段時間是停止交易的

類似這樣的商品,有時時間會不一樣

ex. houlry 都是整點,但某商品停止交易半小時之後,會是 ex. 8:30 為開始使間

NG 這個情況,是今天為當月合約最後交易日,他會停止一段時間

---
順到一提,上次看到你的設定
可以改一下 tools -> prefrences -> intrday -> realtime chart refresh interval 設定為 0

---
error 5 這邊先檢查你的 AB 版本是否是 5.8 以上


發表於 14-6-26 21:15 | 顯示全部樓層
kilroy 發表於 14-6-26 19:40
有部分商品像是 ZS ZC ZW 中間有幾段時間是停止交易的

類似這樣的商品,有時時間會不一樣

原來如此
這樣我就知道時間落差為何了

-----
感謝您的建議
realtime chart refresh interval 它的意義是什麼?

-----
我的AB版本為
5.8 rc1

我在下午出現一個 short 的訊號
那時報錯是在
StaticVarSetText( "ClearID" + Name(), ClearID);

當時還沒有加上第三個 true 的參數

感謝您的回覆


發表於 14-6-26 23:19 | 顯示全部樓層
目前先裝 5.80.2 試試是否能解決
 樓主| 發表於 14-6-27 13:57 | 顯示全部樓層
skyler 發表於 14-6-26 21:15
原來如此
這樣我就知道時間落差為何了

realtime chart refresh interval 是圖表刷新的頻率

我習慣在 AFL 加入這行

RequestTimedRefresh(1, onlyvisible = False);

---
StaticVarSetText 的問題解決了嗎?



發表於 14-6-27 14:51 | 顯示全部樓層
本帖最後由 skyler 於 14-6-27 14:53 編輯

k大您好~
我才正要PO文 沒想到您已經先詢問了

我完全移除了 AB後
重新安裝 5.80.2 這版
結果一樣

2014-06-27_144202.png

我在想應該是
BuyOrderID = StaticVarGetText( "BuyOrderID" + Name() );
SellOrderID = StaticVarGetText( "SellOrderID" + Name() );
在沒有值時 get 回傳值是不是有問題?

不知道
在IB TWS 上是否有需要設定的?
另外
我沒有寫 按鈕的code
並且將你原先下面顯示在圖表上文字也mark掉了

這應該沒有影響才對





 樓主| 發表於 14-6-27 15:08 | 顯示全部樓層
skyler 發表於 14-6-27 14:51
k大您好~
我才正要PO文 沒想到您已經先詢問了

無論有沒有加 true 都會出現錯誤嗎?
發表於 14-6-27 15:29 | 顯示全部樓層
kilroy 發表於 14-6-27 15:08
無論有沒有加 true 都會出現錯誤嗎?

對呀~
我昨天後來改成沒有加也會報錯!
 樓主| 發表於 14-6-27 15:32 | 顯示全部樓層
skyler 發表於 14-6-27 15:29
對呀~
我昨天後來改成沒有加也會報錯!

那應該跟版本沒關係

再檢查一下買賣條件的語法以及 ibc. 送單的語法
發表於 14-6-27 15:41 | 顯示全部樓層
我先以您在第一頁的範例
然後刪除掉在
LastTWSMsg = ibc.getLastError( 0 );
之後的那幾行code

測試看看
發表於 14-6-27 16:30 | 顯示全部樓層
kilroy 發表於 14-6-27 15:32
那應該跟版本沒關係

再檢查一下買賣條件的語法以及 ibc. 送單的語法

剛以您第一頁的範例刪除不需要的code
跑了一陣子
在IB Controller 出現有錯誤訊息

2014-06-27_162705.png
不知道這表示的是什麼意思?!
我目前是在 paper account上跑

謝謝您的回覆
 樓主| 發表於 14-6-27 17:31 | 顯示全部樓層
本帖最後由 kilroy 於 14-6-27 18:21 編輯
skyler 發表於 14-6-27 16:30
剛以您第一頁的範例刪除不需要的code
跑了一陣子
在IB Controller 出現有錯誤訊息

market data farm connection is broken 是 IB 的報價斷線了
connectivity between IB and Trade Workstation has been lost 是 IB TWS 與 IB 伺服器斷線了
... has been restored 是恢復連線




發表於 14-6-28 01:22 | 顯示全部樓層
kilroy 發表於 14-6-23 22:49
目前的寫法會變成
回測跑 applystop (但實際無法下單)

先謝謝K 大, 期待K大回覆

我也會努力找方法寫止蝕單, 找到再跟大家分享, Thanks!
發表於 14-6-30 10:49 | 顯示全部樓層
k大您好
又來叨擾您了

我發現在這段
藍色字是我的code
紅色字是您的code
用我的會出錯
但用您的取代就能成功下單

    if ( BuyTrigger AND BuyOrderID == "" )
    {
        ibc.CloseAllOpenPositions( ContractMonth );
        //BuyOrderID = ibc.PlaceOrder( ContractMonth, "BUY", Shares, "LMT", BuyPrice, 0, "DAY", True );
        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, "LMT", ShortPrice, 0, "DAY", True );
       SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
               
        StaticVarSetText( "SellOrderID" + Name(), SellOrderID, true );
    }


-----
剛下出去時
有出現個畫面
想跟您詢問一下
2014-06-30_103921.png

2014-06-30_104338.png

感謝指導


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

本版積分規則

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

GMT+8, 24-12-23 19:09

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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