다형 이동 평균과 이중 이동 평균 교차 전략

저자:차오장, 날짜: 2023-09-19 21:27:31
태그:

전반적인 설명

이 전략은 여러 종류의 이동 평균의 크로스오버를 계산하여 트레이딩 신호를 생성하고, 긴 및 짧은 이중 MA 크로스오버를 구현합니다. 또한 위험을 제어하기 위해 트렌드 식별을 위한 세 번째 MA 라인을 도입합니다.

전략 논리

  1. 두 개의 MA를 계산합니다: MA1 및 MA2, SMA, EMA, VWMA 등을 선택할 수 있습니다. 길이는 사용자 정의됩니다.

  2. MA 크로스오버를 결정합니다. MA1이 MA2를 넘을 때 긴 위치로 이동합니다. MA1이 MA2를 넘을 때 긴 위치로 이동합니다.

  3. (선택) 3차 MA - MA3를 계산합니다. 일반적으로 50와 같은 긴 기간을 가지고 있습니다. MA3 위에 상승 추세, 아래는 하락 추세입니다. 가격이 MA3를 깨는 경우에만 거래하십시오.

  4. 규칙을 백테스트 타임프레임과 결합하여 거래 신호를 생성합니다.

  5. 시각적 도움을 위해 크로스오버 영역에 색을 채우십시오.

이 전략은 MA와 크로스오버 장기/단계, 그리고 위험 통제를 위한 세 번째 MA를 결합합니다. 매개 변수는 다른 시장 주기에 따라 유연하게 조정될 수 있습니다.

이점 분석

  1. 이중 MA 크로스오버는 실제로 추세를 따르고 있습니다.

  2. 여러 MA 유형 조합을 지원하고, 다른 기간에 최적화 할 수 있습니다.

  3. 제3차 MA는 위험을 통제하고 불필요한 손실을 줄입니다.

  4. 시각 보조는 차트 거래 경험을 향상시킵니다.

  5. 조절 가능한 매개 변수는 다른 주기에 최적화 될 수 있습니다.

  6. 단순하고 명확한 논리, 이해하기 쉽고 따라가기 쉽습니다.

위험 분석

  1. 이중 MA는 범위와 트렌드 역전 시나리오에 어려움을 겪습니다. 매개 변수 최적화를 통해 개선 할 수 있습니다.

  2. 이중 MA는 잘못된 신호 또는 과도한 반응을 생성 할 수 있습니다. MA 기간을 연장하거나 매개 변수를 최적화 할 수 있습니다.

  3. 세 번째 MA는 강력한 트렌드를 놓칠 수 있습니다. 더 많은 이익을 얻기 위해 기간을 단축하는 것을 테스트 할 수 있습니다.

  4. 모든 거래에서 이기는 것을 보장할 수 없습니다. 적절한 스톱 로스 관리가 필요합니다.

최적화 방향

  1. 가장 좋은 매개 변수 쌍을 위해 다른 MA 유형과 기간을 테스트합니다.

  2. 제3차 MA 기간을 최적화하여 위험 통제와 이익 확보를 균형있게 합니다.

  3. 단일 거래 손실 금액을 제어하기 위해 스톱 로스 전략을 추가합니다.

  4. 빅데이터를 기반으로 최적의 매개 변수를 찾기 위해 머신러닝 알고리즘을 고려해보세요.

  5. 신호 필터링 및 확인을 위해 KD, MACD와 같은 다른 지표와 결합합니다.

요약

이 다중 유형의 MAs와 함께 이중 이동 평균 크로스오버 전략은 트렌드 추적, 리스크 제어, 매개 변수 최적화, 시각 보조 및 기타를 통합합니다. 지속적인 테스트 및 최적화, 다른 지표 또는 기계 학습 등을 도입하여 시장에 더 잘 적응할 수 있으며 큰 실용적 가치를 가지고 있습니다. 요약하자면, 이것은 간단하고 실용적이며 쉽게 최적화 가능한 전략으로 알고리즘 거래의 훌륭한 출발점입니다.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





더 많은