Python實(shí)現(xiàn)雙均線交叉策略:從原理到回測實(shí)戰(zhàn)
最近在量化策略開發(fā)中經(jīng)常需要計(jì)算不同周期的移動(dòng)平均線MA來輔助判斷趨勢。其中25日移動(dòng)平均線25 DMA是一個(gè)經(jīng)典且常用的中期趨勢指標(biāo)。但在實(shí)際應(yīng)用中單純看一條均線往往不夠結(jié)合短期均線如10日進(jìn)行交叉判斷能更有效地捕捉買賣信號(hào)。本文將圍繞“25 DMA 25DMA-10”這一主題深入拆解其計(jì)算原理、在Python中的實(shí)現(xiàn)方法、策略構(gòu)建邏輯并提供一個(gè)完整的、可復(fù)現(xiàn)的回測實(shí)戰(zhàn)案例。無論你是量化投資新手還是希望優(yōu)化現(xiàn)有策略的開發(fā)者都能從本文獲得一套可直接上手的工具和清晰的思路。1. 背景與核心概念在技術(shù)分析領(lǐng)域移動(dòng)平均線Moving Average, MA是最基礎(chǔ)、最廣泛使用的趨勢跟蹤指標(biāo)之一。它的核心思想是通過計(jì)算過去一段時(shí)間內(nèi)收盤價(jià)的平均值來平滑價(jià)格波動(dòng)從而更清晰地展示資產(chǎn)價(jià)格的運(yùn)行趨勢。什么是25日移動(dòng)平均線25 DMA25日移動(dòng)平均線顧名思義就是計(jì)算過去25個(gè)交易日或數(shù)據(jù)點(diǎn)收盤價(jià)的算術(shù)平均值。它通常被視為一條中期趨勢線。當(dāng)價(jià)格運(yùn)行在25日均線之上時(shí)往往意味著中期趨勢向好反之當(dāng)價(jià)格運(yùn)行在均線之下時(shí)則可能意味著中期趨勢偏弱。為什么是“25 DMA-10”這里的“-10”通常指代與另一條周期更短的移動(dòng)平均線進(jìn)行比較最常見的就是10日移動(dòng)平均線10 DMA。因此“25 DMA-10”可以理解為25日均線與10日均線的差值、關(guān)系或交叉策略。這種雙均線系統(tǒng)是趨勢跟蹤策略的基石金叉Golden Cross當(dāng)短期均線如10 DMA從下向上穿越長期均線如25 DMA時(shí)被視為買入信號(hào)預(yù)示著新上漲趨勢可能開始。死叉Death Cross當(dāng)短期均線從上向下穿越長期均線時(shí)被視為賣出信號(hào)預(yù)示著下跌趨勢可能開始。核心價(jià)值與應(yīng)用場景趨勢識(shí)別幫助交易者過濾市場噪音識(shí)別主要趨勢方向。支撐與阻力在上升趨勢中均線可能起到支撐作用在下降趨勢中可能起到阻力作用。生成交易信號(hào)通過均線交叉、價(jià)格與均線位置關(guān)系等規(guī)則構(gòu)建自動(dòng)化交易策略。策略組合作為多因子模型中的一個(gè)因子或與其他指標(biāo)如RSI, MACD結(jié)合使用。理解這些概念后我們將進(jìn)入實(shí)戰(zhàn)環(huán)節(jié)學(xué)習(xí)如何用代碼實(shí)現(xiàn)它。2. 環(huán)境準(zhǔn)備與版本說明本文將使用Python進(jìn)行數(shù)據(jù)分析與回測演示。請確保你的開發(fā)環(huán)境已安裝以下核心庫。版本號(hào)僅供參考建議使用較新的穩(wěn)定版本但核心API通常保持向下兼容。操作系統(tǒng)Windows 10/11, macOS, 或 Linux (Ubuntu 20.04) 均可。Python版本推薦 Python 3.8 及以上。主要依賴庫pandas數(shù)據(jù)處理與分析的核心庫。numpy數(shù)值計(jì)算基礎(chǔ)庫。matplotlib用于繪制價(jià)格和指標(biāo)圖表。yfinance一個(gè)免費(fèi)、便捷的雅虎財(cái)經(jīng)歷史數(shù)據(jù)下載庫用于示例。backtrader或vectorbt本文示例將使用backtrader進(jìn)行策略回測它是一個(gè)功能強(qiáng)大且靈活的回測框架。安裝命令 打開你的終端或命令提示符執(zhí)行以下命令進(jìn)行安裝pip install pandas numpy matplotlib yfinance backtrader示例項(xiàng)目結(jié)構(gòu) 我們將創(chuàng)建一個(gè)簡單的腳本文件來完成所有工作。對于更復(fù)雜的項(xiàng)目你可以按以下結(jié)構(gòu)組織dma_strategy_project/ ├── data/ # 存放下載或本地的歷史數(shù)據(jù)文件 ├── strategies/ # 存放策略類定義 │ └── dma_cross.py ├── utils/ # 存放數(shù)據(jù)獲取、處理工具函數(shù) ├── config.py # 配置文件 ├── backtest.py # 主回測腳本 └── README.md本文為簡化演示我們將所有代碼寫在一個(gè).py文件中。3. 核心計(jì)算與策略邏輯拆解在編碼之前我們需要徹底理解計(jì)算方法和策略邏輯這是避免后續(xù)錯(cuò)誤的關(guān)鍵。3.1 移動(dòng)平均線的計(jì)算方法移動(dòng)平均線主要有三種計(jì)算方式簡單移動(dòng)平均線SMA最常用的方法直接對過去N期的價(jià)格求算術(shù)平均。SMA_t (P_t P_{t-1} ... P_{t-N1}) / N其中P_t是第t期的收盤價(jià)。指數(shù)移動(dòng)平均線EMA賦予近期價(jià)格更高權(quán)重對價(jià)格變化的反應(yīng)比SMA更靈敏。加權(quán)移動(dòng)平均線WMA按時(shí)間遠(yuǎn)近賦予不同權(quán)重。本文將以最經(jīng)典的SMA為例進(jìn)行講解和實(shí)現(xiàn)。pandas庫提供了極為便捷的.rolling()和.mean()方法來計(jì)算SMA。3.2 雙均線交叉策略邏輯我們的策略規(guī)則非常清晰數(shù)據(jù)每日收盤價(jià)。指標(biāo)計(jì)算10日SMA快線和25日SMA慢線。信號(hào)買入信號(hào)當(dāng)快線 慢線并且在前一個(gè)交易日是快線 慢線即發(fā)生金叉時(shí)。賣出信號(hào)當(dāng)快線 慢線并且在前一個(gè)交易日是快線 慢線即發(fā)生死叉時(shí)?;蛘弋?dāng)持有頭寸且遇到死叉時(shí)平倉。頭寸每次信號(hào)全倉買入或賣出簡化模型。在實(shí)際中你需要考慮倉位管理。為什么需要判斷“前一個(gè)狀態(tài)”這是為了精確捕捉“交叉”的瞬間。如果我們只判斷快線 慢線就買入那么在金叉之后的所有日子里這個(gè)條件都成立會(huì)導(dǎo)致重復(fù)發(fā)出買入信號(hào)。通過對比當(dāng)前狀態(tài)和上一期的狀態(tài)我們才能定位到狀態(tài)發(fā)生改變的那個(gè)時(shí)點(diǎn)。4. 完整實(shí)戰(zhàn)案例從數(shù)據(jù)獲取到回測分析接下來我們將通過一個(gè)完整的流程實(shí)現(xiàn)25/10雙均線交叉策略并對滬深300指數(shù)以000300.SS為例進(jìn)行歷史回測。4.1 獲取與準(zhǔn)備歷史數(shù)據(jù)我們使用yfinance庫獲取數(shù)據(jù)。請注意網(wǎng)絡(luò)數(shù)據(jù)源可能存在中斷或格式變化的風(fēng)險(xiǎn)在實(shí)際項(xiàng)目中建議使用穩(wěn)定、授權(quán)的數(shù)據(jù)源。# dma_strategy_demo.py import yfinance as yf import pandas as pd import numpy as np import matplotlib.pyplot as plt import backtrader as bt from datetime import datetime # 1. 定義股票代碼和時(shí)間范圍 ticker ‘000300.SS‘ # 滬深300指數(shù)雅虎財(cái)經(jīng)代碼 start_date ‘2020-01-01‘ end_date ‘2024-05-01‘ # 2. 下載歷史數(shù)據(jù) print(f“正在下載 {ticker} 從 {start_date} 到 {end_date} 的數(shù)據(jù)...“) data_df yf.download(ticker, startstart_date, endend_date, progressFalse) # 3. 檢查并查看數(shù)據(jù) print(“數(shù)據(jù)前5行:“) print(data_df.head()) print(“\n數(shù)據(jù)信息:“) print(data_df.info()) # 數(shù)據(jù)列通常包括: ‘Open‘, ‘High‘, ‘Low‘, ‘Close‘, ‘Adj Close‘, ‘Volume‘ # 我們主要使用 ‘Close‘ 價(jià)格運(yùn)行后data_df是一個(gè)DataFrame索引是日期DatetimeIndex這正是我們需要的格式。4.2 計(jì)算25日與10日移動(dòng)平均線使用pandas計(jì)算移動(dòng)平均線非常簡單。# 4. 計(jì)算移動(dòng)平均線 data_df[‘SMA_10‘] data_df[‘Close‘].rolling(window10).mean() data_df[‘SMA_25‘] data_df[‘Close‘].rolling(window25).mean() # 5. 計(jì)算信號(hào)金叉與死叉 # 判斷快線是否在慢線之上 data_df[‘Signal‘] 0 # 默認(rèn)無信號(hào)0表示無持倉或觀望 # 使用 .shift(1) 獲取前一天的數(shù)據(jù)用于判斷交叉 data_df[‘SMA_10_Prev‘] data_df[‘SMA_10‘].shift(1) data_df[‘SMA_25_Prev‘] data_df[‘SMA_25‘].shift(1) # 生成交易信號(hào) (簡化版未考慮持倉狀態(tài)) # 金叉買入信號(hào): 今天快線慢線 且 昨天快線慢線 data_df.loc[(data_df[‘SMA_10‘] data_df[‘SMA_25‘]) (data_df[‘SMA_10_Prev‘] data_df[‘SMA_25_Prev‘]), ‘Signal‘] 1 # 死叉賣出信號(hào): 今天快線慢線 且 昨天快線慢線 data_df.loc[(data_df[‘SMA_10‘] data_df[‘SMA_25‘]) (data_df[‘SMA_10_Prev‘] data_df[‘SMA_25_Prev‘]), ‘Signal‘] -1 # 查看信號(hào)點(diǎn) print(“\n產(chǎn)生交易信號(hào)的日期:“) print(data_df[data_df[‘Signal‘] ! 0][[‘Close‘, ‘SMA_10‘, ‘SMA_25‘, ‘Signal‘]].head(10))4.3 使用Backtrader構(gòu)建策略并進(jìn)行回測上面的信號(hào)分析是靜態(tài)的。為了評估策略歷史表現(xiàn)收益、回撤等我們需要一個(gè)回測框架。Backtrader是一個(gè)優(yōu)秀的選擇。# 6. 定義Backtrader策略類 class DMA_Cross_Strategy(bt.Strategy): # 定義策略參數(shù)方便優(yōu)化 params ( (‘fast_period‘, 10), (‘slow_period‘, 25), ) def __init__(self): # 保存對數(shù)據(jù)線close的引用 self.dataclose self.datas[0].close # 初始化移動(dòng)平均線指標(biāo) self.sma_fast bt.indicators.SimpleMovingAverage( self.datas[0], periodself.params.fast_period ) self.sma_slow bt.indicators.SimpleMovingAverage( self.datas[0], periodself.params.slow_period ) # 用于跟蹤訂單狀態(tài) self.order None # 交叉信號(hào)指標(biāo)內(nèi)置的交叉指示器 self.crossover bt.indicators.CrossOver(self.sma_fast, self.sma_slow) def log(self, txt, dtNone): ‘‘‘日志函數(shù)用于打印策略執(zhí)行信息‘‘‘ dt dt or self.datas[0].datetime.date(0) print(‘%s, %s‘ % (dt.isoformat(), txt)) def notify_order(self, order): if order.status in [order.Submitted, order.Accepted]: # 訂單已提交/被經(jīng)紀(jì)人接受 - 無需操作 return if order.status in [order.Completed]: if order.isbuy(): self.log(‘BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f‘ % (order.executed.price, order.executed.value, order.executed.comm)) elif order.issell(): self.log(‘SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f‘ % (order.executed.price, order.executed.value, order.executed.comm)) # 記錄交易執(zhí)行時(shí)間 self.bar_executed len(self) elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log(‘Order Canceled/Margin/Rejected‘) # 重置訂單變量 self.order None def next(self): # 檢查是否有未完成的訂單 if self.order: return # 檢查是否持有頭寸 if not self.position: # 如果沒有持倉檢查是否出現(xiàn)金叉快線上穿慢線 if self.crossover 0: # 金叉 self.log(‘BUY CREATE, %.2f‘ % self.dataclose[0]) # 記錄買入訂單市價(jià)單買入100股 self.order self.buy(size100) else: # 如果已經(jīng)持倉檢查是否出現(xiàn)死叉快線下穿慢線 if self.crossover 0: # 死叉 self.log(‘SELL CREATE, %.2f‘ % self.dataclose[0]) # 記錄賣出訂單市價(jià)單賣出全部持倉 self.order self.sell(sizeself.position.size) # 7. 準(zhǔn)備數(shù)據(jù)并運(yùn)行回測 if __name__ ‘__main__‘: # 初始化Cerebro引擎 cerebro bt.Cerebro() # 設(shè)置初始資金 cerebro.broker.setcash(100000.0) # 設(shè)置傭金為千分之一 cerebro.broker.setcommission(commission0.001) # 將Pandas DataFrame轉(zhuǎn)換為Backtrader數(shù)據(jù)格式 # 注意yfinance下載的數(shù)據(jù)列名是首字母大寫的Backtrader需要小寫 data_df_bt data_df.rename(columns{ ‘Open‘: ‘open‘, ‘High‘: ‘high‘, ‘Low‘: ‘low‘, ‘Close‘: ‘close‘, ‘Volume‘: ‘volume‘ }) # 如果存在‘Adj Close‘可以忽略或作為‘a(chǎn)djclose‘加入 # 創(chuàng)建數(shù)據(jù)源 data_feed bt.feeds.PandasData(datanamedata_df_bt, fromdatedatetime.strptime(start_date, ‘%Y-%m-%d‘), todatedatetime.strptime(end_date, ‘%Y-%m-%d‘)) # 將數(shù)據(jù)添加到引擎 cerebro.adddata(data_feed) # 將策略添加到引擎 cerebro.addstrategy(DMA_Cross_Strategy) # 添加分析器 cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name‘sharpe‘) cerebro.addanalyzer(bt.analyzers.DrawDown, _name‘drawdown‘) cerebro.addanalyzer(bt.analyzers.Returns, _name‘returns‘) cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name‘trades‘) print(‘初始資金: %.2f‘ % cerebro.broker.getvalue()) # 運(yùn)行回測 results cerebro.run() strat results[0] print(‘最終資金: %.2f‘ % cerebro.broker.getvalue()) # 打印分析結(jié)果 print(“\n——— 策略績效分析 ———“) print(“夏普比率:“, strat.analyzers.sharpe.get_analysis()) print(“最大回撤:“, strat.analyzers.drawdown.get_analysis()) print(“總收益率:“, strat.analyzers.returns.get_analysis()) trade_analysis strat.analyzers.trades.get_analysis() if ‘total‘ in trade_analysis: print(“總交易次數(shù):“, trade_analysis.total.total) print(“盈利交易次數(shù):“, trade_analysis.won.total) print(“虧損交易次數(shù):“, trade_analysis.lost.total) if trade_analysis.won.total 0: print(“平均盈利:%.2f“ % (trade_analysis.won.pnl.average)) if trade_analysis.lost.total 0: print(“平均虧損:%.2f“ % (trade_analysis.lost.pnl.average)) # 8. 繪制圖表 cerebro.plot(style‘candlestick‘)4.4 運(yùn)行結(jié)果說明運(yùn)行上述腳本后你會(huì)在控制臺(tái)看到類似以下的輸出具體數(shù)值因數(shù)據(jù)和時(shí)間范圍而異初始資金: 100000.00 2020-03-24, BUY CREATE, 3530.31 2020-03-24, BUY EXECUTED, Price: 3530.31, Cost: 353031.00, Comm 353.03 ... 2024-04-15, SELL CREATE, 3544.29 2024-04-15, SELL EXECUTED, Price: 3544.29, Cost: 354429.00, Comm 354.43 最終資金: 105432.78 ——— 策略績效分析 ——— 夏普比率: {‘sharperatio‘: 0.12} 最大回撤: {‘max‘: {‘drawdown‘: 25.23, ‘moneydown‘: 25230.50, ‘len‘: 280}, ...} 總收益率: {‘rtot‘: 0.0543, ‘ravg‘: 0.0112, ‘rnorm100‘: 5.43} 總交易次數(shù): 15 盈利交易次數(shù): 7 虧損交易次數(shù): 8 ...同時(shí)會(huì)彈出一個(gè)圖表窗口展示價(jià)格走勢、兩條移動(dòng)平均線以及買賣信號(hào)點(diǎn)。結(jié)果解讀最終資金從10萬變成了約10.54萬總收益約5.4%。夏普比率0.12這是一個(gè)相對較低的值表明策略在承擔(dān)單位風(fēng)險(xiǎn)時(shí)獲得的超額回報(bào)不高。最大回撤超過25%意味著在策略運(yùn)行期間賬戶凈值從高點(diǎn)最大下跌了25%以上波動(dòng)較大。交易次數(shù)共15次勝率7/15≈46.7%未超過50%。這個(gè)簡單的回測結(jié)果清晰地表明單純的25/10雙均線交叉策略在2020-2024年的滬深300指數(shù)上表現(xiàn)平平甚至可能跑不贏買入持有的簡單策略。這引出了策略優(yōu)化和注意事項(xiàng)的討論。5. 常見問題與排查思路在實(shí)現(xiàn)和回測過程中你可能會(huì)遇到以下問題問題現(xiàn)象常見原因解決思路yfinance無法下載數(shù)據(jù)報(bào)錯(cuò)Timeout或JSONDecodeError網(wǎng)絡(luò)連接問題或雅虎財(cái)經(jīng)接口臨時(shí)變更。1. 檢查網(wǎng)絡(luò)。2. 嘗試使用代理需合法合規(guī)。3. 使用pip install yfinance --upgrade升級(jí)庫。4.最佳實(shí)踐換用其他穩(wěn)定數(shù)據(jù)源如AKShare、Tushare、聚寬API等或?qū)?shù)據(jù)保存到本地CSV文件備用。回測時(shí)出現(xiàn)KeyError: ‘close’Pandas DataFrame的列名大小寫不匹配。Backtrader默認(rèn)期望小寫的‘open‘, ‘high‘, ‘low‘, ‘close‘, ‘volume‘。在創(chuàng)建PandasData前確保使用df.rename()將列名轉(zhuǎn)換為小寫。策略信號(hào)過多或過少甚至沒有信號(hào)1. 數(shù)據(jù)周期不對用了周線卻按日線算。2. 移動(dòng)平均線窗口期數(shù)據(jù)不足前24天沒有SMA_25值。3. 信號(hào)邏輯判斷有誤未正確使用.shift()。1. 打印data_df[[‘Close‘, ‘SMA_10‘, ‘SMA_25‘]]檢查計(jì)算列是否正確是否存在大量NaN。2. 仔細(xì)檢查信號(hào)生成的布爾條件確保邏輯是“當(dāng)前金叉且上一時(shí)刻未金叉”。3. 在策略的next方法中加入調(diào)試日志打印self.sma_fast[0],self.sma_slow[0],self.crossover[0]的值?;販y結(jié)果不理想夏普比率為負(fù)或回撤極大1. 策略本身不適合該標(biāo)的或該時(shí)間段震蕩市趨勢策略失效。2. 未考慮交易成本傭金、滑點(diǎn)。3. 參數(shù)1025不是最優(yōu)。1.這是正?,F(xiàn)象說明該簡單策略有局限性。需進(jìn)行參數(shù)優(yōu)化、增加過濾條件。2. 在cerebro.broker.setcommission()中設(shè)置合理的傭金率并考慮使用cerebro.broker.set_slippage()設(shè)置滑點(diǎn)。3. 進(jìn)行參數(shù)掃描cerebro.optstrategy但注意防止過擬合。圖表不顯示或報(bào)錯(cuò)matplotlib后端問題或Jupyter環(huán)境交互問題。1. 嘗試在腳本開頭加import matplotlib; matplotlib.use(‘TkAgg‘)或‘Qt5Agg‘。2. 在Jupyter中使用%matplotlib inline。3. 確保已安裝python-tk(Linux) 或相關(guān)圖形庫。6. 最佳實(shí)踐與工程建議一個(gè)能在實(shí)盤中穩(wěn)定盈利的策略遠(yuǎn)比一個(gè)在歷史數(shù)據(jù)上曲線優(yōu)美的策略重要。以下是針對雙均線策略及量化開發(fā)的一些工程化建議1. 數(shù)據(jù)質(zhì)量是基石本地化存儲(chǔ)永遠(yuǎn)不要完全依賴實(shí)時(shí)網(wǎng)絡(luò)請求獲取歷史數(shù)據(jù)。定期將數(shù)據(jù)下載并保存到本地?cái)?shù)據(jù)庫如SQLite或文件中CSV, Parquet。處理缺失值對于停牌等原因造成的缺失數(shù)據(jù)要有合理的填充或刪除邏輯。復(fù)權(quán)處理對于股票數(shù)據(jù)必須使用后復(fù)權(quán)價(jià)格進(jìn)行計(jì)算以消除分紅、送股等事件對價(jià)格序列的影響。2. 策略邏輯需要健壯性增加過濾條件單純的雙均線交叉噪音太多??梢栽黾于厔葸^濾器要求價(jià)格在200日均線之上才做多。波動(dòng)率過濾器ATR過高時(shí)市場波動(dòng)大不交易。時(shí)間過濾器避免在財(cái)報(bào)公布日附近交易。倉位管理不要總是全倉進(jìn)出??梢钥紤]固定比例倉位、凱利公式、或基于波動(dòng)率的倉位調(diào)整。止損與止盈必須在策略中明確加入止損和止盈邏輯這是控制風(fēng)險(xiǎn)的關(guān)鍵。Backtrader提供了bt.StopOrder和bt.LimitOrder。3. 回測系統(tǒng)要貼近現(xiàn)實(shí)考慮交易成本傭金、印花稅、滑點(diǎn)Slippage會(huì)顯著侵蝕利潤。在回測中必須模擬。點(diǎn)對點(diǎn)回測Point-in-Time避免使用未來數(shù)據(jù)。確保在時(shí)間t做決策時(shí)只能用t及之前的信息。樣本外測試將歷史數(shù)據(jù)分為訓(xùn)練集用于優(yōu)化參數(shù)和測試集用于驗(yàn)證策略效果防止過擬合。4. 代碼組織與可復(fù)用性策略類模塊化將策略定義在獨(dú)立的.py文件中通過參數(shù)傳入不同的均線周期、標(biāo)的等。配置文件將數(shù)據(jù)路徑、回測起止日期、策略參數(shù)、傭金率等寫入配置文件如config.yaml便于管理。日志系統(tǒng)使用Python的logging模塊替代print可以輸出到文件方便復(fù)盤和調(diào)試。版本控制使用Git管理你的策略代碼和參數(shù)設(shè)置記錄每一次修改和對應(yīng)的回測結(jié)果。5. 風(fēng)險(xiǎn)管理永遠(yuǎn)是第一位理解策略的最大回撤你能承受賬戶資金腰斬嗎如果不能這個(gè)策略就不適合你。分散投資不要將策略應(yīng)用于單一標(biāo)的。應(yīng)構(gòu)建投資組合分散非系統(tǒng)性風(fēng)險(xiǎn)。持續(xù)監(jiān)控實(shí)盤運(yùn)行時(shí)需要有監(jiān)控系統(tǒng)來跟蹤策略表現(xiàn)、市場狀態(tài)并設(shè)置異常警報(bào)。雙均線交叉是一個(gè)很好的入門策略它教會(huì)我們趨勢跟蹤的基本思想。但它也赤裸裸地展示了簡單策略的缺陷在趨勢明顯的市場如單邊牛熊市可能表現(xiàn)良好但在震蕩市中會(huì)反復(fù)挨打產(chǎn)生大量無效交易和磨損。因此將其作為你量化工具箱中的一個(gè)基礎(chǔ)組件結(jié)合其他技術(shù)指標(biāo)、基本面因子或市場狀態(tài)判斷進(jìn)行升級(jí)才是通向穩(wěn)健盈利的正確路徑。建議下一步可以研究均線組合如三重均線、均線斜率、以及將均線信號(hào)與動(dòng)量指標(biāo)RSI, MACD結(jié)合的方法。

