金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 8492|回复: 18

Variable全局变量问题

[复制链接]

14

主题

223

帖子

308

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2021-9-2 14:37 | 显示全部楼层 |阅读模式
感谢原论坛名为beitang的作者,本贴根据其发帖整理。

在后台交易模拟中发现Variable全局变量好像有问题,
按照我的理解,在Variable定义的全局变量Myholding:=1后,应该保持为1。

//后台程序化,后台交易运行,固定时间间隔5秒
//定义常数变量Myholding并初始化为0。

[PEL] 复制代码
Variable: Myholding=0;

DEBUGFILE('D:\Myholding.txt','VS:%.0f',Myholding);
IF ISLASTBAR THEN
BEGIN
IF Myholding=0 THEN
BEGIN
Myholding:=1;
DEBUGFILE('D:\Myholding.txt','Myholding:%.0f',Myholding);
END
END

按照我的理解,在Myholding:=1后,应该保持为1。但实际测试文件的结果如下:

2021-07-28 11:12:00.265    VS:0
2021-07-28 11:12:00.265    Myholding:1
2021-07-28 11:12:05.734    VS:0
2021-07-28 11:12:05.734    Myholding:1
2021-07-28 11:12:10.718    VS:0
2021-07-28 11:12:10.718    Myholding:1
2021-07-28 11:12:15.718    VS:0
2021-07-28 11:12:15.718    Myholding:1
2021-07-28 11:12:20.734    VS:0
2021-07-28 11:12:20.734    Myholding:1
2021-07-28 11:12:25.718    VS:0
2021-07-28 11:12:25.718    Myholding:1
2021-07-28 11:12:30.734    VS:0
2021-07-28 11:12:30.734    Myholding:1
2021-07-28 11:12:35.718    VS:0
2021-07-28 11:12:35.734    Myholding:1

请教一下是怎么回事?Variable定义的全局变量为什么被不停地初始化了呢?



金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

14

主题

223

帖子

308

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-9-2 14:38 | 显示全部楼层
Variable定义的全局变量,使用场景如下:
      (1)图表程序化;
      (2)逐K线计算模式;   
        (3)  每根K线上只记录当根K线的最新值(不能记录一根K线上的历史各个状态值)。

逐K线计算模式,从第1根K线开始,会从第一个周期逐个周期解析公式系统,每个周期都会解析整个公式系统一遍
每解析一遍公式系统,就会在第1根K线上初始化一次。

具体到本例
Variable: Myholding=0;
每次执行一次循环检测时,Variable定义的全局变量Myholding都会被初始化为0一次

如果需要在后台程序化策略里,记住变量,需要使用全局变量数据库,保存变量状态,请参考函数EXTGBDATAEXTGBDATASET      
这两个函数,一个给全局变量赋值,一个读取值
设置了初始值之后,只要是在金字塔软件范围内,任意的指标、手工或者其他方式都可以修改它的值,并且在整个软件范围内共享这个值。因此,它不存在绝对意义上的初始化了。





金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
发表于 2021-9-3 15:19 | 显示全部楼层
说真的,我反复测试函数EXTGBDATA,EXTGBDATASET,既不好呈现历史数据,而且实盘错误百出,非常难用。现在的电脑内存已近不是原来金字塔系统刚开始开发时的电脑,除保留既往Variable定义的全局变量机制,可以增加《真正的全局变量》完赋值保存机制,而不是借用既往Variable定义的全局变量。
实盘简单的来说,固定轮询机制下,函数EXTGBDATA,EXTGBDATASET、Variable定等控制一根K开一次仓就是问题,而老师们怀疑是策略信号闪烁。经反复观测,无闪烁,照样多开!是时候请老师们反馈全局变量的的问题了!
  

补充内容 (2021-9-3 15:23):
我们理解保证单根K走完的各种机制(包括形成),但对于固定轮询,依赖既往信号的图表、后台,就是bug了。

补充内容 (2021-9-3 15:28):
非常好的金字塔,就一个变量搞坏了!你只得借助数据库!VBA等!简洁实用、可靠应该是软件的最高宗旨。也是用户之期盼!
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2021-9-6 10:11 | 显示全部楼层
“固定轮询机制下,函数EXTGBDATA,EXTGBDATASET、Variable定等控制一根K开一次仓就是问题”
仅在后台模式下 可以使用EXTGBDATA,EXTGBDATASET 来进行单个K 不同下单语句 只开仓一次的需求。并且这个全局变量是绝对只有最新值的,没有历史值。所以这个全局变量是绝对不能用在图表模式上的。


