Olhando para uma ideia de negociação não tão confiável
A estratégia de área de linha K é uma estratégia de negociação baseada na relação de área entre as linhas de preço K e as médias móveis. Sua ideia principal é prever possíveis tendências nos preços das ações analisando a magnitude e as mudanças nas tendências de preços, bem como mudanças no sentimento de compra e venda, determinando assim quando abrir posições e sair. Esta estratégia depende da área entre a linha K e as médias móveis, bem como dos valores do indicador KDJ, para gerar sinais de negociação longos e curtos.
A área da linha K refere-se à área espacial entre a linha K do preço e a média móvel, calculada subtraindo o valor médio móvel do preço de fechamento de cada barra e depois somando-a. Quando há um grande aumento no preço durante um longo período de tempo, a área da linha K ficará maior, enquanto durante mercados voláteis ou após inversões de volatilidade, a área da linha K é menor. De acordo com o princípio de
Para confirmar ainda mais uma reversão iminente da tendência, introduzimos o uso de indicadores KDJ que ajudam a determinar mudanças no sentimento de compra ou venda.
A vantagem da estratégia da área da linha K reside na sua combinação da magnitude e das alterações das tendências de preços, bem como da mudança no sentimento de compra e venda, proporcionando uma estratégia comercial quantitativa relativamente completa.
Embora a estratégia da zona da linha K apresente certas vantagens, comporta também alguns riscos, nomeadamente:
Para otimizar a estratégia da área da linha K, considere as seguintes orientações:
Calcular a área da linha K
sinal de abertura de posição longa:
(1) A área da linha K da tendência descendente atinge o limiar, que pode ser estabelecida previamente.
(2) O valor do indicador KDJ é superior a 80.
Sinalização de abertura de posição curta:
(1) A área da linha K da tendência ascendente atinge o limiar, que pode ser estabelecida previamente.
(2) O valor do indicador KDJ é inferior a 20.
Exit para posições Long/Short: ATR trailing stop loss e take profit.
Implementação do código
// 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)
}
}
A lógica da estratégia é muito simples:
Parâmetros da estratégia
Variaveis globais
Função de cálculo
Função do circuito principal
Função onTick: É a principal função de execução de estratégia, e aqui estão as operações dentro da função:
a. Obter os dados mais recentes das linhas K e assegurar que o número de linhas K não seja inferior a maPeriod, caso contrário registar o estado e o retorno.
b. Calcular a linha média móvel ma e o indicador ATR atr, bem como o indicador KDJ.
c. Obter informações sobre a área a partir do areaInfo, último índice de linha K cruzada e último índice de linha K cruzada.
d. Use o objeto do gráfico de linha K c para desenhar linhas K e linhas de indicador enquanto preenche cores diferentes com base na relação do preço
e. Determinar o calendário de compra ou venda de acordo com as condições:
Se o tradeState for
Se estiver em estado de compra, quando o preço cair abaixo do preço de fechamento do último dia de negociação menos o ATR (Average True Range) dos dias anteriores, posição fechada. Se estiver em estado de venda, quando o preço subir acima do preço de fechamento do último dia de negociação mais o ATR (Average True Range) dos dias anteriores, posição fechada.
função principal: serve como ponto de entrada de execução principal. Verifica se o nome de troca contém
Em suma, esta estratégia baseia-se principalmente em gráficos de linha K e indicadores técnicos para tomar decisões de compra ou venda, ao mesmo tempo em que emprega estratégias de stop-loss e take-profit para gerenciar o risco.
EmFMZ.COMO projeto de estratégia atende aos mercados spot de criptomoedas utilizando o modelo
Eu selecionei um período de backtesting aleatoriamente. Embora eu não tenha perdido dinheiro, eu não acumulei lucros continuamente, nem, e a questão de retirada é bastante significativa. Deve haver outras direções e espaço para otimização para a estratégia. Aqueles que estão interessados podem tentar atualizar a estratégia.
Através da estratégia, não só aprendemos uma ideia de negociação bastante não convencional, mas também aprendemos a traçar diagramas; representando a área cercada pela linha K e linha média móvel; traçando indicadores KDJ etc.
A estratégia de área de linha K é uma estratégia de negociação baseada na magnitude da tendência de preços e no indicador KDJ. Ela ajuda os traders a prever as tendências do mercado analisando a área entre a linha K e as médias móveis, bem como as mudanças no sentimento de compra e venda. Apesar de certos riscos, esta estratégia pode fornecer ferramentas de negociação poderosas por meio de otimização e ajuste contínuos, ajudando os traders a lidar melhor com as flutuações do mercado. Além disso, os traders devem ajustar os parâmetros e regras da estratégia de forma flexível de acordo com situações específicas e condições de mercado para alcançar um melhor desempenho comercial.