開源支持東財自動交易的簡單量化交易框架pytrader

pytrader是基於 easytradereasyquotation 的量化交易框架,支持東方財富自動交易,支持進行策略回測。

開源地址:https://github.com/jadepeng/pytrader

策略文件

在strategies目錄,可以參考已有的編寫。

策略需要繼承StrategyTemplate類,實現int和onbar等函數。

init 設置關注的股票,行情引擎就會推動股票行情。


    def init(self):
        for stock_code in self.watch_stocks:
            self.quotation_engine.watch(stock_code)


行情數據到來時,觸發on_bar函數:



def on_bar(self, context: Context, data: Dict[str, DataFrame]):
    pass

  • Context 是一個工具類,可以獲取其他bar或者計算cci、rsi等指標
  • data是推動的行情字典,可以用股票代碼獲取DataFrame類型的行情數據

在線交易

參見 tradertest.py ,會加載所有策略,稍微改動下也能支持制定策略


import easyquant
from easyquant import DefaultLogHandler

print('測試 DEMO')

# 東財
broker = 'eastmoney'

# 自己準備
# {
#     "user": "",
#     "password": ""# }
need_data = 'account.json'

log_type = 'file'

log_handler = DefaultLogHandler(name='測試', log_type=log_type, filepath='logs.log')

m = easyquant.MainEngine(broker,
                         need_data,
                         quotation='online',
                         # 1分鐘K線
                         bar_type="1m",
                         log_handler=log_handler)
m.is_watch_strategy = True  # 策略文件出現改動時,自動重載,不建議在生產環境下使用
m.load_strategy()
m.start()

運行結果:

測試 DEMO
already logined in
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
[2021-11-11 11:59:05.663694] INFO: 測試策略1: 164906 名稱:中國互聯 市值:2709.0 盈虧: -814.7999999999997
1.29
[2021-11-11 11:59:05.667705] INFO: 測試策略1: 164906 CCI:[200.           5.07246377  34.82587065]
[2021-11-11 11:59:05.668707] INFO: 測試策略1: 164906 RSI6:[75.21876239 52.10112261 52.10112261]
[2021-11-11 11:59:05.668707] INFO: 測試策略1: cci enter high space
[2021-11-11 11:59:05.668707] INFO: 測試策略1: 上升中,繼續持倉
[2021-11-11 11:59:05.668707] INFO: 測試策略1: 
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
[2021-11-11 12:00:07.303305] INFO: 測試策略1: 164906 名稱:中國互聯 市值:2709.0 盈虧: -814.7999999999997
1.29
[2021-11-11 12:00:07.314334] INFO: 測試策略1: 164906 CCI:[200.           5.07246377  34.82587065]
[2021-11-11 12:00:07.315336] INFO: 測試策略1: 164906 RSI6:[75.21876239 52.10112261 52.10112261]
[2021-11-11 12:00:07.316338] INFO: 測試策略1: cci enter high space
[2021-11-11 12:00:07.316338] INFO: 測試策略1: 上升中,繼續持倉
[2021-11-11 12:00:07.317342] INFO: 測試策略1: 
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
Balance(asset_balance=59686.86, current_balance=6834.62, enable_balance=56977.76, frozen_balance=0.0, market_value=2709.0999999999985, money_type='人民幣', pre_interest=0)
[2021-11-11 12:01:18.392363] INFO: 測試策略1: 164906 名稱:中國互聯 市值:2709.0 盈虧: -814.7999999999997
1.29

回測

參考backtest.py,設置回測的時間和策略,注意使用quotation需要爲tushare或者jqdata,可以自己申請

import easyquotation

import easyquant
from easyquant import  DefaultLogHandler, PushBaseEngine
from easyquant.log_handler.default_handler import MockLogHandler
from strategies.CCI import Strategy

print('backtest 回測 測試 ')

broker = 'mock'
need_data = 'account.json'

#
mock_start_dt = "2020-01-01"
mock_end_dt= "2021-11-11"


m = easyquant.MainEngine(broker, need_data,
                         quotation='tushare',
                         # quotation='jqdata',
                         bar_type="1d")

log_handler = MockLogHandler(context=m.context)

# 選擇策略
strategy = Strategy(user=m.user, log_handler=log_handler, main_engine=m)

m.start_mock(mock_start_dt, mock_end_dt, strategy)

print('mock end')

print(m.user.get_balance())

for deal in m.user.get_current_deal():
    print(deal.deal_time, deal.bs_type, deal.deal_price, deal.deal_amount)

運行結果舉例:


