Альтернативные торговые идеи - Стратегия торговли в зоне K-линии

Автор:Лидия., Создано: 2023-11-06 13:33:17, Обновлено: 2024-01-01 12:20:19

img

В этой статье мы рассмотрим концепцию и попытаемся реализовать сценарий.

Основная идея стратегии зоны линии К

Стратегия K-линии - это торговая стратегия, основанная на взаимосвязи между K-линией цены и скользящими средними. Ее основная идея заключается в прогнозировании возможных тенденций в ценах акций путем анализа величины и изменений ценовых тенденций, а также сдвигов в настроении покупателей и продавцов, тем самым определяя, когда открывать позиции и выходить из них. Эта стратегия основана на области между K-линией и скользящими средними, а также значениях от индикатора KDJ, для генерации длинных и коротких торговых сигналов.

Принцип стратегии зоны K-линии

Площадь K-линии относится к пространственной области между ценой K-линии и скользящей средней, рассчитанной путем вычитания скользящей средней стоимости от каждой ценой закрытия и затем суммирования. Когда в течение длительного периода времени наблюдается большое увеличение цены, область K-линии становится больше, в то время как во время волатильных рынков или после переворотов волатильности область K-линии меньше. Согласно принципу что растет, должно снижаться, по мере увеличения и длительности восходящего тренда, соответствующая область K-линии также увеличивается; таким образом, увеличивается вероятность ее переворота - подобно весне, которая отскочит с большей силой при дальнейшем растяжении. Поэтому установление порога для этой области K-линии может указывать, когда цены могут достичь своего пика и, вероятно, обратятся.

Для дальнейшего подтверждения предстоящего изменения тенденции мы вводим использование показателей KDJ, которые помогают определить изменения настроения покупателей и продавцов.

Преимущества стратегии зоны K-линии

Преимущество стратегии K-линейной зоны заключается в ее сочетании величины и изменений ценовых тенденций, а также сдвига настроений покупателей и продавцов, обеспечивающих относительно полную количественную торговую стратегию.

  • Он предоставляет простой и интуитивно понятный метод для выявления возможности изменения тренда, помогая трейдерам лучше понять рыночные тенденции.
  • Объединение области K-линии и индикатора KDJ повышает надежность и точность стратегии.
  • Высокая гибкость позволяет корректировать параметры в соответствии с рыночными условиями для удовлетворения различных потребностей в торговле.

Риск стратегии зоны K-линии

Хотя стратегия зоны линии K имеет определенные преимущества, она также сопряжена с некоторыми рисками, в том числе:

  • Установление пороговых значений может потребовать некоторого опыта и корректировки.
  • На точность показателя KDJ влияют колебания рынка и шум, который может привести к ложным сигналам.
  • Результаты стратегии могут варьироваться в различных рыночных условиях и нуждаются в постоянной оптимизации и корректировке.

Направление оптимизации стратегии зоны линии К

Чтобы оптимизировать стратегию зоны линии K, рассмотрим следующие направления:

  • Оптимизация параметров: Постоянная корректировка и оптимизация пороговых значений и параметров показателей KDJ для адаптации к различным рыночным условиям и потребностям торговли.
  • Управление рисками: внедрять эффективные стратегии управления рисками, включая правила прекращения потерь и получения прибыли, для снижения рисков потерь.
  • Комбинация нескольких стратегий: комбинировать стратегию зоны линии K с другими стратегиями для улучшения эффективности комплексных торговых стратегий.
  • Наблюдение и корректировка в режиме реального времени: регулярное наблюдение за эффективностью стратегий, корректировка и улучшение на основе реальных ситуаций.

Использование стратегии с помощью JavaScript

  • Вычислить площадь линии 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: Период скользящей средней.
  • threshold: порог, используемый для определения сроков покупки или продажи.
  • сумма: количество для каждой сделки.

Глобальные переменные

  • c: объект K-линейной диаграммы, используемый для чертежей диаграмм.
  • openPrice: записывает начальную цену.
  • tradeState: записывает состояние торговли, которое может быть NULL (пустая позиция), BUY или SELL.

Вычислить функции

  • функция calculateKLineArea: используется для расчета площади между ценой и скользящей средней линией на K-линейном графике за определенный период времени и возвращает значение площади, индекс последнего восходящего пересечения K-линии и индекс последнего нисходящего пересечения K-линии. Эти значения используются в последующих решениях, чтобы определить, когда покупать и продавать.

Функция основной петли

  • Функция onTick: это основная функция исполнения стратегии, и вот операции в рамках функции:

    a. Получить последние данные о K-линии и убедиться, что количество K-линий не меньше maPeriod, в противном случае записывать состояние и возвращать.

    b. Вычислить скользящую среднюю линию ma и индикатор ATR atr, а также индикатор KDJ.

    c. Получить информацию о площади из areaInfo, последний пересеченный индекс K-линии и последний пересеченный индекс K-линии.

    d. Используйте объект графика с линией K для рисования линий K и линий индикатора при заполнении различных цветов, основанных на взаимосвязи цены с линией скользящей средней.

    e. Определять сроки покупки или продажи в соответствии с условиями:

    Если tradeState равен NULL, а площадь меньше порогового значения - и значение K KDJ больше 70, выполняется операция покупки. Если tradeState равен NULL, а площадь больше порога, а значение K KDJ меньше 30, выполняется операция продажи. f. Установление условий стоп-лосса и получения прибыли.

    Если он находится в состоянии покупки, когда цена падает ниже цены закрытия последнего торгового дня минус ATR (средний истинный диапазон) предыдущих дней, закрыть позицию. Если он находится в состоянии продажи, когда цена поднимается выше цены закрытия последнего торгового дня плюс ATR (средний истинный диапазон) предыдущих дней, закрывается позиция.

    main function: Это служит главной точкой входа для исполнения. Он проверяет, содержит ли имя обмена _Futures. Если это так, то будет выбрано исключение; в противном случае он входит в бесконечную петлю, где функция onTick выполняется каждую секунду.

Одним словом, эта стратегия в основном опирается на K-линейные диаграммы и технические индикаторы для принятия решений о покупке или продаже, а также использует стратегии стоп-лосса и прибыли для управления рисками.

НаFMZ.COM, используя язык JavaScript, не требовалось много строк кода, вместо этого эта модель была легко реализована. И с помощью функции KLineChart было легко достигнуто графическое представление области K-линейного графика.

Стратегия обратного тестирования

img

img

Я выбрал период обратного тестирования случайным образом. Хотя я не терял денег, я также не накапливал прибыли непрерывно, и проблема снижения довольно значительна. Должны быть другие направления и пространство для оптимизации стратегии. Те, кто заинтересован, могут попробовать обновить стратегию.

img img

С помощью стратегии мы не только выучили довольно нетрадиционную торговую идею, но и научились графовать диаграммы; представлять площадь, окруженную K-линией и скользящей средней линией; графовать индикаторы KDJ и т. д.

Резюме

Стратегия зоны K-линии - это торговая стратегия, основанная на величине ценового тренда и индикаторе KDJ. Она помогает трейдерам прогнозировать рыночные тенденции, анализируя область между линией K и скользящими средними, а также сдвиги в настроении покупателей и продавцов. Несмотря на определенные риски, эта стратегия может обеспечить мощные торговые инструменты посредством непрерывной оптимизации и корректировки, помогая трейдерам лучше справляться с колебаниями рынка. Кроме того, трейдеры должны гибко корректировать параметры и правила стратегии в соответствии с конкретными ситуациями и условиями рынка для достижения лучших торговых результатов.


Больше