리소스 로딩... 로딩...

대체 거래 아이디어 - K-라인 영역 거래 전략

저자:FMZ~리디아, 창작: 2023-11-06 13:33:17, 업데이트: 2024-11-08 09:10:08

img

믿을 수 없는 거래 아이디어를 살펴보면, 이 기사에서는 K-라인 영역 거래 전략을 살펴보고 그 시나리오를 구현하려고 노력할 것입니다.

K-선 지역 전략의 주요 아이디어

K-라인 영역 전략 (K-line area strategy) 은 가격 K-라인과 이동 평균 사이의 영역 관계를 기반으로 하는 거래 전략이다. 주요 아이디어는 가격 트렌드의 크기와 변화, 구매 및 판매 정서 변화 등을 분석하여 주식 가격의 가능한 추세를 예측하여 포지션 개설 및 출시를 결정하는 것입니다. 이 전략은 K-라인과 이동 평균 사이의 영역과 KDJ 지표의 값에 의존하여 긴 및 짧은 거래 신호를 생성합니다.

K-라인 영역 전략의 원칙

K-라인 영역은 가격 K-라인과 이동 평균 사이의 공간 영역을 가리키며, 각 막대기 폐쇄 가격에서 이동 평균 값을 빼고 합쳐 계산된다. 장기간에 걸쳐 가격이 크게 상승하면 K-라인 영역은 커질 것이고, 변동성 시장 또는 변동성 반전 후 K-라인 영역은 작을 것이다. 상승 추세가 커지고 지속될수록 그에 해당하는 K-라인 영역도 커지며, 따라서 반전 가능성이 증가한다.

임박한 트렌드 전환을 추가로 확인하기 위해 구매 또는 판매 감정의 변화를 결정하는 데 도움이되는 KDJ 지표의 사용을 도입합니다. 이러한 지표의 전략의 임계와 값은 정확성을 높이기 위해 특정 상황과 필요에 따라 조정 될 수 있습니다.

K-라인 지역 전략의 장점

K-라인 영역 전략의 장점은 가격 동향의 규모와 변화, 그리고 구매 및 판매 정서의 변화의 조합으로 비교적 완전한 양적 거래 전략을 제공합니다. 그것의 장점은 다음을 포함합니다.

  • 트렌드 반전 가능성을 식별하는 간단하고 직관적인 방법을 제공하여 거래자가 시장 추세를 더 잘 파악하는 데 도움이됩니다.
  • K-라인 영역과 KDJ 지표를 결합함으로써 전략의 신뢰성과 정확성을 높입니다.
  • 높은 유연성은 다른 거래 요구를 충족시키기 위해 시장 조건에 따라 매개 변수를 조정 할 수 있습니다.

K-라인 영역 전략의 위험

K-선 지역 전략은 몇 가지 장점을 가지고 있지만, 다음과 같은 몇 가지 위험을 초래합니다.

  • 한계값 설정은 약간의 경험과 조정을 필요로 할 수 있습니다. 잘못 설정되면 시장 동향에 대한 잘못된 판단으로 이어질 수 있습니다.
  • KDJ 지표의 정확성은 시장 변동과 소음으로 영향을 받으며 잘못된 신호를 초래할 수 있습니다.
  • 전략의 성과는 다른 시장 조건에서 달라질 수 있으며 지속적인 최적화와 조정이 필요합니다.

K선 지역 전략의 최적화 방향

K-라인 영역 전략을 최적화하려면 다음 방향을 고려하십시오.

  • 매개 변수 최적화: 다른 시장 조건과 거래 필요에 적응하기 위해 임계 값과 KDJ 지표 매개 변수를 지속적으로 조정하고 최적화합니다.
  • 리스크 관리: 손실 위험을 줄이기 위해 스톱 로스 및 영리 규칙을 포함한 효과적인 리스크 관리 전략을 실행하십시오.
  • 다중 전략 조합: 종합적인 거래 전략의 성능을 향상시키기 위해 K-라인 영역 전략을 다른 전략과 결합합니다.
  • 실시간 모니터링 및 조정: 전략의 성과를 정기적으로 모니터링하고 실제 상황에 따라 조정 및 개선합니다.

