在当今数字化投资浪潮中,自动化交易已成为投资者不可或缺的利器。Python凭借其强大的数据处理和脚本编写能力,与富途股票交易平台深度结合,为投资者打开了智能投资的新大门。今天,就让我们深入探索如何利用Python实现富途股票的自动交易。
一、高级应用:拓展交易策略与分析
随着对Python和富途API的深入理解,你可以开发更复杂的交易策略,如基于技术指标的交易信号生成、多因子模型等。同时,利用Python强大的数据可视化库,如Matplotlib和Seaborn,可以将交易数据和市场趋势直观地展示出来,进一步优化投资决策。
二、实战案例:均线策略实现自动交易
以下是一个基于均线策略的实战案例,通过计算快线和慢线的均线,判断多空趋势并执行相应的交易操作。
# 计算均线,判断多空
def calculate_bull_bear(code, fast_param, slow_param):
if fast_param <= 0 or slow_param <= 0:
return 0
if fast_param > slow_param:
return calculate_bull_bear(code, slow_param, fast_param)
ret, data = quote_ctx.get_cur_kline(code=code, num=slow_param + 1, ktype=KLType.K_1M)
if ret != RET_OK:
print('获取K线失败:', data)
return 0
candlestick_list = data['close'].values.tolist()[::-1]
fast_value = None
slow_value = None
if len(candlestick_list) > fast_param:
fast_value = sum(candlestick_list[1: fast_param + 1]) / fast_param
if len(candlestick_list) > slow_param:
slow_value = sum(candlestick_list[1: slow_param + 1]) / slow_param
if fast_value is None or slow_value is None:
return 0
return 1 if fast_value >= slow_value else -1
# 开仓函数
def open_position(code):
# 获取摆盘数据
ask, bid = get_ask_and_bid(code)
# 计算下单量
open_quantity = calculate_quantity()
# 判断购买力是否足够
if is_valid_quantity(TRADING_SECURITY, open_quantity, ask):
# 下单
ret, data = trade_ctx.place_order(price=ask, qty=open_quantity, code=code, trd_side=TrdSide.BUY,
order_type=OrderType.NORMAL, trd_env=TRADING_ENVIRONMENT,
remark='moving_average_strategy')
if ret != RET_OK:
print('开仓失败:', data)
else:
print('下单数量超出最大可买数量。')
# 平仓函数
def close_position(code, quantity):
# 获取摆盘数据
ask, bid = get_ask_and_bid(code)
# 检查平仓数量是否有效
if quantity == 0:
print('无效的下单数量。')
return False
# 平仓
ret, data = trade_ctx.place_order(price=bid, qty=quantity, code=code, trd_side=TrdSide.SELL,
order_type=OrderType.NORMAL, trd_env=TRADING_ENVIRONMENT, remark='moving_average_strategy')
if ret != RET_OK:
print('平仓失败:', data)
return False
return True
# 策略启动时运行一次,用于初始化策略
def on_init():
# 解锁交易(如果是模拟交易则不需要解锁)
if not unlock_trade():
return False
print('************ 策略开始运行 ***********')
return True
# 每次产生一根新的 K 线运行一次,可将策略的主要逻辑写在此处
def on_bar_open():
# 打印分隔线
print('*************************************')
# 只在常规交易时段交易
if not is_normal_trading_time(TRADING_SECURITY):
return
# 获取 K 线,计算均线,判断多空
bull_or_bear = calculate_bull_bear(TRADING_SECURITY, FAST_MOVING_AVERAGE, SLOW_MOVING_AVERAGE)
# 获取持仓数量
holding_position = get_holding_position(TRADING_SECURITY)
# 下单判断
if holding_position == 0:
if bull_or_bear == 1:
print('【操作信号】 做多信号,建立多单。')
open_position(TRADING_SECURITY)
else:
print('【操作信号】 做空信号,不开空单。')
elif holding_position > 0:
if bull_or_bear == -1:
print('【操作信号】 做空信号,平掉持仓。')
close_position(TRADING_SECURITY, holding_position)
else:
print('【操作信号】 做多信号,无需加仓。')
代码详细解释
1. 计算均线,判断多空
calculate_bull_bear 函数用于计算快线和慢线的均线值,并根据两者的相对位置判断当前市场处于多头还是空头趋势。具体步骤如下:
- 检查参数有效性:确保快线和慢线的周期参数大于0。若快线周期大于慢线周期,则交换两者,以确保快线周期小于慢线周期。
- 获取K线数据:调用
quote_ctx.get_cur_kline获取指定股票的K线数据。这里获取的是1分钟K线数据,数量为慢线周期加1,以确保有足够的数据计算均线。 - 计算均线值:从获取的K线数据中提取收盘价,计算快线和慢线的均线值。快线的均线值是最近
fast_param个收盘价的平均值,慢线的均线值是最近slow_param个收盘价的平均值。 - 比较均线值:比较快线和慢线的均线值。若快线大于等于慢线,则返回1(多头信号);否则返回-1(空头信号)。
2. 开仓函数
open_position 函数用于执行开仓操作。具体步骤如下:
- 获取摆盘数据:调用
get_ask_and_bid函数获取股票的买一价(ask)和卖一价(bid)。 - 计算下单量:调用
calculate_quantity函数计算下单量,这里使用最小交易量。 - 检查购买力:调用
is_valid_quantity函数检查账户的购买力是否足够。若足够,则下单买入;否则提示下单失败。
3. 平仓函数
close_position 函数用于执行平仓操作。具体步骤如下:
- 获取摆盘数据:调用
get_ask_and_bid函数获取股票的买一价和卖一价。 - 检查平仓数量:确保平仓数量有效,即不为0。
- 执行平仓:下单卖出指定数量的股票,完成平仓操作。若平仓成功,返回True;否则返回False。
4. 策略启动时运行一次
on_init 函数在策略启动时运行一次,用于初始化策略。主要功能是解锁交易(如果是模拟交易则不需要解锁),并打印策略开始运行的提示信息。
5. 每次产生一根新的 K 线运行一次
on_bar_open 函数在每次产生一根新的K线时运行,用于执行策略的主要逻辑。具体步骤如下:
- 打印分隔线:打印分隔线,用于区分不同的K线周期。
- 检查交易时段:调用
is_normal_trading_time函数检查当前是否处于常规交易时段。若不是,则返回。 - 计算均线,判断多空:调用
calculate_bull_bear函数获取当前的多空信号。 - 获取持仓数量:调用
get_holding_position函数获取当前的持仓数量。 - 下单判断:根据持仓情况和多空信号,决定是否开仓或平仓。若无持仓且出现多头信号,则开仓;若有持仓且出现空头信号,则平仓;若无持仓且出现空头信号,则不开空单;若有持仓且出现多头信号,则不加仓。
三、结语:开启你的智能投资之旅
Python与富途股票自动交易的结合,为投资者提供了一个强大且灵活的交易工具。通过自动化交易,不仅可以提高交易效率,还能在复杂的市场环境中保持冷静和理性。如果你对股票投资和自动化交易感兴趣,不妨从今天开始,用Python构建你的智能交易系统,开启财富增长的新篇章!