经典策略

海龟策略

海龟交易策略,以海龟交易法则为核心,起源于八十年代的美国,是一套简单有效的交易法则。这个法则以及使用这个法则的人的故事被写成了一本书——《海龟交易法则》,这是一本入门量化投资的经典书籍。

海龟交易的具体规则是:

1.当今天的收盘价大于过去20个交易日中的最高价时,以收盘价买入;

2.买入后,当收盘价小于过去10个交易日中的最低价时,以收盘价卖出。

# 策略参数设置

instruments = ['600519.SHA'] # 选择的投资标的

start_date = '2014-07-17' # 回测开始日期

end_date = '2017-11-08' # 回测结束日期

# 策略主体函数

def initialize(context):

context.set_commission(PerDollar(0.0015)) # 手续费设置

def handle_data(context, data):

if context.trading_day_index < 20: # 在20个交易日以后才开始真正运行

return

sid = context.symbol(instruments[0])

price = data.current(sid, 'price') # 当前价格

high_point = data.history(sid, 'price', 20, '1d').max() # 20日高点

low_point = data.history(sid, 'price', 10, '1d').min() # 10日低点

# 持仓

cur_position = context.portfolio.positions[sid].amount

# 交易逻辑

# 最新价大于等于20日高点,并且处于空仓状态,并且该股票当日可以交易

if price >= high_point and cur_position == 0 and data.can_trade(sid):

context.order_target_percent(sid, 1)

# 最新价小于等于10日低点,并且持有股票,并且该股票当日可以交易

elif price <= low_point and cur_position > 0 and data.can_trade(sid):

context.order_target_percent(sid, 0)

# 策略回测接口

m=M.trade.v3

( instruments=instruments,

start_date=start_date,

end_date=end_date,

initialize=initialize,

handle_data=handle_data,

order_price_field_buy='open', # 买入股票订单成交价为收盘价

order_price_field_sell='open', # 卖出股票订单成交价为收盘价

capital_base=float("1.0e6"), # 初始资金为100万

benchmark='000300.INDX',) # 比较基准为沪深300指数

双均线策略

双均线策略,以30为短周期,60为长周期,当短期均线由上向下穿越长期均线时做空,当短期均线由下向上穿越长期均线时做多。

  1. # coding=utf-8

  2. from __future__ import print_function, absolute_import

  3. from gm.api import *

  4. import talib

  5. import time

  6. def init(context):

  7. context.FAST = 30 # 短周期

  8. context.SLOW = 60 # 长周期

  9. context.symbol = 'DCE.i1801' # 订阅&交易标的

  10. context.period = context.SLOW + 1 # 订阅数据滑窗长度

  11. subscribe(context.symbol, '60s', count=context.period) # 订阅行情

  12. def on_bar(context, bars):

  13. print (bars[0].bob)

  14. # 获取数据

  15. prices = context.data('DCE.i1801', '60s', context.period, fields='close')

  16. # 计算长短周期均线

  17. fast_avg = talib.SMA(prices.values.reshape(context.period), context.FAST)

  18. slow_avg = talib.SMA(prices.values.reshape(context.period), context.SLOW)

  19. # 均线下穿,做空

  20. if slow_avg[-2] < fast_avg[-2] and slow_avg[-1] >= fast_avg[-1]:

  21. # 平多仓

  22. order_target_percent(symbol=context.symbol, percent=0, position_side=1, order_type=2)

  23. # 开空仓

  24. order_target_percent(symbol=context.symbol, percent=0.1, position_side=2, order_type=2)

  25. # 均线上穿,做多

  26. if fast_avg[-2] < slow_avg[-2] and fast_avg[-1] >= slow_avg[-1]:

  27. # 平空仓

  28. order_target_percent(symbol=context.symbol, percent=0, position_side=2,order_type=2)

  29. # 开多仓

  30. order_target_percent(symbol=context.symbol, percent=0.1, position_side=1,order_type=2)

  31. def on_execution_report(context, execrpt):

  32. # 打印委托执行回报

  33. print(execrpt)

  34. if __name__ == '__main__':

  35. '''

  36. strategy_id策略ID,由系统生成

  37. filename文件名,请与本文件名保持一致

  38. mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST

  39. token绑定计算机的ID,可在系统设置-密钥管理中生成

  40. backtest_start_time回测开始时间

  41. backtest_end_time回测结束时间

  42. backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST

  43. backtest_initial_cash回测初始资金

  44. backtest_commission_ratio回测佣金比例

  45. backtest_slippage_ratio回测滑点比例

  46. '''

  47. run(strategy_id='strategy_id',

  48. filename='main.py',

  49. mode=MODE_BACKTEST,

  50. token='token_id',

  51. backtest_start_time='2017-09-01 09:00:00',

  52. backtest_end_time='2017-09-30 15:00:00',

  53. backtest_adjust=ADJUST_NONE,

  54. backtest_initial_cash=10000000,

  55. backtest_commission_ratio=0.0001,

  56. backtest_slippage_ratio=0.0001)

搜股®,COPYRIGHT 1999-2019

This site was designed with the
.com
website builder. Create your website today.
Start Now