金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 810|回复: 11

大佬,帮看一下,股票池,后台程序化开单不了

[复制链接]

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
发表于 2026-2-3 21:51 | 显示全部楼层 |阅读模式
// 修正后的后台程序化交易策略 - 169日均线突破策略
// 参数定义
INPUT:MA_PERIOD(169,10,300,1);       // 均线周期参数
INPUT:MAX_HOLDING(1,1,100,1);        // 最大持仓手数
INPUT:VOLATILITY_THRESH(0.4,0.1,5,0.1); // 价格波动阈值(%)
INPUT:ORDER_TIMEOUT(5,1,60,1);       // 订单超时时间(秒)
INPUT:DELAY_MINUTES(1,1,60,1);       // 交易后冷却时间(分钟)

// 全局变量声明
GLOBALVARIABLE:order_placed:=0;      // 记录是否已下单
GLOBALVARIABLE:order_time:=0;        // 记录下单时间
GLOBALVARIABLE:initial_holding:=0;   // 记录初始持仓
GLOBALVARIABLE:program_active:=1;    // 程序运行标志
GLOBALVARIABLE:last_trade_time:=0;   // 记录最后成交时间
GLOBALVARIABLE:is_delaying:=0;       // 延时状态标志

// 计算169日均线
MA169:MA(CLOSE,MA_PERIOD);

// 安全计算价格波动百分比(使用可回溯的REF函数替代DYNAINFO)
prev_close := REF(CLOSE,1);
price_change_pct := IF(VALID(prev_close), ABS(prev_close-C)/prev_close*100, 0);

// 初始化记录持仓
IF BARPOS=1 THEN initial_holding:=TBUYHOLDINGEX('','',1);

// 交易条件(增加数据有效性验证)
加多条件 : VALID(MA169) AND VALID(prev_close) AND
           CROSS(CLOSE,MA169) AND program_active=1 AND
           price_change_pct <= VOLATILITY_THRESH AND
           NOT(TISREMAIN(1)) AND
           TBUYHOLDINGEX('','',1) < MAX_HOLDING;

// 价格波动过大条件
volatility_too_high := price_change_pct > VOLATILITY_THRESH;

// 下单逻辑(增加时间戳验证)
IF 加多条件 AND order_placed=0 AND TIME>last_trade_time THEN BEGIN
    TBUY(1,MAX_HOLDING,MKT,0,0,'');
    order_placed:=1;
    order_time:=TIMETOT0(TIME);
    initial_holding:=TBUYHOLDINGEX('','',1);
   // DEBUGFILE('D:\TradeLog.txt','[安全模式]开多单 @%.2f 时间:%s',C,NUMTOSTR(TIME,0));
END;

// 其他逻辑保持不变...
// 波动过大警告
IF CROSS(CLOSE,MA169) AND volatility_too_high AND program_active=1 THEN BEGIN
    DRAWTEXT(ISLASTBAR,HIGH,'波动过大放弃交易'),COLORYELLOW;
END;

// 撤单逻辑(超时未成交)
IF order_placed=1 AND (TIMETOT0(TIME)-order_time)>ORDER_TIMEOUT THEN BEGIN
    TCANCEL(1=1,1);  // 撤所有开多未成交单
    order_placed:=0;  // 重置下单标志
    DEBUGFILE('D:\TradeLog.txt','撤单 @%.2f 超时未成交',C);
END;

// 检查持仓变化
IF order_placed=1 AND (TBUYHOLDINGEX('','',1)-initial_holding)>=1 THEN BEGIN
    last_trade_time := TIMETOT0(TIME);  // 记录成交时间
    is_delaying := 1;                   // 进入延时状态
    order_placed:=0;                    // 重置下单标志
    //DEBUGFILE('D:\TradeLog.txt','成交 @%.2f 持仓:%d',C,TBUYHOLDINGEX('','',1));
END;

// 冷却期处理
IF is_delaying=1 THEN BEGIN
    elapsed_seconds := TIMETOT0(TIME) - last_trade_time;

    // 冷却时间到达
    IF elapsed_seconds >= (DELAY_MINUTES*60) THEN BEGIN
        program_active:=0; // 停止程序
        is_delaying := 0;  // 重置延时状态
       // DEBUGFILE('D:\TradeLog.txt','策略冷却完成,停止交易');
    END;
END;

// 可视化
//DRAWKLINE(H,O,L,C);
//DRAWLINE1(MA169,COLORBLUE);
DRAWTEXT(ISLASTBAR AND 加多条件,LOW,'加多信号'),COLORRED;
DRAWTEXT(ISLASTBAR AND program_active=0,HIGH,'程序已停止'),COLORGREEN;
DRAWNUMBER(ISLASTBAR,C,price_change_pct,2),COLORWHITE;

