COCO研究院

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

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

  [複製鏈接]
 樓主| 發表於 14-5-31 12:57 | 顯示全部樓層
greg 發表於 14-5-31 02:08
你好, K 大, 想請教一下~ 我的自動交易(AB+IB)出現的"進出點" 跟我backtesting 時"進出點"大致一樣, 但出現 ...

Hi,

1. 小弟不是很清楚了解這個問題的意思
    請問是指,當開始下單時,會先下出一個 -1 的部位嗎?

    我不了解的意思是,當IB無部位時, sell 1 pos. 再  buy 1 pos. 時

    這樣 pos. 會是 0

    ---
    所以我猜你的部位原本是 1 pos. 在每個月開始時, buy 訊號出現的同時

    會先平倉(close)原本的 1 pos. 再 buy 1 pos. (回到原本的 1 pos.)

    這樣的情況就是重複送出 buy 訊號了

    AFL 語法裡,你可以這樣加

    buy = buy condition.
    sell = sell condition.

    buy=exrem(buy,sell);
    sell=exrem(sell,buy);
    buy=flip(buy,sell);
    sell=flip(sell,buy);


    不過我不清楚的第二個地方是,"每月的開始" 是指這個策略每個月開一次倉嗎?

---
2. stop loss 的單子,可以考慮在新部位建倉的同時就送出止蝕單

    或是在買賣條件裡寫(符合條件時就把單子送出去)

    我沒有使用 stop loss 在我的策略裡

    而 AB 裡的 applystop 只限於 backtest mode

    實際與 IB TWS 是沒有關聯的

    所以還是得寫在 AFL 裡把單子送出去



參考看看了
發表於 14-5-31 14:07 | 顯示全部樓層
謝謝K 大耐心的回覆!

1. 對不起, 我說得不夠清楚, 我意思是每月轉換 期指 月份時(新一個月), 在還沒有部位時, Sell 在buy 之前就出現了, 我會試一下用buy=flip(buy,sell); 的方法再試一下, 謝謝K 大

2. 是的, 我無法成功在建倉的同時就送出止蝕單, 我的語法法如下
        OID = ibc.PlaceOrder( IBName, "Buy", 1, "MKT", 0, TickSize,"DAY", False, TickSize/0.0001, "outsideRTH" );
        OIDSTP = ibc.PlaceOrder( IBName, "Sell", 1, "STP", 0, lastvaluebuy*0.99 , "DAY", Ture, TickSize/0.0001,"outsideRTH", OID);

真心的說, 在研究過程中經常遇到樽頸, 有像K 大的神人熱心幫助, 真的給了我們很大的鼓勵 , 謝謝K大!


發表於 14-6-1 04:30 | 顯示全部樓層
我想再問一下, 假設我將"BUY" 跟"STP(止蝕)"一起發到IB , 現在"Buy"已建立了部位, 止蝕也在之後觸發了, 但我的"Sell" 依然會發送到 IB,
因為止蝕由IB 觸發, 但Sell Signal 由AB 送出, 有沒有coding 可以避免這個Sell 兩次的情況情況?

謝謝解答!
 樓主| 發表於 14-6-1 22:49 | 顯示全部樓層
本帖最後由 kilroy 於 14-6-1 22:53 編輯
greg 發表於 14-5-31 14:07
謝謝K 大耐心的回覆!

1. 對不起, 我說得不夠清楚, 我意思是每月轉換 期指 月份時(新一個月), 在還沒有部位 ...

Hi,

1.
   可否以範例的方式寫一下買賣條件以及 IB Controller 送的語法

   這樣比較好了解

