量化交易系統開發-實時行情自動化交易-8.25.真格(澎博財經旗下)平臺

19年創業做過一年的量化交易但沒有成功,作為交易系統的開發人員積累了一些經驗,最近想重新研究交易系統,一邊整理一邊寫出來一些思考供大家參考,也希望跟做量化的朋友有更多的交流和合作。

接下來會對于真格(澎博財經旗下)平臺介紹。

真格平臺是澎博財經旗下的一款量化交易工具,專注于提供高效的數據接口、量化策略開發環境和回測框架。通過真格平臺,用戶可以方便地構建、測試和優化量化交易策略,同時利用其專業化工具高效地管理交易流程。

以下以“布林帶策略”為例,展示如何使用真格平臺進行量化交易開發和回測。


1. 策略背景:布林帶策略

策略邏輯

布林帶是一種經典的技術指標,通過價格與波動率之間的關系生成交易信號。布林帶由以下三部分構成:

  • 上軌線:均線 + K倍標準差
  • 中軌線:簡單移動平均線
  • 下軌線:均線 - K倍標準差

布林帶策略邏輯如下:

  • 買入信號:價格觸及下軌并開始反彈。
  • 賣出信號:價格觸及上軌并開始回落。
適用場景
  • 優勢:適用于震蕩市場,能夠捕捉價格的區間波動。
  • 局限:在強趨勢行情中,可能錯過趨勢性機會。

2. 策略開發

以下代碼基于真格平臺Python SDK實現布林帶策略的開發與回測。

(1)準備工作

在使用真格平臺之前,需要完成以下準備:

  1. 安裝SDK:通過真格平臺提供的安裝包或pip安裝其Python SDK。
    pip install zhenge-sdk
    
  2. 申請開發者賬號:獲取API密鑰以訪問平臺數據接口。
  3. 設置交易環境:確認回測所需的賬戶、品種和時間段。
(2)初始化參數與環境
import pandas as pd
import numpy as np
from zhenge import ZhengeAPI, Backtest# 策略參數
SYMBOL = '600519.SH'  # 茅臺股票
START_DATE = '2020-01-01'
END_DATE = '2022-01-01'
INITIAL_CAPITAL = 100000  # 初始資金
BOLL_PERIOD = 20  # 布林帶周期
BOLL_K = 2  # 布林帶倍數
(3)獲取歷史數據

通過真格平臺的API獲取標的歷史行情數據。

# 獲取歷史數據
def get_data(symbol, start_date, end_date):api = ZhengeAPI(api_key='your_api_key')df = api.get_kline(symbol=symbol, start_date=start_date, end_date=end_date, freq='1d')df['Date'] = pd.to_datetime(df['date'])df.set_index('Date', inplace=True)return df[['close']]# 加載數據
data = get_data(SYMBOL, START_DATE, END_DATE)
(4)計算布林帶

利用Pandas計算布林帶的上軌、中軌和下軌。

# 計算布林帶
data['Middle'] = data['close'].rolling(BOLL_PERIOD).mean()
data['StdDev'] = data['close'].rolling(BOLL_PERIOD).std()
data['Upper'] = data['Middle'] + BOLL_K * data['StdDev']
data['Lower'] = data['Middle'] - BOLL_K * data['StdDev']
(5)生成交易信號

根據布林帶策略邏輯生成交易信號。

# 生成交易信號
data['Signal'] = 0
data.loc[data['close'] < data['Lower'], 'Signal'] = 1  # 買入信號
data.loc[data['close'] > data['Upper'], 'Signal'] = -1  # 賣出信號
(6)回測邏輯

通過信號生成持倉和資金變化。

# 初始化回測變量
data['Position'] = 0  # 持倉
data['Cash'] = INITIAL_CAPITAL  # 初始現金
data['Portfolio'] = INITIAL_CAPITAL  # 總資產holdings = 0  # 當前持倉數量
entry_price = 0  # 買入價格# 回測主循環
for i in range(1, len(data)):current_signal = data.iloc[i]['Signal']current_price = data.iloc[i]['close']# 買入邏輯if current_signal == 1 and holdings == 0:holdings = data.iloc[i - 1]['Cash'] // current_pricedata.at[data.index[i], 'Cash'] = data.iloc[i - 1]['Cash'] - holdings * current_pricedata.at[data.index[i], 'Position'] = holdingsentry_price = current_price  # 記錄買入價格# 賣出邏輯elif current_signal == -1 and holdings > 0:data.at[data.index[i], 'Cash'] = data.iloc[i - 1]['Cash'] + holdings * current_priceholdings = 0data.at[data.index[i], 'Position'] = holdings# 更新總資產current_holdings = holdings * current_pricedata.at[data.index[i], 'Portfolio'] = data.iloc[i]['Cash'] + current_holdings

3. 策略優化

(1)參數優化

通過調整布林帶周期和倍數,優化策略參數。

