Nesta edição, vamos explorar uma "estratégia de dupla EMA equilátera mágica" do YouTube, chamada de "estratégia de assassinato de mercado de ações e criptomoedas". Eu vi o vídeo e descobri que a estratégia é uma estratégia em linguagem pine para o trading view, usando dois indicadores de trading view.
Indicador EMA
Para simplificar o design, nós não usamos o Moving Average Exponential listado no vídeo. Nós usamos o ta.ema embutido no trading view em vez disso.
2o Índice de Swing Free do VuManChu
Este é um indicador no Trading View e precisamos de ir para o Trading View e baixar o código fonte.
O código VuManChu Swing Free:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with
//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Size Function
rng_size(x, qty, n)=>
// AC = Cond_EMA(abs(x - x[1]), 1, n)
wper = (n*2) - 1
avrng = ema(abs(x - x[1]), n)
AC = ema(avrng, wper)*qty
rng_size = AC
//Range Filter Function
rng_filt(x, rng_, n)=>
r = rng_
var rfilt = array.new_float(2, x)
array.set(rfilt, 1, array.get(rfilt, 0))
if x - r > array.get(rfilt, 1)
array.set(rfilt, 0, x - r)
if x + r < array.get(rfilt, 1)
array.set(rfilt, 0, x + r)
rng_filt1 = array.get(rfilt, 0)
hi_band = rng_filt1 + r
lo_band = rng_filt1 - r
rng_filt = rng_filt1
[hi_band, lo_band, rng_filt]
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")
//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")
//Range Size Inputs
rng_qty = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")
//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)
//Direction Conditions
var fdir = 0.0
fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0
//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0
CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1
//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")
//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")
//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")
//Bar Color
barcolor(use_barcolor ? bar_color : na)
//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))
//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")
Indicadores EMA: estratégia que usa dois EMAs, um rápido (parâmetros de ciclo pequeno) e um lento (parâmetros de ciclo grande). O papel dos EMAs duplos é principalmente ajudar a determinar a direção da tendência do mercado.
Multiplas linhas A linha rápida está acima da linha lenta.
Lista de cabeças vazias A linha rápida está abaixo da linha lenta.
Indicador VuManChu Swing Free: O indicador VuManChu Swing Free é usado para emitir sinais e, em combinação com outras condições, determinar se uma transação é ou não executada.
Agora vamos falar sobre as condições estratégicas específicas para o desencadeamento de sinais de negociação:
1° Regra para entrar em múltiplos: O preço de fechamento da linha K deve estar acima da linha rápida da EMA, as duas linhas médias da EMA devem apresentar uma ordem de múltiplos cabeças (a linha rápida acima da linha lenta) e o indicador VuManChu Swing Free deve apresentar um sinal de compra (a condição longa é verdadeira). Três condições são estabelecidas: a linha K é a linha K chave para fazer muitas entradas, e o preço de fechamento da linha K é a posição de entrada.
2, a regra para entrar em branco (o contrário de plural): O preço de fechamento da linha K deve estar abaixo da linha rápida da EMA, as duas linhas médias da EMA devem apresentar uma linha de cabeças vazias (linha rápida abaixo da linha lenta) e o indicador VuManChu Swing Free deve apresentar um sinal de venda (conditionada para ser verdadeira).
A lógica de negociação não é muito simples, uma vez que não há nenhuma explicação específica sobre o stop loss no vídeo, o editor pode usar um método de stop loss comparativo, usando um número fixo de pontos de stop loss e rastreamento de stop loss.
O código do indicador VuManChu Swing Free, que colocamos diretamente no nosso código de estratégia.
Depois, nós escrevemos um código em Pine para implementar a função de transação:
// extend
fastEmaPeriod = input(50, "fastEmaPeriod") // 快线周期
slowEmaPeriod = input(200, "slowEmaPeriod") // 慢线周期
loss = input(30, "loss") // 止损点数
trailPoints = input(30, "trailPoints") // 移动止盈触发点数
trailOffset = input(30, "trailOffset") // 移动止盈偏移量(点数)
amount = input(1, "amount") // 下单量
emaFast = ta.ema(close, fastEmaPeriod) // 计算快线EMA
emaSlow = ta.ema(close, slowEmaPeriod) // 计算慢线EMA
buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast // 做多入场条件
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast // 做空入场条件
if buyCondition and strategy.position_size == 0
strategy.entry("long", strategy.long, amount)
strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
strategy.entry("short", strategy.short, amount)
strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
A.可以看到,当buyCondition为真时即:
1, a variável de condição longa é verdadeira (o indicador VuManChu Swing Free emite mais sinais). 2, emaFast > emaSlow (EMA com várias cabeçalhas). 3, close > open (indica que o BAR atual é a linha do sol) e close > emaFast (indica que o preço de fechamento está acima da linha rápida da EMA).
A maioria das pessoas não sabe o que fazer.
B.当sellCondition为真时,则做空的三个条件成立(这里不再赘述)。
Em seguida, no caso de um sinal de determinação de condição se for desencadeado, use a função estrategy.entry para entrar no mercado e configure a função estrategy.exit para parar o prejuízo.
/*backtest
start: 2022-01-01 00:00:00
end: 2022-10-08 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with
//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Size Function
rng_size(x, qty, n)=>
// AC = Cond_EMA(abs(x - x[1]), 1, n)
wper = (n*2) - 1
avrng = ema(abs(x - x[1]), n)
AC = ema(avrng, wper)*qty
rng_size = AC
//Range Filter Function
rng_filt(x, rng_, n)=>
r = rng_
var rfilt = array.new_float(2, x)
array.set(rfilt, 1, array.get(rfilt, 0))
if x - r > array.get(rfilt, 1)
array.set(rfilt, 0, x - r)
if x + r < array.get(rfilt, 1)
array.set(rfilt, 0, x + r)
rng_filt1 = array.get(rfilt, 0)
hi_band = rng_filt1 + r
lo_band = rng_filt1 - r
rng_filt = rng_filt1
[hi_band, lo_band, rng_filt]
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")
//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")
//Range Size Inputs
rng_qty = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")
//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)
//Direction Conditions
var fdir = 0.0
fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0
//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0
CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1
//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")
//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")
//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")
//Bar Color
barcolor(use_barcolor ? bar_color : na)
//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))
//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")
// extend
fastEmaPeriod = input(50, "fastEmaPeriod")
slowEmaPeriod = input(200, "slowEmaPeriod")
loss = input(30, "loss")
trailPoints = input(30, "trailPoints")
trailOffset = input(30, "trailOffset")
amount = input(1, "amount")
emaFast = ta.ema(close, fastEmaPeriod)
emaSlow = ta.ema(close, slowEmaPeriod)
buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast
if buyCondition and strategy.position_size == 0
strategy.entry("long", strategy.long, amount)
strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
strategy.entry("short", strategy.short, amount)
strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
O período de tempo para testes de retorno foi escolhido de janeiro de 2022 a outubro de 2022, com um ciclo de linha K de 15 minutos, usando o modelo de retorno de preço de fechamento. O mercado escolheu o contrato perpétuo ETH_USDT da Binance. Os parâmetros foram definidos de acordo com os parâmetros do vídeo de saída: linha rápida de 50 ciclos, linha lenta de 200 ciclos, outros parâmetros não mudam por padrão.
Os resultados de retrospecção mostram que estes parâmetros têm alguma influência nos resultados de retrospecção. A sensação é que este aspecto também precisa de ser otimizado no design. No entanto, os sinais estratégicos podem desencadear a taxa de vitória após a negociação.
O Bitcoin é um instrumento de negociação de longo prazo que permite a troca de um contrato perpétuo com BTC_USDT para tentar:
O resultado foi explosivo no BTC:
A estratégia é endereçada:https://www.fmz.com/strategy/385745
Parece que este método de negociação é mais confiável para a captura da tendência, e pode continuar a otimizar o design com base nessa idéia. Neste artigo, nós não só entendemos a idéia de uma estratégia de dupla linha uniforme, mas também aprendemos como usar a estratégia do deus do petróleo para processar e aprender.
Brinquedos de chocolateO que é que ele está a fazer? - O que é que ele está a fazer? - O que é que está a fazer?
fantadongE se essa estratégia também fosse um parâmetro de um eixo?
Hyc1743Dream Big, porque é que o sinal está no ícone, mas o disco não está aberto? /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cae1c5d5b26ec763ea6.jpg /upload/asset/23d49ff4aec3475793e5e.jpg
Nuvens levesMin Da, recomendou encontrar dois ou três estratégias representativas do tubo de petróleo, de maior dificuldade de reescrever, funções, parâmetros e maneiras de operação mais complexas, para fazer vários tutoriais em versões de texto, como um tutorial semelhante ao de linhas. Agora, com esta estratégia de dupla linha uniforme, eu aprendi a alterar algumas estratégias de combinação não muito complexas, mudando uma dúzia de estratégias de combinação, uma ou duas delas são realmente 21 anos 22 anos de dados de retrospecção de resultados muito bons, e já foram testados em disco real, mas encontrou função complexa de parâmetros de operação como o aconselhamento: line: 62 Could not find function or function reference 'line.delete', mas no documento FMZ PINE Script não encontrou a explicação relacionada com line.delete. O que você está fazendo é errado.
O HagoO tempo escolhido: 21 de abril a 10 de outubro, o BTC é pior
yingjunSe você não sabe o que isso significa, por exemplo, o padrão de 30 significa que o BTC caiu 30 metros?
Nuvens levesMin Da, por favor, o PINE pode escrever um método de bloqueio um pouco mais complexo? Por exemplo, um bloqueio por camadas? Se o PINE pode ser combinado com o JS, por exemplo, escrever indicadores no PINE e escrever transações no JS é mais conveniente.
yingjunO disco real terá erros em 2022
FmzeroA estratégia de conservação sugere que é uma brincadeira. REST: sql: no rows in result set
FmzeroO sonho é o mesmo.
Brinquedos de chocolateSim /upload/asset/101a198b65be7e8fe8487.png
Inventor quantificado - sonho pequenoSim, você está falando dessa estratégia?
Inventor quantificado - sonho pequenoA estratégia de tendências é simplesmente: "Ah, sim, o mercado tem tendências no futuro, senão é uma estratégia de choque".
Inventor quantificado - sonho pequenoNão é cortês.
Hyc1743Obrigada ao Dream Big.
Inventor quantificado - sonho pequenoBom dia, isso porque a marca BUY mostrada no gráfico é apenas um sinal de indicadores do artigo, com uma linha uniforme por trás. Não. //Plot Buy and Sell Etiquetas plotshape ((longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0)) plotshape ((shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0)) Não. plotshape ((longCondition, title = "Buy Signal", text ="BUY O gráfico mostra que apenas as condições longCondition são cumpridas. A condição é a seguinte: Não. se buyCondição e estratégia.position_size == 0 Strategy.entry (("long", strategy.long, amount) é um código de código de código de código de código de código. strategy.exit (("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) (em inglês) se sellCondição e estratégia.position_size == 0 Strategy.entry (("short", strategy.short, amount) é uma ferramenta de gerenciamento de conteúdo para gerenciamento de conteúdo. strategy.exit (("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) (em inglês) Não.
Nuvens levesNão admira, eu entendo, obrigado.
Inventor quantificado - sonho pequenoline Este objeto não é suportado no FMZ, por isso algumas linhas podem não ser alteradas. Algumas políticas usam este objeto para participar no cálculo.
Inventor quantificado - sonho pequenoO resultado é que o tempo de retrospecção é muito longo e o excesso de dados é causado.
Inventor quantificado - sonho pequenoOs tutoriais de língua Pine têm capítulos com descrições, que podem ser consultados em: https://www.fmz.com/bbs-topic/9390#%E5%B8%A6%E8%B7%F%E8%B8%AA%E6%AD%A2%E6%8D%9F%E6%AD%A2%E7%9B%88%E7%9A%84%E8%B6%85%E7%BA%A7%E8%B6%8B%E5%8A%BF%E7%AD%96%E7%95%A5
Nuvens levesAh, eu defino em um ano ou 10 meses, basicamente, e depois de um ano eu tenho essa dica ou uma série de outras coisas.
Inventor quantificado - sonho pequenoNão há restrições, este erro deve ser muito grande para o tempo de revisão.
Nuvens levesMuito bem, obrigada, mas também, por favor, há um limite de tempo para a revisão do PINE?
RuntimeError: abort(undefined) at js Error at StackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:1:147),
Inventor quantificado - sonho pequenoO Pine deve ser capaz de projetar um bloqueio mais complexo, que ainda não está embutido no código do JS.
Inventor quantificado - sonho pequenoO blogueiro também escreveu sobre o problema: "O problema é que a maioria dos blogueiros não tem acesso ao site.
Inventor quantificado - sonho pequenoOh, desculpe, a política de endereçamento foi errada e foi alterada.