金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4106|回复: 5

老师请帮忙我无法取得60分钟周期的K/D值

[复制链接]

17

主题

49

帖子

49

积分

Rank: 1

等级: 新手上路

注册:
2021-10-30
曾用名:
发表于 2022-10-20 23:00 | 显示全部楼层 |阅读模式
老师你好我在继续编写STKINDI的程序策略遇到了问题,如下:

条件程序我定义如下:名称是----空ptah1条件
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;


主交易策略程序如下:-----问题出现在止盈阶段
MID:  MA(CLOSE,26);//布林中轨

DIFF : EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  : EMA(DIFF,9);
MACD1 : 2*(DIFF-DEA), COLORSTICK;

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;


60K值:STKINDI('','空ptah1条件.k',0,5,-1);//取得上一根60分钟k线结束后的K值
60d值:STKINDI('','空ptah1条件.d',0,5,-1);//取得上一根60分钟k线结束后的d值


开空条件1:cross(dea,diff);
if 开空条件1  and holding=0 then

BEGIN
        buyshort(1,1,MARKETR);

END

if 60K值>60d值  and engterprice-close>20 and holding<0 then sellshort(1,holding,MARKETR);//如果前一根60分钟的K大于d值,利润小点

if 60K值<60d值  and engterprice-close>40 and holding<0 then sellshort(1,holding,MARKETR);//如果前一根60分钟的K小于d值,利润大点

结果屏幕上显示60分钟K,d值都是0,请看附件。请老师帮我看看哪里问题帮我改写下。谢谢老师。




60分KD值为0.jpg
回复

使用道具 举报

17

主题

49

帖子

49

积分

Rank: 1

等级: 新手上路

注册:
2021-10-30
曾用名:
 楼主| 发表于 2022-10-20 23:01 | 显示全部楼层
有点匆忙老师我上面enterprice写错了,请忽略,抱歉。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-10-21 08:38 | 显示全部楼层
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:3*K-2*D;

改下定义的方式。其次检测下被调用的周期是否缺数据。这2处处理下应该就有数据了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

17

主题

49

帖子

49

积分

Rank: 1

等级: 新手上路

注册:
2021-10-30
曾用名:
 楼主| 发表于 2022-10-21 10:38 | 显示全部楼层
技术009 发表于 2022-10-21 08:38
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:3*K-2*D;

好的谢谢老师。另外请问下,因为我是做日内,我希望在每天晚上22:58分的时候平仓所有(如果有持仓的话),22:58分之后不再开仓(哪怕有开仓信号也不会自动开仓,直到下一阶段也就是次日早上开盘后再继续),以及每天白天早上11:28分及14:58分都平仓(如果有持仓的话,之后几分钟不再开仓哪怕有开仓信号,直到下一阶段开盘后再继续)
请老师帮我写一句用时间控制平仓及后两分钟都不再开仓的语句。谢谢!
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-10-21 10:43 | 显示全部楼层
[PEL] 复制代码
INPUT:N(3,1,200,1);//N是提前的分钟数
MARK:=0;//用于记录当前是否满足某个收盘K结束前N分钟的变量
 
FOR I=0 TO 3 DO  //循环遍历每个收盘时间来进行判断。这里可以调整I起始位置 来控制需要处理的收盘节点。
BEGIN
abb:=timetot0(CLOSETIME(I))-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时,在一个K上对应一个固定值
abb3:=timetot0(CLOSETIME(I))-timetot0(dynainfo(207)),NODRAW;//当前时间(当前的北京时间)距离收盘K时间 ,   在最新K上会一直变动。因为这个返回的是具体秒数
IF     (abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and  abb3>=0 and abb3<N*60) THEN MARK:=1;
END
 
 
if MARK  then //兼顾实际交易时候的信号和历史回测信号
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);        
DRAWICON(1,h,1); 
end



你原始代码里开仓条件 再加一个判断 mark=0. 这样就行了。
另外涉及到使用 ISLASTBAR   仅刷最后一根K 勾选去掉比较合适。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

17

主题

49

帖子

49

积分

Rank: 1

等级: 新手上路

注册:
2021-10-30
曾用名:
 楼主| 发表于 2022-10-21 10:44 | 显示全部楼层
大树 发表于 2022-10-21 10:38
好的谢谢老师。另外请问下,因为我是做日内,我希望在每天晚上22:58分的时候平仓所有(如果有持仓的话) ...

不用了,谢谢老师,我自己做出来了,谢谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 19:24 , Processed in 0.156198 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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