金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 115|回复: 17

有关代码编写的问题

[复制链接]

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
发表于 2025-5-14 16:45 | 显示全部楼层 |阅读模式
老师,我有一个策略模型的思路,而且在文华的软件上已经编写过一个可以回测的源码。但是现在发现金字塔的逻辑和文华不同。请教老师,我把文华的源码贴过来,能请老师帮我改成金字塔的代码不?感谢感谢
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-14 16:59 | 显示全部楼层
代码贴下
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-14 17:56 | 显示全部楼层
//★☆★ 海龟多因子动态过滤 ★☆★
// 本模型在传统海龟策略基础上引入动态通道与波动率过滤
// 核心改进:动态通道宽度调节+波动环境识别

Setting
    AddTimes:11;
    Review_Data:Auto;
    NoCheck:True;
Params
    Numeric RiskRatio(3);
    Numeric ATRLength(15);       // 修改为14日ATR标准周期
    Numeric boLength(17);
    Numeric fsLength(25);
    Numeric teLength(7);
    Numeric VolLookback(23);    // 新增波动率观测周期
Vars
    NumericSeries AvgTR;
    Numeric AN;
    Numeric TotalEquity;
    Numeric TurtleUnits;
    NumericSeries DonchianHi;
    NumericSeries DonchianLo;
    NumericSeries fsDonchianHi;
    NumericSeries fsDonchianLo;
    Numeric ExitHighestPrice;
    Numeric ExitLowestPrice;
    NumericSeries PreBreakoutFailure;
    Numeric ATR_Ratio;          // 新增波动率比率
    Numeric VOLATILITY_FILTER;  // 使用 Numeric 类型替代 Bool 类型
    Numeric VOL_5;              // 5日成交量均值
    Numeric VOL_20;             // 20日成交量均值
    NumericSeries RSI_14;       // 14日RSI
    Numeric DynamicStopLoss;    // 将 DynamicStopLoss 定义移到 Vars 块

Begin
    //==================== 新增指标计算 ====================//
    // 波动率过滤核心指标
    AvgTR = XAverage(TrueRange, ATRLength);
    ATR_Ratio = AvgTR / MA(AvgTR, VolLookback);
    VOLATILITY_FILTER = ATR_Ratio > 0.8;  // 若条件成立,VOLATILITY_FILTER 为 1,否则为 0
   
    // 量价共振因子计算
    VOL_5 = MA(VOL, 5);
    VOL_20 = MA(VOL, 20);
   
    // RSI动量缓冲因子,手动计算RSI值
    RSI_14 = Sma(Max(Close - Ref(Close, 1), 0), 14, 1) / Sma(Abs(Close - Ref(Close, 1)), 14, 1) * 100;
   
    //==================== 动态通道重构 ====================//
    // 短周期动态通道(20日)
    DonchianHi = Highest(High[1], boLength) + 0.7 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60));
    DonchianLo = Lowest(Low[1], boLength) - 0.5 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60));
   
    // 长周期双因子动态通道(55日)
    fsDonchianHi = Highest(High[1], fsLength) + 1.2 * AvgTR[1] * (1 + VOL_5 / VOL_20);
    fsDonchianLo = Lowest(Low[1], fsLength) - 0.8 * AvgTR[1] * (1 - RSI_14 / 100);
   
    //==================== 资金管理模块 ====================//
    AN = AvgTR[1];
    TotalEquity = MoneyTot;
    TurtleUnits = (TotalEquity * RiskRatio / 100) / (AN * ContractUnit());
    TurtleUnits = IntPart(TurtleUnits);
   
    //==================== 交易信号模块 ====================//
    // 做多主信号(增加波动率过滤)
    If(BKVol == 0 && SKVol == 0 && PreBreakoutFailure == 0 && VOLATILITY_FILTER == 1)
    {
        If(High > DonchianHi && TurtleUnits >= 1)
        {
            BK(TurtleUnits);
        }
    }
   
    // 长周期做多后备信号
    If(BKVol == 0 && SKVol == 0 && VOLATILITY_FILTER == 1)
    {
        If(High > fsDonchianHi && TurtleUnits >= 1)
        {
            BK(TurtleUnits);
        }
    }
   
    // 做空主信号(增加波动率过滤)
    If(BKVol == 0 && SKVol == 0 && PreBreakoutFailure == 0 && VOLATILITY_FILTER == 1)
    {
        If(Low < DonchianLo && TurtleUnits >= 1)
        {
            SK(TurtleUnits);
        }
    }
   
    // 长周期做空后备信号
    If(BKVol == 0 && SKVol == 0 && VOLATILITY_FILTER == 1)
    {
        If(Low < fsDonchianLo && TurtleUnits >= 1)
        {
            SK(TurtleUnits);
        }
    }
   
    //==================== 完整持仓管理 ====================//
    // 多头持仓管理
    If(BKVol > 0)
    {
        // 动态计算离场阈值
        ExitLowestPrice = Lowest(Low[1], teLength);
        
        // 趋势跟随离场
        If(Low < ExitLowestPrice)
        {
            SP(BKVol);
        }
        Else
        {
            // 金字塔加仓逻辑
            If(IsNull(BKPrice) == 0 && TurtleUnits >= 1)
            {
                If(High >= BKPrice + 0.5 * AN)
                {
                    BK(TurtleUnits);
                }
            }
            
            // 动态止损(波动率补偿)
            DynamicStopLoss = 2 * AN * (1 + ATR_Ratio);
            If(Low <= BKPrice - DynamicStopLoss)
            {
                SP(BKVol);
            }
        }
    }

    // 空头持仓管理
    If(SKVol > 0)
    {
        // 动态计算离场阈值
        ExitHighestPrice = Highest(High[1], teLength);
        
        // 趋势跟随离场
        If(High > ExitHighestPrice)
        {
            BP(SKVol);
        }
        Else
        {
            // 金字塔加仓逻辑
            If(IsNull(SKPrice) == 0 && TurtleUnits >= 1)
            {
                If(Low <= SKPrice - 0.5 * AN)
                {
                    SK(TurtleUnits);
                }
            }
            
            // 动态止损(波动率补偿)
            DynamicStopLoss = 2 * AN * (1 + ATR_Ratio);
            If(High >= SKPrice + DynamicStopLoss)
            {
                BP(SKVol);
            }
        }
    }