best_params = None
best_return = -float('inf')for period in range(10, 31):for k in np.arange(1.5, 3.0, 0.1):# 計算布林帶data['Middle'] = data['close'].rolling(period).mean()data['StdDev'] = data['close'].rolling(period).std()data['Upper'] = data['Middle'] + k * data['StdDev']data['Lower'] = data['Middle'] - k * data['StdDev']# 生成信號data['Signal'] = 0data.loc[data['close'] < data['Lower'], 'Signal'] = 1data.loc[data['close'] > data['Upper'], 'Signal'] = -1# 簡化回測邏輯holdings = 0cash = INITIAL_CAPITALfor i in range(1, len(data)):signal = data.iloc[i]['Signal']price = data.iloc[i]['close']if signal == 1 and holdings == 0:holdings = cash // pricecash -= holdings * priceelif signal == -1 and holdings > 0:cash += holdings * priceholdings = 0portfolio = cash + holdings * data.iloc[-1]['close']total_return = (portfolio - INITIAL_CAPITAL) / INITIAL_CAPITALif total_return > best_return:best_return = total_returnbest_params = (period, k)print(f"最佳參數:周期={best_params[0]}, 倍數={best_params[1]:.2f}, 收益率={best_return:.2%}")
(2)加入風險管理

在策略中添加止盈和止損機制。

TAKE_PROFIT = 0.1  # 止盈10%
STOP_LOSS = 0.05   # 止損5%for i in range(1, len(data)):if holdings > 0:pnl = (data.iloc[i]['close'] - entry_price) / entry_priceif pnl >= TAKE_PROFIT or pnl <= -STOP_LOSS:data.at[data.index[i], 'Cash'] = data.iloc[i - 1]['Cash'] + holdings * data.iloc[i]['close']holdings = 0data.at[data.index[i], 'Position'] = holdings

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62772.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT JSON文件解析

參考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打開文件&#xff0c;讀取全部內容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 讀…

面試常見-Java 原生實現常見數據結構

Java 原生實現常見數據結構 文章目錄 Java 原生實現常見數據結構一、引言二、數組&#xff08;Array&#xff09;&#xff08;一&#xff09;概念&#xff08;二&#xff09;代碼實現 三、鏈表&#xff08;Linked List&#xff09;&#xff08;一&#xff09;概念&#xff08;二…

1. 機器學習基本知識(5)——練習題(參考答案)

20.&#x1f517;本章代碼筆記&#x1f4d3;鏈接&#xff08;需要&#x1fa9c;&#xff09;&#xff1a;&#xff08;01_the_machine_learning_landscape.ipynb - Colab (google.com)&#xff09; 如果你不想通過上面的官方網址下載本章的筆記&#xff0c;還可以在本篇博文的…

通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應, 請問,這個 Dao 接口的工作原理是什么?Dao 接口里的方法, 參數不同時,方法能重載嗎?

Dao 接口 即 Mapper 接口 。接口 的 全 限 名 &#xff0c;就是 映 射 文 件 中 的 namespace 的值 &#xff1b; 接口 的 方 法 名 &#xff0c; 就 是 映 射 文 件 中 Mapper 的 Statement 的 id 值&#xff1b; 接 口 方 法 內 的 參數 &#xff0c; 就 是 傳 遞 給 sql 的參…

硬件設計 | Altium Designer軟件PCB規則設置

基于Altium Designer&#xff08;24.9.1&#xff09;版本 嘉立創PCB工藝加工能力范圍說明-嘉立創PCB打樣專業工廠-線路板打樣 規則參考-嘉立創 注意事項 1.每次設置完規則參數都要點擊應用保存 2.每次創建PCB&#xff0c;都要設置好參數 3.可以設置默認規則&#xff0c;將…

WebDAV服務不能上傳大文件,文件超過50M報錯[0x800700DF]怎么辦?

這個問題需要分別從服務端和客戶端解決。 1.Windows客戶端 解除50M文件限制&#xff0c;Windows訪問Webdav服務時&#xff0c;大于50M文件提示錯誤[錯誤:0x800700DF] 部署了webdav&#xff0c;Windows10映射網絡磁盤&#xff0c;傳輸文件超過大約50MB的文件會彈出“0x800700…

安全基礎學習-keil調試匯編代碼

初始目的是為了通過匯編編寫CRC功能。 但是基礎為0&#xff0c;所以目前從搭建工程開始記錄。 大佬繞路。 &#xff08;一&#xff09;創建項目 1. 新建項目 打開 Keil uVision。選擇 Project -> New uVision Project 創建一個新項目。選擇你的目標設備&#xff08;如 AR…

安裝qt 5.15.2筆記

撰文是2024年12月 最終實現了 1、用梯子下載了離線包5.14.2&#xff0c;最后沒用 2、用內地鏡像在線安裝5.15.2&#xff0c;3分鐘裝完 正文開始&#xff0c;qt官方簡稱官方。 官方包官方自5.15.X起&#xff0c;不再提供的exe/run安裝包https://download.qt.io/archive/qt/ …

Redis Java 集成到 Spring Boot

