QMT美林时钟策略(15年11倍,年化13.5%策略)

什么是美林时钟呢?

著名的美林时钟是美林证券提出的一个资产配置框架,用于指导投资者根据宏观经济周期(经济增长和通胀变化)的不同阶段,调整股票、债券、商品和现金等资产的配置比例。其核心逻辑是将经济周期分为四个阶段,告诉你什么时候该买啥:

复苏期(经济好、通胀低):买股票

过热期(经济好、通胀高):买大宗商品

滞胀期(经济差、通胀高):囤现金

衰退期(经济差、通胀低):买长期债券

什么是动量轮动呢?

动量轮动是一种投资策略,核心思想是“追涨杀跌”——买近期涨得猛的资产,卖掉涨不动的,靠趋势赚钱。

具体怎么玩?

1、选轮动组合:比如股票、债券、大宗商品等。

2、比谁强:定期(比如每周)看哪些资产最近涨得最好。

3、调仓:买入排名靠前的“动量强者”,卖掉跌出前排的“弱鸡”。

如果把美林时钟和动量轮动结合会怎么样呢?

轮动组合:创业板,纳指,黄金,国债。创业板和纳指代表美林时钟中的股票,黄金代表商品,国债代表债券。

轮动规则:比较创业板、纳指和黄金近20日涨幅,取排名第一的,当向上突破20日高点时买入,向下突破20日低点时卖出。如果三个都不符合买入条件,就持有国债。美林时钟的难点是周期切换难以精准判断,结合动量轮动后直接用是否形成突破来判断,简单粗暴有效。

看下QMT历史实盘回测效果:

代码讲解:

#encoding:gbk
import numpy as np
import pandas as pd
import math

class A():
	pass
a=A()
#初始化函数 
def init(C):
	print('运行')
	C.acct = '39130129'
	C.acct_type = 'STOCK'

	C.etf_pool = ['513100.SH','159915.SZ','159937.SZ']
	C.stock = '511130.SH'
	#C.etf_pool = C.get_stock_list_in_sector('上证50')
	#print(C.etf_pool)
	for i in C.etf_pool:
		download_history_data(i,'1d','','')
		download_history_data(C.stock,'1d','','')
	C.m_days = 20 #动量参考天数
	C.Num = 1  #购买股票数量
	C.run_time('trade','1nDay',"2021-07-25 14:57:00")
	
def handlebar(C):
	#pass
	trade(C) #每天运行确保即时捕捉动量变化
	print('运行中')
    #trade(C) #每天运行确保即时捕捉动量变化

交易逻辑:

def get_rank(C,etf_pool):
	score_list = []
	px=-1
	start_time = timetag_to_datetime(C.get_bar_timetag(C.barpos-C.m_days),'%Y%m%d')
	end_time = timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d')
	for etf in etf_pool: 
		data = C.get_market_data_ex(fields=["close","high"],stock_code=[etf], period = "1d", start_time = start_time, end_time = end_time,count=C.m_days)
		df = data[etf]
		pre_line2 =np.mean(df.close[-21: -1])
		if df.close[-1]>pre_line2:
			px = 1
		
		y = df['log'] = np.log(df.close)
		x = df['num'] = np.arange(df.log.size)
		slope, intercept = np.polyfit(x, y, 1)
		annualized_returns = math.pow(math.exp(slope), 250) - 1
		r_squared = 1 - (sum((y - (slope * x + intercept))**2) / ((len(y) - 1) * np.var(y, ddof=1)))
		score = annualized_returns * r_squared * px
		score_list.append(score)
		"""
		print(df.close.pct_change(20)[-1])
		score = df.close.pct_change(20)[-1]*px
		score_list.append(score)
		"""
	df = pd.DataFrame(index=etf_pool, data={'score':score_list})
	df = df.sort_values(by='score', ascending=False)
	rank_list = list(df.index)  
	print(df)
	print('最大',df['score'].max())
	if df['score'].max()<0:
		rank_list = ['511130.SH']
		return rank_list
	else:
		return rank_list

本策略采用梅林时钟策略,叠加动量策略,所有选取品种,都是历史长期优势品种,基本面稳定。

总结:

通过本文的学习,相信你已经掌握如何在QMT学会美林时钟策略了。希望本文可以帮助你!