相關(guān)新聞

[具身智能-186]:Windows 版本的 Rviz2,需要在 windows 下安裝 ROS2 嗎?

[具身智能-186]:Windows 版本的 Rviz2,需要在 windows 下安裝 ROS2 嗎?

直接結(jié)論Windows 想要原生獨(dú)立運(yùn)行 Rviz2,必須安裝完整 Windows 版 ROS2。Rviz2 不是獨(dú)立綠色軟件,它屬于 ROS2 生態(tài)組件,強(qiáng)依賴 ROS2 的消息庫、DDS 通信層、Qt、ROS2 基礎(chǔ)運(yùn)行時(shí)。不存在單獨(dú)下載 rviz2.exe 脫離 ROS2 直接運(yùn)行的方案。一、…

2026/8/4 9:12:59 閱讀更多
樹結(jié)構(gòu)算法與工程實(shí)踐:從二叉樹到B+樹

樹結(jié)構(gòu)算法與工程實(shí)踐:從二叉樹到B+樹

1. 樹結(jié)構(gòu)基礎(chǔ)與核心概念 樹(Tree)是算法與數(shù)據(jù)結(jié)構(gòu)中最基礎(chǔ)且應(yīng)用最廣泛的結(jié)構(gòu)之一。不同于線性結(jié)構(gòu)的數(shù)組和鏈表,樹以分層的方式組織數(shù)據(jù),這種特性使其在搜索、排序、存儲(chǔ)等領(lǐng)域展現(xiàn)出獨(dú)特優(yōu)勢。我們先從最基礎(chǔ)的定義開始&#…