2.
    這個部份小弟寫了一個 bracket order 的 pending 範例

    ex.

    ContractMonth="YM   JUN 14-ECBOT-FUT";
    ibc=GetTradingInterface("IB");
    Buy=ParamTrigger("BUY","BUY");
    Short=ParamTrigger("SELL","SELL");
    BuyTrigger = LastValue(buy);
    SellTrigger = LastValue(short);
    PrevTN = StaticVarGet("TimeNumber"+Name());
    TN = LastValue(TimeNum());
    NewBar = TN != PrevTN;
    StaticVarSet("TimeNumber"+Name(),TN);
    BuyOrderID = StaticVarGetText("BuyOrderID"+Name());
    SellOrderID = StaticVarGetText("SellOrderID"+Name());
    BuyPending = ibc.IsOrderPending(BuyOrderID);
    SellPending = ibc.IsOrderPending(SellOrderID);


    Shares = 1;

   if( NewBar )
  {
   if( NOT BuyPending ) StaticVarSetText("BuyOrderID"+Name(),"");
   if( NOT SellPending ) StaticVarSetText("SellOrderID"+Name(),"");
  }
  if( BuyTrigger AND BuyOrderID == "" )
  {
   ibc.CloseAllOpenPositions(ContractMonth);
   BuyOrderID = ibc.PlaceOrder(ContractMonth, "BUY", Shares, "MKT", 0, 0, "DAY", True);
   ibc.PlaceOrder(ContractMonth, "SELL", Shares, "LMT", BUYPRICE*1.1, 0, "DAY", True);
   ibc.PlaceOrder(ContractMonth, "SELL", Shares, "STP", BUYPRICE*0.9,buyprice*0.99, "DAY", True);
   StaticVarSetText("BuyOrderID"+Name(),BuyOrderID);
  }
  else if( SellTrigger AND SellOrderID == "" )
  {
   ibc.CloseAllOpenPositions(ContractMonth);
   SellORderID = ibc.PlaceOrder(ContractMonth, "SELL", Shares, "MKT", 0, 0, "DAY", True);
   ibc.PlaceOrder(ContractMonth, "BUY", Shares, "LMT", SELLPRICE*0.9, 0, "DAY", True);
   ibc.PlaceOrder(ContractMonth, "BUY", Shares, "STP", SELLPRICE*1.1,SELLPRICE*1.1, "DAY", True);

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

---
上面的範例我還沒實際操作過(因為這兩天沒開盤,我沒辦法測試)

不過我有想過會遇到的問題大概就是這 order pending 之後,若都沒止損
隔日或數日之後,這個止損單是否都需要一直 pending

所以還是建議把 trailling stop 的語法寫進策略裡

符合止損條件時,將 order pending 出去

再參考看看了

發表於 14-6-9 11:41 | 顯示全部樓層
k大 您好
跟您請教一下
在做即時的scan時
那個 Range 要設成什麼
我看它有四種選擇
能否簡易講解一下各別的用途與差異

感謝~~~


 樓主| 發表於 14-6-9 11:44 | 顯示全部樓層
skyler 發表於 14-6-9 11:41
k大 您好
跟您請教一下
在做即時的scan時

選的範圍越少,掃得越快

參考看看了

評分

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

查看全部評分

發表於 14-6-9 14:32 | 顯示全部樓層
kilroy 發表於 14-6-9 11:44
選的範圍越少,掃得越快

參考看看了

原來如此
所以
如果在交易時
Scan 15種商品
應該選擇 1 recent bar(s) 會是比較符合所需囉
 樓主| 發表於 14-6-9 14:37 | 顯示全部樓層
skyler 發表於 14-6-9 14:32
原來如此
所以
如果在交易時

你的理解是沒錯的

評分

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

查看全部評分

發表於 14-6-12 11:52 | 顯示全部樓層
k大你好再次請教一下闗於匯入歷史資料 K線時間的問題
以澳幣為例
如下
2014-06-12_113554.png

左邊為您提供的資料:歷史資料內容的時間是以K線開始的時間
右邊為群益MC匯出的資料:歷史資料內容的時間是以K線結束的時間
AB匯入資料時顯示的時間是以K線結束時間顯示
但因此造成了時間上有誤
想要請教一下

如何能讓 AB顯示時間在匯入資料後是顯示 K線開始時間
例如這個例子
我要怎麼做
才能讓K大您提供的資料 或是 MC 匯出的資料
在匯到AB後能在AB時間上能顯示  11:45:00

感謝指導~






 樓主| 發表於 14-6-12 12:04 | 顯示全部樓層
skyler 發表於 14-6-12 11:52
k大你好再次請教一下闗於匯入歷史資料 K線時間的問題
以澳幣為例
如下

Hi,
可以貼一下你的 preferences -> intraday 讓我看一下嗎

謝謝
發表於 14-6-12 13:41 | 顯示全部樓層
kilroy 發表於 14-6-12 12:04
Hi,
可以貼一下你的 preferences -> intraday 讓我看一下嗎

K大您好感謝提醒
我剛已經將 intraday 內的 End time of interval 改成 Start time of interval 即可了

2014-06-12_133635.png

2014-06-12_133556.png

但因為您提供的資料時間為起始時間
MC匯出的資料時間為結束時間

我在import 時是否能去指定時間為結束時間或起始時間?




 樓主| 發表於 14-6-12 13:50 | 顯示全部樓層
skyler 發表於 14-6-12 13:41
K大您好感謝提醒
我剛已經將 intraday 內的 End time of interval 改成 Start time of interval 即可了

Hi,

這個部分可能沒辦法

應該是跟我匯出時的設定有關係


發表於 14-6-12 22:39 | 顯示全部樓層
kilroy 發表於 14-6-12 13:50
Hi,

這個部分可能沒辦法

OK~
了解了!
那我再找找MC的設定了~

感謝您的解答
發表於 14-6-14 20:38 | 顯示全部樓層
K大~
有個不情之請
能否方便給我
6C #F 與 6J #F
這二個歷史資料
感恩~
 樓主| 發表於 14-6-14 20:59 | 顯示全部樓層
skyler 發表於 14-6-14 20:38
K大~
有個不情之請
能否方便給我

Hi,

日圓 6J #F.rar (4.4 MB, 下載次數: 53)
加幣 6C #F.rar (4.12 MB, 下載次數: 44)



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

本版積分規則

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

GMT+8, 24-12-23 15:59

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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