avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

Criado em: 2022-09-29 14:36:32, atualizado em: 2024-11-29 19:01:54
comments   0
hits   2561

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

Embora cada vez mais traders estejam escrevendo programas para fazer negociações totalmente automáticas, o grupo maior ainda é formado por traders manuais. Na verdade, os traders subjetivos manuais também podem escrever algumas pequenas ferramentas para auxiliar suas negociações subjetivas. Por exemplo, às vezes você encontra uma boa posição de entrada e planeja definir um stop loss fixo e um trailing take profit para a posição inicial. Então você pode evitar tarefas que consomem energia, como o monitoramento subsequente do mercado. Basta seguir seus planos de stop-loss e take-profit estabelecidos e deixar o programa monitorar o mercado para você. Se você perder a aposta, faça stop loss; se ganhar, acompanhe a meta de lucro para auxiliar na negociação manual.

Projeto de parâmetros

A estratégia para projetar tais requisitos usando a linguagem Pine é muito simples. Os seguintes parâmetros precisam ser projetados para implementar as funções de acordo com os requisitos:

  1. Deslocamento: quando o take profit final é acionado, o preço mais alto e o preço mais baixo são deslocados para determinar a distância de deslocamento da linha de take profit.
  2. limite: O parâmetro é usado para controlar - A. Comprar diretamente na posição base inicial, B. Aguardar a compra a um preço especificado, C. Não fazer nada.
  3. Quantidade: A quantidade do pedido quando o armazém base é aberto.
  4. Perda: pontos de stop loss.
  5. targetOffset: A diferença de preço que compensa o preço de abertura ao acionar o trailing take profit.
  6. minTick: um aumento de preço.
  7. Direção: a direção de abertura da posição base.

Estratégia de Design

/*backtest
start: 2022-09-24 00:00:00
end: 2022-09-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["v_input_1",20],["v_input_2",0],["v_input_4",50],["v_input_5",20],["RunMode",1,358374],["ZPrecision",0,358374],["XPrecision",3,358374]]
*/

strategy("跟踪止损止盈委托", overlay = true)

varip targetPrice = na
varip high_lowPrice = na
varip isTrade = false 
varip isAlert = false
varip isAlertMinTick = false
varip isAlertFinished = false 

varip offset = input(30, "offset", "跟踪止损止盈偏移")
varip limit = input(-1, "limit", "初始开仓价格,-1为不开仓,0为立即开仓,其它具体数值为限价价格")
varip amount = input(1, "amount", "开仓量")
varip loss = input(30, "loss", "止损")
varip targetOffset = input(30, "targetOffset", "触发跟踪止盈止损偏移量")
varip minTick = input(1, "minTick", "价格一跳")
tradeType = input.string("long", "direction", tooltip="下单方向,long做多,short做空", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("检查syminfo.mintick是否正确!syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("系统syminfo.mintick < minTick参数", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("没有设置开仓价格,当前limit为-1(防止误开仓,初始默认limit为-1),禁止开仓", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("所有委托流程执行完毕,仓位为0", "#FF0000")
    isAlertFinished := true 

if not barstate.ishistory and not isTrade and limit != -1
    if limit == 0 
        strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount)
    else if limit > 0 
        strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount, limit=limit)
    
    if tradeType == "long"
        targetPrice := (limit == 0 ? close : limit) + targetOffset
    else 
        targetPrice := (limit == 0 ? close : limit) - targetOffset
    strategy.exit("exit", "open", amount, loss=loss, trail_price=targetPrice, trail_offset=offset)
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close)
    isTrade := true 

if ((close > targetPrice and strategy.position_size > 0) or (close < targetPrice and strategy.position_size < 0)) and not barstate.ishistory
    high_lowPrice := na(high_lowPrice) ? close : high_lowPrice
    if strategy.position_size > 0 
        high_lowPrice := close > high_lowPrice ? close : high_lowPrice
    else 
        high_lowPrice := close < high_lowPrice ? close : high_lowPrice

plot(targetPrice, "trail_price 触发线")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "当前最高价/最低价")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "移动止损触发线")

O design da estratégia não é complicado. Ao usá-lo, ele geralmente precisa ser definido para o “modelo de preço em tempo real” porque o preço precisa ser verificado a cada momento.

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

Observe que o stop loss nos parâmetros é expresso em pontos (um salto de preço), e o deslocamento do take profit também é expresso em pontos (um salto de preço). targetOffset rastreia o deslocamento da linha de gatilho take-profit e é expresso em distância de preço (por exemplo, se você defini-lo como 30, significa uma distância de 30 yuans). Quando o salto de preço é de 1, 30 saltos significam uma distância de 30 yuans.

Essa estratégia de confiança foi projetada não apenas para permitir posições iniciais longas, mas também para permitir posições iniciais curtas. Então, o stop loss e o trailing profit serão manipulados de acordo com a direção da venda a descoberto.

Vamos demonstrar as funções implementadas pelo design:

1. Quando esta estratégia estiver em execução, abra uma posição base imediatamente e então defina o stop loss e o trailing take profit de acordo com os parâmetros.

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

A direção é definida como longa, o parâmetro limite é definido como 0, o que significa que a estratégia entrará no mercado e ficará longa imediatamente quando for executada, e o valor é definido como 1, e a estratégia abrirá uma posição de 1 contrato.

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

2. Especifique o parâmetro limite e o preço de entrada

Outras configurações de parâmetros permanecem inalteradas, basta especificar o preço do parâmetro limite como: 1276

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

3. O parâmetro limite padrão é -1, o que significa que nenhuma operação é realizada para evitar a abertura acidental de posições.

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

THE END

Ao usar a estratégia da linguagem Pine, preste atenção especial aos dados de aumento de preço. O aumento de preço específico do sistema está relacionado à “precisão da moeda de precificação” nos parâmetros.

Escreva uma ferramenta de negociação semiautomática usando a linguagem Pine

O parâmetro “Precisão da moeda de preço” é definido como 0, o que significa que o valor dos dados de preço é preciso até o dígito da unidade (ou seja, o número de casas decimais é 0). Então a unidade mínima de mudança de preço é 1. Como alguns parâmetros estão relacionados ao aumento de preço específico, atenção especial deve ser dada a este ponto.

OK, o texto acima é o conteúdo completo do design desta estratégia de confiança semiautomática, embora eu também a utilize em negociações reais. No entanto, tais ferramentas devem ser entendidas e utilizadas de acordo com seus próprios hábitos de negociação, e você mesmo pode modificá-las e otimizá-las. O código de estratégia aqui é apenas para compartilhamento público, comunicação e aprendizado de métodos e lógica de design.

Pode-se observar que a linguagem Pine é muito fácil de usar, conveniente e fácil de aprender. Podemos usar a linguagem Pine para projetar rapidamente as ferramentas que queremos sem ter que nos preocupar com design de programa complicado. Usar a linguagem Pine no FMZ Quantitative torna a negociação quantitativa mais fácil e simples.