backtest 回測 測試 
[2021-11-11 12:09:44.962805] INFO: default: 啓動主引擎
[2020-02-04 15:00:00] INFO: 002230 RSI6:[48.76350746 20.16124773 38.11308036]
[2020-02-04 15:00:00] INFO: RSI上穿,抄底買入 35.15元 28300股
[2020-03-17 15:00:00] INFO: 沒錢買入
[2020-03-19 15:00:00] INFO: 沒錢買入
[2020-03-23 15:00:00] INFO: 跌破20日線,止損 34.74元 
[2020-03-23 15:00:00] INFO: 002230 盈虧: -14587.234999999835 
[2020-03-24 15:00:00] INFO: 002230 RSI6:[34.67789665 25.20904214 33.31120403]
[2020-03-24 15:00:00] INFO: RSI上穿,抄底買入 35.48元 27500股
[2020-03-25 15:00:00] INFO: 沒錢買入
[2020-03-30 15:00:00] INFO: 跌破20日線,止損 34.53元 
[2020-03-30 15:00:00] INFO: 002230 盈虧: -26124.999999999884 
[2020-04-01 15:00:00] INFO: 002230 RSI6:[29.6608755  28.83954667 29.33914896]
[2020-04-01 15:00:00] INFO: RSI上穿,抄底買入 34.5元 27400股
[2020-04-02 15:00:00] INFO: 沒錢買入
[2020-04-16 15:00:00] INFO: 跌破20日線,止損 34.42元 
[2020-04-16 15:00:00] INFO: 002230 盈虧: -2191.999999999953 
[2020-04-30 15:00:00] INFO: 002230 RSI6:[42.27921854 21.00976129 24.6876384 ]
[2020-04-30 15:00:00] INFO: RSI上穿,抄底買入 33.28元 28100股
[2020-05-18 15:00:00] INFO: 跌破20日線,止損 33.22元 
[2020-05-18 15:00:00] INFO: 002230 盈虧: -1686.000000000064 
[2020-05-19 15:00:00] INFO: 002230 RSI6:[63.47371421 33.38711899 36.98845238]
[2020-05-19 15:00:00] INFO: RSI上穿,抄底買入 34.63元 26800股
[2020-05-21 15:00:00] INFO: 跌破20日線,止損 32.87元 
[2020-05-21 15:00:00] INFO: 002230 盈虧: -47168.00000000014 
[2020-05-26 15:00:00] INFO: 002230 RSI6:[36.84886995 24.31515989 31.02544277]
[2020-05-26 15:00:00] INFO: RSI上穿,抄底買入 32.2元 27100股
[2020-05-27 15:00:00] INFO: 跌破20日線,止損 31.7元 
[2020-05-27 15:00:00] INFO: 002230 盈虧: -13550.000000000096 
[2020-05-28 15:00:00] INFO: 002230 RSI6:[33.23760915 31.96286073 36.84886995]
[2020-05-28 15:00:00] INFO: RSI上穿,抄底買入 31.76元 26900股
[2020-05-29 15:00:00] INFO: 沒錢買入
[2020-06-11 15:00:00] INFO: 002230 RSI6:[68.15891577 81.93030038 62.4026211 ]
[2020-06-11 15:00:00] INFO: RSI拐點,賣出 34.86元 26900股
[2020-06-11 15:00:00] INFO: 002230 盈虧: 83389.99999999994 
[2020-07-17 15:00:00] INFO: 002230 RSI6:[33.74292572 31.23748151 42.53459562]
[2020-07-17 15:00:00] INFO: RSI上穿,抄底買入 37.24元 25000股
[2020-07-20 15:00:00] INFO: 沒錢買入
[2020-07-23 15:00:00] INFO: 跌破20日線,止損 37.23元 
[2020-07-23 15:00:00] INFO: 002230 盈虧: -250.0000000001279 
[2020-07-28 15:00:00] INFO: 002230 RSI6:[26.57979316 25.44498903 25.44498903]
[2020-07-28 15:00:00] INFO: RSI上穿,抄底買入 36.0元 25700股
[2020-07-29 15:00:00] INFO: 沒錢買入
[2020-09-08 15:00:00] INFO: 沒錢買入
[2020-09-09 15:00:00] INFO: 跌破20日線,止損 34.87元 
[2020-09-09 15:00:00] INFO: 002230 盈虧: -29041.000000000065 
[2020-09-11 15:00:00] INFO: 002230 RSI6:[23.21420985 19.75351242 21.54530544]
[2020-09-11 15:00:00] INFO: RSI上穿,抄底買入 34.7元 25600股
[2020-09-14 15:00:00] INFO: 沒錢買入
[2020-09-15 15:00:00] INFO: 沒錢買入
[2020-09-16 15:00:00] INFO: 沒錢買入
[2020-09-18 15:00:00] INFO: 沒錢買入
[2020-09-24 15:00:00] INFO: 跌破20日線,止損 34.45元 
[2020-09-24 15:00:00] INFO: 002230 盈虧: -6400.0 
[2020-09-25 15:00:00] INFO: 002230 RSI6:[31.28480547 28.80417236 37.72008547]
[2020-09-25 15:00:00] INFO: RSI上穿,抄底買入 34.52元 25400股
[2020-09-28 15:00:00] INFO: 跌破20日線,止損 34.05元 
[2020-09-28 15:00:00] INFO: 002230 盈虧: -11938.000000000151 
[2020-09-29 15:00:00] INFO: 002230 RSI6:[39.35969455 24.42732022 31.28480547]
[2020-09-29 15:00:00] INFO: RSI上穿,抄底買入 34.49元 24900股
[2020-09-30 15:00:00] INFO: 跌破20日線,止損 34.27元 
[2020-09-30 15:00:00] INFO: 002230 盈虧: -5477.999999999972 
[2020-11-27 15:00:00] INFO: 002230 RSI6:[28.44005514 25.0207767  26.70993727]
[2020-11-27 15:00:00] INFO: RSI上穿,抄底買入 38.3元 22100股
[2020-11-30 15:00:00] INFO: 跌破20日線,止損 38.22元 
[2020-11-30 15:00:00] INFO: 002230 盈虧: -1767.9999999999623 
[2020-12-01 15:00:00] INFO: 002230 RSI6:[44.13552902 27.72604598 28.44005514]
[2020-12-01 15:00:00] INFO: RSI上穿,抄底買入 39.0元 21500股
[2020-12-02 15:00:00] INFO: 跌破20日線,止損 38.92元 
[2020-12-02 15:00:00] INFO: 002230 盈虧: -1719.9999999999634 
[2020-12-10 15:00:00] INFO: 002230 RSI6:[35.60943671 27.75226461 39.14467353]
[2020-12-10 15:00:00] INFO: RSI上穿,抄底買入 38.0元 21900股
[2020-12-28 15:00:00] INFO: 跌破20日線,止損 36.83元 
[2020-12-28 15:00:00] INFO: 002230 盈虧: -25623.000000000036 
[2020-12-29 15:00:00] INFO: 002230 RSI6:[32.07174913 27.74978633 39.49470813]
[2020-12-29 15:00:00] INFO: RSI上穿,抄底買入 37.06元 21600股
[2020-12-30 15:00:00] INFO: 沒錢買入
[2021-01-14 15:00:00] INFO: 002230 RSI6:[65.37887186 87.65459084 81.3661945 ]
[2021-01-14 15:00:00] INFO: RSI拐點,賣出 44.65元 21600股
[2021-01-14 15:00:00] INFO: 002230 盈虧: 163943.9999999999 
[2021-02-04 15:00:00] INFO: 002230 RSI6:[40.45563373 34.85232425 61.618979  ]
[2021-02-04 15:00:00] INFO: RSI上穿,抄底買入 45.3元 21100股
[2021-02-05 15:00:00] INFO: 跌破20日線,止損 43.68元 
[2021-02-05 15:00:00] INFO: 002230 盈虧: -34181.99999999995 
[2021-02-08 15:00:00] INFO: 002230 RSI6:[38.25296049 34.05735873 40.45563373]
[2021-02-08 15:00:00] INFO: RSI上穿,抄底買入 44.26元 20700股
[2021-03-09 15:00:00] INFO: 沒錢買入
[2021-03-17 15:00:00] INFO: 沒錢買入
[2021-03-22 15:00:00] INFO: 沒錢買入
[2021-04-13 15:00:00] INFO: 沒錢買入
[2021-04-14 15:00:00] INFO: 沒錢買入
[2021-05-10 15:00:00] INFO: 沒錢買入
[2021-05-26 15:00:00] INFO: 002230 RSI6:[76.69600435 84.43471078 72.43816252]
[2021-05-26 15:00:00] INFO: RSI拐點,賣出 61.26元 20700股
[2021-05-26 15:00:00] INFO: 002230 盈虧: 351900.0 
[2021-07-15 15:00:00] INFO: 002230 RSI6:[39.48466829 33.9016054  39.71800096]
[2021-07-15 15:00:00] INFO: RSI上穿,抄底買入 61.23元 20600股
[2021-07-16 15:00:00] INFO: 跌破20日線,止損 60.8元 
[2021-07-16 15:00:00] INFO: 002230 盈虧: -8857.999999999995 
[2021-07-21 15:00:00] INFO: 002230 RSI6:[48.9588887  32.03685393 44.09694546]
[2021-07-21 15:00:00] INFO: RSI上穿,抄底買入 61.53元 20200股
[2021-07-27 15:00:00] INFO: 跌破20日線,止損 58.02元 
[2021-07-27 15:00:00] INFO: 002230 盈虧: -70901.99999999996 
[2021-07-29 15:00:00] INFO: 002230 RSI6:[42.58407346 32.68979414 32.93389648]
[2021-07-29 15:00:00] INFO: RSI上穿,抄底買入 59.49元 19500股
[2021-07-30 15:00:00] INFO: 跌破20日線,止損 58.6元 
[2021-07-30 15:00:00] INFO: 002230 盈虧: -17355.00000000001 
[2021-08-10 15:00:00] INFO: 002230 RSI6:[37.95398922 30.4741093  32.0076735 ]
[2021-08-10 15:00:00] INFO: RSI上穿,抄底買入 57.34元 19800股
[2021-08-11 15:00:00] INFO: 跌破20日線,止損 56.46元 
[2021-08-11 15:00:00] INFO: 002230 盈虧: -17424.00000000005 
[2021-08-18 15:00:00] INFO: 002230 RSI6:[14.58881343 13.39682666 17.62430499]
[2021-08-18 15:00:00] INFO: RSI上穿,抄底買入 51.6元 21600股
[2021-08-19 15:00:00] INFO: 沒錢買入
[2021-08-23 15:00:00] INFO: 沒錢買入
[2021-08-31 15:00:00] INFO: 沒錢買入
[2021-09-02 15:00:00] INFO: 跌破20日線,止損 50.05元 
[2021-09-02 15:00:00] INFO: 002230 盈虧: -33480.000000000095 
[2021-09-06 15:00:00] INFO: 002230 RSI6:[50.10713849 21.29516507 23.76252327]
[2021-09-06 15:00:00] INFO: RSI上穿,抄底買入 51.94元 20600股
[2021-09-07 15:00:00] INFO: 跌破20日線,止損 51.93元 
[2021-09-07 15:00:00] INFO: 002230 盈虧: -205.99999999995902 
[2021-09-17 15:00:00] INFO: 002230 RSI6:[44.42750488 29.78456305 37.51313217]
[2021-09-17 15:00:00] INFO: RSI上穿,抄底買入 50.95元 20900股
[2021-10-22 15:00:00] INFO: 沒錢買入
mock end
[Balance(asset_balance=1231152.1139999998, current_balance=1187.1139999998268, enable_balance=1187.1139999998268, frozen_balance=0, market_value=1229965.0, money_type='人民幣', pre_interest=0.25)]
2020-02-04 00:00:00 B 35.15 28300
2020-03-23 00:00:00 S 34.74 28300
2020-03-24 00:00:00 B 35.48 27500
2020-03-30 00:00:00 S 34.53 27500
2020-04-01 00:00:00 B 34.5 27400
2020-04-16 00:00:00 S 34.42 27400
2020-04-30 00:00:00 B 33.28 28100
2020-05-18 00:00:00 S 33.22 28100
2020-05-19 00:00:00 B 34.63 26800
2020-05-21 00:00:00 S 32.87 26800
2020-05-26 00:00:00 B 32.2 27100
2020-05-27 00:00:00 S 31.7 27100
2020-05-28 00:00:00 B 31.76 26900
2020-06-11 00:00:00 S 34.86 26900
2020-07-17 00:00:00 B 37.24 25000
2020-07-23 00:00:00 S 37.23 25000
2020-07-28 00:00:00 B 36.0 25700
2020-09-09 00:00:00 S 34.87 25700
2020-09-11 00:00:00 B 34.7 25600
2020-09-24 00:00:00 S 34.45 25600
2020-09-25 00:00:00 B 34.52 25400
2020-09-28 00:00:00 S 34.05 25400
2020-09-29 00:00:00 B 34.49 24900
2020-09-30 00:00:00 S 34.27 24900
2020-11-27 00:00:00 B 38.3 22100
2020-11-30 00:00:00 S 38.22 22100
2020-12-01 00:00:00 B 39.0 21500
2020-12-02 00:00:00 S 38.92 21500
2020-12-10 00:00:00 B 38.0 21900
2020-12-28 00:00:00 S 36.83 21900
2020-12-29 00:00:00 B 37.06 21600
2021-01-14 00:00:00 S 44.65 21600
2021-02-04 00:00:00 B 45.3 21100
2021-02-05 00:00:00 S 43.68 21100
2021-02-08 00:00:00 B 44.26 20700
2021-05-26 00:00:00 S 61.26 20700
2021-07-15 00:00:00 B 61.23 20600
2021-07-16 00:00:00 S 60.8 20600
2021-07-21 00:00:00 B 61.53 20200
2021-07-27 00:00:00 S 58.02 20200
2021-07-29 00:00:00 B 59.49 19500
2021-07-30 00:00:00 S 58.6 19500
2021-08-10 00:00:00 B 57.34 19800
2021-08-11 00:00:00 S 56.46 19800
2021-08-18 00:00:00 B 51.6 21600
2021-09-02 00:00:00 S 50.05 21600
2021-09-06 00:00:00 B 51.94 20600
2021-09-07 00:00:00 S 51.93 20600
2021-09-17 00:00:00 B 50.95 20900
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章