교차한도 주문 양방향 교차기간 거래 전략


생성 날짜: 2023-11-03 17:11:34 마지막으로 수정됨: 2023-11-03 17:11:34
복사: 1 클릭수: 564
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

교차한도 주문 양방향 교차기간 거래 전략

개요

이 전략은 트렌드 추적 거래 전략으로, 간단한 이동 평균을 사용하여 시장의 경향 방향을 판단하고, 이동 평균에 트렌드 방향에 따라 제한 가격을 배치하여 트렌드 추적 거래를 구현한다.

전략 원칙

  1. 간단한 이동 평균 SMA를 계산하고, 트렌드 방향을 계산한다.

  2. 만약 피드백 필터가 활성화되어 있다면, SMA보다 높은 낮은 점을 사용하여 상승 추세로 판단하고, SMA보다 낮은 높은 점을 사용하여 하향 추세로 판단한다. 만약 피드백 필터가 활성화되지 않은 경우, SMA보다 높은 종전 가격을 사용하여 상승 추세로 판단하고, SMA보다 낮은 종전 가격을 사용하여 하향 추세로 판단한다.

  3. 트렌드 방향 (trend) 과 활성화 된 거래 방향 변수 (needlong, needshort) 에 따라 SMA 가격에 제한 주문을 배치합니다. 구체적인 논리는 다음과 같습니다:

    • 만약 더 많이 할 필요가 있다면 (needlong는 true) 그리고 상승 추세에 있다면 SMA 가격에 최대 한도 주문을 할 수 있습니다.

    • 만약 하락하는 추세에 있는 needshort가 필요하다면, SMA 가격에 하락한 가격의 리스크를 배치한다.

  4. 스톱로스 논리를 설정하여, 지위 방향이 트렌드 방향과 일치하지 않으면 스톱로스가 탈퇴한다.

  5. 날짜 범위 파라미트에 따라 지정된 날짜 범위 내에서만 거래한다.

우위 분석

  1. SMA를 사용하여 트렌드를 판단하면 시장 소음을 효과적으로 필터링하여 더 긴 선의 트렌드를 잠금 할 수 있습니다.

  2. SMA 가격에 제한 가격을 배치하면 트렌드 초기 단계에서 더 나은 입문 지점을 얻을 수 있다.

  3. 개인 거래 스타일에 따라 유연하게 조정할 수 있습니다.

  4. 손실을 막기 위한 탈퇴 메커니즘을 설정할 수 있다.

  5. 주요 사건으로 인한 급격한 변동성을 피하기 위해 거래 시간 범위를 설정하는 것을 지원합니다.

위험 분석

  1. 트렌드를 판단하는 지표로 SMA는 지연 문제가 있으며, 트렌드 전환점을 놓칠 수 있어 손실이 발생할 수 있다.

  2. 한정 가격 단독 입장에는 유연성이 부족하여, 동향이 단기간에 조정되므로 입장할 수 없습니다.

  3. 합리적인 SMA 주기 파라미터를 설정해야 합니다. 만약 잘못 설정되면 잘못된 경향 판단을 받게 됩니다.

  4. 거래 시간 변수의 타당성을 고려하여 거래 기회나 위험 시간대를 놓치지 않도록 해야 합니다.

최적화 방향

  1. 다른 지표 판단을 포함하고, 여러 지표 검증을 실시하여, SMA 뒤떨어진 문제를 피할 수 있다.

  2. 마감 요금 추적 모드를 설정할 수 있으며, 가격이 SMA를 돌파할 때 시가 요금 추적으로 변경하여 추적 유연성을 높일 수 있다.

  3. 동적으로 SMA 주기의 파라미터를 최적화하여 다른 주기의 시장 환경에 적응하도록 한다.

  4. 스톱로드를 트렌드 내의 최저 가격/최고 가격으로 설정하고, 엄격한 SMA 위치가 아닌 스톱로드를 더 유연하게 설정한다.

  5. 알고리즘 거래 요소를 추가하여 거래 시기를 보다 지능적이고 유연하게 만들고, 중요한 위험 시기를 피합니다.

요약하다

이 전략은 전체적으로 비교적 간단한 트렌드 추적 전략으로, 핵심 아이디어는 SMA를 사용하여 트렌드 방향을 판단하고, SMA 가격에 제한 가격을 배치하여 트레이드를 추적하는 것으로, 전략의 유연성, 적응성 및 지능성을 향상시킬 수 있습니다. 이 전략은 이해하기 쉽고 구현할 수 있으며, 알고리즘 거래 초보 학습에 적합하지만, 실물에서는 위험을 주의하고, 피드백 결과를 신중하게 평가하고, 엄격한 모니터링과 최적화를 수행해야합니다.

전략 소스 코드
/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
    strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
    strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
    strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
    strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")