金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 780|回复: 13

开仓限制问题

[复制链接]

11

主题

56

帖子

66

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
发表于 2026-7-7 11:22 | 显示全部楼层 |阅读模式
开仓和加仓都是一样的条件,但是我选择开仓提前3秒钟,所以开仓之后,立马一秒钟之后又触发了加仓,我希望当天要么开新仓,要么第二天在有持仓的情况下,只能加仓,该怎么写?


补充内容 (2026-7-7 11:27):
就是当个交易日只允许开一次仓
回复

使用道具 举报

2

主题

6531

帖子

6531

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-7-7 15:43 | 显示全部楼层
可以用全局变量做标记。无论是加仓还是开仓,执行时候将当日日期写入全局变量。
然后在开仓条件里 追加一个判断当前日期大于全局变量的日期。这样只要今天开仓过,这个日期判定条件都不会满足,就不会重复执行了。
回复

使用道具 举报

11

主题

56

帖子

66

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-7-7 16:36 | 显示全部楼层
资深技术05 发表于 2026-7-7 15:43
可以用全局变量做标记。无论是加仓还是开仓,执行时候将当日日期写入全局变量。
然后在开仓条件里 追加一 ...

能否帮写一个代码示例?谢谢了
回复

使用道具 举报

2

主题

6531

帖子

6531

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-7-7 17:18 | 显示全部楼层
[PEL] 复制代码
con:1;//开仓条件

str:stklabel&'.'&'date';//全局变量字符串名称

//初始开仓
if  con and date>extgbdata(str) and tbuyholdingex('','',2)=0 then 
begin 
tbuy(1,1,mkt);
extgbdataset(str,date);	
end

//加仓
if  con and date>extgbdata(str) and tbuyholdingex('','',1)>0 then 
begin 
tbuy(1,1,mkt);
extgbdataset(str,date);	
end
回复

使用道具 举报

11

主题

56

帖子

66

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-7-8 13:05 | 显示全部楼层
资深技术05 发表于 2026-7-7 17:18
[mw_shl_code=pel,true]
con:1;//开仓条件

这个str:stklabel&'.'&'date';//全局变量字符串名称,strx需要GLOBALVARIABLE:strx:=0;做这个处理吗
回复

使用道具 举报

2

主题

6531

帖子

6531

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-7-8 14:08 | 显示全部楼层
不需要的。就这样是可以的。
回复

使用道具 举报

11

主题

56

帖子

66

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-7-23 16:38 | 显示全部楼层
资深技术05 发表于 2026-7-8 14:08
不需要的。就这样是可以的。

这个限制可以用在后台代码里吗?如果在开仓条件里使用这个,还有另外一个时间计数的条件,abb,abb<1秒,会不会出现别的条件都满足的情况下,不开仓?我现在就遇到这种问题
回复

使用道具 举报

2

主题

6531

帖子

6531

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-7-23 17:20 | 显示全部楼层
abb<1秒  这种条件容易太苛刻了。最好是3-5秒。给一个处理的时间窗口。
回复

使用道具 举报

11

主题

56

帖子

66

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-7-29 14:15 | 显示全部楼层

if  con条件 and date>extgbdata(str) and tbuyholdingex('','',2)=0 then
begin
tbuy(1,1,mkt);
extgbdataset(str,date);
end
这里文件输出的结果显示date和extgbdata(str)是同一个数值,条件不满足,无法开仓

补充内容 (2026-7-29 14:44):
是不是比如我有好几个开仓的IF,三个或者四个,只要其中一个已经开过仓位了,然后其余的开仓IF语句里也有date>extgbdata(str)这个条件,所以这个条件就一直不满足了?
回复

使用道具 举报

2

主题

6531

帖子

6531

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-7-29 16:11 | 显示全部楼层
截图202607291609475892.png

[PEL] 复制代码
now:(date+19000000)*1000000+time;//k的唯一标识
globalvariable:newk:=0;

str_d:=stklabel&'.'&'location';

//初始标记的条件,即满足这个条件 就开始计数
if C>ref(C,40)  then begin

EXTGBDATASET(str_d,now);
end

GET_D:EXTGBDATA(str_d);//读取最开始保存的K日期+时间信息
LEN:BARSLAST(NOW=GET_D);//利用BARSLAST 直接回溯满足条件位置,而不是利用全局变量技术。


可以参考这个调整下你计数的那一套逻辑。 其实不需要过一个K计数一次,只需要记录最开始的那个位置,然后利用函数计算2个位置的跨度就行。  这个逻辑下,即便是你暂停了也不会用任何影响。 持续计数在你暂停时候,如果你暂停了N个K,它其实是少计数了一部分的。 这种只标记最开始那个K的方式是没有这个风险的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-3 16:30 , Processed in 0.161637 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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