【大數據】—量化交易實戰案例雙均線策略(移動平均線)

聲明:股市有風險,投資需謹慎!本人沒有系統學過金融知識,對股票有敬畏之心沒有踏入其大門,今天用另外一種方法模擬炒股,后面的模擬的實戰全部用同樣的數據,最后比較哪種方法賺的錢多。

量化交易,也被稱為算法交易,是一種使用數學模型和計算機算法來分析市場數據、識別交易機會并自動執行交易的交易方式。這種交易方法依賴于統計學、數學和計算機科學,以減少人為情緒和主觀判斷的影響,提高交易效率和精確度。下面是量化交易的一些關鍵點:

  • 數據驅動:量化交易依賴于大量的歷史和實時市場數據,包括價格、成交量、財務報告等。

  • 模型構建:交易者使用統計和機器學習技術來構建預測模型,這些模型可以識別市場趨勢、價格模式或異常事件。

  • 策略開發:基于模型的預測,開發交易策略,這些策略可以是趨勢跟蹤、均值回歸、套利等。

  • 自動化執行:一旦策略確定,交易可以完全自動化,由計算機程序執行,無需人工干預。

  • 風險管理:量化交易還包括風險管理算法,以確保交易在可接受的風險水平內進行。

  • 高頻交易(HFT):一種特殊的量化交易,特點是交易頻率極高,可能在幾毫秒內完成數百甚至數千筆交易。

  • 成本和效率:由于減少了交易中的人工環節,量化交易可以降低交易成本并提高執行速度。

  • 監管合規:量化交易需要遵守金融市場的監管規定,包括交易規則和數據保護法規。

優勢: 量化交易的優勢在于其能夠快速處理大量數據,發現人類難以察覺的模式和機會。
挑戰: 模型可能過于依賴歷史數據而無法準確預測未來市場變化,或者在市場極端波動時可能失效。

import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams ['font.sans-serif'] ='SimHei'      #顯示中文
plt.rcParams ['axes.unicode_minus']=False       #顯示負號
zgpa = pd.read_csv('history_k_data.csv')
zgpa = zgpa.set_index('date')
zgpa.head()

導入之前獲取的數據:
在這里插入圖片描述
典型的“美國線”數據,open代表當日開盤價格,high代表當日最高價格,low代表當日最低價格,close代表當日收盤價格。我們還需要增加幾個維度來分析,為了不影響原表,我們構建一個新表。

新建一個表單,命名為strategy(策略),計算交易的信號和下單數量:

#序號保持和原始數據一致
strategy = pd.DataFrame(index = zgpa.index)
#添加一個signal字段,用來存儲交易信號
strategy['signal'] = 0
#將5日均價保存到avg_5這個字段
strategy['avg_5'] = zgpa['close'].rolling(5).mean()
#同樣,將10日均價保存到avg_10
strategy['avg_10'] = zgpa['close'].rolling(10).mean()
#當5日均價大于10日均價時,標記為1
#反之標記為0
strategy['signal'] = np.where(strategy['avg_5']>strategy['avg_10'], 1,0)
#根據交易信號的變化下單,當交易信號從0變成1時買入
#交易信號從1變成0時賣出
#交易信號不變時不下單
strategy['order'] = strategy['signal'].diff()
#查看數據表后10行
strategy.tail(10)

在這里插入圖片描述
先介紹今天的移動平均線追蹤策略:在這種策略中,一般采用5天均值和10天均值,如果5日均線上穿突破了10日均線,說明股價在最近的漲勢很猛,買入信號。若下穿了10日均線,說明最近的跌幅較大,應該賣出。

表格情況:
signal列用于存儲交易信號0變成1是買入,1變成0時賣出。
avg_5列采用窗口移動計算5日均值。
avg_10列采用窗口移動計算10日均值。
order列表示交易信號變時下單。

在這里插入圖片描述窗口移動計算如上圖如示,只不過上圖是計算7列,我只計算5列和10列。

數據可視化:

#創建尺寸為10*5的畫布
plt.figure(figsize=(10,5))
#使用實線繪制股價
plt.plot(zgpa['close'],lw=2,label='price')
#使用虛線繪制5日均線
plt.plot(strategy['avg_5'],lw=2,ls='--',label='avg5')
#使用-.風格繪制10日均線
plt.plot(strategy['avg_10'],lw=2,ls='-.',label='avg10')
#將買入信號用正三角進行標示
plt.scatter(strategy.loc[strategy.order==1].index,zgpa['close'][strategy.order==1],marker = '^', s=80,color='r',label='Buy')
#將賣出信號用倒三角進行標示
plt.scatter(strategy.loc[strategy.order==-1].index,zgpa['close'][strategy.order==-1],marker = 'v', s=80,color='g',label='Sell')
#添加圖注
plt.legend()
plt.xticks([0,12,24,36,48,60,72,84,96,108])
#添加網格以便于觀察
plt.grid()
#顯示圖像
plt.show()

