量化合約跟單交易系統開發說明分析,量化合約跟單交易原始碼平臺開發

MrsFu123發表於2022-05-27


程式碼如下解析:


  import pandas as pd


  import matplotlib.pyplot as plt


  import backtrader as bt


  import backtrader.feeds as btfeed


  import backtrader.indicators as btind


  from backtrader import analyzers


  import pyalgotrade


  import PySimpleGUI as sg


  import akshare as ak


  import pandas as pd


  import datetime


  stock=sg.popup_get_file('輸入股票程式碼比如sz002466')


  start_date=sg.popup_get_file('輸入資料開始時間比如20200101')


  start_cash=sg.popup_get_file('輸入開始資金比如1000000')


  #定義測試類


  class testStrategy(bt.Strategy):


  #定義記錄函式


  def log(self,txt,dt=None):


  dt=dt or self.datas[0].datetime.date(0)


  print('%s,%s'%(dt.isoformat(),txt))


  #初始化資料


  def __init__(self):


  self.dataclose=self.datas[0].close


  #定義交易狀態檢測函式,交易前


  def notify_order(self,order):


  #如果交易提交/接受


  if order.status in[order.Submitted,order.Accepted]:


  print('交易提交,交易接受')


  #如果交易完成


  if order.status in[order.Completed]:


  #如果交易型別是買


  if order.isbuy():


  self.log('買的價格,%.2f'%order.executed.price)


  #如果交易型別是賣


  elif order.issell():


  self.log('賣的價格,%.2f'%order.executed.price)


  self.bar_executed=len(self)


  #如果交易交易取消,保證金不足,交易拒絕


  elif order.status in[order.Canceled,order.Margin,order.Rejected]:


  self.log('交易取消/保證金不足/交易拒絕')


  self.order=None


  #主交易函式


  def next(self):


  self.log('收盤價,%.2f'%self.dataclose[0])


  #寫交易函式,連續下跌3天買入,連續上漲3天賣出


  #如果今天的價格小於昨天的價格


  if self.dataclose[0]<self.dataclose[-1]:


  #如果昨天的價格小於前天的價格


  if self.dataclose[-1]<self.dataclose[-2]:


  #記錄買賣的價格


  self.log('買的價格%.2f'%self.dataclose[0])


  self.buy(size=200)#單位為股,代表1手


  elif self.dataclose[0]>self.dataclose[-1]:


  if self.dataclose[-1]>self.dataclose[-2]:


  self.log('賣出的價格%.2f'%self.dataclose[0])


  self.sell(size=100)


  #簡單例子


  if __name__=="__main__":


  #將大腦例項化


  cerebro=bt.Cerebro()


  cerebro.addstrategy(testStrategy)


  #加入資料


  df=ak.stock_zh_a_daily(symbol=stock,start_date=start_date)


  df.index=pd.to_datetime(df['date'])


  data=btfeed.PandasData(dataname=df)


  cerebro.adddata(data=data)


  #設定開始資金


  cerebro.broker.set_cash(int(start_cash))


  #設定交易費用


  cerebro.broker.setcommission(0.003)


  print('開始值{}'.format(cerebro.broker.getvalue()))


  cerebro.run()


  print('最終值{}'.format(cerebro.broker.getvalue()))


  cerebro.plot(style='candle')


  plt.show()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993319/viewspace-2897593/,如需轉載,請註明出處,否則將追究法律責任。

相關文章