以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  数组使用的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=168226)

--  作者:JJG
--  发布时间:2019/2/14 15:29:24
--  数组使用的问题
逐K线模式下写一个技术指标,定义了一个空数组初始化为0,当前K线下可以用,若再开始一根新的K线,程序从头计算一遍,该数组又被重新初始化为0的空数组。如果要在交易系统里调用该技术指标中的该数组中的数据要如何进行才能应用到该技术指标中该数组的连续数据?

例如:
//数组:FX_UP_KX[]、FX_UP_ZT[] 、FX_UP_SZ[]、FX_UP_WZ[]虽然是在本技术指标中的,但编写的其他交易系统调用本指标会用到这几个数组中的数据并且会取数组中不同位置的值计算。

//定义向上分形序列数组

VARIABLE: FX_UP_KX[] = 0 ;//向上分形算法中每根K线对应的最高值的序列数组
FX_UP_KX_TMP :=HIGH ;
FX_UP_KX := FX_UP_KX_TMP;//将序列数组HIGH通过临时变量FX_UP_KX_TMP赋值到数组 FX_UP_KX[]中并自动扩充数组的大小。
VARIABLE: FX_UP_ZT[] = 0;//向上分形状态,空数组初始化为0
VARIABLE: FX_UP_SZ[] = 0 ;//向上分形数值,空数组初始化为0
VARIABLE: FX_UP_WZ[] = 0 ;//向上分形位置,空数组初始化为0


//定义向上分形变量

FX_UP_LSWZ := 2 ;// 向上分形临时位置,初始化为序列数组的倒数2根K线(即倒数第3根K,第1根是倒数0根,即datacount)
FX_UP_KX_LONG :UBOUND(FX_UP_KX);//FX_UP_KX数组长度,因datacount是序列变量,在逐K线模式时,要通过临时变量转换再赋值给空数组并自动增加数组大小。否则容易出错。因此用FX_UP_KX_LONG替代datacount
FX_UP_LSWZ_HIGH := FX_UP_KX [FX_UP_KX_LONG - FX_UP_LSWZ] ;//向上分形临时位置的最高值

 
IF FX_UP_LSWZ_HIGH >FX_UP_KX [ FX_UP_KX_LONG-(FX_UP_LSWZ-1)] AND FX_UP_LSWZ_HIGH > FX_UP_KX [FX_UP_KX_LONG-(FX_UP_LSWZ-2)] THEN  //判断向上分性临时位置>后1根and后2根K线,ELSE 不成立goto向下分形。
    BEGIN
   
    IF FX_UP_LSWZ_HIGH > FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+2] OR FX_UP_LSWZ_HIGH > FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+1] THEN   //判断临时位置>前2根线and前1根线。
       BEGIN   //成立,这是向上分形,输出分形状态、数值、位置,显示分形位置,退出。
         FX_UP_ZT := 1; 
         FX_UP_SZ := FX_UP_LSWZ_HIGH ;
         FX_UP_WZ :=  FX_UP_KX_LONG-FX_UP_LSWZ ;//BARPOS是返回当前K线的位置,这里数组有移位计算要记录的位置不是K线的位置,是数组的所在的位置因此不能用BARPOS,要用数组长度-临时位置
         //drawicon(FX_UP_ZT = 1,FX_UP_LSWZ_HIGH,4,2); //逐K线模式只能在最后1根K线上画图标,因此显示部分利用前面的需列模式。
             
         EXIT; //终止执行
       END;
    IF FX_UP_LSWZ_HIGH < FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+2] OR FX_UP_LSWZ_HIGH < FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+1] THEN EXIT;  //判断临时位置<前2根或前1根,成立不是向上分形退出;不成立进入循环。
    WHILE FX_UP_LSWZ_HIGH =  FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+2] OR FX_UP_LSWZ_HIGH = FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+1] DO   //循环条件前2根或前1根K线=临时位置。
       BEGIN
        IF FX_UP_LSWZ_HIGH < FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+2] OR FX_UP_LSWZ_HIGH < FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+1] THEN EXIT;     //临时位置<前2根或前1根,成立退出,循环初始化判断。
        IF FX_UP_LSWZ_HIGH =  FX_UP_KX [FX_UP_KX_LONG-FX_UP_LSWZ+2] THEN FX_UP_LSWZ = FX_UP_LSWZ+2;  //判断临时位置=前2根。成立临时位置移到前2根;
        FX_UP_LSWZ = FX_UP_LSWZ+1; //不成立临时位置移到前1位。
         END;
     END;
ELSE GOTO 向下分形;   



--  作者:FireScript
--  发布时间:2019/2/14 15:57:49
--  
 数组不会每个K都重新初始化的。
--  作者:JJG
--  发布时间:2019/2/14 16:48:16
--  
在交易系统中怎么调用技术指标中数组的数据,有没有教程参考下?
--  作者:FireScript
--  发布时间:2019/2/14 17:02:55
--  
 数组是无法进行跨指标调用的。目前对数组的操作的支持是有限的。
[此贴子已经被作者于2019/2/14 17:03:56编辑过]

--  作者:JJG
--  发布时间:2019/2/14 17:14:49
--  
有没有变通的方法?把数组改成什么东西能够实现跨指标调用?
--  作者:FireScript
--  发布时间:2019/2/15 15:33:52
--  
 暂无其他方案。