金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4094|回复: 7

求解释一下策略展示中“K线走完模式”转换成“固定轮询模式”

[复制链接]

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
发表于 2022-4-7 10:26 | 显示全部楼层 |阅读模式
,“K线走完模式”转换成“固定轮询模式”或者“混合模式”的方法

以便把各个模型放在同一个框架内进行图表程序化交易


举例:
均线交叉模型
运行于图表走完K线模式
[PEL] [color=rgb(51, 102, 153) !important][color=rgb(51, 102, 153) !important]复制代码
[color=rgb(255, 255, 255) !important]
[color=#ffffff !important]?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

runmode:0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;

if holding>0 and ma5<ma20 then sell(1,1,market);
if holding<0 and ma5>ma20 then sellshort(1,1,market);
if holding=0 and ma5>ma20 and entertime then buy(1,1,market);
if holding=0 and ma5<ma20 and entertime then buyshort(1,1,market);

if time>=150000 then begin
  sell(1,1,market);
  sellshort(1,1,market);
end






怎么改动上面的均线交易模型让它在图表固定轮询模式下执行的效果和上部分代码应用在走完K线模式下完全一样

简单的改法,自然是把各个条件“过去化”,如:ma5 改为 ref(ma(c,5),1);但这种方法碰到大型的、复杂的模型时,容易出错

可采用这种方法,把holding用全局变量cc替换,然后加入注释部分代码,注释色部分代码要放在信号语句的前面。


运行于图表固定轮询模式



[PEL] [color=rgb(51, 102, 153) !important][color=rgb(51, 102, 153) !important]复制代码
[color=rgb(255, 255, 255) !important]
[color=#ffffff !important]?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

runmode:0;
variable:cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;

if holding>0 and cc<=0 then sell(1,1,limitr,o);               //注释变化
if holding<0 and cc>=0 then sellshort(1,1,limitr,o);        //注释变化
if holding=0 and cc>0 then buy(1,1,limitr,o);                  //注释变化
if holding=0 and cc<0 then buyshort(1,1,limitr,o);          //注释变化

if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then cc:=1;
if cc=0 and ma5<ma20 and entertime then cc:=-1;
if time>=150000 then begin   cc:=0;




K线走完模式我理解就是本根K完成的时候信号固定了,然后在下根K开仓吧?


这是帖子里的代码,我不理解的是加个CC的控制貌似只是对上一个轮询时候的状态,轮询是1秒的,比如当前,CC=0但是这时候ma5>ma20了,自然CC状态就变成了1,不是在下个轮询
时候就可以满足buy的条件了,也就是还是在当根K线上实现了开仓,而不是下一根K线。为什么说能在轮询模式下能做到和K线走完一个效果?;







补充内容 (2022-4-7 10:29):
不知道为啥,拷贝过来出错了,反正就是论坛里那个教学帖子,我的问题是照道理比如cc当前=0,但是ma5>ma20了,程序本次轮询执行之后cc值应该=1了,等下次轮询的时候如果ma5>m20那么cc=1,就可以触发买入条件了

补充内容 (2022-4-7 10:30):
这样不还是原来的轮询的效果吗,为啥能实现K线走完的效果呢

补充内容 (2022-4-7 10:31):
https://www.weistock.com/bbs/for ... &extra=page%3D1 这个帖子的第一条
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-4-7 10:40 | 显示全部楼层
本帖最后由 技术009 于 2022-4-7 10:46 编辑

这是利用了全局变量特性,它默认会沿用上一个K所记录的值,本质和ref类似的。当你用固定轮训时候,判断到上一个K满足信号 就开仓,和直接在上一个K上走完K,效果是一样的。并且信号也是稳定的。

“本次轮询执行之后cc值应该=1了,等下次轮询的时候如果ma5>m20那么cc=1” 不是这样。在同一个K上 是不记录每次分笔计算的结果的,只会保持最新一次数据的结果。每次分笔来的时候 都是基于上一个K的数据重新进行一次计算。

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

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-4-7 10:51 | 显示全部楼层
技术009 发表于 2022-4-7 10:40
这是利用了全局变量特性,它默认会沿用上一个K所记录的值,本质和ref类似的。当你用固定轮训时候,判断到上 ...

全局变量在未完成的K线上,它刷新吗?只保持最新一次计算结果,那不是最新的来了一个分笔,他程序运行一遍,然后全局变量里的值应该是刷新了的结果吗?
您的意思是,全局变量里的值仍是上一根K结束时候的值吗?
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-4-7 10:57 | 显示全部楼层
技术009 发表于 2022-4-7 10:40
这是利用了全局变量特性,它默认会沿用上一个K所记录的值,本质和ref类似的。当你用固定轮训时候,判断到上 ...

指标加载后,定义语句在第一根K线处初始化为设定值,后面的K线调用此全局变量计算时,调用到的值是上一根K线计算的返回值。当行情更新,指标重新刷新时,那么此变量又会在第一根K线处被定义语句初始化。

查了下定义,这个有些模糊啊,调用的时候是上一根K线计算的返回值;
但是,当行情更新时,那么来了一个分笔,1秒轮询里,算不算行情更新了,指标刷新计算?
究竟什么时候这个指标会重新刷新,全局变量会改变;
更进一步的问题是,在1秒轮询时候,程序会不会刷新计算一遍呢?

补充内容 (2022-4-7 11:00):
我就是不明白,理论上1秒轮询,就算行情更新,策略就会走一遍吧,这个时候里边的各个值应该都要改变一次吧,全局变量也应该改变一次啊
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-4-7 11:08 | 显示全部楼层
本帖最后由 技术009 于 2022-4-7 11:13 编辑

“全局变量在未完成的K线上,它刷新吗?只保持最新一次计算结果,那不是最新的来了一个分笔,他程序运行一遍,然后全局变量里的值应该是刷新了的结果吗?”会更新。但是下一个分笔来了,这个全局变量的值是衔接上一个K的值 重新开始。上一个K是0,这是一个已经固定下来的值了,因为它是历史K,这个时候假设这个最新K满足条件A 加1,满足条件B 减1.  最新行情下满足A,那么值就是1,满足B就是-1. 如果某个分笔下 a,b都不满足,那么全局变量值等于没改变 那就是0.

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

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-4-7 11:09 | 显示全部楼层
“但是,当行情更新时,那么来了一个分笔,1秒轮询里,算不算行情更新了,指标刷新计算?”你不要管轮训,轮训只是信号检测机制,这是在公式运行之后的事情了。图表上 就是按照分笔驱动的,有分笔就在最新K上进行计算。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-4-7 11:57 | 显示全部楼层
技术009 发表于 2022-4-7 11:09
“但是,当行情更新时,那么来了一个分笔,1秒轮询里,算不算行情更新了,指标刷新计算?”你不要管轮训, ...

所以,我想知道,K线没走完的时候来的一笔分笔,是不是公式应该计算一遍的,这次计算全局变量的值不发生变化吗?您的意思是,这次计算CC的初值还是上根K的值,但是经过计算,CC在最新数据下变化的值是没有保存的,导致下次计算的时候它的初值还是上根K的值,我明白了
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-4-7 12:43 | 显示全部楼层
对的,公式肯定会计算一遍。

“这次计算CC的初值还是上根K的值,但是经过计算,CC在最新数据下变化的值是没有保存的,导致下次计算的时候它的初值还是上根K的值,我明白了”
对,就是每次触发了执行公式的时候,在最新K上其实都是从头再来一遍,也就是我前面说的 基于上个K的数据进行计算。  最新K上不能说是不保存,可以这样理解,最新K上始终维持最新的计算结果,比如你某次计算后,后面来了新的分笔,这个新的分笔计算的结果就会替代前面的。如果行情结束了,比如K结束了或者不活跃,这时候你就能看到这个值固定下来了。因为没有新的值替代它了。


就2个点
1.每次计算 执行公式的时候 时候,都是在上个K的数据基础上重新计算。
2.K线图上始终维持最新行情下的计算结果。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-26 07:23 , Processed in 0.150454 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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