❶ 如何用優礦Quartz Signal快速實現Worldquant 101 Alpha
importnumpyasnp
start='2012-01-01'#回測起始時間
end='2016-01-01'#回測結束時間
benchmark='HS300'#策略參考標准
universe=set_universe("HS300",end)#證券池,支持股票和基金
capital_base=100000#起始資金
freq='d'#策略類型,'d'表示日間策略使用日線回測,'m'表示日內策略使用分鍾線回測
refresh_rate=5#調倉頻率,表示執行handle_data的時間間隔,若freq='d'時間間隔的單位為交易日,若freq='m'時間間隔為分鍾
deffoo(data,dependencies=['closePrice','highPrice','lowPrice'],max_window=9):
today=(2*data['closePrice'].ix[-1]-data['lowPrice'].ix[-1]-data['highPrice'].ix[-1])/(data['closePrice'].ix[-1]-data['lowPrice'].ix[-1])
day_9=(2*data['closePrice'].ix[-9]-data['lowPrice'].ix[-9]-data['highPrice'].ix[-9])/(data['closePrice'].ix[-9]-data['lowPrice'].ix[-9])
returnday_9-today
definitialize(account):#初始化虛擬賬戶狀態
a=Signal("worldquant_53",foo)
account.signal_generator=SignalGenerator(a)
defhandle_data(account):#每個交易日的買入賣出指令
weight=account.signal_result['worldquant_53']
weight=weight[weight>0]
weight=weight.replace([np.inf,-np.inf],np.nan).dropna()
weight=weight/weight.sum()
buy_list=weight.index
sell_list=account.valid_secpos
forstkinsell_list:
ifstknotinbuy_list:
order_to(stk,0)
total_money=account.referencePortfolioValue
prices=account.referencePrice
forstkinbuy_list:
ifstknotinprices:
continue
ifnp.isnan(prices[stk])orprices[stk]==0:#停牌或是還沒有上市等原因不能交易
continue
order_num=int(total_money*weight[stk]/prices[stk]/100)*100
iforder_num<100:
order_num=100
order_to(stk,order_num)
❷ 為什麼優礦的策略跑起來都很成功,是因為哪些因素沒有考慮到
題主說的量化學堂中的策略是一個小市值而且回測區間比較短,所以曲線看著還行,這個初衷是為了讓礦友對因子選股有個概念,沒有做更多精細的處理。
至於其他的疑問我簡單的回答一下
上面有提到手續費和滑點等,優礦的回測框架中都是有考慮的。
交易稅費 commission
滑點 slippage
在真實的證券成交環境下,下單的點位和最終成交的點位往往有一定的偏差,訂單下到市場後,往往會對市場的走向造成一定的影響。比如買單會提高市場價格,賣單會降低市場價格。
優礦為了更真實地模擬策略在真實市場的表現,增加了滑點模式,用於處理市場沖擊問題。
默認為slippage = Slippage(value=0.0, unit='perValue')
為了保障這些數據的連續性,優礦上已做前復權處理,在回測框架中使用回測框架提供的行情數據(比如 account.get_history)、回測框架在成交撮合時使用的行情數據,都已做前復權處理。
還有倖存者偏差、前視偏差、極端情況我們都提供了函數或者例子幫忙處理。
上面溫如提到了數據的問題,我司有100多人的數據隊伍在進行數據的生產及清洗,這些數據在優礦上大多是不收費提供使用的,也許我們不是最好,但我們一直在力求變的更好。
投資從來不是件容易的事,只希望通過自己的努力能幫助大家提升研究效率、降低運營成本,找尋alpha的路上能更加順暢一些。
❸ 怎麼學習python量化交易
下面教你八步寫個量化交易策略——單股票均線策略
1 確定策略內容與框架
若昨日收盤價高出過去20日平均價今天開盤買入股票
若昨日收盤價低於過去20日平均價今天開盤賣出股票
只操作一隻股票,很簡單對吧,但怎麼用代碼說給計算機聽呢?
想想人是怎麼操作的,應該包括這樣兩個部分
既然是單股票策略,事先決定好交易哪一個股票。
每天看看昨日收盤價是否高出過去20日平均價,是的話開盤就買入,不是開盤就賣出。每天都這么做,循環下去。
對應代碼也是這兩個部分
definitialize(context):
用來寫最開始要做什麼的地方
defhandle_data(context,data):
用來寫每天循環要做什麼的地方
2 初始化
我們要寫設置要交易的股票的代碼,比如 兔寶寶(002043)
definitialize(context):
g.security='002043.XSHE'#存入兔寶寶的股票代碼
3 獲取收盤價與均價
首先,獲取昨日股票的收盤價
#用法:變數=data[股票代碼].close
last_price=data[g.security].close#取得最近日收盤價,命名為last_price
然後,獲取近二十日股票收盤價的平均價
#用法:變數=data[股票代碼].mavg(天數,『close』)
#獲取近二十日股票收盤價的平均價,命名為average_price
average_price=data[g.security].mavg(20,'close')
4 判斷是否買賣
數據都獲取完,該做買賣判斷了
#如果昨日收盤價高出二十日平均價,則買入,否則賣出
iflast_price>average_price:
買入
eliflast_price<average_price:
賣出
問題來了,現在該寫買賣下單了,但是拿多少錢去買我們還沒有告訴計算機,所以每天還要獲取賬戶里現金量。
#用法:變數=context.portfolio.cash
cash=context.portfolio.cash#取得當前的現金量,命名為cash
5 買入賣出
#用法:order_value(要買入股票股票的股票代碼,要多少錢去買)
order_value(g.security,cash)#用當前所有資金買入股票
#用法:order_target(要買賣股票的股票代碼,目標持倉金額)
order_target(g.security,0)#將股票倉位調整到0,即全賣出
6 策略代碼寫完,進行回測
把買入賣出的代碼寫好,策略就寫完了,如下
definitialize(context):#初始化
g.security='002043.XSHE'#股票名:兔寶寶
defhandle_data(context,data):#每日循環
last_price=data[g.security].close#取得最近日收盤價
#取得過去二十天的平均價格
average_price=data[g.security].mavg(20,'close')
cash=context.portfolio.cash#取得當前的現金
#如果昨日收盤價高出二十日平均價,則買入,否則賣出。
iflast_price>average_price:
order_value(g.security,cash)#用當前所有資金買入股票
eliflast_price<average_price:
order_target(g.security,0)#將股票倉位調整到0,即全賣出
現在,在策略回測界面右上部,設置回測時間從20140101到20160601,設置初始資金100000,設置回測頻率,然後點擊運行回測。
7 建立模擬交易,使策略和行情實時連接自動運行
策略寫好,回測完成,點擊回測結果界面(如上圖)右上部紅色模擬交易按鈕,新建模擬交易如下圖。 寫好交易名稱,設置初始資金,數據頻率,此處是每天,設置好後點提交。
8 開啟微信通知,接收交易信號
點擊聚寬導航欄我的交易,可以看到創建的模擬交易,如下圖。 點擊右邊的微信通知開關,將OFF調到ON,按照指示掃描二維碼,綁定微信,就能微信接收交易信號了。
❹ python量化哪個平台可以回測模擬實盤還不要錢
Python量化投資框架:回測+模擬+實盤
Python量化投資 模擬交易 平台 1. 股票量化投資框架體系 1.1 回測 實盤交易前,必須對量化交易策略進行回測和模擬,以確定策略是否有效,並進行改進和優化。作為一般人而言,你能想到的,一般都有人做過了。回測框架也如此。當前小白看到的主要有如下五個回測框架: Zipline :事件驅動框架,國外很流行。缺陷是不適合國內市場。 PyAlgoTrade : 事件驅動框架,最新更新日期為16年8月17號。支持國內市場,應用python 2.7開發,最大的bug在於不支持3.5的版本,以及不支持強大的pandas。 pybacktest :以處理向量數據的方式進行回測,最新更新日期為2個月前,更新不穩定。 TradingWithPython:基於pybacktest,進行重構。參考資料較少。 ultra-finance:在github的項目兩年前就停止更新了,最新的項目在谷歌平台,無奈打不開網址,感興趣的話,請自行查看吧。 RQAlpha:事件驅動框架,適合A股市場,自帶日線數據。是米筐的回測開源框架,相對而言,個人更喜歡這個平台。 2 模擬 模擬交易,同樣是實盤交易前的重要一步。以防止類似於當前某券商的事件,半小時之內虧損上億,對整個股市都產生了惡劣影響。模擬交易,重點考慮的是程序的交易邏輯是否可靠無誤,數據傳輸的各種情況是否都考慮到。 當下,個人看到的,喜歡用的開源平台是雪球模擬交易,其次是wind提供的模擬交易介面。像優礦、米筐和聚寬提供的,由於只能在線上平台測試,不甚自由,並無太多感覺。 雪球模擬交易:在後續實盤交易模塊,再進行重點介紹,主要應用的是一個開源的easytrader系列。 Wind模擬交易:若沒有機構版的話,可以考慮應用學生免費版。具體模擬交易介面可參看如下鏈接:http://www.dajiangzhang.com/document 3 實盤 實盤,無疑是我們的終極目標。股票程序化交易,已經被限制。但對於萬能的我們而言,總有解決的辦法。當下最多的是破解券商網頁版的交易介面,或者說應用爬蟲爬去操作。對我而言,比較傾向於食燈鬼的easytrader系列的開源平台。對於機構用戶而言,由於資金量較大,出於安全性和可靠性的考慮,並不建議應用。 easytrader系列當前主要有三個組成部分: easytrader:提供券商華泰/傭金寶/銀河/廣發/雪球的基金、股票自動程序化交易,量化交易組件 easyquotation : 實時獲取新浪 / Leverfun 的免費股票以及 level2 十檔行情 / 集思路的分級基金行情 easyhistory : 用於獲取維護股票的歷史數據 easyquant : 股票量化框架,支持行情獲取以及交易 2. 期貨量化投資框架體系 一直待在私募或者券商,做的是股票相關的內容,對期貨這塊不甚熟悉。就根據自己所了解的,簡單總結一下。 2.1 回測 回測,貌似並沒有非常流行的開源框架。可能的原因有二:期貨相對股票而言,門檻較高,更多是機構交易,開源較少; 去年至今對期貨監管控制比較嚴,至今未放開,只能做些CTA的策略,另許多人興致泱泱吧。 就個人理解而言,可能wind的是一個相對合適的選擇。 2.2 模擬 + 實盤 vn.py是國內最為流行的一個開源平台。起源於國內私募的自主交易系統,2015年初啟動時只是單純的交易API介面的Python封裝。隨著業內關注度的上升和社區不斷的貢獻,目前已經一步步成長為一套全面的交易程序開發框架。如官網所說,該框架側重的是交易模塊,回測模塊並未支持。 能力有限,如果對相關框架感興趣的話,就詳看相關的鏈接吧。個人期望的是以RQAlpha為主搭建回測框架,以雪球或wind為主搭建模擬框架,用easy系列進行交易。
❺ 用優礦做量化交易可以嗎
量化交易是不挑期貨品種的,只是你量化交易的模型和交易對象是否匹配。 量化交易不是永動機,不是印鈔機,最終還是要看人對期貨的理解。
❻ 如何用quartz signal快速實現worldquant 101 alpha
優礦的500萬實盤在如火如荼地進行中,我們已經看到有礦友利用經典的機器學習演算法和新的Quartz Signal模塊對於優礦上現有因子的利用進行探索,但是對於大多數信號/因子研究者來說,尋找新的Alpha依然是其孜孜以求的目標。
如何去尋找新的Alpha因子的靈感成為擺在量化研究者面前無法迴避的問題。
我們注意到,Zura Kakushadze 等人最新發表的論文101 Formulaic Alpha(http://papers.ssrn.com/sol3/papers.cfm?abstra…) 里提到了很多基於價量數據構建的"Alpha"因子,為我們提供了很多新的靈感。
本文將先簡單介紹論文中提到的Alpha因子表達式語法以及含義,之後會介紹如何用Quartz Signal便捷地實現這些Alpha,最後會提供2個在論文中出現並且效果不錯的Alpha因子供大家參考。
Formulaic Alpha簡介
研讀過上文提到的論文,我們發現,論文中提到的Formulaic Alpha就是用一個表達式來表示一個Alpha因子:
· 寫出的表達式是在每一個調倉日對每一支股票按照該表達式進行計算
· 例如:1/close; 對universe中每一支股票,計算1/closePrice,然後此向量被標准化,即除以其數值的總和(所有數值相加的結果為 1)。這將為所有股票創建了一個基於「權重」的向量,每個權重代表投資組合中投資於該股票的資金比例
· 其支持的數據有:open(開盤價)/close(收盤價)/high(最高價)/low(最低價)/vwap(日內交易量加權價格)/returns(單日收益率)等等
我們認為這種Formulaic Alpha的表達形式有以下特點:
· 表達簡潔,但隱藏了太多細節,用戶無法看到具體的調倉信息
· 受限於表達式表達能力的不足,提供了豐富的內置函數,幫助用戶完成了cross-sectional信息的處理
內置函數
· 可分為橫截面函數和時間序列函數兩大類,其中時間序列函數名多為以ts_開頭
· 大部分函數命名方式較為直觀
· abs(x) log(x)分別表示x的絕對值和x的自然對數
· rank(x)表示某股票x值在橫截面上的升序排名序號,並將排名歸一到[0,1]的閉區間
· delay(x,d)表示x值在d天前的值
· delta(x,d)表示x值的最新值減去x值在d天前的值
· correlation(x,y,d) covariance(x,y,d)分別表示x和y在長度為d的時間窗口上的Pearson相關系數和協方差
· ts_min(x,d) ts_max(x,d) ts_argmax(x,d) ts_argmin(x,d) ts_rank(x) sum(x,d) stddev(x,d)等均可以通過函數名稱了解其作用
· 更多地函數解釋可以參考論文的附錄
Quartz Signal模塊簡介
正如API幫助文檔中提到的,Signal模塊是優礦為方便因子/信號研究者提供的工具,將用戶從與信號研究無關的數據獲取、下單邏輯中抽離出來,用戶可以將精力集中於按照自己的思路開發新的信號。
使用Signal自定義信號的通用實現過程如下:
def foo(data, dependencies=['PE 39;], max_window=4):
return data['PE 39;].mean()
# in initialize(account)
a = Signal("signal_a", foo)
account.signal_generator = SignalGenerator(a)
# in handle_data(account)
account.signal_result['signal_a']
我們可以將Quartz Signal的使用過程分為四個步驟:
定義實現信號邏輯的函數(在上例中即為foo函數)
在initialize函數中定義Signal,在實例化Signal類時將信號名字和描述函數作為參數傳入
在initialize函數中將需要使用的信號注冊到account.signal_generator中,可以注冊多個信號
在handle_data中通過account.signal_result獲取計算好的信號值
我們重點介紹一下用戶需要完成的信號描述函數:
信號描述函數實際上是用戶在每一個調倉日對於可以獲得數據的處理邏輯
信號描述函數名可以按照Python函數的命名規范任意定義,但其參數必須為一個非關鍵字參數data,兩個關鍵字參數dependencies和max_window
dependencies的參數格式必須為str構成的list,list的元素為該函數中需要使用的因子名稱,具體支持因子列表參考幫助文檔
max_window的參數格式為int,表示用戶希望用到過去max_window天的因子數據
data則是根據dependencies和max_window,Quartz Signal模塊幫助用戶取到的數據,其格式為一個dict,key為因子名稱,value為max_window*universe_length的Pandas DataFrame
信號描述函數的返回值必須為一個長度與data中每一元素列數相同的Pandas Series
如下圖所示:
上圖描述的就是data的結構,其中data只有一個元素,其key為"PE",value就是上圖表格所示的Pandas DataFrame,具體地,其columns為universe的secID,其index為%Y%m%d格式的日期字元串
Quartz Signal v.s. Formulaic Alpha
由上述描述可見,使用Quartz Signal模塊可以便捷地實現Formulaic Alpha,同時相比Formulaic Alpha表達式有以下優勢:
更加直觀:
o用戶在預先定義信號描述函數時,就可以明晰地定義自己需要的因子數據和時間窗口
o用戶可以在Quartz框架中靈活定義自己的調倉頻率和下單邏輯,並可以直觀地看到每次調倉的股票列表
更加靈活:
oFormulaic Alpha限制了表達式的計算結果必須代表相應股票在投資組合中的權重,而Quartz Signal並沒有此限制,用戶可以在handle_data中按照自己的想法任意處理信號值
o信號描述函數的data是以Pandas DataFrame的格式傳入的,這樣用戶就可以在函數中同時看到橫截面數據和時間序列數據,為用戶提供了更多可能
更加強大:信號描述函數的data是以Pandas DataFrame的格式傳入的,Pandas豐富的內置函數可以幫助我們完成較復雜Formulaic Alpha表達式才能完成的任務(見最後一個示例)
更多數據:Quartz Signal不僅支持openPrice/closePrice/highPrice/lowPrice/turnoverVol等價量信息,還支持PE、RSI等更豐富的因子
下面我們就用Quartz Signal模塊實現了一個論文中提到的Formulaic Alpha:
用Quartz Signal實現一個Formulaic Alpha
以WebSim論文中alpha 53為例,其原始表達式為:
(−1∗delta((((close−low)−(high−close))/(close−low)),9))
化簡可得,((close - low) - (high - close)) / (close - low)的9日之前值-當前值
繼續化簡可得:(2∗close−low−high)/(close−low)
我們深入研究該因子可以發現:
(2∗close−low−high)/(close−low)=1−(high−close)/(close−low)
前面的常數1可以通過delta消掉,其實可以簡化為(high−close)/(close−low)的現值-9天之前的值
而(high−close)/(close−low)本身則代表了收盤價在日內波動中的位置,可以看做是買入意願的一種體現
我們強烈建議大家在實現這些Formulaic Alpha因子之前先花一些精力去理解其經濟含義,不僅可以加深對其原理的理解,在某些時候還可以簡化實現。
我們以論文中的Alpha 26為例,其原始表達式為:
−1∗ts_max(correlation(ts_rank(volume,5),ts_rank(high,5),5),3)
我們當然可以按照其原始表達式一步步地先對過去5天的成交量和最高價進行排名,再取相關系數;但是較熟悉Pandas DataFrame內置函數或者統計知識較豐富的研究者可以發現,correlation(ts_rank(volume,5),ts_rank(high,5),5) 其實就是在計算Spearman Rank Correlation Coefficient,使用DataFrame內置的corr(method="spearman")函數就可以完成計算,可以大大提高開發效率。
在我們的模擬的過程中發現,如果按照原公式進行計算,無論是long還是short的結果都跑不贏大盤,同時對於成交量和最高價相關性較高的股票將會是市場追逐的熱點股票,應該分配更大的權重。
所以在上述代碼中我們將原Formulaic Alpha前面的負號去掉。
當然,對於論文中出現的某些因子可能較難於理解其經濟學意義,我們鼓勵大家用Quartz Signal將其實現之後發到社區上與大家一起討論。
對於Quartz Signal模塊有哪些不盡如人意的地方也可以反饋給我們,幫助我們持續改進。
❼ 優礦可以做實盤交易嗎
量化投資是以計算機技術為工具的投資運算方式,Btcliving是「定性思想的量化應用」,更強調數據。我知道這個應該不是很難。
❽ 優礦怎麼獲取同一天所有股票的開盤價
想要獲取同一天所有股票的開盤價的話,直接在你的交易軟體上就可以直接看的,就有開盤價一欄,而且還可以智能排序,很方便的,不知道的話可以教你。
❾ 通聯數據股份公司的經營內容
主要產品介紹
通聯數據商城
將多渠道獲取的權威源數據,通過國際領先的大數據和雲計算技術,建立完整的金融大數據採集、處理、存儲、深度挖掘、分析、服務和展現平台;將海量金融大數據的可得性、分析和處理能力以最快速度提供給客戶。
通聯智能量化投研平台
1、 雅典娜―智能事件研究
雅典娜是基於自然人機交互的智能事件策略研究與分析平台;是針對中國A股市場事件驅動型策略,提供分析研究服務的專業化服務產品;用戶可以使用自然語言,研究影響證券價格變動的政經社會事件庫,進行股票篩選以及自定義交易策略回測配置。
2、優礦―量化實驗室
優礦以大數據和雲計算為依託為個人量化投資者提供海量免費的金融數據和量化因子、穩定加密可擴展的私有雲平台、高效快速的金融計算工具和回測框架。讓用戶可以輕松做研究、跑回測、跟實盤。
3、 通聯策略研究
通聯策略研究是以先進的分布式計算方式為基礎,為金融投資團隊提供高速一體化的策略分析、優化與管理的專業化服務平台;功能包括策略信號的復合加工與Alpha提純處理、收益風險效率優化組合的構建與生成、策略回測表現的歸因分析等。
4、 通聯智能研報
通聯智能研報是利用多元化的智能學習技術實現實時跟蹤市場熱點,迅速捕捉市場情緒,系統解讀投資價值的個股研究平台;它聚合了規模龐大的因子、新聞、研究報告等數據,通過數據挖掘和文本語義分析技術,為用戶提供最新最全面反應市場動態的個股研究信息。
通聯多資產投資管理平台
1、通聯演算法交易
通聯演算法交易提供跨市場、多資產的交易訂單管理和交易執行管理方案;並通過提供交易演算法,幫助用戶降低交易成本。
2、通聯組合管理
通聯組合管理提供全球化的多資產、多策略的投資組合管理方案;功能包括實時監控組合盈虧的板塊分布,對組合收益和風險進行歸因分析。
3、通聯資產證券化
提供國內首個專業針對RMBS、ABS、CMBS、CLO等資產證券化產品的定價分析平台。採用高效分布式計算,以及自助研發的Payoff Engine,實現快速建模,靈活設計交易結構,自由檢驗回報預期。
通聯金融移動辦公平台
1、 通聯辦公社交
通聯辦公社交提供社會化溝通方式,加強組織扁平化管理。
2、通聯流程管理
通聯流程管理幫助金融企業快速搭建企業流程管控體系,提高管理效率。
3、通聊
金融企業移動辦公即時通訊工具;微信構築生活友情,通聊實現辦公高效。