金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 105190

请问可否对账户动态权益做一个实时的动态权益风控?

[复制链接]

48

主题

233

帖子

233

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2025-9-16 10:16 | 显示全部楼层
admin 发表于 2025-9-15 14:07
你把测试代码贴出来给我看下。
或者通过debugfile函数跟踪下你本地执行的逻辑,本地验证不到这个现象。
d ...

我把您给的代码多空分开写之后,又出现权益不断变动,估计又是全局变量的冲突了,要怎么改呢?
这是空头的止损
as:=extgbdata(taccount( 1));//记录资产的全局变量
dt:=extgbdata(taccount( 1)+'_date');//记录数据更新日期的全局变量
isclear2:=extgbdata(taccount( 1)+'_isclear2');//标记是否应该清仓的全局变量

if tholdcount('')=0 then //如果没有持仓了,清空掉之前的数据
begin
extgbdataset(taccount( 1),0);         
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
extgbdataset(taccount( 1)+'_isclear2',0); //隔日后清仓标记也重置掉
end

//更新到最新日期的数据,用来处理隔日的问题
if date>dt  and  tholdcount('')>0  then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期        
extgbdataset(taccount( 1)+'_isclear2',0); //隔日后清仓标记也重置掉
end

//始终记录最大的动态权益
if tholdcount('')>0 and  taccount( 6)>as and isclear2=0 then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
end

as:=extgbdata(taccount( 1));

//回撤逻辑在这里调整即可
if as-taccount( 6)>5000*N and tholdcount('')>0 and isclear2=0 AND TSELLHOLDINGEX('','',2)>0 then
begin
extgbdataset(taccount( 1)+'_isclear2',1);
tcancelex(1,4,'',stklabel);//先撤单   
end

isclear2:=extgbdata(taccount( 1)+'_isclear2');//标记是否应该清仓的全局变量

if  isclear2 and TSELLHOLDINGEX('','',1)>0  then TSELLSHORT(1,0,mkt);//每次只能平当前品种,所以必须监控账户栏实际持仓才能全平


这是多头的止损

as1:=extgbdata(taccount( 1));//记录资产的全局变量
dt:=extgbdata(taccount( 1)+'_date');//记录数据更新日期的全局变量
isclear:=extgbdata(taccount( 1)+'_isclear');//标记是否应该清仓的全局变量

if tholdcount('')=0 then //如果没有持仓了,清空掉之前的数据
begin
extgbdataset(taccount( 1),0);         
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
extgbdataset(taccount( 1)+'_isclear',0); //隔日后清仓标记也重置掉
end

//更新到最新日期的数据,用来处理隔日的问题
if date>dt  and  tholdcount('')>0  then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期        
extgbdataset(taccount( 1)+'_isclear',0); //隔日后清仓标记也重置掉
end

//始终记录最大的动态权益
if tholdcount('')>0 and  taccount( 6)>as1 and isclear=0 then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
end

as1:=extgbdata(taccount( 1));
//回撤逻辑在这里调整即可
if as1-taccount( 6)>5000*N and tholdcount('')>0 and isclear=0 AND tbuyholdingex('','',2)>0 then
begin
extgbdataset(taccount( 1)+'_isclear',1);
tcancelex(1,2,'',stklabel);//先撤单   
end

isclear:=extgbdata(taccount( 1)+'_isclear');//标记是否应该清仓的全局变量

if  isclear and tbuyholdingex('','',1)>0  then tsell(1,0,mkt);//每次只能平当前品种,所以必须监控账户栏实际持仓才能全平


补充内容 (2025-9-16 10:18):
我改了AS名称没有用,可能是taccount( 1)这个赋值一边持仓一边没有持仓导致的冲突
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-9-16 10:35 | 显示全部楼层
as:=extgbdata(taccount( 1));//记录资产的全局变量


你指的是这个全局变量不断变动??这个不会一边尺寸一边不持仓的。你是单账户吧,从代码看赋值语句除非持仓都等于0了会初始化
否者都是更新taccount( 6)的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

48

主题

233

帖子

233

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2025-9-16 10:38 | 显示全部楼层
资深技术02 发表于 2025-9-16 10:35
as:=extgbdata(taccount( 1));//记录资产的全局变量

是单账户,可以直接帮我改下吗?数值的一直变动会导致我的止损失效
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-9-16 10:41 | 显示全部楼层
你指的变动是社么意思,不是一直增大,会有变小的情况出现?
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

48

主题

233

帖子

233

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2025-9-16 10:47 | 显示全部楼层
资深技术02 发表于 2025-9-16 10:41
你指的变动是社么意思,不是一直增大,会有变小的情况出现?

是的,昨天您同事有帮我测试他给的2楼模板的有效性,但是我多空策略是分开写的,这下就产生了全局变量的冲突了
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-9-16 10:55 | 显示全部楼层
一直是有持仓的状态??如果空仓全局变量会清零的

