완전히 자동화 된 거래를 위한 프로그램을 작성하는 트레이더가 점점 더 많아지고 있지만, 더 큰 그룹은 여전히 수동 트레이더입니다. 사실, 수동 주관적 트레이더는 주관적 거래에 도움을 줄 수있는 작은 도구를 작성할 수 있습니다. 예를 들어, 때로는 좋은 엔트리 포지션을 발견하고 초기 포지션에 고정 스톱 로스 및 트레일 수익을 설정 할 계획입니다. 그 다음 후속 시장 모니터링과 같은 더 많은 에너지 소모 요소를 생략하고, 자신의 설립 된 스톱 로스 및 트레이프 계획을 정확하게 따르고, 프로그램을 위해 시장 모니터링을 할 수 있습니다. 손해를 입는 것에 대한 스톱 로스, 승리에 대한 트레일 이익 베팅은 수동 거래에 도움이 됩니다.
파인 언어를 사용하여 이러한 요구 사항을 설계하는 전략은 매우 간단합니다. 요구 사항에 따라 기능을 달성하기 위해 다음 매개 변수를 설계해야합니다.
/*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("Tracking loss and profit stopping entrustment", 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", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])
if not barstate.ishistory and not isAlertMinTick
runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
if syminfo.mintick < minTick
runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
isAlertMinTick := true
if not barstate.ishistory and limit == -1 and not isAlert
runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
isAlert := true
if isTrade and strategy.position_size == 0 and not isAlertFinished
runtime.log("All order processes executed, position is 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("The price per point is:", syminfo.mintick, ", current 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 trigger line")
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")
전략의 설계는 복잡하지 않지만, 그것은 "실제 가격 모델"으로 설정되어야합니다. 왜냐하면 가격은 모든 순간에 모니터링되어야하기 때문입니다.
스톱 손실은 포인트 (minTick) 로 표현되고 오프셋도 포인트 (minTick) 로 표현된다는 점에 유의하십시오. 타겟 오프셋 후속 스톱 노프치 트리거 라인의 오프셋은 가격 거리의 관점에서 표현됩니다 (예를 들어, 거리를 위해 RMB30로 설정됩니다). minTick이 1일 때, 30은 거리를 위해 RMB30을 의미합니다.
이 수수료 전략은 초기 기본 포지션뿐만 아니라 초기 기본 포지션도 짧게 할 수 있도록 설계되었습니다.
설계 구현을 다음과 같이 보여드리겠습니다.
1. 전략이 실행되면 기본 포지션은 즉시 열리고 입력되며 그 다음 매개 변수에 따라 손실 중지 및 추적 스톱 이윤이 설정됩니다.
방향은 길게 설정, 한계 매개 변수는 0으로 설정, 즉, 전략이 실행되고 즉시 길게 입력하고, 금액은 1로 설정, 즉, 전략은 1 계약의 위치를 열 수 있습니다.
2. 제한 매개 변수를 지정, 입력 가격을 지정
다른 매개 변수 설정은 변경되지 않습니다. 지정된 한계 매개 변수 값은: 1276
3. 기본 한계 매개 변수는 -1, 아무것도 작동하지 않고 사고로 포지션 개척을 방지합니다
파인 언어 전략을 사용할 때 minTick 데이터에 특별한 주의를 기울이는 것이 중요합니다. 시스템 내의 정확한 가격 minTick 수는 매개 변수에서
매개 변수
자, 위의 것은 이 반 자동 수수료 전략의 전체 디자인입니다. 비록 나는 또한 실제 봇 거래에 사용한다. 그러나 이러한 도구는 또한 이해하기 위해 자신의 거래 습관에 따라 사용되어야 합니다. 특정 수정, 최적화는 스스로 수행 할 수 있습니다. 여기 전략 코드는 공개 공유, 교환 학습 디자인과 논리만을 위한 것입니다.
우리가 볼 수 있듯이, 파인 언어는 사용하기 매우 쉽고, 그것은 편리하고 쉽게 배울 수 있습니다. 우리는 복잡한 프로그래밍에 대해 걱정할 필요 없이, 우리가 원하는 도구를 신속하게 설계 하 고 FMZ 양적 거래 플랫폼에서 양적 거래를 더 쉽게 하기 위해 파인 언어를 사용할 수 있습니다.