图表上,因为信号闪烁造成的多个语句触发的多次下单,目前是没办法处理的,要么启用持仓同步,要么就是使用走完K模式。Variable 定义的全局变量和后台里使用的EXTGBDATA EXTGBDATASET  这类全局变量是有很大差异的。它的生命周期仅仅是一次公式刷新的周期。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

14

主题

223

帖子

308

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-9-7 15:19 | 显示全部楼层
100018518 发表于 2021-9-3 15:19
说真的,我反复测试函数EXTGBDATA,EXTGBDATASET,既不好呈现历史数据,而且实盘错误百出,非常难用。现在 ...

EXTGBDATA,EXTGBDATASET函数定义的全局变量,是单值全局变量,只有最新的一个值,没有历史记录,只能用在后台程序化
Variable定义的全局变量,可以用在图表程序化上,每根K线上都会有值,像开高低收一样,是一组数列,使用场景:
           每根K线上都是只记录当根K线的最新值(不能记录一根K线上的历史各个状态值)。           详解:以1分钟K线为例,最新价Close在盘中是不断变化的,(1)在开盘的那一刻,最新价Close的值是开盘价,这时候全局变量假设为1;(2)随着行情的变化,假设全局变量变为2;
                  (3)在1分钟K线结束的那一刻,最新价Close的值是收盘价,假设全局变量变为3;
                    那么等到产生新的K线时,Variable定义的全局变量,在本根K线上的值就是3.
其定义的全局变量,应用如下,供您参考。
https://www.weistock.com/bbs/for ... 2058&extra=page%3D1


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

44

主题

142

帖子

142

积分

等级: 免费版

注册:
2021-5-28
曾用名:
发表于 2021-9-24 11:35 | 显示全部楼层
请问,在新版6.20对“仅刷最后一根k线”进行了深度优化处理情况下,
是否EXTGBDATASET函数就可以正常用于图表程序化上?(仅用于监控最新数据,不考虑历史数据)
回复

使用道具 举报

34

主题

9187

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2021-9-24 13:05 | 显示全部楼层
本帖最后由 技术006 于 2021-9-24 13:06 编辑

函数一直以来都没有限制,但是图表不建议使用这类函数。绝大部分用户都会涉及到历史数据,单单输出时没问题。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2021-9-24 13:05 | 显示全部楼层
本帖最后由 技术009 于 2021-9-24 13:09 编辑

后台的函数在图表上使用,会对历史信号产生影响的,通常是非常不建议使用的。所以你使用这个全局变量最好对自己的代码逻辑有充分的把握,否则的话,可能会有意想不到的漏洞。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

30

主题

163

帖子

163

积分

等级: 禁止访问

注册:
2021-6-7
曾用名:
发表于 2021-10-25 10:32 | 显示全部楼层
100018518 发表于 2021-9-3 15:19
说真的,我反复测试函数EXTGBDATA,EXTGBDATASET,既不好呈现历史数据,而且实盘错误百出,非常难用。现在 ...

你好,你是用后台做的实盘下单吗?会有重复开仓?但是客服已经回复可以用EXTGBDATA,EXTGBDATASET在后台控制重复下单呢。
我也是问这个问题,但是我还没做后台,金字塔的Variable确实不行,不是全局变量的功能,只能用在一个K线内,不知道有啥用处,但是图表上是不会闪烁多开的。
回复

使用道具 举报

30

主题

163

帖子

163

积分

等级: 禁止访问

注册:
2021-6-7
曾用名:
发表于 2021-10-25 10:35 | 显示全部楼层
技术007 发表于 2021-9-7 15:19
EXTGBDATA,EXTGBDATASET函数定义的全局变量,是单值全局变量,只有最新的一个值,没有历史记录,只能用 ...

仅刷最后一根k线是什么意思?是不是就是只处理最新K的意思?
请回答一下6楼的问题,我也同问。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 15:12 , Processed in 0.249787 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表