有持仓情况下全局变量赋值只有下面两种情况//更新到最新日期的数据,用来处理隔日的问题
if date>dt  and  tholdcount('')>0  then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期        
extgbdataset(taccount( 1)+'_isclear',0); //隔日后清仓标记也重置掉
end

//始终记录最大的动态权益
if tholdcount('')>0 and  taccount( 6)>as1 and isclear=0 then
begin
extgbdataset(taccount( 1),taccount( 6));
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

889

帖子

930

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-9-16 11:04 | 显示全部楼层
105190 发表于 2025-9-16 10:16
我把您给的代码多空分开写之后,又出现权益不断变动,估计又是全局变量的冲突了,要怎么改呢?
这是空头 ...

您区分处理的处理的目的是什么?具体需要达到什么样的结果。

对于你的这部分代码而言,本身不需要区分多空方向。因为处理逻辑是基于账号总资金的的权益变化。
回复

使用道具 举报

48

主题

233

帖子

233

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2025-9-16 11:15 | 显示全部楼层
admin 发表于 2025-9-16 11:04
您区分处理的处理的目的是什么?具体需要达到什么样的结果。

对于你的这部分代码而言,本身不需要区分 ...

我把多头策略空头策略分开的目的是,趋势行情只开其中一个策略,震荡有时候两个都开,所以两个代码里面都要写入风控的模块才行,但是这样就会导致多空不同时持仓时的冲突了
回复

使用道具 举报

3

主题

889

帖子

930

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-9-16 12:12 | 显示全部楼层
我梳理下,然后回复你。
回复

使用道具 举报

3

主题

889

帖子

930

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-9-16 15:13 | 显示全部楼层
单独运行上面的代码,单独执行也没有你说的现象存在。除非你本地的修改后的策略存在逻辑错误。(建议你完整排查自己本地策略中牵扯到extgbdataset函数处理的部分呢)

注:针对账户权益的代码,本身不需要区分多空方向。直接独立成一个策略进行运行即可。也有利于策略管理。
下面是增加带日志以及合并处理的逻辑,建议你参照测试后使用。

[PEL] 复制代码
as1:=extgbdata(taccount( 1));//记录资产的全局变量
dt:=extgbdata(taccount( 1)+'_date');//记录数据更新日期的全局变量
isclear:=extgbdata(taccount( 1)+'_isclear');//标记是否应该清仓的全局变量

if tholdcount('')=0 then //如果没有持仓了,清空掉之前的数据
begin
extgbdataset(taccount( 1),0);
DEBUGFILE('D:\bbb.TXT','位置1='& NUMTOSTR(extgbdata(taccount( 1)),2),1);           
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
extgbdataset(taccount( 1)+'_isclear',0); //隔日后清仓标记也重置掉
end

//更新到最新日期的数据,用来处理隔日的问题
if date>dt  and  tholdcount('')>0  then
begin
extgbdataset(taccount( 1),taccount( 6));
DEBUGFILE('D:\bbb.TXT','位置2='& NUMTOSTR(extgbdata(taccount( 1)),2),1);  
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期        
extgbdataset(taccount( 1)+'_isclear',0); //隔日后清仓标记也重置掉
end

//始终记录最大的动态权益
if tholdcount('')>0 and  taccount( 6)>as1 and isclear=0 then
begin
extgbdataset(taccount( 1),taccount( 6));
DEBUGFILE('D:\bbb.TXT','位置3='& NUMTOSTR(extgbdata(taccount( 1)),2),1);  
extgbdataset(taccount( 1)+'_date',date);//记录数据更新的日期
end

as1:=extgbdata(taccount( 1));
//回撤逻辑在这里调整即可
if as1-taccount( 6)>5000 and tholdcount('')>0 and isclear=0 then
begin
extgbdataset(taccount( 1)+'_isclear',1);
DEBUGFILE('D:\bbb.TXT','位置4='& NUMTOSTR(extgbdata(taccount( 1)),2),1);  
tcancelex(1,2,'',stklabel);//撤空单
tcancelex(1,4,'',stklabel);//撤多单  
end

isclear:=extgbdata(taccount( 1)+'_isclear');//标记是否应该清仓的全局变量

DEBUGFILE('D:\bbb.TXT','位置5='& NUMTOSTR(extgbdata(taccount( 1)),2),1);  
if  isclear   then 
begin
	tsell(tbuyholdingex('','',1)>0,0,mkt);//每次只能平当前品种,所以必须监控账户栏实际持仓才能全平
	TSELLSHORT(TSELLHOLDINGEX('','',1),0,mkt);
end

DEBUGFILE('D:\bbb.TXT','-----------------------------',1);  






回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 14:33 , Processed in 0.122845 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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