金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 409|回复: 14

求助老师,用这个指标实现后台自动交易股票 感谢

[复制链接]

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
发表于 2025-7-28 10:50 | 显示全部楼层 |阅读模式
各位老师,想请问一下是不是公式编写的不对。第一次用pel编后台程序,目前编译正确但无法运行、且回测后所有数据都为0,我推测是不是有些函数的使用不恰当,比如我不太了解使用了DYNAINFO2()函数是不是就不能回测了;还是我的程序化条件没有设置好呢?
这是我比较核心想实现的动态调整:

//etf动态买卖的四个条件
//情况1:卖1量 < 买1量50% → 撤卖单并改卖2价
//情况2:卖1量 > 买1量 → 撤卖单改卖1价
//情况3:买1量 < 卖1量50% → 撤买单并改买2价
//情况4:买1量 > 卖1量 → 撤买单改买1价
非常希望老师可以指点,谢谢各位老师!

RUNMODE:1;
WARNING_DISABLE:9;  // avoid WARNING

// 参数设置
TARGET:"513330";
init_capital:=1000000;
VARIABLE: LastBuyPrice = 0, LastSellPrice = 0;

//数据标识
{BUY1:=DYNAINFO2(28,TARGET);
BUY1_VOL:=DYNAINFO2(29,TARGET);
BUY2:=DYNAINFO2(30,TARGET);
SELL1:=DYNAINFO2(34,TARGET);
SELL1_VOL:= DYNAINFO2(35,TARGET);
SELL2:=DYNAINFO2(32,TARGET);// NO USE since the price keeps changing.}

//可用资金,每次买入时用一半的可用资金
avail_cash:TACCOUNT2(19,"18059801029");
buy_vol:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(28,TARGET));//NO NEED to execute.


//当目前无买入委托时买1价开仓
Bcount:= TSUBMITID(1, '', '', 2, 1);// N=1(开多), S=2(未成交笔数), T=1(当前策略)
Bexist:= Bcount=0;    //若买入委托=0则输出1,否则为0
IF THOLDING=0 AND Bexist AND TIME<144500 THEN BEGIN
        TBUY(1,BUY_VOL,LMT,DYNAINFO2(28,TARGET));
        LastBuyPrice := DYNAINFO2(28, TARGET);
        DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=初始买' & '价格='&numtostr(LastBuyPrice,2)&''
                        & '委托量='&numtostr(BUY_VOL,0)&']',0);
END

//目前无卖出委托时卖1价平仓
Ccount:= TSUBMITID(2, '', '', 2, 1);  // N=2(平多), S=2(未成交笔数), T=1(当前策略)
Cexist:= CCOUNT=0;    //若卖出委托=0则输出1,否则为0
IF THOLDING > 0 AND Cexist AND TIME < 145900 THEN BEGIN
        TSELL(1 ,THOLDING, LMT, DYNAINFO2(34,TARGET));// NEED TO REWRITE. Logic is wrong here.
    LastSellPrice := DYNAINFO2(34, TARGET);
    DEBUGFILE('d:\trade.log',  '[时间='&NUMTOSTR(TIME,0)&' 类型=初始卖'& ' 价格='&NUMTOSTR(LastSellPrice,2)&
        ' 委托量='&NUMTOSTR(THOLDING,0)&']',0);
END

//动态买卖的四个条件
//情况1:卖1量 < 买1量50% → 撤卖单并改卖2价
//情况2:卖1量 > 买1量 → 撤卖单改卖1价
//情况3:买1量 < 卖1量50% → 撤买单并改买2价
//情况4:买1量 > 卖1量 → 撤买单改买1价
COND1:= DYNAINFO2(35,TARGET) < DYNAINFO2(29, TARGET)*0.5;
COND2:= DYNAINFO2(35,TARGET) > DYNAINFO2(29, TARGET);
COND3:= DYNAINFO2(29,TARGET) < DYNAINFO2(35, TARGET)*0.5;
COND4:= DYNAINFO2(29,TARGET) > DYNAINFO2(35, TARGET);

IF COND1 AND LastSellPrice !=DYNAINFO2(32,TARGET) AND TIME <145900 THEN BEGIN
     IF  TCANCEL(THOLDING>0,0) = 0 THEN BEGIN
                DEBUGFILE('d:\error.log', '时间=%t 撤卖单失败',TIME);
    END
    ELSE IF 1 THEN BEGIN
            TCANCEL(THOLDING>0,0);
        TSELL(THOLDING>0, THOLDING, LMT, DYNAINFO2(32,TARGET));
            LastSellPrice := DYNAINFO2(32, TARGET);
                //日志记录
                DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=卖调' & '原价='&numtostr(REF(LastSellPrice,1),2)&''
                         & '新价='&numtostr(LastSellPrice,2)&''  & '委托量='&numtostr(THOLDING,0)&']',0);
    END
