이 전략의 이름은 량화 거래 전략의 쌍평평선 돌파 전략이다. 이 전략의 주요 아이디어는 빠른 이동 평균과 느린 이동 평균의 교차 신호를 사용하여 가격 경향에 대한 판단을 수행하고, 구매 및 판매 결정을 내리는 것이다.
이 전략의 핵심 지표는 빠른 이동 평균과 느린 이동 평균이다. 전략은 빠른 이동 평균과 느린 이동 평균의 교차 관계를 사용하여 가격 추세를 판단하고, 이를 바탕으로 구매 및 판매 결정을 내린다.
구체적으로, 빠른 이동 평균 변수는 24 주기로 설정되어 있고, 느린 이동 평균 변수는 100 주기로 설정되어 있습니다. 빠른 이동 평균이 하향에서 느린 이동 평균을 교차하면, 가격이 상승 추세에 들어간다는 것을 나타내는 전략이 구매 신호를 냅니다. 빠른 이동 평균이 상향에서 하향으로 느린 이동 평균을 교차하면, 가격이 하향 추세에 들어간다는 것을 나타내는 전략이 판매 신호를 냅니다.
이렇게 하면, 느리고 빠른 이동 평균의 교차 방향을 판단함으로써, 가격 추세의 변화를 효과적으로 포착할 수 있으며, 구매 및 판매 결정을 내리는 데 도움을 줄 수 있다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
원리는 간단하고 이해하기 쉬우며, 실행하기 쉽다. 쌍평선교차는 가장 기본적인 기술 지표 중 하나이며, 이해하기 쉽고 적용하기 쉽다.
매개 변수는 조정할 수 있고, 적응력이 강하다. 빠른 이동 평균과 느린 이동 평균의 매개 변수는 실제 상황에 따라 조정할 수 있어 전략이 더 유연하다.
트렌드 변화를 포착하는 능력이 강하다. 쌍평등선 교차는 종종 가격의 회수에서 트렌드에 들어가는 전환점을 포착하는 데 사용됩니다.
효율적으로 흔들림을 필터링하여 유효하지 않은 거래를 줄일 수 있다. 이중 평행선은 흔들림 영역을 식별하기 위해 사용되며, 흔들림 중에 반복적으로 포지션을 열지 않도록 한다.
이 전략에는 몇 가지 위험도 있습니다.
쌍평선 교차 신호는 지연될 수 있다. 쌍평선은 트렌드 추적 지표로서 교차 신호는 종종 일정 주기 지연된다. 이것은 어느 정도의 기회비용을 초래할 수 있다.
흔들리는 시장에서 가짜 신호가 발생하기 쉽다. 쌍평평선 (双均线) 의 성능이 가장 좋은 시나리오는 가격의 명백한 추세가 있는 상황이다. 그러나 흔들리는 상황에서는 가짜 신호가 발생하기 쉽다.
매개 변수 설정이 잘못되면 전략의 성능에 영향을 줄 수 있다. 매개 변수 설정이 잘못되면 트렌드 교차를 잡는 민감성에 영향을 줄 수 있다.
대응방법:
적당히 평균선 주기를 단축하여 교차 신호의 민감도를 높인다.
변동성 또는 거래량 지표에 필터링을 추가하여 불안정한 시장에서 유효하지 않은 거래를 줄이십시오.
매개 변수 최적화, 최적의 매개 변수 조합을 찾는 것. 기계 학습과 같은 방법을 추가하여 자동으로 최적화한다.
이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
보다 진보된 이동 평균 기술인 선형 가중 이동 평균을 이용하여 단순 이동 평균을 대체하고, 지표의 추적 및 예측 능력을 향상시킨다.
더 많은 보조 지표, 예를 들어, 교류량 지표, 변동률 지표와 같은 합동 필터링을 추가하여 무효 신호를 줄여줍니다.
속속 평균선 변수를 최적화하여 변수 적응성을 높인다. 기계 학습, 무작위 최적화 등의 방법을 사용하여 최적의 변수를 찾는다.
전략 입시 후 단독 손실을 제어하기 위해 스톱 로즈와 이동 스톱 로즈를 설계할 수 있다. 동시에 수익 최적화 기술을 추가하여 충분한 수익을 확보할 수 있다.
딥러닝과 같은 새로운 기술은 더 복잡한 가격 패턴을 식별하고, 보다 나은 결과를 얻기 위해 구매와 판매 결정을 보조하는 등, 유선교차를 지원할 수 있다.
이 전략은 대체로 고전적이고 간단하며, 쌍평선 지표에 기초하여 가격 트렌드를 판단하여 가격의 변동에서 추세로 전환할 기회를 탐색한다. 장점은 아이디어가 명확하고, 간단하고 실용적이며, 추세적 행동을 추적하는 데 적합하다. 그러나 신호 지연과 같은 몇 가지 결점이 있지만, 이는 매개 변수를 조정하고 최적화하여 전략의 안정성과 거래 효율성을 높이는 것이 필요하다.
/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)
//OBV
src = close
obv = ta.cum(math.sign(ta.change(src)) * volume)
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing")
Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing")
smoothingLine_ma = ma(obv,smoothingLength, typeMA)
obv_diff = (obv-smoothingLine_ma)*100/obv
//PVT
var cumVolp = 0.
cumVolp += nz(volume)
if barstate.islast and cumVolp == 0
runtime.error("No volume is provided by the data vendor.")
srcp = close
vt = ta.cum(ta.change(srcp)/srcp[1]*volume)
smoothingLine_map = ma(vt,smoothingLength, typeMA)
pvt_diff = (vt-smoothingLine_map)*100/vt
// plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54))
// plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255))
indicator = (pvt_diff+obv_diff)/2
goLongCondition1 = ta.crossover(indicator,Limit)
timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0) // Backtesting Time
notInTrade = strategy.position_size <= 0
if goLongCondition1 and timePeriod and notInTrade
stopLoss = low * 0.99 // -2%
takeProfit = high * 1.05 // +5%
strategy.entry('long', strategy.long )
strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 100)
// goLongCondition1 = ta.crossover(fastEMA, slowEMA)
// timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
// stopLoss = low * 0.97
// takeProfit = high * 1.12
// strategy.entry('long', strategy.long)
// strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// plot(fastEMA, color=color.new(color.blue, 0))
// plot(slowEMA, color=color.new(color.yellow, 0))