skyler 發表於 14-11-4 23:11

買賣價超過K BAR 範圍

本帖最後由 skyler 於 14-11-4 23:16 編輯

各位先進
今天在測試時發現有一個問題
進場的價格不在K線的範圍內

以下以short 為案例
當 short 成立時
short price = 前K最高價 - 7點

以下用Explore的方式將價格顯示出來
在ZS 2014/11/04/14:45:00 時
short price = 1025.5


同支AFL 回測
ZS 的 shortprice = 1023.5



K bar
High price = 1023.5



ZS
在 2014/11/04/14:45:00
有 short 的訊號
但 short price = 1025.5
而 K barHigh Price = 1023.5
在回測結果中不應出現這筆交易


以前練習AFL時有測過不會有這種問題
後來就沒有再去理會
結果今天居然發現有這個問題

我完全移除AB
重裝 5.80 relase 版
或是 5.89 beta 版
都是一樣的狀況

不知有沒有先進知曉那裡出問題?

感謝



joshsmi 發表於 14-11-5 00:36

本帖最後由 joshsmi 於 14-11-5 00:44 編輯

Because your explorer code is wrong.

zaqimon 發表於 14-11-5 09:11

前一根High - 7 * TickSize並不存在目前的價格區間內
AmiBroker選擇用開盤價進場做空
感覺沒什麼錯啊

skyler 發表於 14-11-5 10:48

joshsmi 發表於 14-11-5 00:36 static/image/common/back.gif
Because your explorer code is wrong.

You should look at K bar graphic careful !


skyler 發表於 14-11-5 10:49

zaqimon 發表於 14-11-5 09:11 static/image/common/back.gif
前一根High - 7 * TickSize並不存在目前的價格區間內
AmiBroker選擇用開盤價進場做空
感覺沒什麼錯啊 ...
上面那個案例
實際上
有下一筆 short
short price = 1025.5 到 IB
最後當沒有成交
ZS 當根K棒最高到 1023.5
我因為有去回測昨天
比對資料才發現真實的情境與回測顯示結果不同

想像一下
今天你出現放空的訊號
以限價 1025.5 做空ZS
在 最高價 只到1023.5時
你覺得回測應該出現進場在 1023.5
還是在當根沒有成交記錄
這二個那個比較合理呢?!




moneymaker 發表於 14-11-5 14:47

本帖最後由 moneymaker 於 14-11-5 14:49 編輯

貼出你的 code 來看看...{:4_93:}

kilroy 發表於 14-11-5 15:03

可以增加一個條件限制

比如說 H 要大於 前高減 7點才進場空單

skyler 發表於 14-11-5 15:36

本帖最後由 skyler 於 14-11-5 15:41 編輯

kilroy 發表於 14-11-5 15:03 static/image/common/back.gif
可以增加一個條件限制

比如說 H 要大於 前高減 7點才進場空單
K大
您說對了
只好在
BUY SELL SHORT COVER
這四個的邏輯再加上價格限制
Buy = (BuyPrice >= L);
Sell = (SellPrice <= H);
Short = (ShortPrice <= H);
Cover = (CoverPrice >= L);


不知道是不是大家都不會有問題
其實我的code 扣掉最上面商品的設定
邏輯大概20行
如果是bug
那這問題會大幅的影響回測結果

kilroy 發表於 14-11-5 16:54

skyler 發表於 14-11-5 15:36 static/image/common/back.gif
K大
您說對了
只好在


因為大大是要下限價單的方式去做

在 buyprice/shortprice/coverprice/sellprice 不能設定錯誤

這樣真的會"非常"影響回測績效

當根 K 沒有走到那個價位,在實際上不應該會成交的

可是回測卻以當根K最高價(既使低於前高減七點)的價位回測

如此,必須在進場條件裡多加入需高於/低於此價位的條件才行

才能符合實際進場的狀況

參考看看了

joshsmi 發表於 14-11-5 17:20

skyler 發表於 14-11-5 10:48 static/image/common/back.gif
You should look at K bar graphic careful !

Upload your analysis project file and your data file and tell your information window contract settings. Anything else is pussy talk. You have not the slightest idea how to code in AFL. You're just afraid like chicken to get your own bugs exposed.

Upload upper files or go to Tomasz Janeczko. But again you are just afraid because then you can not spread some nonsense in forums anymore.

skyler 發表於 14-11-5 18:21

本帖最後由 skyler 於 14-11-5 18:56 編輯

寫了一個很簡單的範例
結果不多說直接看圖
short ZSTime = 2014/11/04 01:00:00
short price = 1038


backtesting result
short price = 1035


2014/11/04 01:00:00
H = 1035


---------

AFL Test code

