
等级: 新手上路
- 注册:
- 2025-6-17
- 曾用名:
|
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
#简单的期货趋势策略,选用简单的均线金叉死叉进行买卖
import time
import os
import csv
import numpy
import talib as ta
import numpy as np
import talib
def init(context):
# 在context中设置一些参数
context.s1 = context.run_info.base_book_id
#两条均线的周期长度
context.long_period = 60
context.short_period = 10
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
pass
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
# 开始编写你的主要的算法逻辑
# bar_dict[order_book_id] 可以拿到某个证券的bar信息
# context.portfolio 可以拿到现在的投资组合信息
# 使用order_shares(id_or_ins, amount)方法进行落单
# TODO: 开始编写你的算法吧!
#获取交易品种价格,并产生对应的均线数据
close = history_bars(context.s1, context.long_period+1, 'self', 'close',True)
if len(close) < context.long_period+1 :
return
ma10 = ta.EMA(close,context.short_period)
ma60 = ta.EMA(close,context.long_period)
#logger.info('ma5均线'+str(ma5[-1])+'ma20均线'+str(ma20[-1]))
if ma10[-1]<ma60[-1] and ma10[-2]>ma60[-2]:
sell_open(context.s1, "market", volume=100,serial_id = 1)
if ma10[-1]>ma60[-1] and ma10[-2]<ma60[-2]:
portfolio = get_portfolio(context.s1,0)
buy_close(context.s1,"market", volume=portfolio.buy_quantity,serial_id = 2)
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
pass
补充内容 (2025-6-17 17:16):
我只是把官方范例的参数修改了,以及下方 ma10 = ta.EMA(close,context.short_period) 把原先ta.SMA改成了EMA,这个策略很简单,但为什么信号总是发生错误,很苦恼,不知道是哪里出了问题
补充内容 (2025-6-17 19:41):
我从官网发现EMA数据需要的5倍以上,然后我直接用400k实验了下,发现信号正常了,但这个是回测,请问老师,假设在下载好数据前提下,我实盘如6月18开始启动,行情是会自动预载400K么,而不用担心数据不足导致错误
补充内容 (2025-6-17 19:55):
因为我在回测时候发现,假如设定1月1号开始回测15分钟,明明我已经下载了全部数据,但行情还是会在拥有400K之后才开始执行信号,而时间会已经过了很久,那么实盘中会不会有这个问题 |
|