基于中值线的Gandalf量化交易策略

Author: ChaoZhang, Date: 2023-10-30 10:27:40
Tags:

基于中值线的Gandalf量化交易策略

概述

Gandalf量化交易策略是一种基于中值线的趋势跟踪策略。它通过计算加权平均价、中值线和实体中间价格,判断当前趋势方向,以寻找较优入场点。当检测到趋势反转时,它会快速止损退出。该策略结合了趋势跟踪和趋势反转的策略思想。

策略原理

Gandalf策略的核心逻辑是比较加权平均价、中值线和实体中间价格的大小关系,以判断当前趋势方向和力度。

具体来说,它会计算以下价格:

  • 加权平均价:(最高价 + 最低价 + 收盘价 + 收盘价) / 4
  • 中值线:(最高价 + 最低价) / 2
  • 实体中间价格:(开盘价 + 收盘价) / 2

在入场时,它会比较前两根K线的加权平均价、中值线和实体中间价格的大小关系,判断是否符合趋势启动的特征。

例如,如果加权平均价低于中值线,并且实体中间价格也低于加权平均价,说明价格正在下跌,这是一个做空的机会。

在止损退出时,它会继续比较这几个价格的大小关系,判断趋势是否发生反转的迹象。如果加权平均价高于实体中间价格,并且中值线也低于加权平均价,说明趋势发生反转,应该立即止损。

通过这种比较价格大小关系的方法,Gandalf策略实现了对趋势的判断和跟踪。它既可以找到较好的入场时机,也可以快速检测到趋势反转从而止损。

策略优势

Gandalf策略具有以下几点优势:

  1. 使用中值线判断趋势方向,可以有效过滤市场噪音,锁定主要趋势。

  2. 入场条件结合多种价格比较,可以更可靠地判断趋势启动。

  3. 停损条件也利用价格比较判断趋势反转,可以快速止损,控制风险。

  4. 采用条件单下单方式,可以在理想价格附近进场。

  5. 可预先设置止盈次数和持仓上限,可以锁定盈利并控制单笔交易风险。

  6. 代码结构清晰简单,容易理解和修改。

  7. 可针对个人风险偏好调整参数,易于优化。

  8. 适用于趋势性品种,可获取趋势 추赚利润。

总的来说,Gandalf策略利用中值线判断趋势,设置止盈止损条件,可以有效控制风险追踪趋势,是一种可靠的趋势跟踪策略。

策略风险

Gandalf策略也存在一定的风险需要注意:

  1. 作为趋势跟踪策略,在趋势不明显或反转频繁时,会产生较多小亏损。

  2. 无法有效判断趋势反转点,可能导致亏损扩大。

  3. 在盘整行情中,容易被套利。

  4. 依赖参数设置,不同品种需要调整参数。

  5. 单边持仓,无法利用反向行情获利。

  6. 条件单失败率较高,可能长时间等待入场。

对应风险管理措施:

  1. 采用小仓位,分批进场,控制单笔损失。

  2. 设置止损线,快速止损。或采用移动止损跟踪止损位。

  3. 优化参数,调整至适合当前品种。可辅助以其他指标判断趋势。

  4. 可采用马丁格尔补仓方式,降低成本。

  5. 交易具有明显趋势的品种,利润置信度高。

  6. 适当放宽入场条件,兼顾入场概率。

策略优化方向

Gandalf策略还可从以下几个方面进行优化:

  1. 构建趋势判断指标,辅助判断趋势反转时机。例如加入MACD,布林带等判断。

  2. 加入离散优化功能,自动优化参数,适应更多品种。

  3. 增加机器学习算法,利用历史数据训练判断趋势的神经网络或SVM模型。

  4. 增加止盈方式,如移动止盈,指数移动止盈。

  5. 结合相关产品,进行价差套利或统计套利。

  6. 加入基于隐马尔可夫模型的状态预测,判断行情状态。

  7. 构建复合策略,如与均线策略组合,实现多策略管理。

  8. 探索交易策略组合优化,找到组合权重。

综合来说,Gandalf策略可以在趋势判断、自动优化、风险管理等多个层面进行扩展与优化,使策略更稳定可靠。

总结

Gandalf量化策略是一种基于价格比较判断趋势的简单有效策略。它结合趋势跟踪与快速止损的思想,能够有效控制风险。该策略逻辑清晰易懂,可根据个人风险偏好调整参数。但它也存在一定盈利波动和持仓风险,需要进行适当优化管理。总体来说,Gandalf策略是一个可靠、易于掌握和优化的趋势跟踪策略,适合用来追求稳定的趋势利润。


/*backtest
start: 2023-10-22 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

// The GandalfProjectResearchSystem strategy, as discussed in
// “System Development Using Artificial Intelligence”
// by Domenico D’Errico and Giovanni Trombetta
strategy("Gandalf Project Research System", overlay=true)

// Inputs
Quantity = input(0, title="Quantity (0 to auto calc)")
Single_Trade_Money = input(10000, minval=1, title="Money to spend on single trade")
MaxProfitCloses = input(6, minval=1, title="Max Profit Close")
MaxBars = input(8, minval=1, title="Max Total Bars")
Enter_Gap = input(-0.08, title="Distance from low price to place entry limit")
AltExit = input(true, title="Use Alt Exit")

// Calculate Order Quantity
Ncon = Single_Trade_Money / close

// Misc Variables
src = close
BarsSinceEntry = 0
MaxProfitCount = 0
MedBodyPrice = (open + close) / 2.0
Weighted = (high + low + close + close) / 4.0
Median = (high + low) / 2.0

// Enter Conditions
Cond00 = strategy.position_size == 0
Cond01 = ((Weighted[1] < Median[1] and Median[2] <= Weighted[1] and MedBodyPrice[2] <= Weighted[3]) or (Weighted[1] < Median[3] and MedBodyPrice[0] < Median[2] and MedBodyPrice[1] < MedBodyPrice[2]))
Entry01 = Cond00 and Cond01

// Update Exit Variables
BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1
MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1])

// Exit Conditions
eCond01 = BarsSinceEntry - 1 >= MaxBars
eCond02 = MaxProfitCount >= MaxProfitCloses
eCond03 = ((Weighted[1] < MedBodyPrice[1] and Median[2] == MedBodyPrice[3] and MedBodyPrice[1] <= MedBodyPrice[4]) or (Weighted[2] < MedBodyPrice[0] and Median[4] <= Weighted[3] and MedBodyPrice[1] <= Weighted[1]) or (Weighted[2] < MedBodyPrice[0] and Median[4] <= Weighted[3] and MedBodyPrice[1] <= Weighted[1]))
eCond04 = AltExit ? true : close - strategy.position_avg_price < 0
Exit01 = not Cond00 and (eCond01 or eCond02 or (eCond03 and eCond04))

// Entries
strategy.entry(id="L1", long=true, limit=low + Enter_Gap, qty=(Quantity > 0 ? Quantity : Ncon), when=Entry01)
 
// Exits
strategy.close("L1", Exit01)


更多内容