金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 571|回复: 3

帮金将python转化成金字塔语言

[复制链接]

2

主题

7

帖子

7

积分

Rank: 1

等级: 新手上路

注册:
2023-9-8
曾用名:
发表于 2025-2-6 14:03 | 显示全部楼层 |阅读模式
`python
import backtrader as bt
import pandas as pd

class DualMAStrategy(bt.Strategy):
    params = (
        ('fast_period', 10),   # 快速均线周期
        ('slow_period', 30),   # 慢速均线周期
        ('risk_percent', 1),   # 单笔风险比例
        ('atr_period', 14),    # ATR波动率计算周期
        ('rsi_period', 14),    # RSI过滤条件
        ('trading_cost', 0.0002),  # 交易成本
    )

    def __init__(self):
        # 均线交叉系统
        self.fast_ma = bt.indicators.SMA(period=self.p.fast_period)
        self.slow_ma = bt.indicators.SMA(period=self.p.slow_period)
        self.crossover = bt.indicators.CrossOver(self.fast_ma, self.slow_ma)

        # 风险控制指标
        self.atr = bt.indicators.ATR(period=self.p.atr_period)
        self.rsi = bt.indicators.RSI(period=self.p.rsi_period)

        self.order = None

    def next(self):
        if self.order:  # 检查是否有挂单
            return

        # 头寸管理
        position_size = self.broker.getvalue() * self.p.risk_percent / 100 / self.atr[0]

        # 交易逻辑
        if not self.position:  # 没有持仓时
            if self.crossover > 0 and self.rsi < 70:  # 金叉且不过度超买
                self.order = self.buy(size=position_size)

            elif self.crossover < 0 and self.rsi > 30:  # 死叉且不过度超卖
                self.order = self.sell(size=position_size)

        else:  # 持仓时
            # 动态止盈止损(2:1 盈亏比)
            if self.position.size > 0:  # 多头持仓
                if self.data.close[0] >= self.entry_price + 2 * self.atr[0]:
                    self.close()
                elif self.data.close[0] <= self.entry_price - self.atr[0]:
                    self.close()
            else:  # 空头持仓
                if self.data.close[0] <= self.entry_price - 2 * self.atr[0]:
                    self.close()
                elif self.data.close[0] >= self.entry_price + self.atr[0]:
                    self.close()

    def notify_order(self, order):
        if order.status in [order.Completed]:
            self.entry_price = order.executed.price  # 记录入场价格
        self.order = None

if __name__ == '__main__':
    cerebro = bt.Cerebro()

    # 数据加载(示例用螺纹钢期货)
    data = pd.read_csv('RB8888.csv', parse_dates=['datetime'], index_col='datetime')
    datafeed = bt.feeds.PandasData(dataname=data)
    cerebro.adddata(datafeed)

    # 策略参数优化空间
    cerebro.optstrategy(
        DualMAStrategy,
        fast_period=range(5, 20, 5),
        slow_period=range(20, 50, 10),
        risk_percent=[0.5, 1, 2]
    )

    # 初始资金10万元
    cerebro.broker.setcash(100000.0)
    # 设置交易成本(双边)
    cerebro.broker.setcommission(commission=self.p.trading_cost)

    # 运行回测
    results = cerebro.run()

    # 绩效分析
    cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
    strategies = results[0]
    pyfoliozer = strategies.analyzers.getbyname('pyfolio')
    returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()

    # 输出关键指标
    print(f'最终资金: {cerebro.broker.getvalue():.2f}')
    print(f'年化收益率: {annual_return*100:.2f}%')
    print(f'最大回撤: {max_drawdown*100:.2f}%')
    print(f'胜率: {win_rate*100:.2f}%')
    print(f'盈亏比: {profit_ratio:.2f}')
```


回复

使用道具 举报

38

主题

9989

帖子

9999

积分

Rank: 8Rank: 8

等级: 超级版主

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

使用道具 举报

37

主题

9824

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

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

使用道具 举报

2

主题

7

帖子

7

积分

Rank: 1

等级: 新手上路

注册:
2023-9-8
曾用名:
 楼主| 发表于 2025-2-6 14:41 | 显示全部楼层
哪里有转码服务
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-20 12:29 , Processed in 0.164084 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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