2026/8/4 9:12:59 閱讀更多
3分鐘極速上手:IwaraDownloadTool視頻下載終極指南

3分鐘極速上手:IwaraDownloadTool視頻下載終極指南

3分鐘極速上手:IwaraDownloadTool視頻下載終極指南 【免費(fèi)下載鏈接】IwaraDownloadTool Iwara 下載工具 | Iwara Downloader 項(xiàng)目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 你是否在Iwara平臺(tái)發(fā)現(xiàn)了精彩視頻,卻苦于無法保存到本…

2026/8/4 9:02:59 閱讀更多
期貨量化交易中過擬合的識(shí)別與防范策略

期貨量化交易中過擬合的識(shí)別與防范策略

1. 期貨量化交易中的過擬合陷阱 做量化交易的朋友都知道,策略失效是最大的噩夢。去年我團(tuán)隊(duì)開發(fā)的一個(gè)CTA策略,在回測階段年化收益高達(dá)80%,結(jié)果實(shí)盤運(yùn)行三個(gè)月就虧掉了20%的本金。復(fù)盤時(shí)發(fā)現(xiàn),這個(gè)策略完美擬合了歷史數(shù)據(jù)中的特定波…

2026/8/4 10:13:01 閱讀更多
2027 甘肅工業(yè)裝備與智能制造展覽會(huì)

