COCO研究院

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

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

  [複製鏈接]
發表於 14-3-23 22:53 | 顯示全部樓層
kilroy 發表於 14-3-23 17:52
Hi,

請問分開處理的意思是什麼方式

也許成交量少的電子盤時段需要跟成交量大的白天時段有不同的交易邏輯,或是使用N-tick chart之類的方式來自動壓縮成交量少的時段以避免指標鈍化之類的。我只是隨便想想而已,不清楚一般有在做程式交易的人會不會去區分不同時段用不同邏輯,還是全天都用相同邏輯去判斷而已。
 樓主| 發表於 14-3-23 23:07 | 顯示全部樓層
zaqimon 發表於 14-3-23 22:53
也許成交量少的電子盤時段需要跟成交量大的白天時段有不同的交易邏輯,或是使用N-tick chart之類的方式來 ...

Hi,

以小弟的經驗來看

電子盤某些時段或許成交量較低,但不完全都是沒行情的


甚至常常是台灣時間白天進場的單,晚上就看到獲利進來了

---
我的作法是同一套邏輯(因為參數就是OHLC),不管時段

或是什麼消息或數據要公布(錢只能用噴的來形容,只是可能是噴到別人的口袋去了 XD)

所以不用想太多,任何方法丟進去回測

比如說你想要在不同時段用不同邏輯,一測就知

只要是有利可圖,它就是好方法、好邏輯

參考看看了

評分

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

查看全部評分

發表於 14-3-24 00:06 | 顯示全部樓層
大家好,
本人是Amibroker的初學者, 看到這個帖確是讓我學到不少東西. 我最近建立了一套策略, 但發覺backtest出來的結果跟explore是不同的, 請問我要怎樣做才可讓backtest及explore的結果一樣? 謝謝!
 樓主| 發表於 14-3-24 00:15 | 顯示全部樓層
andrewchan 發表於 14-3-24 00:06
大家好,
本人是Amibroker的初學者, 看到這個帖確是讓我學到不少東西. 我最近建立了一套策略, 但發覺backtes ...

Hi,

可否貼個圖來看看~

backtest 的結果不會和 explore 一樣,因為功能不一樣


參考看看了~
發表於 14-3-24 07:54 | 顯示全部樓層
Hi,

以下是Backtest mode

以下是Explore mode


謝謝各位的指導.



Explore mode

Explore mode

Backtest mode

Backtest mode
 樓主| 發表於 14-3-24 08:45 | 顯示全部樓層
本帖最後由 kilroy 於 14-3-24 08:46 編輯
andrewchan 發表於 14-3-24 07:54
Hi,

以下是Backtest mode

Hi,

小弟覺得是計算還有欄位的問題

方便貼 explore 的語法嗎?

謝謝~
發表於 14-3-24 10:27 | 顯示全部樓層
大大,

我今早測試了一會, 發現我開了autoscan後, 再停下來, 只要有data feed又符合條件, AB/IB controller還是會自動下單, 請問是否正常呢? 我考疑是data feed trigger的.........
 樓主| 發表於 14-3-24 10:31 | 顯示全部樓層
osdak 發表於 14-3-24 10:27
大大,

我今早測試了一會, 發現我開了autoscan後, 再停下來, 只要有data feed又符合條件, AB/IB controller ...

Hi,

把 modifyorder 那行改成 placeorder

參考看看了~~
發表於 14-3-24 10:43 | 顯示全部樓層
hi,  謝大大,
還有一個問題, 我的buy/sell/short/cover都已經設定好, 也加了buy=exrem(buy,sell).....等語句, 於回測中也是沒問題, 但奇怪是, 一接上IB controller, 自動實時下單, 他要是就一大堆buy, 要是就一大堆sell, 我paper trade account的錢像流水一樣....

IB controller.PNG

我下單的部份就是根據大大之前給的再組合你後來教的cleartrigger.....

{
ibc = GetTradingInterface("IB");

  BuyTrigger = LastValue(Buy);
  SellTrigger = LastValue(Short);
  Clear = 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);
  // BuyOrderID= ibc.ModifyOrder( BuyOrderID, ContractMonth, "Buy", Shares, "MKT", 0, 0, "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);
  // SellORderID = ibc.ModifyOrder( SellORderID , ContractMonth, "Sell", Shares, "MKT", 0, 0, "Day", True);

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

