FMZ 퀀트 트레이딩 플랫폼의 확장 API는 최근에 업그레이드되었으며, 업그레이드는 직접 액세스 모드를 지원하므로 자동 거래를 위해 TradingView 경고 신호를 FMZ의 봇에 쉽게 보낼 수 있습니다. 확장 API가 무엇인지 모르는 경우, 이제 자세히 들어보십시오.
확장 API의 주요 기능은 FMZ 퀀트 거래 플랫폼의 다양한 기능에 대한 인터페이스를 제공하는 것입니다. 즉, 팩을 동시에 시작하는 봇, 봇 시작 및 정지 시점, 봇 정보 세부 정보를 읽는 등과 같은 프로그래밍 작업. 우리는 TradingView 경고 신호 거래를 구현하기 위해 FMZ 확장 API를 사용합니다.CommandRobot(RobotId, Cmd)
확장된 API에서 인터페이스. 이 인터페이스는 지정된 ID를 가진 봇에 대화형 명령을 보낼 수 있으며, 봇은 해당 작업을 수행 할 수 있습니다. (구매 또는 판매 주문을 하는 등)
확장 API를 사용하려면 먼저 자신의 계정을 만들어야 합니다API KEY
FMZ에서:
API KEY
구성되어 있습니다access key
그리고secret key
; API KEY
FMZ 양자 거래 플랫폼을 프로그램적으로 운영하는 열쇠입니다. 그래서 제대로 보관하고 공개하지 않도록하십시오.API KEY
예를 들어, 위의 그림은API KEY
접근 권한CommandRobot(RobotId, Cmd)
이 예에서, 보안상의 이유로,CommandRobot(RobotId, Cmd)
FMZ와의 인터페이스 확장API KEY
.
직접 액세스 모드는 직접 글을 표시API KEY
예를 들어, FMZ Quant 플랫폼의 확장 API에 액세스하는 URL은 다음과 같이 작성될 수 있습니다.
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]
그 중에는https://www.fmz.com/api/v1
인터페이스 주소입니다?
다음 각 호의Query
; 파라미터access_key
예를 들어 xxx로 표시됩니다 (이용할 때 자신의 FMZ 계정의 액세스_키를 입력); 매개 변수secret_key
yyyy로 표시됩니다 (이용할 때, 자신의 계정 비밀_키를 입력); 매개 변수method
접근할 확장된 API 인터페이스의 특정 이름이며,args
이 지표의 매개 변수method
인터페이스 호출.
우리는 FMZ 봇에 거래 명령을 보내기 위해 신호 원천으로 트레이딩뷰를 사용합니다.CommandRobot
interface.
우선, 당신은 TradingView Pro 계정을 가지고 있어야 합니다. 기본 레벨은 경고에서 WebHood 기능을 사용할 수 없습니다. 우리는 TradingView의 차트를 입력합니다.
차트에 지표를 추가하면 다른 스크립트 알고리즘도 사용할 수 있습니다.MACD
지표, 그리고 K-라인 기간을 1분으로 설정합니다. (신호가 더 빨리 발사되고 시연을 용이하게 하기 위해서)
차트에 오른쪽 버튼을 눌러
세트WebHook
전략 소스 코드:
// global variable
var BUY = "buy" // Note: the command used for spot
var SELL = "sell" // the command used for futures
var LONG = "long" // the command used for futures
var SHORT = "short" // the command used for futures
var COVER_LONG = "cover_long" // the command used for futures
var COVER_SHORT = "cover_short" // the command used for futures
function main() {
// Empty the logs; delete, if not needed
LogReset(1)
// Set the precision
exchange.SetPrecision(QuotePrecision, BasePrecision)
// Judge whether it is spot or futures
var eType = 0
var eName = exchange.GetName()
var patt = /Futures_/
if (patt.test(eName)) {
Log("The added platform is a futures platform:", eName, "#FF0000")
eType = 1
if (Ct == "") {
throw "Ct contract set to null"
} else {
Log(exchange.SetContractType(Ct), "Set contract:", Ct, "#FF0000")
}
} else {
Log("The added platform is a spot platform:", eName, "#32CD32")
}
var lastMsg = ""
var acc = _C(exchange.GetAccount)
while(true) {
var cmd = GetCommand()
if (cmd) {
// Detect the interactive command
lastMsg = "Command:" + cmd + "Time:" + _D()
var arr = cmd.split(":")
if (arr.length != 2) {
Log("Wrong cmd information:", cmd, "#FF0000")
continue
}
var action = arr[0]
var amount = parseFloat(arr[1])
if (eType == 0) {
if (action == BUY) {
var buyInfo = IsMarketOrder ? exchange.Buy(-1, amount) : $.Buy(amount)
Log("buyInfo:", buyInfo)
} else if (action == SELL) {
var sellInfo = IsMarketOrder ? exchange.Sell(-1, amount) : $.Sell(amount)
Log("sellInfo:", sellInfo)
} else {
Log("Spot trading platforms are not supported!", "#FF0000")
}
} else if (eType == 1) {
var tradeInfo = null
var ticker = _C(exchange.GetTicker)
if (action == LONG) {
exchange.SetDirection("buy")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else if (action == SHORT) {
exchange.SetDirection("sell")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_LONG) {
exchange.SetDirection("closebuy")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_SHORT) {
exchange.SetDirection("closesell")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else {
Log("Futures trading platforms are not supported!", "#FF0000")
}
if (tradeInfo) {
Log("tradeInfo:", tradeInfo)
}
} else {
throw "eType error, eType:" + eType
}
acc = _C(exchange.GetAccount)
}
var tbl = {
type : "table",
title : "Status information",
cols : ["Data"],
rows : []
}
// tbl.rows.push([JSON.stringify(acc)]) // Used during testing
LogStatus(_D(), eName, "The command received last time:", lastMsg, "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
코드는 매우 간단합니다.GetCommand
전략 프로그램에 대화형 메시지가 전송되면,GetCommand
이 메시지를 반환 하 고, 그 다음 전략 프로그램은 메시지의 내용을 기반으로 대응 거래 작업을 수행 합니다. 상호 작용 버튼은 상호 작용 기능을 테스트 할 수있는 전략에 설정 되었습니다. 예를 들어, 전략이 작동 할 때, 보트는 시뮬레이션 플랫폼으로 구성됩니다.WexApp
FMZ 퀀트 거래 플랫폼의
상호 작용 버튼을 클릭하여 bot의 구매 명령을 받을 수 있는 능력을 테스트합니다.
보트에서 받은 명령 문자열은 다음과 같습니다.buy:0.01
.
우리는 단지 운반된 매개 변수를buy:0.01
사용 중CommandRobot
FMZ Quant 확장 API의 인터페이스에서 WebHook 요청 URL에서, TradingView 경고가 발생했을 때.
트레이딩뷰로 돌아가 WebHook의 URL을 작성합니다.API KEY
에access_key
그리고secret_key
매개 변수method
정해집니다, 우리는 단지 확장 API에 액세스해야 합니다CommandRobot
;args
매개 변수는[robot ID, command string]
, 우리는 직접 로봇 ID를 얻을 수 있습니다.
신호가 발동되면 0.02 동전을 구매하고 명령 문자열은"buy:0.02"
웹
https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[443999,"buy:0.02"]
트레이딩 뷰로 설정:
신호가 발사될 때까지 기다려 로봇이 신호를 수신하면 페이지 오른쪽 상단에 신호 알림을 볼 수 있고 페이지 오른쪽 하단에 트리거 로그를 볼 수 있습니다.
로봇이 신호를 수신했습니다.
이 방법으로, 당신은 풍부한 차트 기능과 TradingView의 지표 알고리즘을 사용하여 원하는 자동 거래를 실현하기 위해 FMZ Quant의 전략 봇과 협력 할 수 있습니다.
시그널 모니터링의 주문 봇의 전략 코드는 연구 및 연구에만 사용됩니다. 실제 봇의 사용에 최적화 및 조정되어야합니다. 또한 선물을 지원합니다. 시장 주문 모드로 설정하는 것이 좋습니다. 자세한 내용은 전략 코드 매개 변수를 참조하십시오. 질문이나 제안이 있으시면 메시지를 남겨주세요.