Hi~&#xff01;這里是奮斗的明志&#xff0c;很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~~ &#x1f331;&#x1f331;個人主頁&#xff1a;奮斗的明志 &#x1f331;&#x1f331;所屬專欄&#xff1a;Redis &#x1f4da;本系列文章為個人學習筆…

【Syncfusion系列】Diagram 雜談 第三篇 序列化和反序列化

目錄 序列化保存C# 代碼示例&#xff0c; 方式1 &#xff1a;C# 代碼示例&#xff0c; 方式2 &#xff1a; 反序列化加載C# 代碼示例, 方式1&#xff1a;C# 代碼示例, 方式2&#xff1a; **如何序列化自定義屬性**序列化和反序列化都存在的一個問題解決方式 圖表是否已修改&…

麒麟信安推出支持信創PC的新一代云桌面方案,助力政務信創高效安全運維

12月11日&#xff0c;在第二屆國家新一代自主安全計算系統產業集群融通生態大會上&#xff0c;麒麟信安發布了支持信創PC的新一代云桌面方案&#xff0c;該方案是基于國際TCI架構實現國產PC機云化納管在國內的首次發布&#xff0c;并與銀河麒麟桌面操作系統、長城國產PC整機實現…

中國科學院2001年數據結構試題

一、單項選擇題(每空2分&#xff0c;共20分) 1&#xff0e;下列函數中漸近時間復雜度最小的是( )。 A&#xff0e;T1(n)nlog2n5000n B&#xff0e;T2(n)n2-8000n C&#xff0e;T3(n)nlog221-6000n D&#xff0e;T4(n)2nlog2n-7000n 2&#xff0e;線性表的靜態鏈表存儲結構與順序…

MySQL數據表記錄刪操作

刪除操作&#xff1a;作用刪除表里的記錄行&#xff08;都是整行整行的刪除的&#xff09; 1.單表的刪除 語法 delete from 表名 where 要刪除的記錄篩選條件; 案例&#xff1a;刪除員工編號大于203的員工信息 delete from employees where employee_id>203; 2.多表的刪除…

網絡原理04

可靠傳輸&#xff0c;是TCP最核心的特性 可靠傳輸不是說數據100%傳輸給接收方了 1&#xff09;發送方發出數據后&#xff0c;能過知道接收方是否收到數據 2&#xff09;一旦發現對方沒收到&#xff0c;可以通過一定的方法”補救” 1. 確認應答 發送方&#xff0c;把數據已…

微信小程序5-圖片實現點擊動作和動態加載同類數據

搜索 微信小程序 “動物覓蹤” 觀看效果 感謝閱讀&#xff0c;初學小白&#xff0c;有錯指正。 一、功能描述 a. 原本想通過按鈕加載背景圖片&#xff0c;來實現一個可以點擊的搜索button&#xff0c;但是遇到兩個難點&#xff0c;一是按鈕大小調整不方便&#xff08;網上搜索…

Java里局部變量和成員變量的隱式初始化

注&#xff1a;本文是對另一篇文檔&#xff08; https://blog.csdn.net/duke_ding2/article/details/142365872 &#xff09;的補充。 文章目錄 環境初始化局部變量&#xff08;棧&#xff09;成員變量&#xff08;堆&#xff09;其它數組 分析安全性性能成員變量 VS. 局部變量…

孚盟云 MailAjax.ashx SQL注入漏洞復現

0x01 產品簡介 上海孚盟軟件有限公司是一家外貿SaaS服務提供商,也是專業的外貿行業解決方案專業提供商。 全新的孚盟云產品,讓用戶可以用云模式實現信息化管理,讓用戶的異地辦公更加流暢,大大降低中小企業在信息化上成本,用最小的投入享受大型企業級別的信息化服務,主要…

“切片賦值”創建列表批量操作“新”方法(Python)

[start:end]切片賦值&#xff0c;擴展了list批量增減元素的操作能力。 (筆記模板由python腳本于2024年12月06日 15:07:56創建&#xff0c;本篇筆記適合研python基礎的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網&#xff1a;https://www.python.org/ Free&#xff1a;…

LabVIEW實現GPS通信

目錄 1、GPS通信原理 2、硬件環境部署 3、程序架構 4、前面板設計 5、程序框圖設計 6、測試驗證 本專欄以LabVIEW為開發平臺,講解物聯網通信組網原理與開發方法,覆蓋RS232、TCP、MQTT、藍牙、Wi-Fi、NB-IoT等協議。 結合實際案例,展示如何利用LabVIEW和常用模塊實現物聯網系…

Java簡介:打開通往變成世界的大門

Java是什么&#xff1f;為什么它是全球開發者廣泛使用的語言&#xff1f;本篇文章介紹Java的特點、應用場景以及“寫一次&#xff0c;隨處運行”的核心特性&#xff0c;讓零基礎的你建立對Java語言的初步認知。 注&#xff1a;此文章可以僅作了解&#xff0c;不影響之后的學習。…