이 전략은 여러 평행선을 설정한 제한 가격을 기준으로 거래하는 전략이다. 그것은 가격이 다른 평행선을 뚫는 것에 따라 여러 개의 상도 또는 하도 제한 가격을 설정하여 피라미드 형태의 여러 개의 포지션을 형성한다. 가격이 다시 평행선을 뚫을 때, 역행한 제한 가격 포지션은 열린다. 포지션이 있을 때, 가격의 중간 축 평행선은 역행한 시장 가격 평평 포지션이다.
이 전략은 평균선 지표를 사용하여 트렌드 방향을 판단한다. 구체적으로, 가격이 상행 3개 평균선을 뚫었는지에 따라 최대 제한 주문을 설정하는 수를 판단한다. 가격이 하행 3개 평균선을 뚫었는지에 따라 하위 제한 주문을 설정하는 수를 판단한다.
이렇게, 가격 추세가 강할수록, 더 많은 동방향의 제한 가격을 설정할 수 있다. 가격 반전 신호가 발생했을 때, 반전 상장을 한다. 중축 평행선은 포지션의 돌파구를 판단하기 위해 사용되며, 평점 포지션 신호를 낸다.
전체 전략은 피라미드식 개상상거래와 돌파상거래를 결합한 거래방식이다. 여러 단위 평균 가격으로 포지션을 개시하여 비용을 절감하고, 중축 평균선으로 손실을 줄이고, 위험을 통제하는 것이다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
평균선으로 추세를 판단하고, 조작은 간단하고 직관적입니다.
피라미드 방식의 포지션은 트렌드 초기에 더 좋은 비용을 얻을 수 있다.
중앙축均线止损, 적시에止损, 위험을 제어한다.
“제약금지”는 지각을 방지하기 위한 상장이다.
다양한 품종에 맞는 사용자 정의 파라미터
명확하고 이해하기 쉽고 확장할 수 있는 구조로 되어 있습니다.
이 전략에는 다음과 같은 위험도 있습니다.
평균선 지표의 지연은 잘못된 판단으로 이어질 수 있다.
제한 가격 티켓의 실패로 인해 출전 기회를 놓칠 수 있습니다.
중앙축 평행선 상쇄는 너무 팽창하여 돌파를 할 수 없습니다. 판단하라.
파라미터를 잘못 설정하면 피라미드 포지션이 너무 커질 수 있다.
미흡한 회수 시간 범위로 인해 곡선이 지나치게 잘 맞지 않을 수 있다.
수료 요소는 고려되지 않습니다.
위험의 해결책은 다음과 같습니다.
다른 지표와 결합하여 확인, 최적화 매개 변수.
유효 기간을 설정하고, 제한 요금 가격을 조정하십시오.
중앙축 평행선에서 정지기를 설정하거나, 돌파구 판단 논리를 추가한다.
최적화 매개 변수, 이익/손실 비율 평가
재검토 기간을 늘리고, 여러 시장에서 재검토하는 것.
추가 수수료와 슬라이드 포인트 로직
이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
더 많은 품종을 위한 최적화 매개 변수. 기계 학습 방법을 사용할 수 있다.
다른 지표 필터 확인을 추가하십시오. 예를 들어 MACD, KDJ 등.
중앙축 평행선에 정지 논리를 추가한다.
동적으로 개시 비율과 중지 위치를 조정한다.
제한 요금 설정을 최적화하여 비용을 개선한다. 예를 들어, 변동 범위에 따라 가격을 설정한다.
비용 관리를 강화하고 과잉 회수 방지
다양한 품종의 변수 효과를 테스트하고, 변수 풀을 구축한다.
이 전략은 평행선을 설정하여 제한 가격을 형성하는 피라미드를 개시하여 최적의 비용을 얻습니다. 중축 평행선 스톱을 사용하여 위험을 제어합니다. 전략 구조는 간단하고 명확하며 이해하기 쉽고 확장 할 수 있습니다. 그러나 다른 지표, 최적화 매개 변수, 제한 가격 논리 등을 도입하여 전략을 개선 할 수 있습니다.
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", 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
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
//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 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close
//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]
lots = 0.0
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)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()