网友的基于macd和唐奇安通道的交易策略

batman
batman IT老炮

0 People liked this article · 2199 views

昨天有网友发了一个基于PTrade交易的策略来看问题,问题描述是该策略只有买进,没有卖出。下面是原始策略代码:

import talib

def initialize(context):
# 初始化策略
g.security = "603580.SS"

# 设定每次开仓使用资金的比率
g.capital_usage_ratio = 0.3

g.position = 0 # 是否开仓

set_universe(g.security) # 股票池
set_slippage(slippage=0.002) # 设定滑点


def handle_data(context, data):
# 获取历史数据
df = get_history(100, '1d', ['open', 'high', 'low', 'close'], g.security, fq=None, include=True)

# 计算唐千安通道指标
df["DonHi_n1"] = df["high"].rolling(20).max()
df["DonLo_n1"] = df["low"].rolling(20).min()

# 计算MACD指标
close_prices = df["close"].values
diff, dea, macd = talib.MACD(close_prices, fastperiod=12, slowperiod=26, signalperiod=9)
df["diff"] = diff
df["dea"] = dea
df["macd"] = macd

# 判断MACD日线底部结构钝化形成,买入30%仓位
if df["macd"].iloc[-1] < df["macd"].iloc[-2] < df["macd"].iloc[-3]:
cash = context.portfolio.cash
order_value(g.security, cash * 0.3)
log.info("买入30%仓位")

# 判断顶部MACD日线级别钝化形成,卖出70%仓位
if df["macd"].iloc[-1] > df["macd"].iloc[-2] > df["macd"].iloc[-3]:
if g.position == 1:
order_target(g.security, 0)
log.info("卖出70%仓位")
g.position = 0
# 判断是否突破唐千安通道上轨,买入剩余70%仓位
if data[g.security]["close"] > df["DonHi_n1"].iloc[-1]:
if g.position == 0:
cash = context.portfolio.cash
target_value = cash * 0.7
order_value(g.security, target_value)
log.info("买入剩余70%仓位")
g.position = 1



# 判断是否跌破唐千安通道下轨,清仓
if data[g.security]["low"] < df["DonLo_n1"].iloc[-1]:
order_target(g.security, 0)
log.info("清仓")
g.position = 0

================================(这里是分割线)

首先这个策略有一定想法,其策略意图是这样的:

- 如果股票MACD指标的日线底部结构钝化形成,则买入30%仓位。

- 如果股票MACD指标的日线顶部结构钝化形成,且已经满仓持入,则卖出70%仓位。

- 如果股价突破唐奇安通道的上轨,且当前只有底仓,则买入剩余70%仓位。

- 如果当前价跌破唐奇安通道的下轨,则清仓。

但是在代码实现中,逻辑并不完备,造成策略永远只有买入,没有卖出。于是操刀在原代码上做了手术,实现上述策略意图。此策略适合在上升趋势中把握行情,有一定风险把控和盈利锁定,适合初接触PTrade量化交易者学习。修改后的代码在附件中,感兴趣者可自行下载学习。

List of attachments

macdturtle.txt

3KB

8.80

线上付款

macdturtle.txt

3KB

8.80

线上付款

Published on 2024-04-18 10:21

Disclaimers:

This document is written by batman Original published on 百果量化交流平台 ,The copyright belongs to the author。

Log in,More exciting content waiting for you to find,Contribute wonderful answers,Participate in comment interaction

go Sign in! No accountgoregister

6677
2024-11-07 15:32
老师好!使用唐其安通道代码后,尝试回测了8支股票都正常(回测期限不一),但都没有开仓记录,回测结果是收益为“0”,仅有基准收益,请问如何解决?
沧海一粟
2024-06-15 13:29
batman:请问一下这个策略里面补充了选股功能吗?
batman
2024-04-21 22:32
怎么修改我自己发的贴呢?想增加附件
139257
2024-04-21 10:05
@batman 没有附件,再上传下
batman
2024-04-18 13:38
明明我已上传附件,为啥不见