Olhando para uma idéia de negociação pouco confiável para a estratégia de negociação de área de linha K, neste artigo, vamos explorar essa idéia e tentar implementar esse script.
A estratégia de área da linha K é uma estratégia de negociação baseada na relação de área entre a linha K e a linha média do preço. Sua ideia principal é prever o possível movimento do preço do estoque, analisando a amplitude e as mudanças da tendência do preço, bem como a transformação do sentimento de compra, para determinar o momento de abrir e sair. A estratégia depende da área entre a linha K e a linha média, bem como do valor do indicador KDJ, para gerar sinais de negociação multi-head e em branco.
A área da linha K é a área do espaço entre a linha K do preço e a linha uniforme, calculada subtraindo o preço de fechamento de cada Bar do valor da linha média e somando-a. Quando a tendência ascendente do preço é grande, a área da linha K aumenta com o tempo, enquanto a área da linha K é menor quando o mercado está turbulento ou se reverte após a turbulência. De acordo com o princípio da reflexão imperativa dos animais, quanto maior a tendência ascendente, quanto mais tempo, maior a área da linha K correspondente, maior a probabilidade de reversão.
Para confirmar ainda mais a iminência de uma reversão da tendência, o indicador KDJ é introduzido, para determinar a mudança de sentimento de compra e venda. O limiar desta estratégia e a configuração do valor do indicador KDJ podem ser ajustados de acordo com as circunstâncias e as necessidades específicas para aumentar a precisão da estratégia.
A vantagem da estratégia de área da linha K é que combina a amplitude e a variação da tendência de preços, bem como a conversão do sentimento de compra e venda, para fornecer uma estratégia de negociação quantitativa relativamente completa. Suas vantagens incluem:
Embora a estratégia de área da linha K tenha algumas vantagens, ela também apresenta alguns riscos, incluindo:
Para otimizar a estratégia de área da linha K, podemos considerar as seguintes direções:
Calcule a área da linha K
O sinal de abertura é:
(1) A linha de área da linha K da tendência descendente atinge o limiar, antes mesmo de ser estabelecida
(2) valor do indicador KDJ superior a 80
O sinal de abertura de uma posição vazia:
(1) A linha de área da linha K da tendência ascendente atinge o limiar, antes mesmo de ser estabelecida.
(2) valor do indicador KDJ inferior a 20
Múltiplas/vazia: ATR acompanha o stop loss
Implementação de código
// 参数
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)
}
}
A lógica estratégica é muito simples:
Primeiro, definimos algumas variáveis globais e parâmetros, incluindo:
Parâmetros de estratégia
Variações globais
Função de cálculo
Função de ciclo principal
Função onTick: Esta é a principal função de execução de políticas, e as seguintes são as operações dentro da função:
a. Obtenha os dados mais recentes dos K-strings e certifique-se de que o número de K-strings não seja menor do que o maPeriod, caso contrário, registe o estado e retorne;
b. Calcular a média móvel ma e o indicador ATR atr, bem como o indicador KDJ.
c. Obter informações de área do areaInfo, o último índice de K-string cruzado e o último índice de K-string cruzado.
d. Use o objeto c do gráfico de linhas K para desenhar linhas K e linhas de indicadores, enquanto preenche diferentes cores de acordo com a relação do preço com a média móvel.
e. No momento da compra e venda, de acordo com as condições:
Se o tradeState for um quadrado NULL, e a área for menor que o -threshold e o valor da linha K do KDJ for maior que 70, execute a operação de compra. Se o tradeState for um quadrado NULL, e a área for maior que o threshold e o valor da linha K do KDJ for menor que 30, execute a operação de venda. f. Configurar condições de stop loss e stop loss, e, se as condições forem atingidas, o equilíbrio:
Se for um estado de compra, quando o preço estiver abaixo do preço de fechamento do último dia de negociação menos o ATR do dia anterior, o equilíbrio ocorre. Se for um estado de venda, quando o preço é superior ao preço de fechamento do último dia de negociação, mais o ATR do dia anterior, o equilíbrio ocorre. Função principal: Esta é a entrada de execução principal, que verifica se o nome da bolsa contém o ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo âng
Em geral, a estratégia depende principalmente de gráficos K-line e indicadores técnicos para tomar decisões de compra e venda, mas também usa estratégias de stop loss e stop loss para gerenciar o risco. Note que esta é apenas uma estratégia de exemplo, que, quando usada na prática, precisa ser ajustada e otimizada de acordo com as condições do mercado e as necessidades específicas.
在FMZ.COM上使用JavaScript语言没有用多少行代码,很简单的就实现了这个模型。并且使用KLineChart函数很容易实现了K线面积的图形表示。策略设计用于加密货币现货市场,使用了「数字货币现货交易类库」模板,使用模板封装的函数下单,也是非常简单易用、易懂。
A escolha de um período de retrospecção aleatório, embora não tenha perdido dinheiro, mas também não tenha continuado a acumular lucros, o problema de retorno é relativamente grande. Deve haver outras direções e espaço para a otimização desta estratégia.
Com esta estratégia, além de aprendermos uma ideia de negociação mais alternativa, também aprendemos a desenhar gráficos; a representar a área de uma linha K e uma linha uniforme; desenhar indicadores KDJ, etc.
A estratégia de área da linha K é uma estratégia de negociação baseada na amplitude da tendência de preços e no indicador KDJ, que ajuda os traders a prever o movimento do mercado analisando a área e a conversão do sentimento de compra entre a linha K e a linha média. Apesar de existirem certos riscos, a estratégia pode oferecer ferramentas de negociação poderosas para ajudar os traders a lidar melhor com as flutuações do mercado.