수평적 돌파 추세 포착 전략


생성 날짜: 2024-04-26 15:22:06 마지막으로 수정됨: 2024-04-26 15:22:06
복사: 4 클릭수: 627
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

수평적 돌파 추세 포착 전략

개요

이 전략은 수평선을 지지점과 저항점으로 사용하며, 가격이 수평선을 돌파할 때 거래 신호를 발생시킨다. 주요 아이디어는 다음과 같다. 우선, 특정 조건에 따라 수평선을 그리고, 가격이 수평선을 상향으로 돌파할 때 더 많이 하고, 가격이 수평선을 하향으로 돌파할 때 평소한다. 동시에 수평선의 생성은 또한 상응하는 조건이 있다.

전략 원칙

  1. 이전 K선의 최저가격이 현재 종점가격보다 큰 조건에 따라, 이전 K선의 최저가격 위치에 20개의 길이의 수평선을 그리며, 항상 최신 10개의 라인을만 유지한다.
  2. 만약 현재 가격이 가장 최근의 수평선을 상향으로 돌파한다면, 이전 모든 오더를 청산하고, 다시 오더를 한다.
  3. 새로운 수평선을 그리는 동안, 만약 지금 지분을 가지고 있다면, 먼저 지분을 평정하고, 그 다음에는 더 많이 하라.

전략적 이점

  1. 전략적 논리는 간단하고 명확하며, 이해하기 쉽고 구현하기 쉽습니다.
  2. 수평선 지지 저항의 지점을 뚫고 신호를 생성하여 트렌드를 더 잘 포착할 수 있다.
  3. 새로운 수평선이 생성될 때 이전 포지션이 평정되고, 그 후에 새로운 포지션이 개설되는데, 이는 이전 포지션 개설이 가져올 수 있는 위험을 줄일 수 있다.
  4. 수평선의 길이나 수를 조정하여 전략을 최적화할 수 있다.

전략적 위험

  1. 불안정한 상황에서는 수평선 돌파가 자주 발생하여 과도한 거래가 발생할 수 있으며, 이로 인해 큰 슬라이드 포인트와 수수료가 발생할 수 있습니다.
  2. 전략 수평선의 정의는 단순하고, 다른 지표의 검증이 부족하여 몇 가지 잘못된 신호가 발생할 수 있습니다.
  3. “이런 일이 일어나면, 우리는 더 많은 일을 할 수 있고, 더 적은 일을 할 수 있습니다.

전략 최적화 방향

  1. 수평선의 유효성을 확인하기 위해 다른 지표와 결합할 수 있습니다. 예를 들어 교통량 변화와 같은, 잘못된 신호를 줄이기 위해.
  2. 위기상황의 경우, 수평선 돌파율을 높임으로써 거래 빈도를 줄일 수 있다.
  3. 코스피에 가입하면 하향 추세에서도 수익을 얻을 수 있다.
  4. 수평선의 길이와 수를 다른 상황에 맞게 동적으로 조정할 수 있다.

요약하다

이 전략은 수평선을 중요한 지지 저항점으로 삼고, 수평선을 뚫고 거래 신호를 생성한다. 장점은 논리적으로 간단하고, 구현하기 쉽고, 트렌드를 더 잘 포착할 수 있다는 것이다. 하지만 단점은 과도하게 거래되어 잘못된 신호를 생성할 수 있으며, 더 많은 것을 할 수 밖에 없다는 것이다. 이후에는 다른 지표와 결합하여 거래 빈도를 줄이고, 공백 메커니즘과 동적 조정 매개 변수를 추가하는 등의 측면에서 최적화 및 개선을 할 수 있다.

전략 소스 코드
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Traderxprox

//@version=5
strategy("Alarm Trader_ALL", overlay=true)

// Yatay çizgi oluşum
yatayc = low[1] > close[0]

if yatayc
    if strategy.opentrades > 0
        strategy.close("AL", comment = "Fiyat:" + str.tostring(low[1], "#.##") + "\n" + timeframe.period +"\n Yatay Direnç Oluştu")
    else
        strategy.entry("AL", strategy.long, comment = "Fiyat:" + str.tostring(low[1], "#.##") + "\n" + timeframe.period +"\n Yatay Direnç Oluştu")


//YATAY ÇİZGİ
int cizgilen = input.int(20, "Çizgi uzunluğu?", group = "Yatay Çizgi Ayarları")
var array<line> lines = array.new<line>()
int numberOfLines = input.int(10, "Son Kaç Çizgi?", 0, group = "Yatay Çizgi Ayarları")
kural22 = low[1] > close[0]
// if kural22
//     newLine = line.new(bar_index-2, low[1], bar_index+cizgilen, low[1] ,color=color.red, width=1, style=line.style_solid)
//     // Push the `newLine` into the `lines` array.
//     lines.push(newLine)
//     // Delete the oldest line when the size of the array exceeds the specified `numberOfLines`.
//     if array.size(lines) > numberOfLines
//         line.delete(lines.shift())
    
// Alarm kırılım için koşul

var float lastLinePrice = na
if not na(close) and array.size(lines) > 0 
    lastLinePrice := line.get_price(array.get(lines, array.size(lines) - 1), bar_index)
if open < lastLinePrice and close > lastLinePrice
    if strategy.opentrades > 0
        strategy.close("AL", comment = "Fiyat:" + str.tostring(lastLinePrice, "#.##") + "\n" + timeframe.period +" \n Yatay çizgi yukarı kırılımı")
    else
        strategy.entry("AL", strategy.long, comment = "Fiyat:" + str.tostring(lastLinePrice, "#.##") + "\n" + timeframe.period +" \n Yatay çizgi yukarı kırılımı")