
이 전략은 트렌드 추적 방식의 알고리즘 거래 전략으로, 두 개의 다른 변수의 EMA 평균선을 계산하여, 평균선이 골든 크로스 (Golden Cross) 와 데이트 크로스 (Death Cross) 에 발생했을 때 거래 신호를 발산한다. 이 전략은 동시에 여러 EMA 평균선을 결합하여 수익으로 탈퇴하고, 위험을 제어하기 위해 스톱 손실을 설정한다.
이 전략은 4개의 EMA 평균선을 사용하며, 이는 빠른 EMA 평균선과 느린 EMA 평균선으로 구성되어 있으며, 이들의 교차는 구매 및 판매 신호를 생성하기 위해 사용된다. 또한, 이 전략은 빠른 EMA 사이에 있는 두 개의 EMA 평균선을 사용하며, 이를 이용해서 포지션을 조기에 일부 또는 전부 퇴출하여 수익을 잠금한다.
구체적으로, 빠른 EMA에서 느린 EMA를 통과하면 구매 신호가 발생하고, 빠른 EMA 아래에서 느린 EMA를 통과하면 판매 신호가 발생한다. 이것은 전형적인 쌍 EMA 이동 평균 교차 전략이다. 트렌드를 더 잘 추적하고 수익률을 높이기 위해, 이 전략은 포지션에 진입한 후, 빠른 EMA에서 두 번째 EMA 평선을 통과하거나 빠른 EMA 아래에서 세 번째 EMA 평선을 통과할 때, 선택적으로 일부 또는 전체 포지션을 종료한다.
또한, 이 전략은 손실이 확대되는 것을 막기 위해 긴 선과 짧은 선의 두 개의 중단 지점을 설정합니다. 구체적으로, 여러 단 하나의 중단 지점은 입시 가격의 6%로 설정되며, 빈 단 하나의 중단 지점은 입시 가격의 3%로 설정됩니다.
전형적인 쌍 EMA 이동 평균 크로스 전략에 비해 이 전략의 주요 장점은 다음과 같다:
이윤 퇴출을 위해 여러 개의 EMA 평선을 설정하면 이윤을 더 잘 고정하고, 이윤이 후속 회귀에서 축소되는 것을 방지할 수 있다.
공백 상자는 작은 스톱로즈의 폭을 가지고 있으며, 더 큰 정상상황의 흔들림을 견딜 수 있으며, 빈번한 스톱로즈를 방지한다.
다른 파라미터의 EMA 평균선을 설정하여 수익으로 탈퇴할 수 있으며, 시장 상황에 따라 최적의 탈퇴점을 선택할 수 있다.
전체적인 전략은 좋은 트렌드 추적 능력을 가지고 있으며, 중·장선 트렌드에서 오는 이득을 포착할 수 있다.
이 전략의 주요 위험점은 다음과 같습니다.
위기 상황에서는 EMA 평균선에서 생성되는 거래 신호가 자주 발생하여 과도한 거래가 발생할 수 있습니다.
짧은 라인 스톱은 극한의 상황을 막는 데에 그치지 않고 전략 계좌의 큰 인출을 막는 데에 그치지 않는다.
이 전략의 철회 위험은 여전히 존재하며, 장기적인 조정 상황에 직면했을 때 수익은 크게 줄어들 수 있습니다.
이 정책은 변수 조정에 민감하며, 잘못 구성되면 정책이 실패할 수 있다.
위와 같은 위험을 고려하여, 이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
기계 학습 알고리즘을 추가하여 트렌드를 판단하고 잘못된 거래의 가능성을 줄일 수 있습니다.
시장의 변동에 따라 역동적으로 중지량을 조정할 수 있는 적응형 손해 차단 장치를 추가하십시오.
재원 활용률을 설정하고, 전략 계좌에 과도한 재원을 차지하지 않도록 하고, 포지션 관리 장치를 추가한다.
거래 품종을 필터링하고, 트렌드가 뚜렷하고, 변동성이 큰 지표를 거래한다.
매개 변수 최적화 모듈을 추가하여 매개 변수의 자동 최적화 및 업데이트를 구현한다.
이중 EMA 이동 평균 교차 전략은 전체적으로 비용 비교적 높은 트렌드 추적 전략이다. 이 전략은 여러 EMA 평균을 설정하여 이윤으로 빠져 나가는 것, 작은 상위 손실, 강한 트렌드 추적 능력 등의 장점을 가지고 있다. 그러나 이 전략은 또한 약간의 위험이 있으며, 파라미터 조정을 최적화해야 하며, 기계 학습 알고리즘과 같은 전략의 안정성을 더욱 높이는 데 도움을 준다.
/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RealTraderAkeme
//@version=5
strategy("AKEME_EMA_CROSS_V6", overlay=true)
////////////////////////////////////////////////////////////PARAMETERS/////////////////////////////////////////////////////////////////
emaFast_op = input(title="Fast_EMA", defval=6)
emaSlow_op = input(title="Slow_EMA", defval=26)
emaExit_op = input(title="Sell_EMA_Exit",defval=10)
emabuyExit_op = input(title="Buy_EMA_Exit",defval=20)
Order_Value = input(defval=1000, title="Order_Value in Pounds")
Direction_Of_Trade = input(title="Trade Direction", defval="Both")
////////////////////////////////////////////////////////////INPUTS//////////////////////////////////////////////////////////////////
fastEMA = ta.ema(close, emaFast_op)
slowEMA = ta.ema(close,emaSlow_op)
emaExit = ta.ema(close,emaExit_op)
emabuyExit = ta.ema(close,emabuyExit_op)
Entry_Ratio = strategy.openprofit/Order_Value
//////////////////////////////////////////////////////////GRAPHS//////////////////////////////////////////////////////////////////
plot(fastEMA, color=color.orange, linewidth = 2)
plot(slowEMA,color = color.blue, linewidth = 2)
plot(emaExit,color = color.gray, linewidth = 2)
plot(series=emabuyExit, color= color.rgb(210, 74, 235), linewidth=2)
/////////////////////////////////////////////////////Conditions//////////////////////////////////////////////////////////////////////
longOK = (Direction_Of_Trade == "Long") or (Direction_Of_Trade == "Both")
shortOK = (Direction_Of_Trade == "Short") or (Direction_Of_Trade == "Both")
///////////////////////////////////////////////////////////ENTRIES&EXITS///////////////////////////////////////////////////////////////
longCondition = ta.crossover(fastEMA, slowEMA) and longOK
if (longCondition)
strategy.entry("Buy", strategy.long)
shortCondition = ta.crossunder(fastEMA, slowEMA) and shortOK
if (shortCondition)
strategy.entry("Sell", strategy.short)
if (strategy.position_size > 0 and shortCondition)
strategy.exit(id="exit Buy", stop=close)
if (strategy.position_size < 0 and longCondition)
strategy.exit(id="exit Sell", stop=close)
/////////////////////////////////////////////////////TAKE PROFIT CONDITIONS////////////////////////////////////////////////////////
if ta.crossunder(fastEMA, emabuyExit) and Entry_Ratio > 0.08333
strategy.close("Buy",comment = "Exit")
if ta.crossover(fastEMA, emaExit) and Entry_Ratio > 0.016666
strategy.close("Sell",comment = "Exit")
if Entry_Ratio > 0.4166666 //0.4166666
strategy.close("Buy",comment = "Exit", qty_percent = 100)
if Entry_Ratio > 0.0833333//0.0833333
strategy.close("Sell",comment = "Exit")//50
if Entry_Ratio > 0.1111111//4000
strategy.close("Sell",comment = "Exit", qty_percent = 50)
if ta.crossover(fastEMA, emaExit) and Entry_Ratio > 0.278 //Percentage
strategy.close("Sell",comment = "Exit")
////////////////////////////////////////////STOP LOSS AS PERCENTAGE OF ENTRY CONDITIONS///////////////////////////////////////////
if Entry_Ratio < -0.05555555555
strategy.close("Buy",comment = "Exit")
if Entry_Ratio < -0.027777777777
strategy.close("Sell",comment = "Exit")// The Sell Stoloss is half the buying stoploss.