FMZ 퀀트 트레이딩 플랫폼의 확장 API는 최근 직접 접근을 지원하기 위해 업그레이드되었습니다. 자동 거래를 위해 FMZ 퀀트 트레이딩 플랫폼 로봇에 TradingView 경고 신호를 쉽게 보낼 수 있습니다. 확장 API가 무엇인지 모르는 경우, 저를 주의 깊게 들어보십시오.
FMZ에 대한 API 문서의 일부 링크 (https://www.fmz.com/api)
확장 된 API의 주요 기능은 FMZ 퀀트 트레이딩 플랫폼의 다양한 기능에 대한 인터페이스를 제공하는 것입니다. 프로그램 작업을 위해, 예를 들어 로봇을 동시에 대량으로 시작, 로봇의 시작 및 정지 시계를, 로봇 정보 세부 정보를 읽는 등. 우리는 FMZ 퀀트 트레이딩 플랫폼의 확장 된 API를 사용하여 TradingView 경고 신호 거래의 수요 계획을 실현합니다.CommandRobot(RobotId, Cmd)
확장된 API에서 인터페이스. 이 인터페이스는 지정된 ID를 가진 로봇에 대화형 명령어를 보낼 수 있으며 로봇은 명령어를 받은 후 해당 작업을 수행할 수 있습니다.
확장된 API를 사용하려면API KEY
먼저 자신의 FMZ 계좌에 대해:
비밀의 열쇠API KEY
구성되어 있습니다access key
그리고secret key
. API KEY
FMZ 양자 거래 플랫폼의 프로그래밍 운영을 정량화하는 열쇠입니다. 따라서 적절히 보관되어야하고 공개되지 않습니다.API KEY
FMZ에서 권한을 지정할 수 있습니다. 예를 들어 위의 그림은API KEY
사용 권한CommandRobot(RobotId, Cmd)
이 예제에서, 보안 고려사항에 기초하여, 확장된API KEY
FMZ에 대한 접근 허가를CommandRobot(RobotId, Cmd)
interface.
직접 접속 방식은API KEY
URL 쿼리에 직접 작성됩니다. 예를 들어 FMZ 양자 거래 플랫폼에서 확장 된 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 기능은 기본 수준에서 사용할 수 없습니다.
트레이딩뷰 차트에서, 당신은 차트 또는 다른 스크립트 알고리즘에 지표를 추가 할 수 있습니다.MACD
그리고 K-라인 기간을 1분으로 설정합니다. 더 빠른 신호 발사와 쉬운 시연을 위해요.
차트에 오른쪽 클릭하고
세트WebHook
이 시점에서, 우리는 FMZ 양자 거래 플랫폼에서 모니터링 신호 로봇을 실행 할 수 있습니다.
전략 소스 코드:
// Global variable
var BUY = "buy" // Note: The command used for spot
var SELL = "sell" // The command used for spot
var LONG = "long" // The command used for future
var SHORT = "short" // The command used for future
var COVER_LONG = "cover_long" // The command used for future
var COVER_SHORT = "cover_short" // The command used for future
function main() {
// Clear the log and delete it if not needed
LogReset(1)
// Set precision
exchange.SetPrecision(QuotePrecision, BasePrecision)
// Identify future or spot
var eType = 0
var eName = exchange.GetName()
var patt = /Futures_/
if (patt.test(eName)) {
Log("The added exchange is a futures exchange:", 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 exchange is a spots exchange:", eName, "#32CD32")
}
var lastMsg = ""
var acc = _C(exchange.GetAccount)
while(true) {
var cmd = GetCommand()
if (cmd) {
// Detect interactive commands
lastMsg = "command:" + cmd + "time:" + _D()
var arr = cmd.split(":")
if (arr.length != 2) {
Log("cmd incorrect 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("The spots exchange is 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("The futures exchange is 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)]) // Use it when testing
LogStatus(_D(), eName, "Last received command:", lastMsg, "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
전략 소스 코드 (https://www.fmz.com/strategy/203063)
전략 코드는 매우 간단합니다.GetCommand
전략 프로그램에 대화형 메시지가 전송되면,GetCommand
함수는 메시지를 반환하고 전략 프로그램은 메시지 내용에 따라 대응 트랜잭션 작업을 수행합니다. 대화형 버튼이 대화형 함수를 테스트하기 위해 이 전략에 설정되었습니다. 예를 들어, 이 전략을 실행하고 로봇을 구성합니다WexApp
, FMZ 양자 거래 플랫폼의 시뮬레이션 거래소입니다.
우리는 로봇의 구매 명령을 받는 기능을 테스트하기 위해 인터랙티브 버튼을 클릭합니다. 그러면 로봇이 수신하는 명령 문자열이:buy:0.01
.
우리는 단지 웹 CommandRobot
FMZ 퀀트 트레이딩 플랫폼 확장 API의 인터페이스, 전달되는 매개 변수는buy:0.01
.
다시 트레이딩 뷰에서, 우리는 웹 access_key
, secret_key
.method
우리는 단지 액세스 할 필요가 있습니다CommandRobot
extendedAPI 인터페이스. 파라미터args
그 형태는[Robot ID, Command String]
우리는 로봇 ID를 로봇 페이지에서 직접 얻을 수 있습니다.
이번에는 신호가 발사되어 0.02개의 동전을 구매하고 명령 문자열은buy:0.02
. 그러면 WebHook URL가 완료됩니다. 이 방법은 URL에 신호를 작성하는 것을 지원합니다. TV 전략 자체에 의해 전송 될 수 있는 경고 메시지의 내용을 얻고 싶다면, 참조https://www.fmz.com/api#직접 검증
https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args= [191755,"buy:0.02"]
트레이딩 뷰에서 설정:
신호가 발사될 때까지 기다려... 신호가 발사될 때까지 기다려... 신호가 발사될 때까지 기다려... ...
그러면 로봇은 신호를 수신할 것입니다. 이 방법으로 우리는 트레이딩뷰에 있는 다양한 차트 기능과 지표 알고리즘을 사용하여 FMZ 퀀트 트레이딩 플랫폼의 전략 로봇과 협력하여 원하는 자동 거래를 달성할 수 있습니다. 트레이딩뷰에 있는 전략을 자바스크립트와 파이썬 언어로 포팅하는 어려움에 비해 어려움이 감소합니다.
시그널 모니터링을 통해 주문을 하는