金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3141|回复: 11

求教哪里出现编程错误

[复制链接]

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
发表于 2023-4-27 11:06 | 显示全部楼层 |阅读模式
以下程序能运行,但结果和预期不符
RUNMODE:0;
if BARPOS()=1
then
       JYFX:=-1;
  ELSE
      JYFX:=JYFX[BARPOS-1];
len1:BARSLAST(jyfx=-1)
HP1:=HHV(H,BARSLAST(jyfx=-1));
LP1:LLV(L,BARSLAST(jyfx=1 orbarpos=1)),NODRAW;
HEI1:=H*0.1;
IF JYFX[BARPOS-1]=1 AND(HP1-L)>HEI1    THEN
   JYFX:=-1;
IF JYFX[BARPOS-1]=-1 AND (H-LP1)>HEI1THEN
  JYFX:=1;   
len3:BARSLAST(jyfx=-1)

回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 11:07 | 显示全部楼层
JYFX两个值,1 或-1
其中2个条件句可能在同一个周期改变JYFX的值
IF JYFX[BARPOS-1]=1 AND (HP1-L)>HEI1    THEN
    JYFX:=-1;
IF JYFX[BARPOS-1]=-1 AND (H-LP1)>HEI1 THEN
   JYFX:=1;   

这里设置了2个变量跟踪jyfx的两个值的持续状态
len1:BARSLAST(jyfx=-1);
len3:BARSLAST(jyfx=-1);
回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 11:08 | 显示全部楼层
假设T-1周期,JYFX=-1
如果在T周期if语句成立JYFX=-1执行,LEN3会从0变成1,之后递增
周期 t-1    t    t+1  ….
LEN3  0   1     2     ….
以上部分和我预期相同

按照我的预计,JYFX,len1 会这样变化
T 周期Len1在T周期赋值时候,
周期t-1    t
JYFX  0    0
T+1 周期,Len1在T周期赋值时候,(T周期执行条件语句改变JYFX)
周期t-1    t  t=1
JYFX  0    1   1

Len1在T周期赋值保持0,运行到了t+1周期,
周期 t-1    t    t+1  ….
LEN1  0     0    2     ….

然而结果出乎意外,
周期 t-1    t    t+1  ….
LEN1  0     0    1     ….
回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 11:12 | 显示全部楼层
当LEN3从0变1,len1保持0.我理解是JYFX的值变化。
到了T+1周期,LEN1和LEN3赋值的时候JYFX这个序列的值已经相同了,怎么会结果不同
回复

使用道具 举报

37

主题

9975

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-27 14:15 | 显示全部楼层
我爱波浪 发表于 2023-4-27 11:12
当LEN3从0变1,len1保持0.我理解是JYFX的值变化。
到了T+1周期,LEN1和LEN3赋值的时候JYFX这个序列的值已 ...

你的理解没有问题,但是这个显示是,pel对序列变量的底层处理造成的差异。序列变量的结果本质上是k线与k线之间时切片形式。
例如:
在第10根k上len1所在的位置上是-1,之后尾部条件成立,那么jyfx赋值为1.此时len3计算结果是第九根k到当前位置的数量。即=1
(假设判断条件不在成立)当到第11根k上时,在len1位置得到的jyfx的结果才首次变成1.那么在这个位置时,获取上跟k(第10根k对应位置的结果,还是-1)。所以才产生为什么不是上上根到现在的位置。

可以在语句中的【len1前面输出jyfx的值】和尾部增加输出jyfx的值。更有助于观察差异



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

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 15:34 | 显示全部楼层
那就是说,JYFX这个变量在第10天的LEN1赋值语句前是-1
len1:BARSLAST(jyfx=-1);

在len3:BARSLAST(jyfx=-1);语句前JYFX变成了1

那么到了第11天执行len1:BARSLAST(jyfx=-1);JYFXA是取第10天,甚至更早天程序运行道这个位置上的值,必须是这个位置。,
第10天这个位置是-1(尽管之后IF语句执行变成了1)
我理解正确吗
回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 15:36 | 显示全部楼层
那么到了第11天,LEN1和len3执行同样的序列JYFX,由于位置不同,序列值并不同
回复

使用道具 举报

37

主题

9975

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-27 15:46 | 显示全部楼层
本帖最后由 技术006 于 2023-4-27 16:00 编辑
我爱波浪 发表于 2023-4-27 15:34
那就是说,JYFX这个变量在第10天的LEN1赋值语句前是-1
len1:BARSLAST(jyfx=-1);

理解基本正确。其实就是代码所在位置,造成的差异。或者可以这么理解数组len1[....,-1,1,.....],len3[.....],取值时,类似于与各取各的数组。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 16:25 | 显示全部楼层
我增加了3个变量tmp1,tmp2,tmp3,分别代表jyfx[BARPOS-2],jyfx[BARPOS-1],jyfx[BARPOS],输出放在LEN1前追踪,但结果是到了第10天LEN3=1,LEN1=0,第11天TMP1=-1,TMP2=1,,,TMP3 =1,

以下为程序
RUNMODE:0;
if BARPOS()=1
  then
        JYFX:=-1;
   ELSE
       JYFX:=JYFX[BARPOS-1];
tmp1:jyfx[BARPOS-2],NODRAW;

tmp2:jyfx[BARPOS-1],NODRAW;
tmp3:jyfx,NODRAW;
len1:BARSLAST(JYFX=-1);
HP1:=HHV(H,BARSLAST(jyfx=-1));

LP1:LLV(L,BARSLAST(jyfx=1 or barpos=1)),NODRAW;

HEI1:=H*0.1;

IF JYFX[BARPOS-1]=1 AND (HP1-L)>HEI1    THEN
    JYFX:=-1;
IF JYFX[BARPOS-1]=-1 AND (H-LP1)>HEI1 THEN
   JYFX:=1;   

len3:BARSLAST(JYFX=-1);
回复

使用道具 举报

41

主题

111

帖子

111

积分

等级: 免费版

注册:
2021-8-12
曾用名:
 楼主| 发表于 2023-4-27 16:26 | 显示全部楼层
第11天LEN1=1和TMP1,2,3的输出似乎矛盾
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 14:40 , Processed in 0.131638 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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