이 전략은 평평선 거래에 기반하며, 다단과 공백의 세 개의 진입선을 설정하여 다단 공백 쌍방향 포지션을 실현합니다. 가격이 평평선을 돌파 할 때, 포지션을 열고 더 많은 공백을 하고, 상장 을 통해 분량 진입장을 실현합니다.
이 전략은 주로 평균선의 돌파를 기반으로 트렌드 방향을 판단한다. 구체적으로, 그것은 개시 가격, 폐시 가격, 최고 가격, 최저 가격 등의 수학적 평균을 계산하여 평균선 지표를 얻는다. 그리고는 평균선 위쪽에 다중 입문 경로를 설정하고, 평균선 아래쪽에 공백 입문 경로를 설정한다. 가격이 아래에서 평균선을 돌파할 때, 순차적으로 더 많은 주문을 하고, 가격이 위쪽에서 평균선을 돌파할 때, 순차적으로 공백 주문을 하게 한다.
더 많은 공백을 만드는 주문의 수는 순차적으로 증가하여, 서핑 목록을 설정하여 순차적으로 포장을 열 수 있습니다. 예를 들어, 입점 1 라인 1 손이 더 / 공백을 열고, 입점 2 라인 1 손 보유 포지션을 추가하고, 입점 3 라인 1 손 보유 포지션을 추가합니다. 이렇게 입점 비용을 분산하여 단일 주문의 위험을 줄일 수 있습니다.
이 전략은 또한 상환 메커니즘을 설정한다. 지분량이 0이 아닌 경우, 평균선 가격에 따라 추적 중지 명령이 설정되며, 가격이 다시 평균선 아래로 떨어지면 평점 지점을 중지한다. 이것은 수익의 일부를 잠금하고, 자금을 보호할 수 있다.
전체적으로, 이 전략은 평균 지표를 최대한 활용하여 트렌드 방향을 판단하고, 다단계 엔트리 라인을 통해 수익 영역을 극대화하며, 동시에 스톱 로즈 단독 제어 위험을 설정하며, 전형적인 트렌드 추적 전략에 속한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
평균선을 사용하여 트렌드 방향을 명확하게 판단할 수 있다. 평균선은 시장 소음을 효과적으로 필터링하여 주요 트렌드 방향을 판단할 수 있다.
다단계 입구로, 트렌드 실행 영역을 최대한 활용한다. 여러 입구로, 트렌드의 전체 실행 영역을 최대한 포착하여 수익 공간을 확장한다.
포지션을 분산하여 개개인의 위험을 줄여줍니다. 여러 입장을 분산하여 주문의 위험을 분산하여 포지션의 평균 포지션 비용을 줄일 수 있습니다.
상환 손해 방지 제도를 설정하여 위험을 효과적으로 제어한다. 상환 손해 방지 서한을 통해 가격이 다시 평균선 아래로 떨어지면 신속히 손해를 막을 수 있으며, 과도한 손실을 피할 수 있다.
전략은 명확하고 이해하기 쉽고, 매개 변수 설정은 유연하며, 다른 시장에 맞게 최적화할 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
평균선이 잘못된 신호를 보내는 확률. 평균선은 추세가 지연되어 잘못된 신호를 보낼 수 있다고 판단한다.
트렌드 반전의 손실 위험. 전략은 트렌드를 전제로 하고, 트렌드 반전이 발생하면 큰 손실이 발생한다.
진입 라인이 너무 밀집되어 거래 빈도와 슬라이드 포인트 비용이 증가합니다.
대량 포지션 개설은 포지션 집중의 위험을 증가시킨다. 포지션이 너무 많으면 위험 집중이다.
스톱포인트 설정이 불합리하여, 너무 일찍 또는 너무 작은 스톱포인트로 스톱포인트를 설정할 수 있습니다.
대응 위험 관리 조치:
평균선 변수를 최적화하여 적절한 주기 평균선을 선택하십시오.
중요한 기술 지표에 주의를 기울이고, 트렌드 반전 신호를 판단하고, 적시에 손실을 막는다.
경기장 구간을 조정하여 거래 빈도를 낮추십시오.
포지션 크기와 비율을 최적화하고 집중 위험을 제어합니다.
스톱포트를 테스트하고 최적화하여 스톱포트 위험을 줄입니다.
이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
다양한 평균선 변수와 데이터 소스를 테스트하여 트렌드 효과를 판단하는 가장 좋은 평균선 지표를 선택하십시오.
다공공 진출선의 거리 간격과 포지션 수 비율을 최적화하여 최적의 파라미터를 찾는다.
다른 지표와 함께 필터링 조건으로, 일률 선이 잘못된 신호를 발산하는 것을 피하십시오. 예를 들어 MACD, RSI 등.
스톱 라인 위치를 최적화하고, ATR 동적 설정에 따라 스톱 포인트 위치를 설정할 수 있다.
트렌드 반전의 판단을 높이고, 모든 포지션을 폐쇄하는 조건을 설정한다.
시장의 다른 시점에 따라 전략을 최적화할 수 있는 매개 변수
포지션 수를 동적으로 조정할 수 있는 기능을 추가하여, 사용 비율에 따라 포지션 개설 수를 결정한다.
이 전략은 전체적으로 동향 방향을 평선으로 판단하고, 트렌드의 동작을 주요 수익원이다. 다단계 진입과 분기된 포지션을 개시함으로써 트렌드를 효과적으로 파악하고, 수익 영역을 확장할 수 있다. 동시에 손실 제도를 설정하여 위험을 제어한다. 이 전략은 초보자 학습에 적합하며, 심층적으로 최적화 할 수 있으며, 전형적인 경향 추적 전략이다.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult
//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")