超新手问题,那个...AmiBroker里的buyprice和buystop是什么意思?

Discussion in 'AmiBroker' started by Joker-Kid, Nov 10, 2013.

  1. 周五开始学习AmiBroker,哇~感觉就像是发现新大陆,各种好用各种方便:D~

    但是在学习user's guide的“Back-testing your trading ideas”文章(网址:http://www.amibroker.com/guide/h_backtest.html
    )时遇到一个问题想不清楚,就是文章里的buyprice和buystop是什么变量,下文作者想表达什么?我看了几遍都看不懂(偶的英语是体育老师教的...:o),所以请教一下海洋的各位。
    文章里的片段:
    “So you can write the following to simulate real stop-orders:

    BuyStop = ... the formula for buy stop level;
    SellStop = ... the formula for sell stop level;

    // if anytime during the day prices rise above buystop level (high>buystop)
    // the buy order takes place (at buystop or low whichever is higher)
    Buy = Cross( High, BuyStop );

    // if anytime during the day prices fall below sellprice level ( low < sellstop )
    // the sell order takes place (at sellstop or high whichever is lower)
    Sell = Cross( SellPrice, SellStop);

    BuyPrice = max( BuyStop, Low ); // make sure buy price not less than Low
    SellPrice = min( SellStop, High ); // make sure sell price not greater than High
     
    Last edited by a moderator: Nov 11, 2013
  2. 晕了,网址后面的文字被海洋吞了。偶的意思就是想问那段代码是什么意思,buyprice和buystop又是什么意思。
     
  3. BuyStop = ... the formula for buy stop level;
    SellStop = ... the formula for sell stop level;

    buyprice defines buying price array (this array is filled in with the default values according to the Automatic Analyser settings)

    sellprice defines selling price array (this array is filled in with the default values according to the Automatic Analyser settings)

    shortprice defines short selling price array (this array is filled in with the default values according to the Automatic Analyser settings)

    coverprice defines buy to cover price array (this array is filled in with the default values according to the Automatic Analyser settings)
     
  4. buyprice 是买价在当前价位下方,价位走低等着买,一般是多头建仓
    buystop 是买价在当前价位上方,价位走高被触发,一般是用来空头平仓
     
  5. 感谢wj2000和espresso的解说,明白了,谢谢!

    espresso,我最近几天都在按照你之前写的一个关于学习AmiBroker的帖子的流程去学习,真心感谢你,那个帖子就像是一张从起点到终点的地图指引,对于AmiBroker新手的我帮助很大,超赞!感谢~
     
  6. 今天在查看数据时发现一个问题,再次请教一下:
    我写了一个突破的代码,查看交易情况时发现在最早的时间段,按照代码的描写,buy是还没符合条件的,但是系统却在某个Bar上判定符合buy的条件而采取了buy的动作。这个只是初头的第一个信号出现错误,后面的信号都是正确的timing。
    我之前以为是SetBacktestMode的选择问题,但是全部的Mode都选了一次,初始的错误buy信号还是存在,百思不得其解,还望请教,谢谢。

    系统代码:
    BreakDay=Optimize("BreakDay",20,1,50,1);
    ExitDay=Optimize("ExitDay",10,1,50,1);

    H20=Ref(HHV(H,BreakDay),-1);
    H10=Ref(HHV(H,ExitDay),-1);
    L20=Ref(LLV(L,ExitDay),-1);
    L10=Ref(LLV(L,BreakDay),-1);

    BuyPrice=Ref(HHV(H,20),-1);
    SellPrice=Ref(LLV(L,10),-1);
    ShortPrice=Ref(LLV(L,20),-1);
    CoverPrice=Ref(HHV(H,10),-1);

    Buy=H>H20;
    Sell=L<L10;

    Short=L<L20;
    Cover=H>H10;
     
  7. H20=Ref(HHV(H,BreakDay),-1);
    ...
    ...
    Buy=H>H20;

    也许问题出在 "-1" 那个参数上面,读了第一个bar之前的数据?
    记得好像有个参数是设置使用数据的范围的?你可以找一下
     
  8. 我也想到使用设置数据范围来限制,某参数还没找,不过我改写了buy/sell/short/cover的rule语句就OK了,改写后的代码如下:(其实就是限制数据范围)
    Buy=Sell=Short=Cover=0;
    for(i=0;i<BarCount;i++)
    {
    if(i>19)
    {
    if(H>H20)
    {Buy=1;}

    if(L<L10)
    {Sell=1;}

    if(L<L20)
    {Short=1;}

    if(H>H10)
    {Cover=1;}
    }
    }
     
  9. 谢谢espresso提醒,不过现在又有新问题(我的问题真多XD),望赐教(不好意思,总要麻烦espresso)。

    我在做加减仓测试时发现不能在同一条Bar进行加仓动作,比如说在A-Bar的开盘价X开第一个仓位,然后设定开盘价X+50点时开第二个仓位,A-Bar符合开第二个仓位的条件但是进行回测时没有进行加仓。

    但是如果A-Bar的下一条Bar符合开第二个仓位条件,系统是会进行加仓。

    这里我想请教:
    (1)在Portfolio Backtest模式下,是否就是规定不能在同一Bar上进行加减仓,还是说有其他指令代码可以改写?
    (2)如果(1)里是没有其他参数指令改写这个情况,那是否要用到Custom Backtest模式下,做单品种多策略的方法来控制?
    (3)如果(2)成立,那我啃Custom Backtest去....
     
  10. 对于上面这个问题,我在思考是不是因为同一Bar的buyprice不能多次赋值的原因?
    第一仓位,buyprice是开盘价;第二仓位,buyprice是O+50===》同一Bar不能重新赋值?

    我想到一个解决方法:将日线Bar变成小时/分钟Bar,那样就不会在同一Bar上加减仓了,因为加减仓都分布去不同的小时/分钟Bar上了...只是..只是...我没有小时/分钟数据.....
     
  11. 同一个bar是可以同时又多个信号的,你可能要仔细看这个:

    Portfolio-level backtesting
    http://www.amibroker.com/guide/h_portfolio.html

    里面有一大段提到这个问题。

    It is possible for the system to generate on the very same symbol both entry and exit signal at the very same bar.

    里面还提到了 BACKTEST MODES,
    就是一个bar上面可以有多个原始信号,它有好几种模式来过滤/处理这些重复信号,
    所以是可以对一个bar的多个信号做处理的。
     
  12. 是?!驚喜ing!我馬上去看看
     
  13. espresso,我進展到這里:
    (1)文章(Portfolio-level backtesting)里的RESOLVING SAME BAR, SAME SYMBOL SIGNAL CONFLICTS部分內容,我測試過主要是針對同一Bar的buy/sell信號次序問題,但不能處理同一Bar里多個buy或者1個buy多個saclein信號。
    (2)但是!espresso你上面提到的Backtest mode里的RegularRawMulti模式似乎是可以處理我的問題的,因為它寫著ALL repeated entry signals to be acted and allow to open multiple, separate positions on the same symbol without scaling in/out effect.晚上測試一下來確定。
     
  14. espresso大侠,同一Bar内多次执行buy信号这个事情,我看了custom backtest还是写不出它的AFL...打算放下了,前天问一朋友拿日内的数据,那样就不用锁定单日K线多次buy信号了,谢谢espresso大侠上面的热心回答!
     
  15. 本来想推荐你看另外一篇关于backtester的文章,
    不过在一个bar里面控制多个信号似乎是不太灵活,
    如果你有日内的数据更好。
     
  16. espresso,对于同一K线开多仓的问题,我还想出了一个笨方法。就是扫到这条K线时,如果符合buy的条件,则直接计算可以买多少仓(X),均价是多少(Y)。然后编程序以Y价格买入,仓位是X。后续继续动态计算均价和仓位。均价计算的部分我已经写好了,然后仓位多少的部分我估计是要用到Custom Backtest,所以去看那部分,而且还看了Houston2[1]那个pdf档。但是...看了3次了还是看不懂,我还翻译了Houston那个文档,厄...还是..看得想哭了(程序新手伤不起~)所以直接问朋友拿日内数据了。
     
  17. 我是AB新手, 請問espresso兄之前寫的是那一個帖关于学习AmiBroker? 謝謝