End
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-14 20:47 | 显示全部楼层
这个不是文华的把,这个属于类c语法了没办法直接翻译
你最好提供策略思路,重写编写
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-15 17:05 | 显示全部楼层
感谢老师了,这个上面的确实是文华的,那我把核心的思路也贴一下。麻烦老师了:


《海龟多因子动态过滤策略模型》

本模型在传统海龟策略基础上引入动态通道与波动率过滤。

传统的海龟交易法则主要基于固定的通道突破来产生交易信号,使用固定周期的唐奇安通道(Donchian Channel)来确定入场和出场点,并且资金管理和止损策略相对固定。这个策略模型的核心思路是在传统海龟交易法则的基础上,通过引入动态通道、波动率过滤、量价共振和 RSI 动量缓冲因子等方法,优化交易信号的产生和持仓管理,以提高策略在不同市场环境下的适应性和盈利能力。具体步骤包括市场波动评估、通道构建、资金管理、交易信号判断和持仓管理:

一,具体优化方向:

1,引入动态通道:传统法则的通道宽度是固定的,而此模型的通道宽度会根据市场的波动情况动态调整,能更好地适应不同的市场环境。

2,增加波动率过滤:原版法则没有对市场的波动情况进行筛选,该模型引入了波动率比率来判断市场是否适合交易,避免在低波动环境下频繁交易。

3,增加了量价共振因子和 RSI 动量缓冲因子:原版没有考虑成交量和相对强弱指数(RSI)的影响,此模型结合成交量的短期和长期均值以及 RSI 指标来进一步优化通道和交易信号。

4,动态止损策略:传统海龟法则的止损是相对固定的,此模型根据市场波动率动态调整止损幅度,给予持仓更多的波动空间。

二,具体算法及解释:

1,新增指标因子计算

(1)波动率过滤核心指标:计算平均真实波动范围(ATR)和 ATR 比率,通过比较 ATR 比率和设定的阈值(0.8)来判断市场是否处于适合交易的波动环境。如果 ATR 比率大于 0.8,说明市场波动较大,适合交易;反之则不适合。

(2)量价共振因子计算:计算 5 日和 20 日的成交量均值,用于后续动态通道的构建,以考虑成交量对价格的影响。

(3)RSI 动量缓冲因子:手动计算 14 日的相对强弱指数(RSI),用于动态通道的调整,帮助判断市场的超买超卖情况。

2,动态通道重构

