未来麦克D路线预测策略


创建日期: 2023-12-13 17:21:44 最后修改: 2023-12-13 17:21:44
复制: 0 点击次数: 435
1
关注
1207
关注者

未来麦克D路线预测策略

概述

本策略的核心思想是通过分析麦克D指标的未来走势,实现对价格趋势的预测。该策略充分利用了麦克D指标的快速均线和慢速均线构成的交叉产生的交易信号。

策略原理

  1. 计算麦克D指标的差值(历史值),并据此判断麦克D线和信号线的上涨和下跌。
  2. 通过设置看涨期权,使用4小时时间范围内的麦克D指标的未来值,判断麦克D指标的未来走势,以预测价格趋势。
  3. 在麦克D指标差值大于0(代表多头市场)且预计会继续上涨时,做多;当麦克D指标差值小于0(代表空头市场)且预计会继续下跌时,做空。
  4. 该策略同时结合了趋势跟踪和趋势反转两种交易方式,在捕捉趋势的同时,也把握了趋势反转的时点。

策略优势分析

  1. 利用麦克D指标判断市场趋势的优势,可以有效过滤震荡,捕捉长线趋势。
  2. 借助麦克D指标未来走势的预测,可以及早把握价格转折点,增强策略的前瞻性。
  3. 同时融合趋势跟踪和趋势反转交易方式,可以在跟踪趋势过程中适时反转头寸,获取更大收益。
  4. 策略参数可调,用户可以根据不同时间周期和市场环境进行优化,提高策略稳定性。

策略风险分析

  1. 依赖对麦克D指标未来走势的预测,如果预测不准会导致交易失败。
  2. 需要配合止损来控制单笔损失。止损幅度设置不当也会影响策略效果。
  3. 麦克D指标因滞后性而可能错过价格快速反转的机会。这在高波动行情下的策略表现需要关注。
  4. 需要关注交易成本的影响。

策略优化方向

  1. 结合其他指标进行预测,降低对单一麦克D指标的依赖,提高预测准确性。比如考察成交量的变化。
  2. 加入机器学习算法,训练模型预测麦克D指标未来走势。
  3. 优化参数设定,寻找最佳的参数组合。
  4. 不同市场环境适合不同的参数配置,可以加入自适应系统自动优化参数。

总结

本策略充分发挥麦克D指标判断趋势优势的同时,又增加了对指标未来走势的预测分析,在捕捉趋势的基础上把握关键的转折点。相比简单追踪趋势,本策略的运用前瞻性更强,获利空间更大。当然也存在一定的风险,需要进一步优化和完善。总体来说,该策略值得深入研究和应用。

策略源码
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.
更多内容