学习QMT股票量化系统用python写一个简单的单均线策略

常听人说“一根均线打天下”,那我们就从单均线策略入手来学习QMT股票量化吧。

买卖规则:当股价大于20日均线,全仓买入,当股价小于20均线,全仓卖出。

登录QMT系统后,点击“新建策略”,选择“Python策略”。

学习QMT股票量化系统用python写一个简单的单均线策略

然后,系统就自动为你新建了一个策略模板,我们先把模板里init(ContextInfo)和handlebar(ContextInfo)这两个函数里面的内容全部删除,换成我们自己的代码。

init(ContextInfo)函数是初始化函数,在回测时,它只会运行一次。一般用来放置要操作的股票代码,自己的账号等等。

学习QMT股票量化系统用python写一个简单的单均线策略

handlebar(ContextInfo)函数是策略的核心,它定义了当每根新的K线生成时,策略将如何响应市场数据的变化,也就是每一根K线,它都会运行一次。在本策略中,handlebar 函数执行以下操作:

  1. 使用 ContextInfo.get_market_data_ex 方法获取股票的收盘价数据。
  2. 计算20日均线(MA20)。
  3. 根据20日均线和当前股价的关系,决定是执行买入还是卖出操作。

完整代码如下:

#encoding:gbk
'''
单均线策略,股价大于20日均线,全仓买入,小于20均线,全仓卖出
注意:本策仅用于python量化学习,不用于真实交易
'''

import pandas as pd
import numpy as np

def init(ContextInfo):
    # 设置股票代码和账户ID
    ContextInfo.stock = "600863.SH"
    ContextInfo.accID = 'your accID'
    # 设置移动平均周期
    ContextInfo.MA_period = 20

def handlebar(ContextInfo):
    # 计算20日均线
    close = ContextInfo.get_market_data_ex(
        ['close'],
        [ContextInfo.stock],
        start_time="20230101",
        end_time="20231231",
        period='1d',
        dividend_type='none'
    )[ContextInfo.stock]['close']
    
    MA20 = pd.Series(close).rolling(window=ContextInfo.MA_period).mean()

    # 获取账户信息
    account_info = get_trade_detail_data(ContextInfo.accID, 'stock', 'account')
    if not account_info:
        print("无法获取账户信息")
        return
    
    account_info = account_info[0]
    available_cash = int(account_info.m_dAvailable)  # 可用资金

    # 全仓买入逻辑
    if close[-2] <= MA20[-2] and close[-1] > MA20[-1]:
        # 计算买入数量,向下取整
        buy_volume = available_cash // close[-1]
        # 下单买入
        order_target_value(ContextInfo.stock, buy_volume, ContextInfo, ContextInfo.accID)

    # 全仓卖出逻辑
    elif close[-2] > MA20[-2] and close[-1] <= MA20[-1]:
        # 获取持仓信息
        position_info = get_trade_detail_data(ContextInfo.accID, 'stock', 'position')
        if not position_info:
            print("无法获取持仓信息")
            return
        
        position_info = position_info.get(ContextInfo.stock, 0)  # 获取当前股票的持仓量
        
        # 下单卖出
        order_target_value(ContextInfo.stock, -position_info, ContextInfo, ContextInfo.accID)

最后回测,看看代码是否按预想运行了。

学习QMT股票量化系统用python写一个简单的单均线策略

学习QMT股票量化系统用python写一个简单的单均线策略

如图所示,在回测中,买卖如期进行了!收益嘛…….暂时别管它,咱们现阶段的主要目的学习写代码,了解一下QMT写策略的步骤和方法,通过写单均线策略,目的算是达到了。

再补充一点:
ContextInfo.get_market_data_ex 方法获取股票的收盘价数据其实是一个字典,但要对数据进行处理,例如计算20日均线,那就要把字典里的值取了来,它的值才是DataFrame。字典的键是股票代码。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73463
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注