php户外运动产品企业网站源码,网站建设方案功能描述,漳州专业网站建设,软件介绍下载网站建设均值回归策略简介
均值回归#xff08;Mean Reversion#xff09;假设价格会围绕均值波动#xff0c;当价格偏离均值一定程度后#xff0c;会回归到均值。 基本逻辑#xff1a;
计算一段时间内的移动均值#xff08;如 20 天均线#xff09;。当当前价格高于均值一定比…
均值回归策略简介
均值回归Mean Reversion假设价格会围绕均值波动当价格偏离均值一定程度后会回归到均值。 基本逻辑
计算一段时间内的移动均值如 20 天均线。当当前价格高于均值一定比例做空当低于均值一定比例做多。持仓等待价格回归后平仓。 官网下载DOLGPHINDB 总结
✅ Docker 运行 DolphinDB ✅ 创建模拟股票数据表 ✅ Golang 连接 DolphinDB 进行查询
这样Golang 代码就可以直接获取数据并进行回测了 如果需要更复杂的 数据流 或 实时计算可以考虑 DolphinDB 的 流式表stream table。 Golang 实现均值回归策略 主要步骤
从 DolphinDB 获取历史数据收盘价计算 n 日移动均值生成交易信号计算策略回测收益 代码
以下 Golang 代码
连接 DolphinDB 获取数据计算 20 日均线执行简单的回测 package mainimport (fmtlogmathnet/httpstringsencoding/jsonio/ioutil
)// DolphinDB 查询 URL根据你的服务器 IP 修改
const ddbURL http://your-dolphindb-server:8848/executevar (n 20 // 均线周期threshold 0.02 // 2% 偏差阈值capital 100000.0 // 初始资金
)// 查询 DolphinDB 数据
func fetchDolphinDBData(symbol string) ([]float64, error) {query : fmt.Sprintf(select close from stock_data where symbol%s order by date;, symbol)resp, err : http.Post(ddbURL, text/plain, strings.NewReader(query))if err ! nil {return nil, err}defer resp.Body.Close()body, _ : ioutil.ReadAll(resp.Body)var result map[string]interface{}json.Unmarshal(body, result)closePrices : []float64{}if values, ok : result[close].([]interface{}); ok {for _, v : range values {closePrices append(closePrices, v.(float64))}}return closePrices, nil
}// 计算 n 日均线
func movingAverage(prices []float64, period int) []float64 {ma : make([]float64, len(prices))var sum float64for i : range prices {if i period {ma[i] math.NaN()} else {sum 0for j : 0; j period; j {sum prices[i-j]}ma[i] sum / float64(period)}}return ma
}// 进行回测
func backtest(prices, ma []float64) float64 {position : 0balance : capitalfor i : n; i len(prices); i {price : prices[i]if math.IsNaN(ma[i]) {continue}// 交易信号if price ma[i]*(1-threshold) position 0 { // 买入position int(balance / price)balance - float64(position) * pricefmt.Printf(买入 %d 股, 价格: %.2f, 资金: %.2f\n, position, price, balance)} else if price ma[i]*(1threshold) position 0 { // 卖出balance float64(position) * pricefmt.Printf(卖出 %d 股, 价格: %.2f, 资金: %.2f\n, position, price, balance)position 0}}// 最后清仓if position 0 {balance float64(position) * prices[len(prices)-1]}return balance
}func main() {symbol : AAPLprices, err : fetchDolphinDBData(symbol)if err ! nil {log.Fatalf(获取数据失败: %v, err)}ma : movingAverage(prices, n)finalBalance : backtest(prices, ma)fmt.Printf(策略最终资金: %.2f\n, finalBalance)
} 代码解析
连接 DolphinDB fetchDolphinDBData() 发送 HTTP 请求获取数据你需要修改数据库 IPDolphinDB 返回 close 价格数据 计算移动均线 movingAverage() 计算 n 天均线 交易逻辑 当价格比均线低 2%买入当价格比均线高 2%卖出backtest() 模拟资金变化 打印回测结果 资金增减情况最终资金