金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3903|回复: 5

全局变量控制加仓问题

[复制链接]

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2021-9-9
曾用名:
发表于 2021-12-6 01:24 | 显示全部楼层 |阅读模式
我想要开多后只加一次仓,中途减仓后也不再加仓,空头反过来也一样,代码写得哪里不对吗,不是我要的结果,版主帮忙看一下
代码如下
variable:JC=0;//
C1:=C;
MA5:ma(c1,5);
MA10:ma(c1,10);
KD:=MA5>MA10;          //开多条件
KK:=MA5<MA10;         //平多条件
PD:=MA5<MA10;
PK:=MA5>MA10;



IF HOLDING<0 AND L<=ENTERPRICE-12 THEN BEGIN
减空:SELLSHORT(1,1,LIMITR,ENTERPRICE-12);
JC:=0;
END

IF HOLDING>0 AND H>=ENTERPRICE+12 THEN BEGIN
减多:SELL(1,1,LIMITR,ENTERPRICE+12);
JC:=0;
END


IF PD THEN BEGIN
平多:SELL(PD,0,LIMITR,C);
JC:=0;
END

IF PK THEN BEGIN
平空:SELLSHORT(PK,0,LIMITR,C);
JC:=0;
END

IF JC=0 AND KK THEN BEGIN                      //平多信号
开空:BUYSHORT( HOLDING=0,1,LIMITR,C);
JC:=-1;
END
IF JC=0 AND KD THEN BEGIN
开多:BUY(HOLDING=0,1,LIMITR,C);          //开多信号
JC:=1;
END

//加仓
IF JC=-1 AND HOLDING<0 AND L<=ENTERPRICE-10 THEN BEGIN                      //平多信号
加空:BUYSHORT( 1,1,LIMITR,ENTERPRICE-10);
JC:=0;
END
IF JC=1 AND HOLDING>0 AND H>=ENTERPRICE+10 THEN BEGIN
加多:BUY(1,1,LIMITR,ENTERPRICE+10);          //开多信号
JC:=0;
END
111.png
回复

使用道具 举报

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2021-12-6 08:35 | 显示全部楼层
本帖最后由 技术006 于 2021-12-6 08:40 编辑

是因为你全局变量没有控制每个状态。同时记录的状态也有笔误的地方
[PEL] 复制代码
variable:JC=0;//
C1:=C;
MA5:ma(c1,5);
MA10:ma(c1,10);
KD:=MA5>MA10;          //开多条件
KK:=MA5<MA10;         //平多条件
PD:=MA5<MA10;
PK:=MA5>MA10;


//减仓动作,应该是在加仓动作之后,所以,需要使用jc=2或者-2作为条件之一。
IF HOLDING<0 AND L<=ENTERPRICE-12 and JC=-2 THEN BEGIN
减空:SELLSHORT(1,1,LIMITR,ENTERPRICE-12);//此处如果没有相关联的动作状态,不需要改变全局变量的结果
END

IF HOLDING>0 AND H>=ENTERPRICE+12 and JC=2 THEN BEGIN
减多:SELL(1,1,LIMITR,ENTERPRICE+12);
//此处如果没有相关联的动作状态,不需要改变全局变量的结果
END


IF PD THEN BEGIN
平多:SELL(PD,0,LIMITR,C);
JC:=0;
END

IF PK THEN BEGIN
平空:SELLSHORT(PK,0,LIMITR,C);
JC:=0;
END
//开仓处使用全局变量作为条件锁,只有空仓变开仓时,才执行。
IF JC=0 AND KK and HOLDING=0 and JC=0  THEN BEGIN                      //平多信号
开空:BUYSHORT( 1,1,LIMITR,C);
JC:=-1;
END

//开仓处使用全局变量作为条件锁,只有空仓变开仓时,才执行。
IF JC=0 AND KD  and HOLDING=0 and JC=0 THEN BEGIN
开多:BUY(1,1,LIMITR,C);          //开多信号
JC:=1;
END

//加仓 
IF JC=-1 AND HOLDING<0 AND L<=ENTERPRICE-10 THEN BEGIN                      //平多信号
加空:BUYSHORT( 1,1,LIMITR,ENTERPRICE-10);
JC:=-2;
END
IF JC=1 AND HOLDING>0 AND H>=ENTERPRICE+10 THEN BEGIN
加多:BUY(1,1,LIMITR,ENTERPRICE+10);          //开多信号
JC:=2;//此处你应该是存在笔误
END

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

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2021-9-9
曾用名:
 楼主| 发表于 2021-12-6 12:12 | 显示全部楼层
版主,还是不行啊,我复制了你的代码,没有加仓和减仓动作,麻烦帮忙改一下,谢谢
222.png
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2021-12-6 12:53 | 显示全部楼层
有加仓的
截图202112061251501504.png

但是我觉得应该把2个加仓的放到前面,否则可能导致开仓和加仓同时触发。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2021-9-9
曾用名:
 楼主| 发表于 2021-12-6 14:55 | 显示全部楼层
放在股指上为什么不行呢
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2021-12-6 15:08 | 显示全部楼层
[PEL] 复制代码
variable:JC=0;//
C1:=C;
MA5:ma(c1,5);
MA10:ma(c1,10);
KD:=MA5>MA10;          //开多条件
KK:=MA5<MA10;         //平多条件
PD:=MA5<MA10;
PK:=MA5>MA10;
 
 
//加仓 
IF JC=-1 AND HOLDING<0 AND L<=ENTERPRICE-10 THEN BEGIN                      //平多信号
加空:BUYSHORT( 1,1,LIMITR,ENTERPRICE-10);
JC:=-2;
END
IF JC=1 AND HOLDING>0 AND H>=ENTERPRICE+10 THEN BEGIN
加多:BUY(1,1,LIMITR,ENTERPRICE+10);          //开多信号
JC:=2;//此处你应该是存在笔误
END 

 
//减仓动作,应该是在加仓动作之后,所以,需要使用jc=2或者-2作为条件之一。
IF HOLDING<0 AND L<=ENTERPRICE-12 and JC=-2 THEN BEGIN
减空:SELLSHORT(1,1,LIMITR,ENTERPRICE-12);
if holding=0 then jc:=0;//由于减仓每次是一手,所以需要判断持仓来重置全局变量
END
 
 //DRAWICON(HOLDING>0 AND H>=ENTERPRICE+12 and JC=2,H,1);
IF HOLDING>0 AND H>=ENTERPRICE+12 and JC=2 THEN BEGIN
减多:SELL(1,1,LIMITR,ENTERPRICE+12);
if holding=0 then jc:=0;
END
 

IF PD AND HOLDING>0 THEN BEGIN
平多:SELL(PD,0,LIMITR,C);
JC:=0;
END
 
IF PK AND HOLDING<0 THEN BEGIN
平空:SELLSHORT(PK,0,LIMITR,C);
JC:=0;
END
//开仓处使用全局变量作为条件锁,只有空仓变开仓时,才执行。
IF JC=0 AND KK and HOLDING=0 and JC=0  THEN BEGIN                      //平多信号
开空:BUYSHORT( 1,1,LIMITR,C);
JC:=-1;
END
 
//开仓处使用全局变量作为条件锁,只有空仓变开仓时,才执行。
IF JC=0 AND KD  and HOLDING=0 and JC=0 THEN BEGIN
开多:BUY(1,1,LIMITR,C);          //开多信号
JC:=1;
END
 
HD:HOLDING;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 18:51 , Processed in 0.242859 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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