//sell or cover

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

//sell or cover


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


 樓主| 發表於 14-3-24 15:21 | 顯示全部樓層
osdak 發表於 14-3-24 10:43
hi,  謝大大,
還有一個問題, 我的buy/sell/short/cover都已經設定好, 也加了buy=exrem(buy,sell).....等語 ...

Hi,

這行  Clear = Sell OR Cover;


是要 Clear = lastvalue(sell or cover);


參考看看了
發表於 14-3-24 16:44 | 顯示全部樓層
本帖最後由 webxp 於 14-3-24 16:47 編輯
joshsmi 發表於 14-3-21 21:49
What do you wanna tell, pal?

First of all MC has many disadvantages over AB as it is very limited  ...

那我就重講一次好了MultiChart .NET SE 免費卻提供全功能,是最大的誘因 :)
發表於 14-3-24 19:14 | 顯示全部樓層
大大, 經我今天測試, 我發現了以下的現像:
1. 我是用圖表看實時報價, 如果我於 AA 那裡按了auto repeat(AR), 那AA會不停更新, 但只要一有買入/賣出信號, AB就不停下單.
2. 如果我停了AR, 但圖表還是跟IB連著, 那AB還是會自動下單, 但"好像"重復下單的問題就沒有了.
應該是不正常吧?
謝謝!!
 樓主| 發表於 14-3-24 19:36 | 顯示全部樓層
osdak 發表於 14-3-24 19:14
大大, 經我今天測試, 我發現了以下的現像:
1. 我是用圖表看實時報價, 如果我於 AA 那裡按了auto repeat(AR) ...

Hi,
已經用 orderID 照理說是不會讓訊號重複出現

因為已經有一組 orderID 佔住了

請參考此網址

---
圖表和SCAN 不能同時並用唷~ 只能擇一使用

如果 SCAN 還有問題,請先用圖表觀察下單(AFL語法)是否為正常下單狀況

還有就是,若你的 trading rules 是類似 cross(Close,X), cross(X,Close)

or Close>X, Close<X 之類的,必須使用 barcomplete 語法來限制當根K走完後才進場


參考看看了~
發表於 14-3-24 19:58 | 顯示全部樓層
"必須使用 barcomplete 語法來限制當根K走完後才進場"
原來是這樣! 我今天測試時, 都發現了好像和大大之前說的不一樣, 他於K中間就開始下單, 但不敢肯定, 因此打算再測試再問, 看來問題是這裡......
謝謝, 我再研究.......
 樓主| 發表於 14-3-24 20:25 | 顯示全部樓層
osdak 發表於 14-3-24 19:58
"必須使用 barcomplete 語法來限制當根K走完後才進場"
原來是這樣! 我今天測試時, 都發現了好像和大大之前 ...

Hi,

小弟這帖就有提到過囉

這邊在詳細說明一下

---
在即時接收資料的情況下 Open, High, Low 這三個值會是固定在那裏的

除非再創新高或破新低,而走出這三個值(Open, High, Low)的值就是 Close了

在一根 K bar 的週期裡,Close是跳動的,直到這個週期走完

---
如此, Close 在還沒走完的情況下,它可能上一秒符合你的進場條件,下一秒卻不符合了

這會是常見的回測 bug,因為回測的資料是 "既知/已知" Close 在哪裡了

所以必須當根K走完才可以進場,否則訊號會跳動

---
另外一種進場的方式就是上述提到的三個值 (open, high, low)

ex. open > 某條件 進場多單, high > 某條件進場多單, low < 某條件進場空單... etc...

但 high>某條件 與 low<某條件 這裡也要小心,因為當根 K bar 可能同時 H>某條件與 L< 某條件

這也是常見的 Bug  但都是撰寫語法的人所犯的錯誤



參考看看了~~

評分

參與人數 2金錢 +4 收起 理由
skyler + 2 好文章,我推薦
nsmvjmsojki + 2 感謝分享

查看全部評分

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

本版積分規則

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

GMT+8, 24-12-23 05:24

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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