在這里插入圖片描述
上圖買入信號用正三角進行標注,賣出信號用倒三角進行標注。

模擬實戰炒股

依舊是20000元的本金,不交手續費。

initial_cash = 20000
#新建一個數據表positions,序號保持和strategy數據表一致
#用0將空值進行替換
positions = pd.DataFrame(index = strategy.index).fillna(0)
#因為A股買賣都是最低100股
#因此設置stock字段為交易信號的100倍
positions['stock'] = strategy['signal'] * 100
#創建投資組合數據表,用持倉的股票數量乘股價得出持倉的股票市值
portfolio = pd.DataFrame(index = strategy.index)
portfolio['stock value'] = positions.multiply(zgpa['close'], axis=0)
#同樣倉位的變化就是下單的數量
#用初始資金減去下單金額的總和就是剩余的資金
portfolio['cash'] = initial_cash - positions['stock'].diff().multiply(zgpa['close'],axis=0).cumsum()
#剩余的資金+持倉股票市值即為總資產
portfolio['total'] = portfolio['cash'] + portfolio['stock value']
#檢查一下后10行
portfolio.tail(20)

在這里插入圖片描述

創建投資組合數據表,序號和strategy表一致:
stock value代表用持倉的股票數量乘股價得出持倉的股票市值。
cash代表用初始資金減去下單金額的總和就是剩余的資金。
total剩余的資金+持倉股票市值即為總資產。

我們查看最后20行數據,總資產為20502元,比原始資金20000元賺了502元。

數據可視化:

#創建10*5的畫布
plt.figure(figsize=(10,5))
#繪制總資產曲線
plt.plot(portfolio['total'], lw=2, label='總資產')
#繪制持倉股票市值曲線
plt.plot(portfolio['stock value'],lw=2,ls='--', label='交易現金流')
#添加圖注
plt.legend()
#添加網格
plt.grid()
plt.xticks([0,12,24,36,48,60,72,84,96,108])
#展示圖像
plt.show()

在這里插入圖片描述

下期我們會帶來更多的量化交易策略。

不轉發,你至少要點個贊,收藏一下吧!

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

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

相關文章

【項目實訓】各種反爬策略及爬蟲困難點總結

在這里,我總結了本次項目的數據收集過程中遇到的反爬蟲策略以及一些爬蟲過程中容易出現問題的地方。 user-agent 簡單的設置user-agent頭部為瀏覽器即可: 爬取標簽中帶href屬性的網頁 對于顯示崗位列表的頁面,通常檢查其源代碼就會發現&…

深入理解鏈表:基礎概念、操作及應用

前言 鏈表(Linked List)是一種重要的數據結構,廣泛應用于各種算法和系統設計中。本文將詳細介紹鏈表的基本概念、類型、基本操作及其在實際編程中的應用,并使用C語言代碼示例進行說明。 鏈表的基本概念 鏈表是一種線性數據結構…

【數據結構】(C語言):動態數組

動態數組: 內存區域連續,即每個元素的內存地址連續。可用索引查看元素,數組[索引號]。指定位置刪除元素,該位置之后的元素全部往前移動一位。指定位置添加元素,從最后到該位置的元素全部往后移動一位。物理大小&#…

【保姆級講解ECMAScript和JavaScript之間的區別】

🎥博主:程序員不想YY啊 💫CSDN優質創作者,CSDN實力新星,CSDN博客專家 🤗點贊🎈收藏?再看💫養成習慣 ?希望本文對您有所裨益,如有不足之處,歡迎在評論區提出…

mysql 升級到8.0

MySQL :: MySQL 8.0 Reference Manual :: 3.7 Upgrading MySQL Binary or Package-based Installations on Unix/Linux 2種升級方式: In-Place Upgrade : data目錄替換 Logical Upgrade: 通過 mysqldump 導出為sql文本后,導入…

全面國產化信創適配改造方案說明

一、概敘 系統的全面國產化適配改造需要從多個方面進行考慮,改造前需要進行充分的論證,在滿足具體業務場景的前提下,以確保系統的穩定性和安全性,同時還要考慮技術的發展,不斷優化和更新。因此全面國產化適配改造也面臨…

