다양한 유형의 이동평균 거래 전략


생성 날짜: 2023-09-19 21:27:31 마지막으로 수정됨: 2023-09-19 21:27:31
복사: 0 클릭수: 713
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 여러 종류의 이동 평균을 계산하여 쌍평균 선의 교차 상위와 교차 하위값을 구현하며, 트렌드 추적 전략에 속한다. 동시에, 전략은 제3의 이동 평균을 트렌드 판단으로 도입하여 위험을 제어한다.

전략 원칙

  1. 두 개의 평균선을 계산합니다: MA1 및 MA2, 각각 SMA, EMA, VWMA와 같은 다양한 유형을 선택할 수 있으며, 길이는 사용자 정의 할 수 있습니다.

  2. MA1과 MA2의 교차점을 판단한다: MA1 위에 MA2를 부딪히면 더 많이 하고, MA1 밑에 MA2를 부딪히면 평점이다.

  3. (선택) 세 번째 평균선 MA3을 계산하고, 길이는 일반적으로 더 긴 주기를 취합니다. 예를 들어 50 △ MA3 위쪽은 다단, 아래쪽은 공백 △ 가격이 MA3을 돌파했을 때만 포지션을 개설합니다.

  4. 위의 규칙은 재검토 기간과 결합하여 전략 거래 신호의 생성을 완료한다.

  5. 교차로에 대한 공백 영역을 채색하여 시각 보조를 형성한다.

이 전략은 이동 평균의 트렌드 추적과 교차 다중 코카이딩의 사상을 결합하고, 제3의 평행선을 도입하여 위험을 제어하고, 파라미터를 조정하여 다른 시장 주기에 유연하게 적응할 수 있다.

우위 분석

  1. 양평선 교차를 사용하여 트렌드 방향을 판단하여 트렌드를 효과적으로 추적할 수 있다.

  2. 다양한 유형의 평평선 조합을 지원하여 다른 주기 시장에 최적화 할 수 있습니다.

  3. 제3항 일률선을 도입하여 위험을 통제하여 불필요한 손실을 줄일 수 있다.

  4. 시각화 된 크로스 컬러는 거래의 경험을 향상시킵니다.

  5. 매개 변수는 조정할 수 있으며, 다른 주기들에 대해 최적화할 수 있다.

  6. 규칙은 간단하고 명확하며, 이해하기 쉽고 실행하기 쉽습니다.

위험 분석

  1. 이중 평행 전략은 충격적인 상황과 트렌드 반전 시나리오에 손실을 초래할 수 있다. 변수 최적화를 통해 위험을 줄일 수 있다.

  2. 쌍평선에는 때때로 잘못된 신호 또는 초전향 반응이 발생한다. 평선 주기를 적절히 늘리거나 최적화 매개 변수를 사용할 수 있다.

  3. 제3평균선은 더 강한 유동의 기회를 놓칠 수 있다. 제3평균선을 적절히 줄여 놓친 수익 기회를 줄이기 위해 테스트할 수 있다.

  4. 모든 거래에서 수익을 보장할 수 없기 때문에, 손실을 잘 관리해야 합니다.

최적화 방향

  1. 다른 유형의 평균선과 다른 주기적 변수의 조합을 테스트하여 최적의 변수 쌍을 찾습니다.

  2. 제3평평선의 주기적 변수를 최적화하고, 리스크 제어와 수익 캡처를 균형 잡는다.

  3. 단기 손실을 통제하기 위해 Stop Loss 전략에 참여하십시오.

  4. 대량 데이터 훈련으로 최적의 변수를 찾는 기계 학습 알고리즘을 고려할 수 있다.

  5. KD, MACD 등과 함께 신호 필터링 및 검증을 수행한다.

요약하다

이 쌍평선 다형 이동 평균 교차 전략은 트렌드 추적, 위험 제어, 변수 최적화, 시각 보조 등의 여러 기능을 통합하여 매우 고전적이고 실용적인 트렌드 전략입니다. 지속적인 테스트 및 최적화 변수, 다른 지표 또는 기계 학습을 적절하게 도입하는 등의 수단과 함께 조합하면 전략의 시장에 대한 적합성을 지속적으로 향상시킬 수 있습니다.

전략 소스 코드
/*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()