MACD Valley Detector 策略是一个基于 MACD 指标的交易策略。该策略通过检测 MACD 指标的谷底来生成买入信号。当 MACD 指标形成谷底,并且 MACD 值小于等于-0.4,且 MACD 与其信号线之间的差值小于0时,策略会发出买入信号,同时设置止盈价格。
MACD Valley Detector 策略的核心是利用 MACD 指标来捕捉潜在的反转机会。MACD 指标由两条指数移动平均线(EMA)之差计算得出,反映了价格的动量变化。当 MACD 指标形成谷底时,表明价格的下跌动能可能减弱,存在反转的可能性。
该策略使用以下条件来判断 MACD 谷底: 1. 当前 MACD 与信号线之差大于前一个差值 2. 前一个差值小于前两个差值 3. MACD 值小于等于-0.4 4. MACD 与信号线之差小于0
当以上条件同时满足时,策略认为出现了 MACD 谷底,并发出买入信号。同时,策略设置了固定的止盈价格,即买入价格加上一个固定的价格差值(takeProfitValue)。
MACD Valley Detector 策略是一个基于 MACD 指标谷底检测的交易策略。通过捕捉 MACD 指标的谷底,策略试图找到潜在的反转机会并进行买入。策略使用了多个条件来确认信号,并设置了固定的止盈价格。尽管该策略具有一定的优势,如利用广泛使用的 MACD 指标和多条件确认,但也存在一些风险和局限性,如滞后性、固定参数、缺乏明确止损等。为了改进策略,可以考虑引入动态止损、参数优化、结合其他指标过滤以及动态止盈等方法。总的来说,MACD Valley Detector 策略为捕捉反转机会提供了一种思路,但仍需要根据实际市场条件和交易需求进行优化和改进。
/*backtest
start: 2024-03-12 00:00:00
end: 2024-04-11 00:00:00
period: 1h
basePeriod: 15m
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/
// © freditansari
//@version=5
//@version=5
strategy("MACD Valley Detector", overlay=true)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
rsi = ta.rsi(close, 14)
atr = ta.atr(14)
qty=1
takeProfitValue =7
// stopLossValue = 1
// close[0] < close[1] and close[1] > close[2]
is_valley= delta[0] > delta[1] and delta[1]<delta[2]? 1:0
// plot(is_valley , "valley?")
if(is_valley==1 and MACD<=-0.4 and delta <0)
takeProfit = close +takeProfitValue
action = "buy"
// strategy.entry("long", strategy.long, qty=qty)
// // strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
// strategy.exit("exit", "long", limit=takeProfit)
alert('{"TICKER":"'+syminfo.ticker+'","ACTION":"'+action+'","PRICE":"'+str.tostring(close)+'","TAKEPROFIT":"'+str.tostring(takeProfit)+'","QTY":"'+str.tostring(qty)+'"}')
if (ta.crossover(delta, 0))
stopLoss = low -0.3
takeProfit = high +0.3
strategy.entry("MacdLE", strategy.long,qty=qty, comment="MacdLE")
strategy.exit("exit long", "MacdLE", limit=takeProfit)
// strategy.exit("exit long", "MacdLE", stop=stopLoss, limit=takeProfit)
if (ta.crossunder(delta, 0))
stopLoss = high + 0.3
takeProfit = low - 0.3
strategy.entry("MacdSE", strategy.short,qty=qty, comment="MacdSE")
strategy.exit("exit long", "MacdLE", limit=takeProfit)
// strategy.exit("exit short", "MacdSE", stop=stopLoss, limit=takeProfit)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)