Redis集群安裝(三主三從一哨兵)

Redis集群安裝(三主三從一哨兵) 一,搭建環境 ? 在三臺服務器上分別搭建redis并測試是否能啟動(搭建方法) 二,Redis cluster三主三從 配置環境變量 vim /etc/profile #添加如下內容 export REDIS_HOME…

AI 開發平臺(Coze)搭建《AI女友(多功能版本)》

前言 本文講解如何從零開始,使用扣子平臺去搭建《AI女友(多功能版本)》 bot直達:AI女友(多功能版) - 扣子 AI Bot (coze.cn) 歡迎大家前去體驗!!! 正文 功能介紹 …

系統架構師考點--系統配置與性能評價

大家好。今天我們來總結一下系統配置與性能評價的考點內容,這一部分一般是出在上午場的選擇題中,占1-2分左右。 一、性能指標 計算機 對計算機評價的主要性能指標有:時鐘頻率(主頻);運算速度;運算精度內存的存儲容量…

ManageEngine連續榮登Gartner 2024年安全信息和事件管理魔力象限

我們很高興地宣布,ManageEngine再次在Gartner的安全信息和事件管理(SIEM)魔力象限中榜上有名,這是我們連續第七年獲得這一認可。 Gartner ManageEngine Log360是一款全面的SIEM解決方案,旨在幫助組織有效處理日志數據…

計算機共形幾何簡介

計算機共形幾何(Computational Conformal Geometry)是一門研究計算機圖形學和幾何學結合的領域,主要研究曲面的表示、形變和分析等問題。共形幾何是研究保持角度度量不變的幾何變換,而計算機共形幾何則是將共形幾何的概念和方法應…

cuda 學習筆記4

一 基本函數 在GPU上開辟空間,無論定義的數據是float還是int ,還是****gpu_int,分配空間的函數都是下面固定的形式 (void**)& 1.函數定義,global void 是配套使用的,是在GPU上定義,也就是GPU上執行,CPU上調用的函數…

python pyautogui.position實時輸出坐標

import pyautogui import timewhile True:# 獲取鼠標當前坐標x, y pyautogui.position()# 打印坐標print(f"當前坐標:({x}, {y})")# 暫停1秒time.sleep(1) 輸出實時鼠標位置坐標

Java高手的30k之路|面試寶典|精通MySQL(二)

分區表 分區類型 MySQL 支持以下幾種表分區類型,這些分區類型有助于優化大型表的管理和查詢性能: Range Partitioning(范圍分區): 范圍分區是基于列的值范圍來分配數據的。你可以定義一個或多個列的值區間&#xff0…

62.指針和二維數組(2)

一.指針和二維數組 1.如a是一個二維數組,則數組中的第i行可以看作是一個一維數組,這個一維數組的數組名是a[i]。 2.a[i]代表二維數組中第i行的首個元素的地址,即a[i][0]的地址。 二.進一步思考 二維數組可以看作是數組的數組,本…

springboot+vue+mybatis母嬰二手銷售系統+PPT+論文+講解+售后

目前由于我國二手銷售的規模較小,同發達國家相比,二手銷售比重始終偏低,消費總額增長緩慢,進一步抑制了市場消費的提升,隨著市場競爭的日益激烈,雖然許多商家主動選用二手銷售模式,但卻缺乏對其充分的重視與銷售風險的良性控制,一些商家沒有建立獨立的信用實踐管理部門,無法在交…

linux使用docker部署kafka集群

1、拉取kafka docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 2、創建網絡 docker network create app-kafka 3、啟動zookeeper docker run -d \--name zookeeper \-p 2181:2181 \--network app-kafka \--restart always \wurstmeister/zookeeper …

【ISAC】通感一體化講座(劉凡)

高斯信道下通信感知一體化的性能極限(劉凡) 文章目錄 背景背景 通信和感知在硬件結構上相似,高效地利用資源,實現相互的增益; 感知是基于不同的任務,比如目標檢測(檢測概率,虛警概率),估計任務(從收到的信號中去估計有用的參數,均方誤差,CRB),識別(知道目標的…

Str.format()方法

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 語法參考 在Python2.6之后,提供了字符串的format()方法對字符串進行格式化操作。format()功能非常強大,格式也比較復雜&…

基于ADRC自抗擾算法的UAV飛行姿態控制系統simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 4.1 控制系統概述 4.2 ADRC基本框架 4.3 控制律設計 5.完整工程文件 1.課題概述 基于ADRC自抗擾算法的UAV飛行姿態控制系統simulink建模與仿真,分別對YAW,PITCH,ROL…