END
ELSE IF COND2 AND LastSellPrice !=DYNAINFO2(34,TARGET) AND TIME <145900 THEN BEGIN
        IF  TCANCEL(THOLDING>0,0) = 0 THEN BEGIN
                DEBUGFILE('d:\error.log', '时间=%t 撤卖单失败',TIME);
    END
    ELSE IF 1 THEN BEGIN
                TCANCEL(THOLDING>0,0);
                TSELL(THOLDING>0, THOLDING, LMT, DYNAINFO2(34,TARGET));
                LastSellPrice := DYNAINFO2(34, TARGET);
                //日志记录
                DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=卖调' & '原价='&numtostr(REF(LastSellPrice,1),2)&''
                         & '新价='&numtostr(LastSellPrice,2)&''  & '委托量='&numtostr(THOLDING,0)&']',0);
    END
END
       

IF COND3 AND LastBuyPrice !=DYNAINFO2(30,TARGET) AND TIME<144500 THEN BEGIN
        IF TCANCEL(1,1)=0 THEN BEGIN
                DEBUGFILE('d:\error.log', '时间=%t 撤买单失败',TIME);
    END
    ELSE IF 1 THEN BEGIN
            TCANCEL(1,1);
                AVAIL_CASH:=TACCOUNT2(19,"18059801029");
                BUY_VOL:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(30,TARGET));
                TBUY(1,BUY_VOL, LMT, DYNAINFO2(30,TARGET));
                LastBuyPrice := DYNAINFO2(30, TARGET);
                //日志记录
                DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=买调' & '原价='&numtostr( REF(LastBuyPrice,1),2)&''
                         & '新价='&numtostr(LastBuyPrice,2)&''  & '新委托量='&numtostr(BUY_VOL,0)&']',0);
        END
END                       
ELSE IF COND4 AND LastBuyPrice !=DYNAINFO2(28,TARGET) AND TIME<144500 THEN BEGIN
        IF TIME >=144500 THEN BEGIN
                TCANCEL(1,1);
        END
        IF TCANCEL(1,1)=0 THEN BEGIN
                DEBUGFILE('d:\error.log', '时间=%t 撤买单失败',TIME);
    END
    ELSE IF 1 THEN BEGIN
                TCANCEL(1,1);
                AVAIL_CASH:=TACCOUNT2(19,"18059801029");
                BUY_VOL:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(28,TARGET));
                TBUY(1,BUY_VOL, LMT, DYNAINFO2(28,TARGET));
                LastBuyPrice := DYNAINFO2(28, TARGET);
                //日志记录
                DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=买调' & '原价='&numtostr( REF(LastBuyPrice,1),2)&''
                         & '新价='&numtostr(LastBuyPrice,2)&''  & '新委托量='&numtostr(BUY_VOL,0)&']',0);
          END       
END
ELSE IF TIME>=144500 THEN BEGIN
                TCANCEL(1,1);
END

//尾盘自动清仓
IF TIME > 145900 THEN BEGIN
    TCANCEL(1,0);
    TSELL(1, THOLDING, MKT);
END

回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-7-28 10:55 | 显示全部楼层
dy这些动态行情函数都是最有最新值没有历史值的所以都是没办法回测的

你可以模拟交易时候通过实际运行去看结果

本帖子中包含更多资源

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

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

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
 楼主| 发表于 2025-7-28 11:02 | 显示全部楼层
技术008 发表于 2025-7-28 10:55
dy这些动态行情函数都是最有最新值没有历史值的所以都是没办法回测的

你可以模拟交易时候通过实际运行去 ...

是的老师,但是我点了运行后没有任何反应,请问我是不是哪里程序化设置有问题啊
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-7-28 11:04 | 显示全部楼层
运行没反应,建议用debugfile去调试输出你的条件去进行分析,这个后台运行必须掌握这个函数
具体用法函数中有说明
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
 楼主| 发表于 2025-7-28 11:16 | 显示全部楼层
技术008 发表于 2025-7-28 11:04
运行没反应,建议用debugfile去调试输出你的条件去进行分析,这个后台运行必须掌握这个函数
具体用法函数 ...

老师,我最后想问一个,我无法开启后台程序化交易,按照官方文档不能操作,是哪里出了问题。
这里不好发图片,请看我下一楼

回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
 楼主| 发表于 2025-7-28 11:17 | 显示全部楼层

本帖子中包含更多资源

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

x
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-7-28 11:18 | 显示全部楼层
这个要专业版才行,可以联系销售申请试用
021-20339098
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
 楼主| 发表于 2025-8-8 14:31 | 显示全部楼层
我现在用的是专业版的,并且已经开启了程序化交易,代码也编译成功了,里面编写了debugfile函数,但是点了运行还是一点反应都没有,求助

补充内容 (2025-8-8 14:36):
并且我在代码开头在没有任何条件的情况下,用debugfile要求输出一段文字,也没有输出任何东西
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-8-8 14:32 | 显示全部楼层
  DEBUGFILE('D:\TEST.TXT','当前价格为%.2f',close);

这样看有没有输出,如果有说明没问题
你的不输出要么条件没满足,要么格式写的有问题
请自己检查下了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2025-7-24
曾用名:
 楼主| 发表于 2025-8-8 14:38 | 显示全部楼层
技术008 发表于 2025-8-8 14:32
DEBUGFILE('D:\TEST.TXT','当前价格为%.2f',close);

这样看有没有输出,如果有说明没问题

这个也没有输出
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-18 19:00 , Processed in 0.114850 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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