
동력 쌍평평선 거래 전략은 가격 동력과 트렌드 지표를 동시에 이용하는 짧은 라인 거래 전략이다. 이 전략은 종결 가격, 개장 가격, 가격 채널, 빠른 RSI 등 여러 지표를 통합하여 거래 신호를 생성한다. 가격 돌파가 발생하거나 지표 신호가 발생하면 전략은 긴 위치 또는 짧은 위치를 설정한다.
이 전략은 다음과 같은 몇 가지 판단 지표에 기초하여 거래합니다.
가격 채널: 지난 30 K 라인의 최고 가격과 최저 가격을 계산하여 채널 범위를 도출한다. 종결 가격이 채널 중선보다 높을 때 낙점으로 간주하고, 종결 가격이 채널 중선보다 낮을 때 낙점으로 간주한다.
빠른 RSI: 2개의 K 선의 RSI 값을 계산합니다. RSI가 25보다 낮으면 과매매, 75보다 높으면 과매매로 간주됩니다.
음양선 판단: 계산 마지막 2개의 K선의 개체 크기를 . 2개의 음선은 하향 신호로, 2개의 양선은 상향 신호로 .
손실 조건: 손실이 일정 비율에 도달했을 때 손실 평정 포지션을 강제적으로 중지한다.
위와 같은 여러 판단 지표에 따라, 전략은 동향, 동력 및 과매매 상황을 동시에 파악할 수 있으며, 반전 시점에 거래 신호를 생성하며, 전형적인 단선 거래 전략에 속한다.
이 전략에는 다음과 같은 장점이 있습니다.
동시에 여러 지표를 사용하여 신호 정확도를 높인다. 단일 지표는 잘못된 신호를 발생시킬 수 있으며, 조합을 사용하면 서로 검증하고 약간의 소음을 필터링 할 수 있습니다.
빠른 RSI는 더 민감하며, 턴닝 포인트를 적시에 잡을 수 있다. 일반 RSI는 지연되기 쉽고, 최고의 출전 시기를 놓치게 된다.
전략 파라미터는 여러 번의 테스트를 통해 최적화되어 높은 안정성을 달성한다. 다양한 품종과 시간 주기에서 안정적으로 수행한다.
자동파괴장치는 손실을 제어한다. 무한히 추적하지 않으며, 예상보다 초과된 손실을 줄일 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
가격 통로 파라미터를 잘못 설정하면 충격을 유발할 수 있다. 통로 구간이 너무 작으면 가짜 돌파구가 발생할 수 있다.
일방적인 지분 기간이 너무 길어질 수 있다. 동향이 매우 강하면 지분 주기가 예상보다 길어진다.
스톱포인트 설정이 잘못되면 손실이 확대된다. 이 파라미터는 신중하게 설정해야 하며, 너무 크거나 너무 작으면 좋지 않다.
위와 같은 위험을 피하고 줄일 수 있는 방법은 통로 매개 변수를 조정하고, 출장 시기를 최적화하고, 스톱포트를 동적으로 조정하는 것이다.
이 전략에는 다음과 같은 몇 가지 개선방향이 있습니다.
기계 학습 알고리즘을 추가하여 매개 변수를 자동으로 최적화 할 수 있습니다. 더 똑똑하고 적응력있는 전략을 훈련 할 수 있습니다.
뉴스페이스 정보와 같은 더 많은 데이터 소스를 결합하여 거래 의사결정을 개선할 수 있습니다.
동적 포지션 관리 메커니즘을 개발하여 시장 상황에 따라 포지션을 자동으로 조정합니다. 이것은 위험을 제어 할 수 있습니다.
더 많은 선물 경매 거래와 전략 적용 범위를 확장하는 것. 이것은 더 높은 절대 수익을 얻을 수 있습니다.
이 전략은 종합적으로 가격 돌파, 지표 신호, 스포드 레지드 등 여러 가지 기술적 수단을 사용한다. 회수 및 실장 과정에서 모두 좋은 성적을 내고 높은 안정성을 가지고 있다. 알고리즘과 데이터 기술의 발전과 함께 전략 공간은 여전히 넓고, 계속 최적화 및 개선할 가치가 있다.
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, 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")
src = close
//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1
//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
//Trading
if up1 or up2 or up3
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2 or dn3
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()