金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1272|回复: 50

关于下单统计委托的问题

[复制链接]

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
发表于 2025-2-12 16:02 | 显示全部楼层 |阅读模式
我写了段代码,里面包含了日线级别和分钟级别下单功能,但加载在后台上却没有触发到下单委托,我检查过两次没找到问题,麻烦辛苦帮我看看问题所在,先帮忙看看下单前的时间设定有没有什么逻辑问题,谢谢

下单统计.txt

19.23 KB, 下载次数: 116

代码

回复

使用道具 举报

38

主题

9396

帖子

9406

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-12 16:08 | 显示全部楼层
这种没其他办法,只能这样把条件都给输出看
逻辑上错误工作人员也是很难看懂的,要看懂这个需要把你所有代码和设计逻辑思路都要很理解才能看懂

这种复杂度策略往往只能编写者自己对细节更了解,别人看只能看语法是否有错,逻辑错误是最难看的

调试方法就是这样把关键变量都给输出看,然后去看这些个条件为何不满足
截图202502121607038622.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-12 16:19 | 显示全部楼层
好吧,谢谢!
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-12 16:22 | 显示全部楼层
我想问问

variable:ff=[];

if 平仓 then
begin
        sell();
        ff:=numprofit(1);
ENd

之前你说过什么的内容,如果我想定义一个50个数的数组,来记录每次平仓盈亏,定义的语法应该怎么写呢?
VARIABLE: TradeArray[50]; 系统说无效
回复

使用道具 举报

38

主题

9396

帖子

9406

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-12 16:26 | 显示全部楼层
variable:ff[50]:=0;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-12 16:39 | 显示全部楼层
谢谢
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-12 21:20 | 显示全部楼层
下面这段代码总说我缺少分号,麻烦帮我看看

//-------------- 平仓 --------------
// 当持有多单且出现空仓平仓信号时
IF HOLDING > 0.5 AND (SKCON OR SPCON) THEN BEGIN
    SELL(1, 0, MARKET, CLOSE);   // 平多单
    T_Array_Profit := numprofit(1);
   
    // 记录该笔交易盈亏到滚动统计数组,并更新统计指标
    TC := TC + 1;
    TradeIndex := mod(TC, 50);
    T_Array[TradeIndex] := T_Array_Profit;
   
    // 窗口长度:如果总交易数不足50,则窗口大小=TC,否则为50
    IF TC < 50 THEN
        windowSize := TC
    ELSE
        windowSize := 50;
        
    winCount := 0;
    sumWins := 0;
    sumLoss := 0;
    FOR i := 0 TO windowSize - 1 DO BEGIN
        IF T_Array > 0 THEN BEGIN
            winCount := winCount + 1;
            sumWins := sumWins + T_Array;
        END ELSE IF T_Array < 0 THEN BEGIN
            sumLoss := sumLoss + (-T_Array);
        END;
    END;
   
    IF windowSize > 0 THEN
        WinRate := winCount / windowSize
    ELSE
        WinRate := 0;
    IF sumLoss <> 0 THEN
        ProfitFactor1 := sumWins / sumLoss
    ELSE
        ProfitFactor1 := 9999;
   
    // 计算滚动最大回撤:遍历窗口内的累计盈亏曲线
    cumulative := 0;
    peak := 0;
    maxDD := 0;
    IF TC < 50 THEN
        startIndex := 0
    ELSE
        startIndex := mod(TC, 50);
    FOR j := 0 TO windowSize - 1 DO BEGIN
        i := mod(startIndex + j, 50);
        cumulative := cumulative + T_Array;
        IF cumulative > peak THEN
            peak := cumulative;
        IF (peak - cumulative) > maxDD THEN
            maxDD := peak - cumulative;
    END;
    MaxDD := maxDD;
END;


// 当持有空单且出现多仓平仓信号时
IF HOLDING < -0.5 AND (BKCON OR BPCON) THEN BEGIN
    SELLSHORT(1, 0, MARKET, CLOSE);  // 平空单
    T_Array_Profit := numprofit(1);
   
    // 记录该笔交易盈亏到滚动统计数组,并更新统计指标
    TC := TC + 1;
    TradeIndex := mod(TC, 50);
    T_Array[TradeIndex] := T_Array_Profit;
   
    IF TC < 50 THEN
        windowSize := TC
    ELSE
        windowSize := 50;
        
    winCount := 0;
    sumWins := 0;
    sumLoss := 0;
    FOR i := 0 TO windowSize - 1 DO BEGIN
        IF T_Array > 0 THEN BEGIN
            winCount := winCount + 1;
            sumWins := sumWins + T_Array;
        END ELSE IF T_Array < 0 THEN BEGIN
            sumLoss := sumLoss + (-T_Array);
        END;
    END;
   
    IF windowSize > 0 THEN
        WinRate := winCount / windowSize
    ELSE
        WinRate := 0;
        
    IF sumLoss <> 0 THEN
        ProfitFactor1 := sumWins / sumLoss
    ELSE
        ProfitFactor1 := 9999;
   
    cumulative := 0;
    peak1 := 0;
    maxDD := 0;
    IF TC < 50 THEN
        startIndex := 0
    ELSE
        startIndex := mod(TC, 50);
        
    FOR j := 0 TO windowSize - 1 DO BEGIN
        i := mod(startIndex + j, 50);
        cumulative := cumulative + T_Array;
        IF cumulative > peak1 THEN
            peak1 := cumulative;
        IF (peak1 - cumulative) > maxDD THEN
            maxDD := peak1 - cumulative;
    END;
    MaxDD := maxDD;
END;

就在这句的上面   // 窗口长度:如果总交易数不足50,则窗口大小=TC,否则为50   ,   提示缺少分号,试了很多遍都没检查出来问题,AI也问了好几个

补充内容 (2025-2-13 07:01):
//====== 策略效能评估模块 ======
// 全局统计变量:胜率 WinRate、盈亏比 ProfitFactor1、最大回撤 MaxDD
VARIABLE: WinRate = 0.5, ProfitFactor1 = 2, MaxDD = 0;

// 定义交易记录数组(保存最近50笔交易的...
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-13 08:07 | 显示全部楼层
已经解决了
回复

使用道具 举报

6

主题

104

帖子

104

积分

等级: 免费版

注册:
2024-9-18
曾用名:
 楼主| 发表于 2025-2-13 11:51 | 显示全部楼层
请问一下,我下面的这段代码,需要怎么改,才能计算出 15:00 前 的倒计时呢?我需要用这来实现日线模型15点提前30秒下单
距收盘_daily := TIMETOT0(CLOSETIME(0)) - TIMETOT0(DYNAINFO(207));

补充内容 (2025-2-13 11:51):
金字塔时区

补充内容 (2025-2-13 12:03):
直接改成 距收盘_daily := 150000 - TIMETOT0(DYNAINFO(207)); 可行吗?
回复

使用道具 举报

38

主题

9396

帖子

9406

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-13 13:15 | 显示全部楼层
直接
currenttime>145900就行了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-14 01:10 , Processed in 0.235326 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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