Home >  > QMT教程四(1m数据计算指标)

QMT教程四(1m数据计算指标)

QMT自带函数说明,可以查看一些函数的使用方法。

而且有示例代码,可以拿来直接测试。

一、获取股票历史信息

import pandas as pd
import numpy as np
import talib

def init(ContextInfo):
    ContextInfo.set_universe(['600300.SH','000004.SZ'])
def handlebar(ContextInfo):
    #获取股票池中所有股票的最近两日的收盘价
    hisdict = ContextInfo.get_history_data(10,'1d','close')
    print(hisdict)
    for k, v in hisdict.items():
        if len(v)>1:
            print( k,':',v[1]-v[0])#今日涨幅

比如上面的代码,就是取到了股票近10天的收盘价。

二、获取股票的1分钟数据

# encoding: utf-8

import pandas as pd
import numpy as np
import talib

def init(ContextInfo):
    pass
    
    
def handlebar(ContextInfo):
    #获取股票池中股票的最近1日的4价
    hisdict =ContextInfo.get_market_data_ex(
    ['open', 'high', 'low', 'close'], ['688062.SH'], period='1m'
    , start_time='', end_time='', count=-1
    , dividend_type='follow', fill_data=True
    , subscribe = True
    )
    print(hisdict)


经核对没有任何问题。

如果要获得成交果,只需要在列表中加入即可。即: ['open', 'high', 'low', 'close','volume']

经查看函数使用说明,count:数据最大个数,-1视为不做个数限制,不过将这个数改成480,也没有用,返回的还是240,也就是说它只能获取1天的1m数据。

三、计算指标

# encoding: gbk
import pandas as pd
import datetime

def init(ContextInfo):
    """
    初始化函数,设定每天 15:05 触发策略。
    """
    ContextInfo.run_time(["15:05"])  # ✅ 正确方式:设定每天 15:05 运行一次


def handlebar(ContextInfo):
    """
    在 15:05 自动执行的主逻辑。
    """
    analyze_day_volume(ContextInfo)


def analyze_day_volume(ContextInfo):
    """
    分析尾盘成交量比值并保存为 CSV。
    """
    stock_list = ['688062.SH', '600519.SH', '000001.SZ']  # ✅ 替换为你的股票池
    results = {}

    # 获取当日所有股票的 1 分钟数据
    hisdict = ContextInfo.get_market_data_ex(
        ['open', 'high', 'low', 'close', 'volume'],
        stock_list,
        period='1m',
        start_time='', end_time='', count=-1,
        dividend_type='follow', fill_data=True,
        subscribe=False
    )

    for symbol, df in hisdict.items():
        try:
            ratio = calculate_tail_volume_ratio(df)
            results[symbol] = ratio
        except Exception as e:
            print(f"{symbol} 分析失败: {e}")
            results[symbol] = None

    # 保存结果为 CSV 文件
    date_str = datetime.datetime.now().strftime("%Y%m%d")
    df_result = pd.DataFrame.from_dict(results, orient='index', columns=['prev_tail_vol_ratio'])
    df_result.index.name = 'symbol'
    filename = f"prev_tail_vol_ratio_{date_str}.csv"
    df_result.to_csv(filename, encoding='utf-8-sig')
    print(f"[{date_str}] 分析完成,已保存至:{filename}")


def calculate_tail_volume_ratio(df: pd.DataFrame) -> float:
    """
    计算尾盘成交量比值: (14:30-15:00 成交量) / (10:00-10:30 成交量)
    """
    df = df.copy()
    df.index = pd.to_datetime(df.index, format="%Y%m%d%H%M%S")
    morning = df.between_time("10:00", "10:29")
    afternoon = df.between_time("14:30", "14:59")
    morning_volume = morning["volume"].sum()
    afternoon_volume = afternoon["volume"].sum()
    if morning_volume == 0:
        return float("inf")
    return afternoon_volume / morning_volume

暧昧帖

本文暂无标签