<think>好的,用户想了解QMT平台上的打板交易策略的实现方法和示例教程。首先,我需要回忆一下QMT和MiniQMT的相关信息,特别是关于策略模板和数据接口的部分。 根据引用[3],QMT支持复杂的自定义策略,而MiniQMT更适合初学者使用预设模板。打板策略通常涉及捕捉股票的涨停或跌停机会,所以可能需要获取涨跌停价格数据。引用[4]提到了获取历史涨跌停价格的函数get_market_data_ex,这个函数应该会在策略中用到。 接下来,用户可能需要具体的代码示例。打板策略一般包括几个步骤:选股条件、买入时机、风险控制和卖出策略。选股条件可能需要筛选当日接近涨停的股票,这里可以用实时数据接口。买入时机可能是在涨停板打开的瞬间,或者封单量满足条件时。风险控制包括仓位管理和止损设置,比如在跌破涨停价时止损。 然后,我需要考虑如何将这些步骤转QMT平台的代码。比如,使用get_market_data_ex获取涨跌停价格,然后结合实时行情数据判断当前价格是否接近涨停。同时,引用[2]提到的均线交叉策略模板可以作为参考,将打板逻辑嵌入到策略模板中。 用户可能还会关心如何回测和优策略,这部分需要利用QMT的回测模块,设置相关参数,比如滑点、手续费等。此外,引用[3]提到MiniQMT的图形界面可能简这些步骤,但QMT本身需要更多编程能力。 最后,需要确保回答结构清晰,分步骤说明实现方法,并提供示例代码。同时,生成的相关问题要覆盖策略、风险控制、数据获取等方面,帮助用户进一步学习。</think>### QMT平台打板策略实现方法 打板策略的核心在于捕捉股票涨停/跌停瞬间的市场机会,QMT平台可通过以下步骤实现: ### 一、策略实现步骤 1. **数据获取** - 使用`get_market_data_ex`函数获取涨跌停价格数据[^4] ```python stock_list = ['600519.SH', '000001.SZ'] stop_price_data = xtdata.get_market_data_ex([], stock_list, period="stoppricedata", start_time="20240101", end_time="20240110") ``` 2. **选股条件** - 筛选当日涨幅>9%且未涨停的股票 ```python realtime_data = xtdata.get_full_tick(stock_list) selected_stocks = [code for code in stock_list if (realtime_data[code]['lastPrice'] / realtime_data[code]['preClose'] - 1) > 0.09 and realtime_data[code]['lastPrice'] < stop_price_data[code]['upper_limit']] ``` 3. **买入信号** - 涨停板封单量>10万手时触发买入 ```python if order_volume > 100000: xt_trader.order_stock(account, code, xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, stop_price_data[code]['upper_limit']) ``` 4. **风险控制** - 设置2%的移动止损 ```python stop_loss_price = entry_price * 0.98 if current_price < stop_loss_price: xt_trader.order_stock(account, code, xtconstant.STOCK_SELL, position, xtconstant.FIX_PRICE, current_price) ``` ### 二、完整策略示例 ```python from xtquant import xtdata from xtquant.xttrader import XtQuantTrader class DabanStrategy: def __init__(self): self.account = 'xxxxxx' # 替换实盘账号 self.xt_trader = XtQuantTrader() def get_stop_price(self, codes): return xtdata.get_market_data_ex([], codes, "stoppricedata", "", "") def on_tick(self, code): # 获取实时行情 tick = xtdata.get_full_tick([code])[code] stop_price = self.get_stop_price([code])[code]['upper_limit'] # 买入条件判断 if tick['lastPrice'] >= stop_price * 0.995 and tick['askVol1'] > 100000: self.place_order(code, 'BUY', stop_price) # 止损逻辑 if tick['lastPrice'] < self.entry_price * 0.98: self.place_order(code, 'SELL', tick['lastPrice']) def place_order(self, code, direction, price): order_type = xtconstant.STOCK_BUY if direction == 'BUY' else xtconstant.STOCK_SELL self.xt_trader.order_stock(self.account, code, order_type, 1000, xtconstant.FIX_PRICE, price) ``` ### 三、关键参数优 1. **封单量阈值**:根据市场流动性动态调整 2. **买入时机**:可设置为涨停价-0.5%的扫单策略 3. **持仓时间**:建议T+1日开盘集合竞价卖出 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神出鬼没,指的就是我!

必须花钱,数据超好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值