• 量化投资_EasyLanguage/PowerLanguage教学课程__【第二篇专题】__【第十一章最大bar数量(转)】


    第十一章:最大bar数量

       如图所示,策略的最大bar数量在策略属性中进行设置,默认为50;信号脚本会从图表左边开始的第51根bar开始计算,依次向图表右边进行执行计算,这是策略(信号)基于bar的一个计算顺序,从左边向右边逐根bar执行计算。

      那么很明显的问题是,为什么要设置最大bar数量,这个有什么用?答案是用于回溯,因为信号基于当根bar(假设是图表上第51根bar)执行计算时,有时需要回溯当根bar前若干根bar上的信息进行计算判断(假设此时当根bar为图表上第51根bar,即图中的21:51分钟的收盘时间线位置,而信号基于第51根bar进行计算时,需要调用图表上第49根bar上的收盘价信息,那么此时就需要进行回溯);退一步考虑,若最大bar数量设置为0,而当根bar为图表上第1根bar,并且信号基于当根bar的计算时需要调用前1根bar上的信息,例如收盘价信息,但是此时当根bar就是图表上第1根bar,从而当根bar前面没有bar可用于回溯调用。这就是最大bar数量的用途所在。

    1. 最大bar数量

      相对编号和绝对编号

      下方当我们涉及到最大bar数量时,我们始终将策略属性中的最大bar数量设置成默认的50,为方便叙述起见。引入了最大bar数量之后,就引入了两个概念,分别是bar的相对编号和绝对编号。Bar的编号是每根bar的一个位置,位置分为相对位置和绝对位置;bar的绝对编号就是绝对位置,和最大bar数量没有关系,它是基于图表中第1根bar依次进行编号的,即图表中第1根bar的绝对编号为1,第51根bar的绝对编号为51;bar的相对编号就是相对位置,它是基于图表中最大bar数量之后的bar依次进行编号的,一句话就是,bar的相对编号=bar的绝对编号—最大bar数量。

        关键字currentbar返回的数值就是当根bar的相对编号,关键字maxbarsback反映的数值就是策略属性中设置的最大bar数量;基于这两个关键字,当根bar的绝对编号就等于两个关键字的返回值之和。

     

     

    2. 回溯

     

      如所示,我们以相对编号为1的bar为当根bar进行分析,也就图中收盘时间为21:51的时间线所在的位置为当前策略(信号)正在执行计算的位置,可以看出,当根bar的bar编号=51,这个是它的绝对编号,图表显示出来的bar的编号都是绝对编号。基于当根bar进行计算时,需要调用前几根bar的信号,例如调用前几根bar上的收盘价进行分析,相应的代码如下:

     

    //信号代码
    if currentbar=1 then begin
    print("currentbar=",currentbar,",time[0]=",time[0],",close[0]=",close[0]);
              print("time[1]=",time[1],",close[1]=",close[1]);
              print("time[2]=",time[2],",close[2]=",close[2]);
              print("time[3]=",time[3],",close[3]=",close[3]);
              print("time[4]=",time[4],",close[4]=",close[4]);
              print("time[5]=",time[5],",close[5]=",close[5]);
              print("time[6]=",time[6],",close[6]=",close[6]);
              print("time[7]=",time[7],",close[7]=",close[7]);
              print("time[8]=",time[8],",close[8]=",close[8]);
    end;
    //输出
    currentbar=   1.00,time[0]=2151.00,close[0]=3354.00
    time[1]=2150.00,close[1]=3353.00
    time[2]=2149.00,close[2]=3353.00
    time[3]=2148.00,close[3]=3352.00
    time[4]=2147.00,close[4]=3352.00
    time[5]=2146.00,close[5]=3351.00
    time[6]=2145.00,close[6]=3350.00
    time[7]=2144.00,close[7]=3353.00
    time[8]=2143.00,close[8]=3353.00

      在当根bar的位置调用当根bar的收盘价可以使用close[0]或者close即可,对应到图2中的“0”标记;调用前第1根bar的收盘价可以使用close[1]即可,对应到图2中的“1”标记;调用前第2根bar的收盘价可以使用close[2]即可,对应到图2中的“2”标记;调用前第3根bar的收盘价可以使用close[3]即可,对应到图2中的“3”标记,其它以此类推即可,但是最多只能回溯前第50根bar的收盘价,因为回溯的数量不能超过策略属性中的最大bar数值50。

     

      但是并不是所有的关键字都有回溯的功能,比如关键字currentbar就不能进行回溯,currentbar[1]始终返回的数值等于currentbar返回的数值;关键字currentbar不能进行回溯,但是使用currentbar[2]这种形式并不会报错,只是currentbar[2]始终等于currentbar,对于currentbar[3]、currentbar[4]也始终等于currentbar的返回值。其它不能回溯的关键字在这里不一一叙述,请参考关键字currentbar的使用情况;我们可以将其数值赋值给变量,然后通过变量的回溯功能来回溯前第N根bar上的currentbar的数值,代码如下:

     

    //信号代码:
    value1=currentbar;
    print("currentbar=",currentbar,",value1=",value1,",value1[1]=",value1[1]);
    //输出
    currentbar=   1.00,value1=   1.00,value1[1]=   0.00
    currentbar=   2.00,value1=   2.00,value1[1]=   1.00
    currentbar=   3.00,value1=   3.00,value1[1]=   2.00

     

    3. symbol系列关键字

      symbol系列关键字有symbol_close、symbol_currentbar、symbol_length、symbol_time、symbol_date、symbol_downticks、symbol_high、symbol_low、symbol_open、symbol_openint、symbol_tickid、symbol_ticks、symbol_time、symbol_time_s、symbol_upticks、symbol_volume,但是本文并不打算将symbol系列关键字全部进行阐述清楚,我们只选择如下4个进行阐述,其它的symbol类关键字以此类推即可;之所以阐述symbol系列关键字,是因为它们在使用上不受最大bar数量的限制,这点是关键的地方。

     

    Symbol关键字名称

    简介

    Symbol_close

    返回bar的收盘价

    Symbol_currentbar

    返回bar的绝对编号

     


    情景一:

     

    //信号代码
    if currentbar=1 then
        close[51];

     

      由于这段代码的存在,会弹出一个窗口报错提示“指标运算试图参考的bar的数量(51)比当前设置的“指标运算参考的最大bar数量”多,这是因为最大bar数量设置为50,而关键字close调用了前第51根bar上的收盘价,回溯的数量已经超过了最大bar数量50的限制,这是不允许的。

     

    情景二:

     

    //信号代码
    if currentbar=1 then
        symbol_close[51];

     

      这段代码的存在仍然会弹出一个与情境一相同的窗口报错提示,但是这里我们的解释与上面不一样;报错的原因是因为关键字symbol_close调用(回溯)不存在的bar上的收盘价信息而导致报错提示;因为相对编号为1的bar的前面最多只有50根bar,所以最多只能调用(回溯)前第50根bar上的数据,这点与最大bar数量限制没有关系。

     

    情景三:

     

    //信号代码
    if currentbar=10 then
        close[51];

     

      这段代码的存在会弹出一个与情境一相同的窗口报错提示,原因与情境一完全一样,是因为回溯的数量超过了最大bar数量50的限制。

     

     

    情景四:

     

    //信号代码
    if currentbar=10 then
        symbol_close[51];

     

      这段代码的存在不会弹出窗口报错提示,原因是因为相对编号为10的bar的前面有59根bar,这个数量大于当前回溯的数量51,所以不会报错。

      通过这4个情境,我们已经将symbol_close与close的区别阐述清楚了,前者不受策略属性中的最大bar数量的限制,而后者会受最大bar数量的限制。对于其它的symbol类关键字,请参考symbol_close与close之间的区别。

    关键字Symbol_currentbar的返回值等于currentbar与maxbarsback的返回值之和,它表示的是当根bar的绝对编号,这是与currentbar的唯一区别;symbol_currentbar和currentbar这两个关键字都不能回溯。

     

     

    =================================================

    之前的文章感谢大家的转载,希望转载时请注明出处,本人转自其它网站的图表一并感谢,谢谢~!

    https://www.cnblogs.com/noah0532/

  • 相关阅读:
    每天写点shell——read的用法
    串口编程(一) :理论基础
    常用算法3
    Linux man C++ 库函数
    网络爬虫(一):配置selenium、pycharm(windows平台)
    C/C++ 类型内存占用详解
    git常用命令总结
    常用算法2
    本地git关联远程github
    python实现float/double的0x转化
  • 原文地址:https://www.cnblogs.com/noah0532/p/13718080.html
Copyright © 2020-2023  润新知