O recurso está a ser carregado... Carregamento...

Escrever uma ferramenta de negociação semi-automática usando o linguagem Pine

Autora:Inventor quantificado - sonho pequeno, Criado: 2022-09-29 14:36:32, Atualizado: 2023-09-15 20:53:45

img

Escrever uma ferramenta de negociação semi-automática usando o linguagem Pine

Embora cada vez mais traders com programas de programação façam negociações totalmente automáticas, um grupo maior ainda é de traders manuais. Na verdade, os traders manuais também podem ajudar a sua negociação subjetiva, escrevendo algumas ferramentas. Por exemplo, às vezes encontram uma boa posição de entrada, planejam uma posição inicial de stop loss fixo, tracking stop stop. E depois, sem coisas que consomem muito energia, como os discos posteriores, seguem completamente o seu plano de stop loss e deixam o programa ajudá-lo.

Design de parâmetros

A estratégia para projetar essas necessidades com o linguagem Pine é muito simples, e depende da necessidade da implementação de funções que requerem a concepção dos seguintes parâmetros:

1, offset: quando o bloqueio de rastreamento é desencadeado, desvie o preço mais alto, o preço mais baixo para definir a distância de desvio da linha de bloqueio. 2, limite: Parâmetros usados para controlar o A. O fundo inicial é comprado diretamente; B. O preço especificado é esperado para ser comprado; C. Nada é feito. 3, amount: quantidade da unidade quando o fundo está aberto. 4, loss: número de pontos de stop-loss. 5 TargetOffset: diferença de preço do preço aberto quando o bloqueio de rastreamento é desencadeado. 6 minTick: O preço saltou. 7, direção: direção de abertura do fundo do estoque.

Estratégias 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 também não é complexo, e geralmente é necessário configurá-lo como um "modelo de preço em tempo real" quando usado, porque é preciso detectar o preço a todo momento.

img

Observe que o parâmetro de stop loss é representado por um ponto (um salto de preço) e o desvio de parada de rastreamento de offset também é representado por um ponto (um salto de preço).

Esta estratégia de subcontratação é projetada para não apenas fazer mais do que o primeiro fundo, mas também fazer o fundo inicial vazio. Então o stop loss e o stop tracking são tratados de acordo com a direção do vazio.

A seguir, vamos demonstrar a funcionalidade da implementação do projeto:

1, para que esta estratégia seja executada imediatamente quando a posição inicial for aberta e posteriormente para a configuração de parâmetros de stop loss, track stop stop.

img

A direção é definida como longa, o parâmetro limite é definido como 0, ou seja, a estratégia é executada com mais entradas imediatas, a quantidade é definida como 1, a estratégia é definida como 1 contrato.

img

2, especificar o parâmetro limite, especificar o preço de entrada

Os outros parâmetros são invariáveis, basta especificar o preço do parâmetro limite: 1276

img

3, o parâmetro limite padrão é -1, nada é operado para evitar posições erradas.

img

O FIM

Quando se usa a estratégia da linguagem Pine, deve-se prestar especial atenção a este dado. O preço do salto do sistema está especificamente relacionado ao "preço de precisão da moeda" no parâmetro.

img

O parâmetro "precisão monetária de preço" é definido como 0, o que significa que os dados de preço são precisos numérica a um dígito (ou seja, o dígito é 0). Então a unidade mínima de mudança do preço é 1. Como alguns parâmetros estão relacionados com o preço de um salto específico, este lugar precisa de especial atenção.

OK, acima está todo o conteúdo do projeto desta estratégia de comissão semi-automática, embora eu também tenha usado o disco real. Mas essas ferramentas também devem ser entendidas de acordo com seus próprios hábitos de negociação e podem ser modificadas e otimizadas.

Como pode ser visto, o linguagem Pine é muito fácil de usar, fácil de aprender e fácil de usar. Podemos usar o linguagem Pine para projetar rapidamente as ferramentas que queremos sem ter que se preocupar com o projeto de programas complexos. O uso do linguagem Pine para quantificar transações é muito mais fácil e simples.


Relacionados

Mais.