请教关于代码编写中数据引用的二个问题

各位老师好,

      在策略编写中遇到二个问题特来求助。

      基础策略包含以下四步:

(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一样进行切片和赋值?




关于跨周期引用大周期数据问题请教
quant3关于跨周期引用的问题
请教老师,关于套利,自己系统如何与帮助中的代码结合
请教关于”数据中心”中“基础数据”的使用问题
关于引用取值
关于编写的问题
请教两个代码编写的问题
跨周期引用数据时的问题
关于跨周期时,使用subscribebar函数引用数据时的报错
关于程序的编写问题

简单的讲序列变量就是每根BAR有一个值,并且可以回溯

任何单变量都是bar会重置(包括数组),也就是你如果哟啊基于K线保存数组

也要定义成序列数组, series<array<numeric>>

global 是全局前缀,可以与时俱进,但全局一份,特点其一就是无法回溯

具体用什么变量还是看你自己策略需要什么类型

你这种看上去至少应该是序列型

谢谢老师解答。我学习过kyover的教学视频中的变量类型和数据结构。只是不知道如何完成引用,例如您讲的序列数组, series<array<numeric>>,如果K线产生新的顶和底,那么上一个顶或者底(及其bar数据)如何引用呢?要取到它的类型和bar数据才能做步骤(3)。使用什么函数可以完成引用呢? series类型可以向前回溯然后再修改之前的数据吗?

刘老师肯定要说 你别在外面说看过我的教学视频了 哈哈哈哈哈哈

视频里肯定讲了怎么引用,我觉得你可以重新看一遍

series<array<numeric>> 就表示 每一根K线上都有一个array<numeric>结构的数据

比如你想引用 “前1根K线”里 “数组第三个元素”则是 series[1][2]

第一个[1]表示series数据回溯bar的数量,

第二个[2]表示你这个bar上数组数据的序号

我记得是不支持向前修改的

看了楼上的问题,你是不知道如何回溯序列数组?

普通序列型,加1个下标就可以了。比如a的回溯是 a[n]

数组型的回溯,由于数组本身有下标,所以数组a的回溯 ,是 a[回溯下标][数组下标]

同理二维数组是 a[回溯下标][一维下标][二维下标]

谢谢老师,我学习下。

这个回答通透了。谢谢老师