区块链平台这些底层技术,又形成包括区块链钱包、区块链浏览器、节点竞选、矿池、开发组件、开发模块、技术社区及项目社群等一系列的生态系统,这些生态系统的完善程度直接决定着区块链底层平台的使用效率和效果。
量化交易系统有很多种,包括跨平台搬砖、趋势交易、对冲交易等。
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)