量化合约开发源码案例丨量化合约系统开发(详细及策略)

量化合约开发源码案例丨量化合约系统开发(详细及策略)

 什么是量化交易?确切地说,量化交易属于人工智能的一个应用分支,它利用计算机的强大运算能力,用数学模型来模仿人的思维作出决策,通过数据建模、统计学分析、程序设计等工具

区块链技术概括起来是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术。其实,区块链技术并不是一种单一的、全新的技术,而是多种现有技术整合的结果,这些技术与数据库巧妙地组合在一起,形成了一种新的数据记录、传递、存储与呈现的方式

  区块链技术是一种新型互联网技术,它是一种公开的、分布式的账簿,可以有效核查和永久记录各方之间的交易。具体来说,它是由网络上一个个储存区块组成的相互连接的链条,在每个区块中,储存着一定时间内网络链条中所有交流信息的数据。由于数据在每个区块上都有实时记录,也就使得区块链具备去中心化和不可篡改的特点。

  量化交易系统有很多种,包括跨平台搬砖、趋势交易、对冲交易等。

  1、跨平台搬砖是指,当不同目标平台价差达到一定金额,在价高的平台卖出,在价低的平台买入。

  2、趋势交易会更加复杂一些,它根据趋势的指标来发出卖出和买入的信号。

  3、对冲是指同时进行两笔与行情相关、买卖方向相反、数量相当、盈亏相抵的交易,以达到对冲风险的效果。量化交易的特点量化交易是一个比较新的概念,它最鲜明的特征就是运用模型。

  import requests

  from time import sleep

  from datetime import datetime,time

  from dateutil import parser

  #__init__,构造,初始化,实例化

  class AstockTrading(object):

  def __init__(self,strategy_name):

  self._strategy_name=strategy_name

  self._Dt=[]#交易时间

  self._Open=[]#开盘价

  self._High=[]#最高价

  self._Low=[]#最低价

  self._Close=[]#最新价

  self._Volume=[]

  self._tick=[]#数据

  self._last_bar_start_minute=None#最后一次更新bar的时间

  self._isNewBar=False#是否有新bar

  self._ma20=None

  #当前订单,dict,字典

  self._current_orders={}

  #历史订单

  self._history_orders={}

  self._order_number=0

  def get_tick(self):

  headers={Referer:”https://finance.sina.com.cn“}

  page=requests.get(“https://hq.sinajs.cn/list=sh600519“,headers=headers)

  stock_info=page.text

  mt_info=stock_info.replace(“””,””).split(“=”)[1].split(“,”)

  #最新价

  last=float(mt_info[1])

  trade_datetime=mt_info[30]++mt_info[31]

  self._tick=(trade_datetime,last)

  def get_history_data_from_local_machine(self):

  #tushare数据来源

  #self.Open=[1,2,3]

  #self.High=[2,3,4]

  pass

  #how save and import history data?

  #策略

  def bar_generator(self):

  #assume we have history data already

  #1、update bars,calculate 5 minutes ma20,not daily data

  #2、compare last and ma20->buy or sell or pass

  #assume we have history data,Open,High,Low,Close,Dt

  #这里可以是5minutes、10minutes、15minutes、20minutes、30minutes

  if self._tick[0].minute%5==0 and self._tick[0].minute!=self._last_bar_start_minute:

  self._last_bar_start_minute=self._tick[0].minute

  self._Open.insert(0,self._tick[1])

  self._High.insert(0,self._tick[1])

  self._Low.insert(0,self._tick[1])

  self._Close.insert(0,self._tick[1])

  self._Dt.insert(0,self._tick[0])

  self._isNewBar=True

  else:

  #update current bar

  self._High[0]=max(self._High[0],self._tick[1])

  self._Low[0]=max(self._Low[0],self._tick[1])

  self._Close[0]=self._tick[1]

  self._Dt[0]=self._tick[0]

  self._isNewBar=False

  def _buy(self,price,volume):

  #create an order

  self._order_number+=1

  key=”order”+str(self._order_number)

  self._current_orders[key]={

  ”open_datetime”:self._Dt[0],

  ”open_price”:price,

  ”volume”:volume#股数

  }

  pass

  def _sell(self,key,price):

  self._current_orderskey=price

  self._current_orderskey=self._Dt[0]

  #move order from current orders to history orders

  self._history_orders[key]=self._current_orders.pop(key)

  def strategy(self):

  #last<0.95ma20,long position(仓位),last>ma201.05,sell

  if self._isNewBar:

  sum_=0

  for item in self._Close[1:21]:

  sum_=sum_+item

  self._ma20=sum_/20

  if 0==len(self._current_orders):

  if self._Close[0]<0.95*self._ma20:

  #100000/44.28=2258 44.28是当前价格,10万指的你拥有的钱

  #2258->2200 shares

  volume=int(100000/self._Close[0]/100)*100

  self._buy(self._Close[0]+0.01,volume)#这里的0.01是为了防止挂单,我们需要即可买入

  elif 1==len(self._current_orders):

  if self._Close[0]>self._ma20*1.05:

  key=self._current_orders.keys()[0]

  self._sell(key,self._Close[0]-0.01)

  else:#len()=2

  raise ValueError(“we have more then 1 current orders”)

  #Close[0]in between 0.95ma20 and 1.05ma20,do nothing

  ma=AstockTrading(600036)#类实例化

  ma.get_history_data_from_local_machine()

  #交易时间是9:30-11:30,13:00-15:00

  while time(9,26)<datetime.now().time()<time(11,32)

  or time(13)<datetime.now().time()<time(15,2):

  ma.get_tick()

  ma.bar_generator()

  ma.strategy()

  #trade_time=parser.parse(ma._tick[0]).time()

  #sleep(3)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注