
Рассматривая не очень надежную торговую идею - стратегию торговли по области К-линии, в этой статье мы обсудим эту идею и попробуем реализовать этот скрипт.
Стратегия области K-линии — это торговая стратегия, основанная на соотношении площадей между ценовой линией K и скользящей средней. Его основная идея заключается в прогнозировании возможной тенденции цен акций путем анализа амплитуды и изменений ценовых трендов, а также конверсии настроений покупателей и продавцов, чтобы определить время открытия и выхода из позиций. Эта стратегия основана на площади между свечой и скользящей средней, а также на значении индикатора KDJ для генерации длинных и коротких торговых сигналов.
Площадь свечи — это пространство между ценовой свечой и скользящей средней, которое рассчитывается путем вычитания значения скользящей средней из цены закрытия каждого бара и последующего их суммирования. Когда цена растет в течение длительного времени и с большой амплитудой, площадь К-линии будет становиться больше, в то время как на волатильном рынке или при развороте после волатильности площадь К-линии будет меньше. . Согласно принципу «все идет к противоположной крайности», чем сильнее восходящий тренд и чем дольше время, тем больше соответствующая ему площадь К-линии, и тем больше вероятность разворота, точно так же, как пружина, чем она длиннее. растягивается, тем больше сила отскока. Поэтому устанавливается пороговое значение для области линии К. При достижении этого порогового значения ценовой тренд может быть завершен и вероятность разворота возрастает.
Для дальнейшего подтверждения того, что тенденция вот-вот развернется, вводится индикатор KDJ, позволяющий судить о смене настроений покупателей и продавцов. Настройки порогового значения и значения индикатора KDJ этой стратегии можно корректировать в соответствии с конкретными обстоятельствами и потребностями для повышения точности стратегии.
Преимущество стратегии области K-линии заключается в том, что она объединяет амплитуду и изменения ценовых трендов, а также преобразование настроений покупателей и продавцов, обеспечивая относительно полную количественную торговую стратегию. К его преимуществам относятся:
Хотя стратегия «область свечей» имеет определенные преимущества, она также несет в себе некоторые риски, в том числе:
Для оптимизации стратегии зоны К-линии можно рассмотреть следующие направления:
Рассчитайте площадь подсвечника
Сигнал на открытие длинной позиции:
(1) «Зона К-линии» нисходящего тренда достигает порога, который может быть установлен до
(2) Значение индикатора KDJ больше 80
(1) «Зона К-линии» восходящего тренда достигает порога, который может быть установлен до
(2) Значение индикатора KDJ меньше 20
Реализация кода
// 参数
var maPeriod = 30
var threshold = 50000
var amount = 0.1
// 全局变量
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(), "K线数量不足")
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)
}
}
Логика стратегии очень проста:
Параметры стратегии
Глобальные переменные
Функция расчета
Функция основного цикла
а. Получите последние данные K-линии и убедитесь, что количество K-линий не меньше maPeriod, в противном случае запишите статус и вернитесь.
б) Рассчитайте скользящую среднюю ma и индикатор ATR atr, а также индикатор KDJ.
c. Получите информацию о площади, последний индекс восходящей линии К и последний индекс нисходящей линии К из areaInfo.
г. Используйте объект графика свечей c, чтобы нарисовать линии свечей и индикатора, и залейте их разными цветами в соответствии с соотношением между ценой и скользящей средней.
е. Определить время купли-продажи на основе условий:
Если tradeState равно «NULL», а область меньше -threshold и значение свечи KDJ больше 70, выполняется операция покупки. Если tradeState равно «NULL», а площадь больше порогового значения, а значение свечи KDJ меньше 30, выполнить операцию продажи. е. Установите условия стоп-лосса и тейк-профита и закройте позицию, если условия выполнены:
Если он находится в состоянии покупки, позиция закрывается, когда цена становится ниже цены закрытия предыдущего торгового дня за вычетом ATR предыдущего дня. Если позиция находится в состоянии продажи, то она закрывается, когда цена становится выше цены закрытия предыдущего торгового дня плюс ATR предыдущего дня. основная функция: это основная точка входа выполнения, проверяющая, содержит ли имя обмена «_Futures”, если включено, выдает исключение, в противном случае входит в бесконечный цикл, выполняет функцию onTick в каждом цикле и засыпает на 1 секунду.
В целом эта стратегия в основном опирается на графики K-линии и технические индикаторы для принятия решений о покупке и продаже, а также использует стратегии стоп-лосса и тейк-профита для управления рисками. Обратите внимание, что это всего лишь пример стратегии, и фактическое использование необходимо скорректировать и оптимизировать с учетом рыночных условий и конкретных потребностей.
Эту модель можно легко реализовать с помощью JavaScript на FMZ.COM без использования большого количества строк кода. Графическое представление области К-линии легко достигается с помощью функции KLineChart. Стратегия разработана для спотового рынка криптовалют и использует шаблон «Библиотека спотовой торговли цифровой валютой». Размещение заказов с использованием функций, инкапсулированных в шаблон, также очень простое, легкое в использовании и понятное.


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

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