该策略是一个结合了多个技术分析工具的综合交易系统,主要利用双均线(20/50周期EMA)、斐波那契回调水平和枢轴点支撑阻力位来确定交易信号。策略采用趋势跟踪与价格回调相结合的方法,通过多重确认来提高交易的准确性。
策略的核心逻辑基于以下几个关键要素: 1. 使用20和50周期EMA的交叉来确定总体趋势方向 2. 运用斐波那契回调水平(23.6%, 38.2%, 50%, 61.8%)来识别潜在的支撑阻力位 3. 结合枢轴点(PP)及其支撑阻力位(S1/S2, R1/R2)来确认价格关键水平 4. 入场条件需同时满足: - 短期均线向上穿越长期均线(做多)或向下穿越(做空) - 价格位于合适的斐波那契水平之上/之下 - 价格满足枢轴点支撑阻力位的确认 5. 采用固定止损(30个点)和获利目标(60个点)来管理风险
该策略通过整合多个经典技术分析工具,构建了一个相对完整的交易系统。虽然存在一定的滞后性,但通过多重确认机制提高了交易的可靠性。通过优化建议的实施,策略有望在实盘交易中取得更好的表现。建议在实盘使用前进行充分的回测,并根据具体市场特征调整参数。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Forex Strategy with EMA, Pivot, Fibonacci and Signals", overlay=true)
// Input for EMAs and Pivot Points
emaShortPeriod = input.int(20, title="Short EMA Period", minval=1)
emaLongPeriod = input.int(50, title="Long EMA Period", minval=1)
fibRetraceLevel1 = input.float(0.236, title="Fibonacci 23.6% Level")
fibRetraceLevel2 = input.float(0.382, title="Fibonacci 38.2% Level")
fibRetraceLevel3 = input.float(0.5, title="Fibonacci 50% Level")
fibRetraceLevel4 = input.float(0.618, title="Fibonacci 61.8% Level")
// Function to calculate Pivot Points and Levels
pivot(high, low, close) =>
pp = (high + low + close) / 3
r1 = 2 * pp - low
s1 = 2 * pp - high
r2 = pp + (high - low)
s2 = pp - (high - low)
[pp, r1, s1, r2, s2]
// Calculate Pivot Points
[pp, r1, s1, r2, s2] = pivot(high, low, close)
// Calculate 20 EMA and 50 EMA
emaShort = ta.ema(close, emaShortPeriod)
emaLong = ta.ema(close, emaLongPeriod)
// Plot the EMAs
plot(emaShort, color=color.blue, title="20 EMA", linewidth=2)
plot(emaLong, color=color.red, title="50 EMA", linewidth=2)
// Fibonacci Levels (manually drawn between the most recent high and low)
var float fibHigh = na
var float fibLow = na
if (not na(high[1]) and high > high[1]) // Check if new high is formed
fibHigh := high
if (not na(low[1]) and low < low[1]) // Check if new low is formed
fibLow := low
fib23_6 = fibLow + (fibHigh - fibLow) * fibRetraceLevel1
fib38_2 = fibLow + (fibHigh - fibLow) * fibRetraceLevel2
fib50 = fibLow + (fibHigh - fibLow) * fibRetraceLevel3
fib61_8 = fibLow + (fibHigh - fibLow) * fibRetraceLevel4
plot(fib23_6, color=color.green, linewidth=1, title="Fibonacci 23.6%")
plot(fib38_2, color=color.green, linewidth=1, title="Fibonacci 38.2%")
plot(fib50, color=color.green, linewidth=1, title="Fibonacci 50%")
plot(fib61_8, color=color.green, linewidth=1, title="Fibonacci 61.8%")
// Entry conditions (Crossovers)
longCondition = ta.crossover(emaShort, emaLong) and close > fib23_6 and close > s1
shortCondition = ta.crossunder(emaShort, emaLong) and close < fib23_6 and close < r1
// Exit conditions (Stop Loss and Take Profit)
stopLossPips = 30 * syminfo.mintick // 30 pips Stop Loss
takeProfitPips = 60 * syminfo.mintick // 60 pips Take Profit
if (longCondition)
strategy.entry("Buy", strategy.long, stop=stopLossPips, limit=takeProfitPips)
if (shortCondition)
strategy.entry("Sell", strategy.short, stop=stopLossPips, limit=takeProfitPips)
// Plot Pivot Points for visual reference
plot(pp, color=color.yellow, linewidth=2, title="Pivot Point")
plot(r1, color=color.purple, linewidth=1, title="Resistance 1")
plot(s1, color=color.purple, linewidth=1, title="Support 1")
plot(r2, color=color.purple, linewidth=1, title="Resistance 2")
plot(s2, color=color.purple, linewidth=1, title="Support 2")
// Adding Buy and Sell Signals
plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white, size=size.small)
plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white, size=size.small)