各位老师好,
在策略编写中遇到二个问题特来求助。
基础策略包含以下四步:
(1)行情预定
预定1100根bar。
【问题1】请教,布置策略时要在tb里边设置K线数,除了设置外,可否在init{}里边预定行情数据?有此一问是为了保证交易信号的连续性,担心在没有预定的情况下,运行软件时间之前没有行情数据导致没有交易信号。
(2)指标初始化
1.给每根K线设立两个指标值,一个指标值为该K线的时间,一个为结构类型(顶元素值为“1”,底元素值为“-1)。
2.取(1)中预定K线的前1100根K线为顶,指标值为(前1100bar时间,1)
(3)指标迭代
1.若当前K线、前一根K线、前二根K线的最高价满足 H[2]<=H[1] and H[1]>=H,那么前一根K线为顶元素,指标值记为(前1bar时间,1)
.若当前K线、前一根K线、前二根K线的最低价满足 L[2]>=L[1] and L[1]<=L,那么前一根K线类型为底元素,指标值记为(前1bar时间,-1)
2.取前1根K线的结构类型,如果与上一个结构类型取值不为0的元素的结构类型相同:
若同为顶元素则,最高价更高的顶元素指标值记为(bar时间,1),最高价不更高的顶元素指标值记为(bar时间,0);若同为底元素则,最低价更低的底元素指标值记为(bar时间,-1),最低价不更低的底元素指标值记为(bar时间,0)
3.取前1根K线的结构类型,如果与上一个结构类型取值不为0的元素的结构类型不同:
如果”前1根K线与上一个结构类型取值不为0的元素相隔K线数大于等于2根“并且”前1根K线的最高价最低价区间与上一个结构类型取值不为0的元素的最高价最低价区间不重叠(仅可重叠一个价位)“那么前1根K线的指标值记为(前1bar时间,1)或(前1bar时间,-1)。
(4)根据(2)(3)步骤寻找的顶底元素进行相关计算。
【问题2】步骤(2)(3)(4)涉及到将顶底元素对应K线的时间和类型的指标,进行存储、添加、删除(或者修改)、引用等操作,特别是步骤(3)中小2项,有可能会援引前一元素的Bar数据还可能删除或者修改它的指标值,这样的存储、添加、删除(或者修改)、引用等操作可以如何设计呢?
思路一,指标值存成series类型。请问引用和修改等操作该如何完成?引用到上一个元素的位置还能再次修改它的bar上指标的值吗?
思路二,指标值存成二维数组,一列存时间,一列存结构类型的值(或者分类)。请问二位数组是否可以像Python一样进行切片和赋值?
简单的讲序列变量就是每根BAR有一个值,并且可以回溯
任何单变量都是bar会重置(包括数组),也就是你如果哟啊基于K线保存数组
也要定义成序列数组, series<array<numeric>>
global 是全局前缀,可以与时俱进,但全局一份,特点其一就是无法回溯
具体用什么变量还是看你自己策略需要什么类型
你这种看上去至少应该是序列型
刘老师肯定要说 你别在外面说看过我的教学视频了 哈哈哈哈哈哈
视频里肯定讲了怎么引用,我觉得你可以重新看一遍
比如你想引用 “前1根K线”里 “数组第三个元素”则是 series[1][2]
第一个[1]表示series数据回溯bar的数量,
第二个[2]表示你这个bar上数组数据的序号
我记得是不支持向前修改的
看了楼上的问题,你是不知道如何回溯序列数组?
普通序列型,加1个下标就可以了。比如a的回溯是 a[n]
数组型的回溯,由于数组本身有下标,所以数组a的回溯 ,是 a[回溯下标][数组下标]
同理二维数组是 a[回溯下标][一维下标][二维下标]
谢谢老师,我学习下。
这个回答通透了。谢谢老师