來源:Python爬蟲與資料探勘作者:Snowball一、簡介大家好,我是Snowball。今天給大家分享的內容是基於Python程式設計,實現股票交易相關功能開發,如果讀者對股票或金融衍生物交易不
2021-06-15 10:44:07
來源:Python爬蟲與資料探勘
作者:Snowball
一、簡介
大家好,我是Snowball。今天給大家分享的內容是基於Python程式設計,實現股票交易相關功能開發,如果讀者對股票或金融衍生物交易不太瞭解,又比較感興趣的話可自行查詢相關資料。
接下來筆者會給大家介紹股票交易中的常見幾種交易策略實現思路和源碼編寫過程,如果大家聽說過量化交易這個詞語的話,對其中的交易策略或許瞭解過,大概意思就是在股票、加密貨幣或者金融衍生物在價格的波動過程中根據其交易策略進行不斷的買入和賣出,不斷的套利,降低持倉陳本,來達到收益最大化。
常見的交易策略有很多種,例如趨勢型,網格型,剝頭皮,概率法則,高頻交易等,今天主要給大家介紹2種低頻的交易策略,高拋低吸網格交易策略、日內做T策略。其他的交易策略較複雜,讀者可自行百度瞭解。
二、需求分析&實現思路
每個交易日的股票都會上漲或者下跌,在這個過程中筆者們偶爾會想針對部分股票進行股價的漲跌幅進行監控,或者自動進行交易,在這個需求前提下,現有券商、股票分析軟體都會帶有機器人自動交易策略功能,大部分都需要收費或者部分策略不能滿足自己的需求,筆者這邊提供2種實現思路:
1、藉助現有量化平臺編寫策略和回測分析,然後在券商軟體層面進行策略執行。
2、自己編寫功能程式碼來監控估價,對股價波動進行特殊處理滿足特殊需求。
第一種實現成本較低,但功能受限於平臺;第二種實現成本毋庸置疑相對較高,但是邏輯可以自己控制。
三、藉助現有量化平臺編寫策略和回測分析
這裡利用米筐量化實現和分析自己的交易策略,需要先註冊個賬號,然後進入到平臺-筆者的策略中進行策略編寫,平臺的功能使用可以參考平臺文件。
筆者這裡貼出筆者自己寫的2種策略程式碼,這個平臺只支援使用Python指令碼編寫。
1)價差交易策略
平臺截圖:
部分程式碼如下,詳細程式碼可以自己手擼實現,也可以在文末進行獲取:
# 你選擇的證券的資料更新將會觸發此段邏輯,例如日或分鐘歷史資料切片或者是實時資料切片更新
def handle_bar(context, bar_dict):
...
if newPrice >= context.nextSellPrice:
logger.info("執行高拋交易,對應價格:{}".format(newPrice))
amount = context.portfolio.positions[context.s1].quantity
if amount >= context.tradeNumber:
logger.info("執行高拋交易,對應數量:{}".format(context.tradeNumber))
order_shares(context.s1, -context.tradeNumber)
plot("S", newPrice)
elif amount >= 100:
logger.info("執行高拋交易,對應數量:{}".format(amount))
order_shares(context.s1, -amount)
plot("S", newPrice)
calc_next_trade_price(context,newPrice)
obj = {
"nextSellPrice":context.nextSellPrice,
"nextBuyPrice":context.nextBuyPrice,
"curTradePrice":context.curTradePrice
}
context.buyTradeList.append(obj)
if newPrice <= context.nextBuyPrice:
logger.info("執行低吸交易,對應價格:{}".format(newPrice))
amount = int(context.portfolio.cash / newPrice / 100.0) * 100
if amount >= context.tradeNumber:
logger.info("執行低吸交易,對應數量:{}".format(context.tradeNumber))
order_shares(context.s1, context.tradeNumber)
plot("B", newPrice)
calc_next_trade_price(context,newPrice)
obj = {
"nextSellPrice":context.nextSellPrice,
"nextBuyPrice":context.nextBuyPrice,
"curTradePrice":context.curTradePrice
context.sellTradeList.append(obj)
選擇回測時間段,點選右側平臺右側按鈕運行回測,結果頁面如下
從結果中可以看到,對招商銀行[600036]這隻股票進行價差網格交易,其參數設定在上漲8%的時候賣出,下跌8%的時候買入,最大連續下跌買入次數為3次。
回測收益:13.628%
回測年化收益:17.096%
比基準年化收益-6%高出非常之大,這是在股價波動的過程中可以進行執行該策略來不斷的降低持倉成本。從交易詳情面板來看,這個策略可以通過參數調節交易頻率,在上漲下跌比率較大的情況下,其交易次數是能控制的相對較少,結果圖如下:
2)日內做T策略
同樣的,只貼部分程式碼
# 你選擇的證券的資料更新將會觸發此段邏輯,例如日或分鐘歷史資料切片或者是實時資料切片更新
def handle_bar(context, bar_dict):
...
newPrice = bar_dict[context.s1].last
if newPrice >= context.nextSellPrice:
context.lastTradeType = 1
logger.info("執行高拋交易,對應價格:{}".format(newPrice))
amount = context.portfolio.positions[context.s1].quantity
#if amount - context.tradeNumber >= context.lockStockNumber:
if amount - context.tradeNumber >= 0:
logger.info("執行高拋交易,對應數量:{}".format(context.tradeNumber))
order_shares(context.s1, -context.tradeNumber)
plot("S", newPrice)
else:
logger.info("股票數量不足,無法執行高拋交易,對應數量:{}".format(amount))
return
calc_next_trade_price(context,newPrice)
obj = {
"nextSellPrice":context.nextSellPrice,
"nextBuyPrice":context.nextBuyPrice,
"curTradePrice":context.curTradePrice
}
context.buyTradeList.append(obj)
if newPrice <= context.nextBuyPrice:
context.lastTradeType = 0
logger.info("執行低吸交易,對應價格:{}".format(newPrice))
amount = int(context.portfolio.cash / newPrice / 100.0) * 100
if amount >= context.tradeNumber:
logger.info("執行低吸交易,對應數量:{}".format(context.tradeNumber))
order_shares(context.s1, context.tradeNumber)
plot("B", newPrice)
else:
logger.info("現金不足,無法執行低吸交易,對應數量:{}".format(amount))
return
calc_next_trade_price(context,newPrice)
obj = {
"nextSellPrice":context.nextSellPrice,
"nextBuyPrice":context.nextBuyPrice,
"curTradePrice":context.curTradePrice
}
context.sellTradeList.append(obj)
總體來說,程式碼邏輯還是比較簡單,就是對價格的漲跌進行處理,其參數設定在日內上漲2%的時候賣出,下跌2%的時候買入,初始買入資金比例7成,鎖定最低倉位5成。然後運行回測,其結果如下
回測收益:5.501%
回測年化收益:6.839%
基準收益:19.26%
可以看到日內做T這種高頻交易,在長期來看收益可能並不高,適合在短期價格內運行。
四、總結
我是Snowball。這個量化平臺在筆者的熟悉情況下,它可以很方便的回測你的交易策略,但是在股價盯盤上,或者自定義邏輯上支援的不是很完善,很多功能也是需要收費才能使用。本文基於Python,藉助現有量化平臺編寫策略和回測分析,希望對大家的學習有所幫助。
相關文章
來源:Python爬蟲與資料探勘作者:Snowball一、簡介大家好,我是Snowball。今天給大家分享的內容是基於Python程式設計,實現股票交易相關功能開發,如果讀者對股票或金融衍生物交易不
2021-06-15 10:44:07
【6月15日訊】 導語,在華為官宣鴻蒙OS系統裝機量突破一千萬大關以後,有關於華為OS系統在2021年將完成「3億臺」裝機量小目標的話題,再次成為了 廣大網友們所關注的焦點,很多網友
2021-06-15 10:43:30
有許多果粉稱,自從iOS15相容iPhone6s系列,也就變相說明新系統的升級幅度很小,不然的話老機型肯定吃不消,這也算是變相的嘲諷iOS系統。不過從目前的市場角度來看,iPhone手機的熱度
2021-06-15 10:42:50
在顯示卡領域風生水起的iGame,在主機板領域則顯得頗為低調,但其依舊在不斷更新的自己的主機板產品線,並時不時為玩家們帶來價效比不錯的主機板產品。隨著Intel第十一代酷睿處理
2021-06-15 10:23:49
#指紋鎖# 今年的歐冠決賽是英超內戰,不久前剛剛打響,結果車子再一次站在冠軍領獎臺上。說來遺憾,這是我近10年內唯一一次錯過直播歐冠的比賽……或許是年紀大了更珍惜身體,也許
2021-06-15 10:22:34
No.1Excel表格製作過程中,需要對錶格進行一個美觀修飾,這樣就提高了工作表的格局,一個漂亮的工作表,不僅體現了公司的辦公技術階層,更是對外宣傳的一個最直接門戶。本節介紹,如何
2021-06-15 10:22:14