avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

만든 날짜: 2022-09-29 14:36:32, 업데이트 날짜: 2024-11-29 19:01:54
comments   0
hits   2561

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

점점 더 많은 트레이더가 완전 자동 거래를 위한 프로그램을 작성하고 있지만, 대부분은 여전히 ​​수동 트레이더입니다. 실제로, 주관적인 수동 거래자도 주관적인 거래를 돕기 위해 몇 가지 작은 도구를 작성할 수 있습니다. 예를 들어, 때로는 좋은 진입 포지션을 찾아서 초기 포지션에 대한 고정 손절매와 추적 이익실현을 설정하기로 계획합니다. 그러면 시장의 후속 모니터링과 같은 에너지 소모적인 작업을 피할 수 있습니다. 확립된 손절매 및 이익 실현 계획을 따르고 프로그램이 시장을 모니터링하도록 하세요. 배팅에 지면 손실을 멈추고, 이긴 경우 수익 목표를 추적하여 수동 거래를 지원하세요.

매개변수 설계

Pine 언어를 사용하여 이러한 요구 사항을 설계하는 전략은 매우 간단합니다. 요구 사항에 따라 기능을 구현하려면 다음 매개변수를 설계해야 합니다.

  1. 오프셋: 트레일링 테이크 프로핏이 트리거되면 최고 가격과 최저 가격이 오프셋되어 테이크 프로핏 라인의 오프셋 거리가 결정됩니다.
  2. limit: 이 매개변수는 다음을 제어하는 ​​데 사용됩니다. A. 초기 기준 위치에서 직접 매수, B. 지정된 가격에서 매수 대기, C. 아무것도 하지 않음.
  3. 수량 : 기본창고가 개설될 때의 주문 수량입니다.
  4. 손실: 손절매 지점.
  5. targetOffset: 추적 이익 실현을 촉발할 때 개시 가격을 상쇄하는 가격 차이입니다.
  6. minTick: 가격이 한 단계 상승하는 시점.
  7. 방향 : 베이스 위치를 여는 방향입니다.

디자인 전략

/*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, "移动止损触发线")

전략 설계는 복잡하지 않습니다. 사용할 때는 보통 “실시간 가격 모델”로 설정해야 하는데, 매 순간 가격을 확인해야 하기 때문입니다.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

매개변수의 손절매는 포인트(한 번의 가격 상승)로 표현되고, 오프셋 추적 이익 실현 오프셋도 포인트(한 번의 가격 상승)로 표현됩니다. targetOffset은 이익실현 트리거 라인의 오프셋을 추적하며 가격 거리로 표현됩니다(예를 들어, 30으로 설정하면 30위안의 거리를 의미합니다). 가격상승이 1일 때, 30번의 상승은 30위안의 차이를 의미합니다.

이러한 위탁 전략은 초기 롱 포지션뿐만 아니라 초기 숏 포지션도 허용하도록 설계되었습니다. 그러면 공매도 방향에 따라 손절매와 수익 추적이 처리됩니다.

디자인에서 구현된 기능을 설명해 보겠습니다.

1. 이 전략을 실행하는 동안 기본 포지션을 즉시 오픈한 다음 매개변수에 따라 손절매와 추적 이익실현을 설정합니다.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

방향은 롱으로 설정되고, 제한 매개변수는 0으로 설정됩니다. 즉, 전략이 시장에 진입하고 실행되면 즉시 롱으로 전환되고, 금액은 1로 설정되며 전략은 1의 포지션을 오픈합니다. 계약.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

2. 제한 매개변수와 진입 가격을 지정합니다.

다른 매개변수 설정은 변경되지 않으며 제한 매개변수 가격만 1276으로 지정하면 됩니다.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

3. 기본 한도 매개변수는 -1이며, 이는 실수로 포지션을 여는 것을 방지하기 위해 아무런 작업도 수행되지 않음을 의미합니다.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

THE END

Pine 언어 전략을 사용할 때는 가격 상승 데이터에 특별히 주의하세요. 시스템의 구체적인 가격 상승은 매개변수의 “가격 통화 정확도”와 관련이 있습니다.

Pine 언어를 사용하여 반자동 거래 도구를 작성하세요

“가격 통화 정밀도” 매개변수는 0으로 설정되어 있으며, 이는 가격 데이터 값이 단위 숫자까지 정확하다는 것을 의미합니다(즉, 소수 자릿수가 0임). 그러면 가격 변화의 최소 단위는 1입니다. 일부 매개변수는 특정 가격 상승과 관련이 있으므로 이 지점에 특별한 주의를 기울여야 합니다.

네, 위의 내용은 이 반자동 위탁 전략의 완전한 설계 내용이지만, 실제 거래에도 이를 사용합니다. 하지만 이러한 도구는 당신의 거래 습관에 맞게 이해하고 사용해야 하며, 당신 스스로 수정하고 최적화할 수도 있습니다. 여기의 전략 코드는 설계 방법과 논리에 대한 대중의 공유, 소통, 학습을 위한 것일 뿐입니다.

파인언어는 사용하기 매우 쉽고, 편리하며, 배우기도 쉬운 것을 알 수 있습니다. Pine 언어를 사용하면 복잡한 프로그램 설계에 대해 걱정할 필요 없이 원하는 도구를 빠르게 설계할 수 있습니다. FMZ Quantitative에서 Pine 언어를 사용하면 양적 거래가 더 쉽고 간단해집니다.