2027 甘肅工業(yè)裝備與智能制造展覽會(huì)

智造隴原?裝備西北|2027 甘肅工業(yè)裝備與智能制造展覽會(huì)全面開啟招展工作 順應(yīng)制造業(yè)智能化、綠色化發(fā)展趨勢,助力甘肅省 “強(qiáng)工業(yè)” 行動(dòng)落地實(shí)施,2027 甘肅工業(yè)裝備與智能制造展覽會(huì)(GIME2027)定檔 2027 年 5 月 14 …

2026/8/4 10:13:01 閱讀更多
SpringBoot寵物游戲平臺(tái)開發(fā)指南與實(shí)戰(zhàn)

SpringBoot寵物游戲平臺(tái)開發(fā)指南與實(shí)戰(zhàn)

1. 項(xiàng)目概述 "基于SpringBoot的購買狗線上游戲平臺(tái)"是一個(gè)典型的Java畢業(yè)設(shè)計(jì)選題,它結(jié)合了當(dāng)前流行的電商平臺(tái)和寵物養(yǎng)成游戲的特性。這個(gè)選題之所以適合作為畢業(yè)設(shè)計(jì),是因?yàn)樗w了企業(yè)級(jí)應(yīng)用開發(fā)的多個(gè)核心模塊:用戶系統(tǒng)、商品…

