모멘텀 추적 이중 EMA 크로스오버 전략

저자:차오장, 날짜: 2024-02-26 16:40:29
태그:

img

전반적인 설명

이 전략은 트렌드를 따르는 알고리즘 거래 전략이다. 다른 매개 변수와 함께 두 개의 EMA 라인을 계산하고 두 EMA 사이에 황금 십자가와 죽음의 십자가가 발생하면 거래 신호를 생성한다. 이 전략은 또한 수익 출구에 대한 여러 EMA 라인을 결합하고 위험을 제어하기 위해 스톱 로스 포인트를 설정한다.

전략 원칙

이 전략은 빠른 EMA와 느린 EMA를 포함한 4개의 EMA 라인을 사용하며, 이 라인의 크로스오버는 구매 및 판매 신호를 생성하는 데 사용됩니다. 또한 빠른 EMA와 느린 EMA 사이의 매개 변수와 함께 두 개의 EMA 라인을 사용하여 수익을 잠금하기 위해 부분적으로 또는 완전히 사전에 포지션을 종료합니다.

특히, 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다. 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다. 이것은 전형적인 이중 EMA 크로스오버 전략입니다. 트렌드를 더 잘 추적하고 수익성을 높이기 위해, 포지션을 입력한 후, 전략은 빠른 EMA가 두 번째 EMA 라인을 넘거나 빠른 EMA가 세 번째 EMA 라인을 넘을 때 선택적으로 부분 또는 모든 포지션을 종료합니다.

또한, 전략은 과도한 손실을 방지하기 위해 길고 짧은 스톱 로스 포인트를 모두 설정합니다. 구체적으로, 긴 포지션의 스톱 로스는 입상 가격의 6%와 짧은 포지션의 3%로 설정됩니다.

이점 분석

전형적인 이중 EMA 크로스오버 전략에 비해 이 전략의 주요 장점은 다음과 같습니다.

  1. 이윤 퇴출을 위해 여러 EMA 라인을 설정하면 이윤을 더 잘 고정하고 후속 인하 과정에서 이윤 감소를 방지 할 수 있습니다.

  2. 짧은 포지션은 더 작은 스톱 로스를 가지고 있으며, 이는 더 큰 정상적인 시장 변동에 견딜 수 있으며 빈번한 스톱 로스를 방지합니다.

  3. 이윤 퇴출을 위한 다른 매개 변수와 EMA 라인을 설정하면 시장 조건에 따라 최적의 퇴출 지점을 선택할 수 있습니다.

  4. 전체적인 전략은 중장기 동향에서 더 큰 이익을 얻을 수 있는 좋은 트렌드 추적 능력을 가지고 있습니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 범위에 묶인 시장에서는 EMA 라인에서 생성되는 거래 신호가 빈번하며 이는 과도한 거래로 이어질 수 있습니다.

  2. 짧은 스톱 로스는 극한 시장 상황을 막는 것 뿐이고 전략 계정에서의 상당한 마감을 막을 수 없습니다.

  3. 적립 위험은 여전히 존재합니다. 장기적 조정으로 수익이 크게 줄어들 수 있습니다.

  4. 전략은 매개 변수 조정에 민감합니다. 잘못된 구성으로 인해 전략 실패가 발생할 수 있습니다.

최적화

위 위험성 때문에 전략은 다음 측면에서 최적화 될 수 있습니다.

  1. 트렌드 판단을 돕기 위해 기계 학습 알고리즘을 늘리고 잘못된 거래 가능성을 줄입니다.

  2. 시장 변동성에 따라 동적으로 중지 손실을 조정하기 위해 적응 스톱 손실 메커니즘을 강화합니다.

  3. 과도한 자본 채용을 피하고 위치 관리 메커니즘을 높이기 위해 자본 활용을 설정하십시오.

  4. 명백한 추세와 높은 변동성을 가진 거래 상품을 선택하십시오.

  5. 파라미터 최적화 모듈을 늘려 자동 최적화 및 파라미터 업데이트를 달성합니다.

결론

전체적으로, 이중 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.



더 많은