黄金分割移动平均线交易策略


创建日期: 2024-01-05 14:21:52 最后修改: 2024-01-05 14:21:52
复制: 0 点击次数: 884
avatar of ChaoZhang ChaoZhang
1
关注
1617
关注者

黄金分割移动平均线交易策略

概述

黄金分割移动平均线交易策略是一种试图利用长短期移动平均线的黄金交叉作为交易信号的量化交易策略。该策略同时结合RSI指标避免在局部高位开仓,以控制风险。

策略原理

该策略主要基于两个移动平均线:200日线作为长期均线,10日线作为短期均线。当短期均线上穿长期均线时产生买入信号;当短期均线下穿长期均线时产生卖出信号。这就是著名的“黄金交叉”。该策略同时结合RSI指标,如果RSI小于30就会触发策略只在超卖区开仓。

具体来说,如果满足以下条件就会开多头仓位:

  1. 10日均线上穿200日均线
  2. 当前无持仓
  3. RSI小于30

平仓条件如下:

  1. 止损:价格跌破开仓价一定比例(可设置)时止损
  2. 止盈:价格超过一定比例(可设置)时止盈

优势分析

该策略具有以下优势:

  1. 利用了移动平均线的黄金交叉信号,这是一种经典且有效的技术指标交易信号
  2. 结合RSI避免在高点买入,可以一定程度控制风险
  3. 有止损和止盈设置,可以锁定利润,规避风险

风险分析

该策略也存在一些风险:

  1. 移动平均线策略容易产生错误信号和掉头
  2. RSI在一些强势行情中会失效
  3. 止损设置过小可能导致超短线交易而频繁停损

为降低这些风险,可以考虑以下几点优化措施:

  1. 调整均线参数,或者加入更多均线
  2. 结合其他指标确认RSI信号
  3. 调整止损止盈参数设定

优化方向

该策略还有进一步优化的空间:

  1. 增加更多指标过滤信号,避免错误信号
  2. 优化移动平均线参数
  3. 结合波动率指标设定动态止损
  4. 加入机器学习模型判断市场状态
  5. 采用算法自动优化参数

总结

黄金分割移动平均线交易策略整体来说是一种简单有效的趋势跟踪策略。它利用经典的均线交叉信号产生交易机会,并设有止损止盈来控制风险。该策略可以通过多指标组合、参数优化、机器学习等手段进行进一步改进,从而获得更好的策略效果。

策略源码
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tsujimoto0403

//@version=5
strategy("聖杯", overlay=true,default_qty_type=strategy.percent_of_equity,
     default_qty_value=100)

//ユーザーインプットの準備
malongperiod=input.int(200,"長期移動平均BASE200",group = "パラメータ")
mashortperiod=input.int(10,"長期移動平均BASE10",group = "パラメータ")
stop=input.int(20,title = "損切の割合%",group = "パラメータ")
profit=input.int(5,title = "利食いの割合%",group = "パラメータ")
startday=input(title="バックテストを始める日", defval=timestamp("01 Jan 2018 13:30 +0000"), group="期間")
endday=input(title="バックテスを終わる日", defval=timestamp("1 Jan 2099 19:30 +0000"), group="期間")

//使う変数
var float stopprice=0
var float takeprofit=0

//とりあえず使うインジケーターをプロット
malong=ta.sma(close,malongperiod)
mashort=ta.sma(close,mashortperiod)


plot(malong,color=color.aqua,linewidth = 2)
plot(mashort,color=color.yellow,linewidth = 2)
bgcolor(ta.rsi(close,3)<30?color.rgb(229, 86, 86, 48):na)

//期間条件
datefilter = true

//エントリー条件
if close>malong and close<mashort and strategy.position_size == 0 and datefilter and ta.rsi(close,3)<30
    strategy.entry(id="long", direction=strategy.long)

if strategy.position_size>0 
    strategy.exit(id="long",stop=(1-0.01*stop)*strategy.position_avg_price)

//売り
if  strategy.position_size > 0 and close>mashort and close<low[1] 
    strategy.close(id ="long")