
쌍동력 평선 거래 전략은 OTT 지표와 Wavetrend 진동기 지표를 결합한 전략이다. Anıl Özekşi 선생님이 개발한 OTT 지표와 lonestar108의 Wavetrend 진동기 지표를 결합하여 성공적인 거래 지표를 형성한다. 이 전략은 양방향 시장에서 다중 하위권 조작을 할 수 있다.
쌍동력 평행선 거래 전략은 먼저 브린 밴드 중궤도를 계산한다. 즉, 이동 평균 MAvg. 그리고 사용자가 설정한 비율 범위와 주기에 따라 긴 스톱 (longStop) 와 짧은 스톱 (shortStop) 을 계산한다. 가격이 상궤도를 돌파할 때 더하고, 상궤도를 돌파할 때 공백을 한다. 닫기 신호는 가격이 평행선 근처로 돌아가는 것이다.
구체적으로, 이 전략의 핵심 지표는 OTT 지표이다. OTT 지표는 평균선과 경계선으로 구성되어 있으며, 특정 알고리즘에 따라 시장의 변동 정도에 따라 경계선의 위치를 조정한다. 가격이 하위 경계선 OTT 아래로 떨어지면 공백을; 가격이 상위 경계선 OTT을 넘으면 더 많은 것을 한다.
이 전략은 동시에 Wavetrend 지표를 사용하여 가격 트렌드 방향을 판단하고, 하향 트렌드라고 판단하면, 더 많은 것을하지 않고, 더 많은 것을하지 않고, 더 많은 것을하지 않습니다.
쌍동력 평선 거래 전략은 이동 평균, 브린 밴드 및 OTT 지표의 장점을 결합하여 자동으로 스톱 포지션을 조정하여 스톱 손실이 활성화 될 확률을 줄일 수 있습니다. 동시에 추세를 판단하는 지표와 결합하여 흔들리는 추세에 갇히지 않도록합니다.
특히, 이 전략의 주요 장점은 다음과 같습니다.
이중 동력 일직선 거래 전략에는 다음과 같은 몇 가지 측면에 초점을 맞춘 위험이 있습니다.
그 대책은 다음과 같습니다.
이중 동력 일선 거래 전략에는 더 많은 최적화 가능성이 있습니다.
쌍동력 평행선 거래 전략은 여러 지표의 장점을 통합하여 자동으로 스톱로스를 조정하고, 반전 신호를 판단하고, 트렌드 방향을 식별할 수 있다. 위험 제어 능력이 강하고, 사용하기 쉬운 등의 장점이 있다. 하지만, 도피, 신호 부정확성 등의 위험도 존재한다. 이 전략은 다른 지표 조합과 함께 사용, 자율적 알고리즘 연구 등으로 더 이상 최적화 될 수 있다.
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Bugra trade strategy", shorttitle="Bugra trade strategy", overlay=true)
// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close
// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")
// Tarih Filtresi Fonksiyonu
isDateInRange() => true
// Özel Fonksiyonlar
Var_Func(src, length) =>
valpha = 2 / (length + 1)
vud1 = src > src[1] ? src - src[1] : 0
vdd1 = src < src[1] ? src[1] - src : 0
vUD = sum(vud1, length)
vDD = sum(vdd1, length)
vCMO = (vUD - vDD) / (vUD + vDD)
varResult = 0.0
varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
varResult
Wwma_Func(src, length) =>
wwalpha = 1 / length
wwma = 0.0
wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
wwma
Zlema_Func(src, length) =>
zxLag = floor(length / 2)
zxEMAData = src + (src - src[zxLag])
zlema = ema(zxEMAData, length)
zlema
Tsf_Func(src, length) =>
lrc = linreg(src, length, 0)
lrs = lrc - linreg(src, length, 1)
tsf = lrc + lrs
tsf
getMA(src, length) =>
ma = mav == "SMA" ? sma(src, length) :
mav == "EMA" ? ema(src, length) :
mav == "WMA" ? wma(src, length) :
mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
mav == "VAR" ? Var_Func(src, length) :
mav == "WWMA" ? Wwma_Func(src, length) :
mav == "ZLEMA" ? Zlema_Func(src, length) :
mav == "TSF" ? Tsf_Func(src, length) : na
// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200
plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))
// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()
// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.close("Long")