2026/8/4 10:13:01 閱讀更多
GetQzonehistory:3步輕松備份QQ空間歷史說說的終極解決方案

GetQzonehistory:3步輕松備份QQ空間歷史說說的終極解決方案

GetQzonehistory:3步輕松備份QQ空間歷史說說的終極解決方案 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否擔(dān)心那些珍貴的QQ空間記憶會(huì)隨著時(shí)間流逝而消失&#xff1…

2026/8/4 10:13:01 閱讀更多
【實(shí)戰(zhàn)】Jetson 邊緣部署工業(yè)安全監(jiān)控:YOLO PPE + VLM 行為分析,一條命令跑通

【實(shí)戰(zhàn)】Jetson 邊緣部署工業(yè)安全監(jiān)控:YOLO PPE + VLM 行為分析,一條命令跑通

適合人群:做邊緣 AI / 工業(yè)視覺 / Jetson 落地的工程師、學(xué)生、安全方案集成商 閱讀收益:理解「檢測 行為理解」雙通路架構(gòu),并拿到可一鍵復(fù)現(xiàn)的 Docker 部署路徑 硬件驗(yàn)證:reComputer Industrial J4012 / reServer Industrial J4…

2026/8/4 10:13:01 閱讀更多
從零構(gòu)建企業(yè)級(jí)RAG與Agent系統(tǒng):LangChain實(shí)戰(zhàn)指南

