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
(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
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 - maPeriod: período da média móvel. - threshold: Usado para determinar o limite de tempo para comprar ou vender. - amount: o número de transações por transação.
Variações globais
- c:Objetos de gráficos de linha K, usados para desenhar gráficos.
- openPrice: Registre os preços de abertura.
- tradeState: Regista o estado da transação, pode ser um botão NULL (vazio)
Função de cálculo - calculateKLineArea Função: Esta função é usada para calcular a área entre o preço e a média móvel em um gráfico de linhas K em um determinado período de tempo e retorna o valor da área, o índice de linhas K que foi cruzado pela última vez e o índice de linhas K que foi cruzado pela última vez. Estes valores são usados para determinar a hora de compra e venda em decisões subsequentes.
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: é a entrada de execução principal, que verifica se o nome da bolsa contém o ângulo
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.