(1)短周期动态通道(20 日):在传统唐奇安通道的基础上,根据 ATR 和 ATR 的长期均值动态调整通道的上下边界,使得通道宽度能根据市场波动自适应变化。

算法:

上边界计算公式:DonchianHi = Highest(High[1], boLength) + 0.7 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60))

Highest(High[1], boLength):这部分是计算过去boLength(这里设定为 22)个周期内的最高价,相当于传统唐奇安通道的上轨基础值。

AvgTR[1]:表示前一个周期的平均真实波动范围(ATR),它反映了市场的波动程度。ATR 值越大,说明市场波动越剧烈。

MA(AvgTR, 60):是过去 60 个周期 ATR 的移动平均值,它代表了 ATR 的长期平均水平。

0.7 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60)):这部分是对传统上轨的动态调整。当当前的 ATR 值相对于长期平均 ATR 值较高时,说明市场波动加剧,这个调整项会使上边界向上移动,通道变宽;反之,当当前 ATR 值较低时,上边界会向下移动,通道变窄。这样就实现了通道宽度根据市场波动动态调整。

下边界计算公式:DonchianLo = Lowest(Low[1], boLength) - 0.5 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60))

Lowest(Low[1], boLength):计算过去boLength个周期内的最低价,是传统唐奇安通道下轨的基础值。

0.5 * AvgTR[1] * (AvgTR[1] / MA(AvgTR, 60)):同样是根据 ATR 值相对于长期平均 ATR 值的情况对下轨进行动态调整。当市场波动加剧时,下边界向下移动,通道变宽;市场波动减小时,下边界向上移动,通道变窄。

(2)长周期双因子动态通道(55 日):结合成交量的短期和长期均值以及 RSI 指标来调整通道的上下边界,进一步优化通道的构建。

算法:

上边界计算公式:fsDonchianHi = Highest(High[1], fsLength) + 1.2 * AvgTR[1] * (1 + VOL_5 / VOL_20)
Highest(High[1], fsLength):计算过去fsLength(这里设定为 50)个周期内的最高价,作为长周期通道上轨的基础值。

VOL_5:是过去 5 日的成交量均值,VOL_20:是过去 20 日的成交量均值。VOL_5 / VOL_20反映了短期成交量相对于长期成交量的变化情况。当短期成交量相对长期成交量较高时,说明市场活跃度增加,可能有更多的资金流入,此时这个比值会大于 1。

1.2 * AvgTR[1] * (1 + VOL_5 / VOL_20):ATR 反映市场波动,结合成交量的变化情况对通道上边界进行调整。当市场波动较大且短期成交量相对较高时,上边界会大幅向上移动,通道变宽,以适应可能出现的价格大幅上涨情况。

下边界计算公式:fsDonchianLo = Lowest(Low[1], fsLength) - 0.8 * AvgTR[1] * (1 - RSI_14 / 100)

Lowest(Low[1], fsLength):计算过去fsLength个周期内的最低价,作为长周期通道下轨的基础值。

RSI_14:是 14 日的相对强弱指数,它衡量了市场的超买超卖情况,取值范围在 0 - 100 之间。当 RSI 值较高时,市场处于超买状态;当 RSI 值较低时,市场处于超卖状态。

0.8 * AvgTR[1] * (1 - RSI_14 / 100):结合 ATR 和 RSI 指标对通道下边界进行调整。当市场波动较大且 RSI 值较低(市场超卖)时,下边界会向下移动,通道变宽,为价格可能的进一步下跌留出空间。

3,资金管理模块

根据账户总资金、风险比率、ATR 和合约单位来计算可交易的合约数量(TurtleUnits),并取整,以控制每次交易的风险。

4,交易信号模块

做多主信号:在没有持仓且前一次突破没有失败,同时市场波动适合交易的情况下,如果价格突破短周期动态通道的上边界,并且可交易合约数量大于等于 1,则开多仓。

长周期做多后备信号:在没有持仓且市场波动适合交易的情况下,如果价格突破长周期双因子动态通道的上边界,并且可交易合约数量大于等于 1,则开多仓。

做空主信号:在没有持仓且前一次突破没有失败,同时市场波动适合交易的情况下,如果价格跌破短周期动态通道的下边界,并且可交易合约数量大于等于 1,则开空仓。

长周期做空后备信号:在没有持仓且市场波动适合交易的情况下,如果价格跌破长周期双因子动态通道的下边界,并且可交易合约数量大于等于 1,则开空仓。

5,完整持仓管理