_SECTION_BEGIN( "Product Settings" );
{
    SetPositionSize( 1 , spsShares );
    SetOption( "MaxOpenPositions" , 1 );
    SetOption( "InitialEquity" , 5000 );
    SetOption( "FuturesMode" , 1 );
    SetOption( "CommissionMode" , 3 );
    SetOption( "CommissionAmount" , 2.5 );
    RoundLotSize = 1;   
   
    newName = strmid( Name (), 0, 2 );

    if ( newName == "ZS" )
    {
      TickSize = 0.25;
      MarginDeposit = 3750;
      PS = 100;
      PointValue = 0.5 * PS;
    }
}
_SECTION_END();


_SECTION_BEGIN( "Logic" );
{
    //前K價格
    O_P1 = Ref( O, -1 );      
    C_P1 = Ref( C, -1 );
    H_P1 = Ref( H, -1 );
    L_P1 = Ref( L, -1 );
      
    MA5_P1 = Ref( MA( C, 5 ), -1 );
    MA5_P2 = Ref( MA( C, 5 ), -2 );
   
    MA20_P1 = Ref( MA( C, 20 ), -1 );
    MA20_P2 = Ref( MA( C, 20 ), -2 );   
   
    Buy = MA5_P1 > MA5_P2 AND MA20_P1 > MA20_P2 and Cross(C_P1, MA5_P1);
    Sell = MA5_P2 > MA5_P1;
    Short = MA5_P2 > MA5_P1 AND MA20_P2 > MA20_P1 and Cross(MA5_P1, C_P1);
    Cover = MA5_P1 > MA5_P2;
      
    Buy = ExRem( Buy, Sell );
    Sell = ExRem( Sell , Buy );
    Short = ExRem( Short, Cover );
    Cover = ExRem( Cover , Short );
      
    BuyPrice = (L_P1 + 7 * TickSize ) ;
    SellPrice = ( O - 2 * TickSize );
    ShortPrice = (H_P1 - 7 * TickSize );
    CoverPrice = ( O + 2 * TickSize );
   
    Filter = Buy OR Short;
      
    AddColumn( Buy, "Buy", 1 );
    AddColumn( Sell, "Sell", 1 );
    AddColumn( Short, "Short", 1 );
    AddColumn( Cover, "Cover", 1 );
      
    AddColumn( L_P1, "L_P1", 1.2 );
    AddColumn( TickSize, "TickSize", 1.2 );
    AddColumn( BuyPrice, "BuyPrice(L_P1 + 7 * TickSize )", 1.2 );
   
    AddColumn( H_P1, "H_P1", 1.2 );      
    AddColumn( TickSize, "TickSize", 1.2 );
    AddColumn( ShortPrice, "ShortPrice( H_P1 - 7 * TickSize )", 1.2 );
}
_SECTION_END();

------------------------------
有自定義進場價格
最好是多看看回測的入場價是否合理
不然
回測結果與真實情況
的差異大到讓你吐血
------------------------------

WTF
本來實在是不太想理會某人
即然這麼想要檔案
我就附上如下










atrader 發表於 14-11-5 20:46

試試
SetOption("PriceBoundChecking",False);


合理作法是ShortPrice應該在H,L之間,不然Short不該為true。

假如不是的話,就測試原廠實際作法。(不保證日後會修改)

skyler 發表於 14-11-5 21:39

atrader 發表於 14-11-5 20:46 static/image/common/back.gif
試試
SetOption("PriceBoundChecking",False);



不能這麼設
因為如果設成這樣
等於只是讓回測看起來像是在指定的價格成交
但實際上該根K bar 最高價並沒有到該價位

以上面的例子
如果加上
SetOption("PriceBoundChecking", False );
回測的short price 會"顯示" 1038
但實際上這根K bar 最高價根本沒有到
那會完全不符合實際情況

回測應該是當short 訊號成立
用short price 去判斷是否在 K bar 間
如果有才能成交
不然即未成交
也就是不該在回測有該筆資料

兄台所謂的 原廠做法是什麼?

joshsmi 發表於 14-11-6 01:05

Where is the data file?

You don't need to upload .abs file. Project file contains backtest settings (same ones as in abs file), toolbar settings and afl. So abs file is not required. Instead upload data file of ZS.

joshsmi 發表於 14-11-6 01:18

And perhaps you should explain in English what you actually want to achieve as I don't understand Chinese. Send to private mail here.

BTW I'm not from AB. So if you want explanation by AB then send to AB if there is something you don't understand at all as in this case.
http://www.amibroker.com/kb/2014/10/09/efficient-support/

頁: [1] 2
查看完整版本: 買賣價超過K BAR 範圍