자바스크립트를 사용하여 전략을 실행

  • K-선 영역을 계산합니다.

  • 긴 위치 개시 신호:

    (1) 하향 추세의 K-선 영역은 한계를 도달하면 사전에 설정할 수 있습니다.

    (2) KDJ 지표 값이 80보다 크다.

  • 짧은 포지션 개시 신호:

    (1) 상승 추세의 K-라인 영역은 임계값에 도달하면 사전에 설정할 수 있습니다.

    (2) KDJ 지표 값은 20보다 작습니다.

  • 긴/단기 포지션의 출구: ATR 후속 스톱 손실 및 수익을 취합니다.

코드 실행

// Parameter
var maPeriod = 30
var threshold = 50000
var amount = 0.1

// Global variable
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL"  // NULL BUY SELL

function calculateKLineArea(r, ma) {
    var lastCrossUpIndex = null
    var lastCrossDownIndex = null
    for (var i = r.length - 1 ; i >= 0 ; i--) {
        if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }

        if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }
    }

    var area = 0
    if (lastCrossDownIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
            area -= Math.abs(r[i].Close - ma[i])
        }
    } else if (lastCrossUpIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
            area += Math.abs(r[i].Close - ma[i])
        }
    }

    return [area, lastCrossUpIndex, lastCrossDownIndex]
}

function onTick() {
    var r = _C(exchange.GetRecords)
    if (r.length < maPeriod) {
        LogStatus(_D(), "Insufficient number of K-line")
        return 
    }
    var ma = TA.MA(r, maPeriod)
    var atr = TA.ATR(r)
    var kdj = TA.KDJ(r)
    var lineK = kdj[0]
    var lineD = kdj[1]
    var lineJ = kdj[2]
    var areaInfo = calculateKLineArea(r, ma)
    var area = _N(areaInfo[0], 0)
    var lastCrossUpIndex = areaInfo[1]
    var lastCrossDownIndex = areaInfo[2]
    
    r.forEach(function(bar, index) {
        c.begin(bar)
        c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
        let maLine = c.plot(ma[index], "ma", {overlay: true})
        let close = c.plot(bar.Close, 'close', {overlay: true})
        c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
        if (lastCrossUpIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        } else if (lastCrossDownIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        }
        c.plot(lineK[index], "K")
        c.plot(lineD[index], "D")
        c.plot(lineJ[index], "J")

        c.close()
    })
    
    if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
        // long
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "BUY"
        }
    } else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
        // short
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "SELL"
        }
    }
    
    let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
    if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
        // cover long
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    } else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
        // cover short 
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    }

    LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}


function main() {    
    if (exchange.GetName().includes("_Futures")) {
        throw "not support Futures"
    }
    while (true) {
        onTick()
        Sleep(1000)
    }
}

전략 논리는 매우 간단합니다.

  1. 먼저, 몇 가지 글로벌 변수와 매개 변수를 정의합니다.

전략 매개 변수

  • maPeriod: 이동평균의 기간.
  • 소액: 매수 또는 판매 시기를 결정하는 데 사용되는 소액.
  • 양: 각 거래에 대한 양.

글로벌 변수

  • c: K선 차트 객체, 차트를 그리는데 사용된다.
  • openPrice: 오픈 가격을 기록합니다.
  • tradeState: 거래 상태를 기록합니다. NULL (공백 위치), BUY 또는 SELL.

계산 함수

  • 계산KLineArea 함수: 일정 기간 동안 K선 차트에서 가격과 이동 평균선 사이의 영역을 계산하는 데 사용되며, 영역 값, 마지막 상승 경로 K선 지수 및 마지막 하향 경로 K선 지수를 반환합니다. 이러한 값은 구매 및 판매 시기를 결정하는 후속 결정에 사용됩니다.