(1)多头持仓管理

趋势跟随离场:计算最近一段时间的最低价格作为离场阈值,如果当前价格跌破该阈值,则平多仓。

传统海龟加仓逻辑:如果已经持有多仓,且价格上涨超过开仓价格一定幅度(0.5 倍 ATR),并且可交易合约数量大于等于 1,则继续加仓。

动态止损:根据 ATR 和 ATR 比率动态计算止损幅度,如果当前价格跌破开仓价格减去止损幅度,则平多仓。
空头持仓管理。

动态止损幅度的计算:

计算公式:DynamicStopLoss = 2 * AN * (1 + ATR_Ratio)

AN:即AvgTR[1],表示前一个周期的平均真实波动范围(ATR),它反映了市场当前的波动程度。

ATR_Ratio:是AvgTR / MA(AvgTR, VolLookback),即当前 ATR 值与过去VolLookback(这里设定为 30)个周期 ATR 移动平均值的比率。这个比率反映了当前市场波动相对于长期平均波动的情况。当ATR_Ratio大于 1 时,说明当前市场波动大于长期平均波动;当ATR_Ratio小于 1 时,说明当前市场波动小于长期平均波动。

2 * AN:是一个基础的止损幅度,乘以(1 + ATR_Ratio)则是根据市场波动情况进行动态调整。当市场波动加剧(ATR_Ratio较大)时,止损幅度会相应增大,以避免因市场正常的大幅波动而触发止损;当市场波动较小时(ATR_Ratio较小),止损幅度会相对减小,及时锁定利润或控制较小波动下的风险。

(2)空头持仓管理

趋势跟随离场:计算最近一段时间的最高价格作为离场阈值,如果当前价格涨破该阈值,则平空仓。

传统海龟加仓逻辑:如果已经持有空仓,且价格下跌超过开仓价格一定幅度(0.5 倍 ATR),并且可交易合约数量大于等于 1,则继续加仓。

动态止损:根据 ATR 和 ATR 比率动态计算止损幅度,如果当前价格涨破开仓价格加上止损幅度,则平空仓。
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-15 17:21 | 显示全部楼层
抱歉,这种复杂度策略无法提供免费编写服务
您可以联系销售我们有提供vip一对一编写服务
021-20339098


或者您可以试着自己改写,一些局部函数或编写上有疑问可以在论坛这边咨询,完整全部编写的话只能走一对一编写了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-15 18:14 | 显示全部楼层
请教老师:
1,公式当中的“系统交易”“后台交易系统”等等它们有什么区别呢?用于回测的代码和用于程序化的代码是不同的格式是吗?
2,如果我现在想根据上面的思路来编写金字塔的代码的话,我应该是借鉴哪一种类型的代码格式呢?
3,“系统交易”中是有一个唐奇安通道的代码,但是为什么回测之后是没有交易的,这个是系统自带代码的问题吗?
截图202505151812137837.png
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 08:59 | 显示全部楼层
1、这个是图表程序化和后台程序化,我们有两种程序化的方式
https://www.weistock.com/docs/HE ... %E4%BA%A4%E6%98%93/
这个链接有两种运行的介绍,他们各自使用函数有一些区别
2、就参考图表交易系统这里,我们的编程语法是类似国内股软那种

3、先把策略加载到k线图上然后看下有没有信号,有的策略他可能日内的日线上就没有,这种可以自己去输出条件看比如
a:c>ma(c,5);

这样就是输出a这个条件看是否满足
截图202505160857375671.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

2

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-16 14:42 | 显示全部楼层
指标交易“布林带”是有回测数据的,然后换成系统交易“唐奇安通道”就没有回测数据了,这个是我设置的回测方式不对吗?请教老师怎么解决这个问题呢?如果系统交易的唐奇安通道的代码是没问题的,那么我就可以用这个代码来修改,来改进,去实现我之前的那个优化后的海龟交易系统了。
截图202505161440192545.png
截图202505161440499612.png
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 14:45 | 显示全部楼层
本帖最后由 技术008 于 2025-5-16 14:46 编辑

这个策略不是已经告诉你了嘛,日内策略
另外你可以看下代码,里面有涉及time这种时间的判断,对于日线是没有时间概念的,自然就没信号
你加载到图上后也能看到没信号,就是说明条件不满足,这时候要自己去看代码里的条件。
这些系统策略都可以作为模板去了解下基本写法


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 21:18 , Processed in 0.205389 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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