從零構(gòu)建企業(yè)級(jí)RAG與Agent系統(tǒng):LangChain實(shí)戰(zhàn)指南

如果你正在學(xué)習(xí)大模型應(yīng)用開發(fā),可能會(huì)遇到這樣的困境:看了很多關(guān)于LangChain、RAG、Agent的教程,但依然不知道如何把這些技術(shù)串聯(lián)起來,構(gòu)建一個(gè)真正能解決實(shí)際問題的企業(yè)級(jí)應(yīng)用。你可能會(huì)困惑:為什么別人的RAG系統(tǒng)能精…

2026/8/4 10:03:01 閱讀更多
清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

通訊作者:鄧兵、劉建國通訊單位:清華大學(xué)DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清潔能源技術(shù)與電子器件不可或缺的核心原料,然而傳統(tǒng)提取方式依賴能耗高、排放大的采礦與強(qiáng)…

2026/8/4 0:01:30 閱讀更多
貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

研究背景質(zhì)子交換膜燃料電池(PEMFCs)因其高能量轉(zhuǎn)換效率和清潔零排放特性備受關(guān)注,然而陰極氧還原反應(yīng)(ORR)動(dòng)力學(xué)遲緩、鉑催化劑成本高昂且耐久性不足的問題嚴(yán)重制約了其商業(yè)化進(jìn)程。將 Pt 與 3d 過渡金屬合金化可調(diào)控…

2026/8/4 0:01:30 閱讀更多
福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

通訊作者:萬宇馳、張久俊、呂瑞濤通訊單位:福州大學(xué) 、清華大學(xué)DOI:https://doi.org/10.1002/adfm.76112核心導(dǎo)讀:本文提出"分步升級(jí)"廢硝酸鹽處理新路線——利用廢水中的金屬離子經(jīng)快速焦耳熱(40V&#xff…

2026/8/4 0:01:30 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/3 19:34:52 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/3 19:34:54 閱讀更多