메인 루프 기능

  • onTick 함수: 주요 전략 실행 함수입니다. 함수 내의 동작은 다음과 같습니다.

    a. 최신 K 라인 데이터를 얻고 K 라인 수가 maPeriod보다 적지 않도록 하고, 그렇지 않으면 상태를 기록하고 반환합니다.

    b. 이동평균선 ma와 ATR 지표 atr, 그리고 KDJ 지표를 계산한다.

    c. 지역 정보에서 지역 정보를 얻으십시오, 마지막 교차 K-라인 인덱스, 마지막 교차 K-라인 인덱스.

    d. K-라인 차트 객체 c를 사용하여 K-라인과 지표 라인을 그리면서 이동 평균 라인과 가격의 관계를 기반으로 다른 색상을 채우십시오.

    e. 조건에 따라 구매 또는 판매 시기를 결정합니다.

    트레이드 스테이트가 NULL이고, 영역이 -변경보다 작고, KDJ의 K 값이 70보다 크다면, 구매 거래를 실행합니다. 만약 tradeState가 NULL이고, 영역이 임계보다 크고, KDJ의 K 값이 30보다 작다면, 판매 작전을 실행합니다. f. 스톱 로스 조건과 수익 조건을 설정합니다. 이 조건이 충족되면 포지션을 닫습니다.

    만약 구매 상태라면, 마지막 거래일의 폐업 가격 미만 전날의 ATR (Average True Range) 이하로 떨어지면, 포지션을 닫습니다. 판매 상태라면, 가격이 마지막 거래 날의 종료 가격과 전날의 ATR (Average True Range) 보다 상승하면, 포지션을 닫습니다.

    main function: 이것은 주요 실행 입점으로 사용됩니다. 교환 이름에 _Futures가 포함되어 있는지 확인합니다. 그렇다면 예외가 던져집니다. 그렇지 않으면 onTick 함수가 매초 실행되는 무한 루프에 들어가 있습니다.

한마디로,이 전략은 주로 구매 또는 판매 결정을 내리기 위해 K-라인 차트 및 기술적 인 지표에 의존하며 위험을 관리하기 위해 스톱 로스 및 영업 전략을 사용합니다. 이것은 실제 사용 중 시장 상황 및 특정 요구 사항에 따라 조정 및 최적화되어야하는 예 전략으로만 사용됩니다.

시작FMZ.COM, 자바스크립트 언어를 사용하여 많은 코드 라인이 필요하지 않았으며, 대신이 모델을 쉽게 구현했습니다. KLineChart 함수의 도움으로 K-라인 차트 영역의 그래픽 표현도 쉽게 달성되었습니다. 전략 디자인은 디지털 통화 스팟 거래 라이브러리 템플릿을 사용하여 암호화폐 스팟 시장을 대상으로합니다. 템플릿 내에서 캡슐화 된 함수를 통해 주문을 배치하기 위해, 이는 매우 간단하고 이해하기 쉽고 사용하기 쉽습니다.

전략 백테스팅

img

img

저는 무작위로 백테스팅 기간을 선택했습니다. 돈을 잃지 않았지만, 지속적으로 수익을 축적하지도 못했습니다. 그리고 인출 문제는 상당히 중요합니다. 전략에 대한 다른 방향과 최적화 공간이 있어야합니다. 관심있는 사람들은 전략을 업그레이드하려고 할 수 있습니다.

img img

이 전략을 통해, 우리는 매우 비정상적인 거래 아이디어를 배웠을 뿐만 아니라, 도표를 그리는 방법을 배웠습니다. K-선과 이동 평균선으로 둘러싸인 영역을 표현하고, KDJ 지표를 그리는 방법 등을 배웠습니다.

요약

K-라인 영역 전략은 가격 트렌드 크기와 KDJ 지표에 기반한 거래 전략이다. K-라인과 이동 평균 사이의 영역을 분석하고 구매 및 판매 정서 변화뿐만 아니라 시장 추세를 예측하는 데 도움이 된다. 특정 위험에도 불구하고, 이 전략은 지속적인 최적화와 조정을 통해 강력한 거래 도구를 제공하여 거래자가 시장 변동에 더 잘 대처할 수 있도록 도와준다. 또한, 거래자는 더 나은 거래 성과를 달성하기 위해 특정 상황과 시장 조건에 따라 전략의 매개 변수와 규칙을 유연하게 조정해야 한다.


더 많은