回复

使用道具 举报

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
 楼主| 发表于 2026-2-3 22:03 | 显示全部楼层
公式选择器这里,是可以选择任何公式吗,包括图标程序化,后台程序化,普通公式?
条件,是选择成交的条件还是?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

2

主题

6204

帖子

6204

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-2-4 08:50 | 显示全部楼层
后台程序化中选择公式,你只能选择有后台下单语句的指标公式。

另外后台设置过程中 是没有“条件”这个选项的,它不需要选择所谓的条件,除非你是预警模式,这种模式会以某个条件作为预警条件。
代码中的下单语句在股票池中也是无法下单的,股票池的下单只能利用功能本身。




回复

使用道具 举报

2

主题

6204

帖子

6204

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-2-4 09:03 | 显示全部楼层
关于你前面的代码,明显是AI写 ,只能作为参考。我们通常不直接处理这种AI写的代码,因为本身写的偏离了原始需求情况下,我们无法在有问题的代码里反推出你原始需求的逻辑。建议你给出原始思路的文字描述。如果不是太复杂的情况下,可以给你提供一个样例代码。
回复

使用道具 举报

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
 楼主| 发表于 2026-2-4 10:05 | 显示全部楼层
这个是股票池,过滤后,到了开单池,开多单的条件,比如,c>ma169,开多单,涨幅<0.4*c,5秒内不成功成交撤单,成功交易后延时60秒(为了防止重复交易,c>ma169是会重复交易,要等状态池发生条件后:c>ma169会进入一下个状态池监控)

补充内容 (2026-2-4 10:07):
补充涨幅>0.4*c,暂停交易

补充内容 (2026-2-4 10:08):
c/ref(c,1)*100%,涨幅>0.4*c,暂停交易
回复

使用道具 举报

2

主题

6204

帖子

6204

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-2-4 10:12 | 显示全部楼层
本帖最后由 资深技术05 于 2026-2-4 10:16 编辑

“涨幅<0.4*c” 这个什么意思?涨幅和40%的收盘价 比?这是一个恒满足的条件。

这个“成功交易后延时60秒”指股票池的执行延迟60s?  如果你是担心重复下单 直接用cross而不是大于的逻辑做条件就行了,亦或者股票池中筛选时候判断下持仓,有持仓就视为条件不满足。

你需求描述要准确,否则我们无法处理的。
回复

使用道具 举报

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
 楼主| 发表于 2026-2-4 10:36 | 显示全部楼层
ABS(c-ref(c,1))/c>0.4,停止交易
主要就是这半年来一直都在解决,状态池发出交易后,持仓是有了,但状态池没有该品种,(在交易日记中发现是,比如开多单信号,发生后,状态池进入下一级,此时未成交,信号反转空头,空头反弹到交易点后开了多单,此时持仓多单,但已经进入空头)能否在软件中添加个功能,挂单5秒未成功交易的撤单,或者有个状态池可以监控持仓,是否交易成功··,
回复

使用道具 举报

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
 楼主| 发表于 2026-2-4 10:42 | 显示全部楼层
也弄过一个监控持仓的,但只能在一个时间周期监控··,问题是我弄的有1分钟,5分钟,10分钟,多周期交易等,
回复

使用道具 举报

6

主题

28

帖子

28

积分

Rank: 4

等级: 专业版

注册:
2024-7-16
曾用名:
 楼主| 发表于 2026-2-4 10:44 | 显示全部楼层
上次反馈这个问题,有个技术大佬就建议,股票池选出股票后,可以用后台程序交易开单··,所以就往这方面思考··,
也用上了公式上的AI编程功能,看还是没能实现··
回复

使用道具 举报

2

主题

6204

帖子

6204

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-2-4 10:57 | 显示全部楼层
本帖最后由 资深技术05 于 2026-2-4 10:59 编辑

1.追撤单,软件本身是有功能的。也可以代码实现。

参考这里:https://www.weistock.com/docs/HE ... D%E6%92%A4%E5%8D%95

2.股票池里的问题,只能在股票池条件上操作,在后台代码中操作是不行的。这是2个领域的事了。 你的下一级筛选条件,你可以这样做:额外判断下开仓未成交 。比如说我这个品种我有开仓未成交,那我就让他不满足进入下一级的状态池的条件。这样就可以避免你上面说的开多未成交期间,品种进入了空头池子的情况。可以利用TGLOBALSUBMITEX 读取开仓未成交, 给股票池的筛选条件追加条件就行了。


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 00:33 , Processed in 0.163954 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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