Type/to search
3
Follow
1504
Followers
FMZ 양적 플랫폼 전략 작성 기본 튜토리얼(필독)
Tutorials
Created 2019-08-13 17:47:27  Updated 2026-01-27 17:22:09
 33
 71696

이 튜토리얼은 API 소개, 회고, 도표 등과 같은 전략 작성에 대한 기초 지식을 포함합니다. 이 기본 튜토리얼을 학습 한 후, 사용자는 기본 API를 능숙하게 사용하여 안정적인 리드 디스크 전략을 작성 할 수 있습니다.FMZ 발명가 양적 플랫폼 사용 입문 。

이전 버전의 설명서:발명가 양적 (FMZ.COM) 전략 작성 완전 사용 설명서 2.0 (도서)이 튜토리얼에는 많은 게시물들이 인덱스 되어 있습니다.

전략에 대한 사전 설명

API 소개

프로그래밍 거래는 API와 거래소를 통해 연결된 프로그램을 사용하여 설계된 의도대로 자동으로 거래하거나 다른 기능을 구현하는 것입니다. API는 응용 프로그램 프로그래밍 인터페이스 (Application Programming Interface, 즉 응용 프로그램 프로그래밍 인터페이스) 이다.

현재 디지털 화폐 거래소는 주로 두 가지 인터페이스 프로토콜이 있습니다: REST 및 Websocket. REST 프로토콜은 데이터를 한 번 가져오면 한 번 방문해야합니다. 예를 들어, 모의 거래소 wex.app의 API를 사용하여 브라우저에서 https://api.wex.app/api/v1/public/ticker?market=BTC_USDT를 직접 열면 다음과 같은 결과가 발생합니다.

{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}

이것은 BTC_USDT 거래 쌍의 최신 트레이드를 볼 수 있습니다.market=그 다음에는 특정 거래 쌍의 매개 변수이며, 다른 거래 쌍 데이터를 얻기 위해 수정할 수 있다. 시장 흐름과 같은 공개 인터페이스는 모든 사람이 액세스 할 수 있으므로 인증이 필요하지 않으며, 주문 및 액세스 계정과 같은 인터페이스는 API-KEY를 사용하여 서명해야하는 사용자 신원을 확인해야합니다. 웹소켓은 구독 모드이며, 구독이 필요한 콘텐츠를 전송 한 후 거래소는 업데이트 된 데이터를 프로그램에 전송하여 매번 다시 방문 할 필요가 없으므로 더 효율적입니다.

FMZ 양적 거래 플랫폼은 각 거래소의 REST 인터페이스를 포괄하고, 통일된 호출 방식과 데이터 형식을 사용하여 전략 기획을 더 간단하고 일반화한다. FMZ 플랫폼에서는 웹소켓을 편리하게 지원할 수 있으며, 다음 튜토리얼에서 자세히 설명한다.

다른 프로그래밍 언어

FMZ 플랫폼 API 문서는 대부분 자바스크립트를 예로 들지만, 패키징으로 인해 다른 언어는 거의 다르지 않으며, 문법 문제에만 주의를 기울여야 합니다. C++은 약간 특이하며, 후의 튜토리얼에는 전문적인 소개가 있습니다. Js가 비교적 간단하고 호환성 문제가 없기 때문에 초보자 사용이 권장됩니다. FMZ 양자 플랫폼은 완전한 파이썬을 지원하고, 다양한 패키지를 자유롭게 설치할 수 있으며, 특정 프로그래밍 기반을 사용하는 것이 좋습니다.

파이썬은 다른 버전이 있기 때문에 프로그램 시작 시 지정할 수 있습니다.#!Python2,#!Python3참고: 자바스크립트는 최근에 ES6 문법으로 업그레이드되었으며, 관심있는 사람들은 알아볼 수 있습니다. 아래는 동일한 기능을 하는 파이썬과 자바스크립트 코드를 보여 주며, 문법상의 차이만 보이므로, API 문서는 자바스크립트의 예만을 제시하고, 이 튜토리얼은 또한 파이썬의 특수한 사용 사례를 고려합니다.

#python代码 def main(): while True: Log(exchange.GetAccount().Balance) Sleep(2000) #相应的Js代码 function main(){ while(true){ Log(exchange.GetAccount().Balance) Sleep(2000) } }

자원 추천

  • FMZ 플랫폼 API 문서, 이 튜토리얼은 각 인터페이스에 대해 자세히 설명하지 않습니다. 구체적으로 이 문서를 참조하십시오: https://www.fmz.com/api
  • 트레이딩뷰의 신호를 받고 FMZ에서 거래하는 것을 원한다면, 이 기사를 참조하십시오: https://www.fmz.com/digest-topic/5533
  • 자바스크립트, 파이썬에 대한 빠른 입문, 간단한 전략을 작성하는 데는 복잡한 문법이 필요하지 않습니다. 단지 몇 가지 기본 개념을 숙지하는 것이 필요합니다.
  • 맥어 문헌, 트렌딩 전략에 맥어도 편리하다. ᄒhttps://www.fmz.com/bbs-topic/2569
  • C++ 호출 예제, C++에 관심이 있는 사람은 볼 수 있지만, 해석 언어가 아니기 때문에 디비팅이 어렵고, 사용하지 않는 것이 좋습니다:https://www.fmz.com/strategy/61533
  • <unk>, FMZ 공식 상품, 단 20원, 내용이 상세하고, 浅入深, 초보자에게 적합강의 링크
  • 몇 가지 교육 전략, 초기 입학에 적합하며, 학습과 동시에 기본 편문 전략:https://www.fmz.com/square/s:tag:教学/1
  • 전략에 대한 자세한 소스 설명:https://www.fmz.com/bbs/s:tag:源码解析/1

디버깅 도구

FMZ 양적 플랫폼은 API 인터페이스를 디버깅하기 위해 디버깅 도구를 제공합니다. 디버깅 도구는 자바스크립트만 지원하며, 한동안만 실행할 수 있으며, 리스크를 만들지 않고 거래소 인터페이스를 디버깅 할 수 있습니다. 반환된 데이터는 결과로 반환되며, 디버깅 도구의 코드는 저장되지 않습니다. 이 학습 튜토리얼에서 디버깅 도구를 동시에 사용할 수 있습니다.
img

정책 프로그램 구조

정책 프로그램은 일반적인 프로그램과 마찬가지로 코드 순서대로 실행되며, 특별한 점은 main 함수가 있어야 한다는 것이다. 정책이 끊이지 않고 실행되어야 하기 때문에, 일반적으로, 루프와 함께 휴면 시간이 필요하다. 거래의 모든 API 접속 빈도가 제한되어 있기 때문에, 그에 따라 휴면 시간을 조정해야 한다. 이 구조는 전형적인 고정 간격 실행이며, websockt을 사용하여 이벤트 주도형 정책을 작성할 수도 있다.

다른 특수 함수는 다음과 같다:

  • onexit() 정상 종료 스캔 후속 함수로서, 최대 실행 시간이 5분이며, 시간이 지나면 interrupt 오류가 발생한다고 선언할 수 없다. 종료 과정에서 일부 결과를 저장할 수 있다.
  • onerror() 예외로 퇴출 함수, 최대 실행 시간이 5분이며, 선언하지 않을 수 있다。
  • init() 초기화 함수로서, 정책 프로그램은 실행 시작시 자동으로 호출되며, 선언할 수 없다。
function onTick(){ var ticker = exchange.GetTicker() var account = exchange.GetAccount() //在这里写策略逻辑,将会每6s调用一次 } function main(){ while(true){ onTick() Sleep(6000) } }

이전 예제에서 네트워크 접속 오류가 발생하면 정책이 직접 중단될 수 있으며, 자동으로 재시작되지 않는 정책과 유사한 정책을 원한다면, 실장 정책으로 try catch 오류를 용인하는 주 회로를 사용한다. 물론 정책이 안정된 경우에만 이러한 작업을 권장한다. 그렇지 않으면 모든 오류를 보고하지 않고, 정책 문제를 정렬하기 어렵다.

function onTick(){ var ticker = exchange.GetTicker() var account = exchange.GetAccount() //在这里写策略逻辑,将会每6s调用一次 } function main(){ try{ while(true){ onTick() Sleep(6000) } }catch(err){ Log(err) } }

거래소 API 소개

거래소 및 거래 쌍 설정

어떤 거래소와 관련된 API를 호출할 때 거래소와 거래쌍을 명확히 해야 합니다.exchange이 객체를 대표하는 것은exchange.GetTicker()이 거래소-거래 쌍의 거래 트릭터입니다.

FMZ 플랫폼은 동시에 여러 거래소-거래 쌍을 추가하는 것을 지원합니다. 같은 거래소 계정에서 동시에 BTC와 ETH를 조작할 수 있습니다. 동일한 거래소에서 다른 계정에서 BTC와 ETH를 동시에 조작할 수도 있습니다.exchanges행렬을 표현하면, 생성된 리드 디스크의 순서대로exchanges[0]exchanges[1]이 경우, 거래 쌍의 포맷은 다음과 같습니다.BTC_USDTBTC는 거래 통화이며 USDT는 거래 통화입니다.

img

분명히, 우리가 거래하는 거래가 많다면, 이런 방식은 곤란할 수 있습니다. SetCurrency를 사용하여 거래 쌍을 교환하면,exchange.SetCurrency("BTC_USDT")이 순간exchange이 경우,BTC_USDT다음 통화로 거래 쌍을 변경할 때까지 유효합니다.참고로, 현재 트랜스페이지를 지원하는 최신 테스트는아래는 구체적인 예입니다.

var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"] var buyValue = 1000 function main(){ for(var i=0;i<symbols.length;i++){ exchange.SetCurrency(symbols[i]) var ticker = exchange.GetTicker() var amount = _N(buyValue/ticker.Sell, 3) exchange.Buy(ticker.Sell, amount) Sleep(1000) } }

공개된 인터페이스를 통해

앞서 예시한 바와 같이, 상장 인터페이스는 일반적으로 공개된 인터페이스이며, 누구나 이용할 수 있다. 일반적인 상장 인터페이스는 다음과 같다: 상장 티커를 얻을 수 있다, 깊이 깊이를 얻을 수 있다, K라인 레코드를 얻을 수 있다, 거래 기록을 얻을 수 있다. 상장 은 거래 판단을 위한 전략의 기초이다. 아래에서 하나씩 소개할 것이며, 디버팅 도구에서 직접 시도하는 것이 좋습니다. 자세한 설명은 API 문서를 참조할 수 있다.

모든 인터페이스는Info필드, 거래소에서 반환된 원본 데이터 문자열을 나타내는 필드, JavaScript를 사용하여 이전에 분석해야 할 추가 정보를 보완할 수 있습니다.JSON.parse()파이썬은 json 라이브러리를 사용합니다.Time이 필드는 요청의 시간대를 나타내고, 지연을 판단하는데 사용될 수 있다.

리얼 디스크에서 API 인터페이스를 사용하는 경우에도 접속 실패로 돌아오는 경우도 있습니다.null파이썬이 돌아왔습니다.None, 이 자료를 사용할 때 오류가 발생하고 하드 디스크가 멈출 수 있으므로 오류 용기는 매우 중요합니다. 이 튜토리얼에서는 별도로 설명한다.

GetTicker

시장의 현재 행보를 얻는 것은 아마도 가장 일반적으로 사용되는 인터페이스이며, 마지막 거래 가격, 매매 가격, 최근 거래량 등의 정보를 확인할 수 있다. 주문하기 전에 거래 가격을 확인하기 위해 틱러 정보를 사용할 수 있다.{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}

function main() { var ticker = exchange.GetTicker() Log(ticker) //在调试工具中 return ticker 。可以看到具体的结果。 Log('上次成交价: ',ticker.Last, '买一价: ', ticker.Buy) }

GetDepth

挂单深度信息获取. 挂单深度信息获取.GetTicker에는 매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매매

{ "Info":null, "Asks":[ {"Price":5866.38,"Amount":0.068644}, {"Price":5866.39,"Amount":0.263985}, ...... ] "Bids":[ {"Price":5865.13,"Amount":0.001898}, {"Price":5865,"Amount":0.085575}, ...... ], "Time":1530241857399 }

예를 들어, Deep Access의 경우:

function main() { var depth = exchange.GetDepth() Log('买一价个: ', depth.Bids[0].Price, '卖一价格: ', depth.Asks[0].Price) }

GetRecords

가장 많이 사용되는 인터페이스 중 하나인 K 라인을 가져와 여러 지표의 기초를 계산하기 위해 한 번에 더 긴 가격 정보를 반환할 수 있습니다. K 라인 주기는 지정하지 않으면 실 디스크를 추가할 때 사용할 기본 주기를 나타냅니다. K 라인 길이는 지정할 수 없으며, 시간이 축적됨에 따라 계속 증가합니다. 최대 2000 루트, 처음 호출 된 약 200 루트 (다양한 거래소에서 반환됩니다). 마지막 K 라인은 최신의 K 라인입니다.

**exchange.SetMaxBarLen(Len)처음 K선 수를 설정할 수 있으며, 최대 K선 수를 설정한다.**예를 들어:exchange.SetMaxBarLen(500)

GetRecords는 다음과 같은 기간을 지정할 수 있습니다: PERIOD_M1:1 분, PERIOD_M5:5 분, PERIOD_M15:15 분, PERIOD_M30:30 분, PERIOD_H1:1 시간, PERIOD_D1:1 일.exchange.GetRecords(PERIOD_M1)최신 호스트를 업그레이드한 후, 사용자 정의 주기를 지원하고, 주기 수초를 직접 전송하여, 1분 K선에 따라 1분 이하의 K선에 따라 GetTrades () 을 통해 합성하고, 상품 선물은 tick에 따라 합성됩니다.이 강좌에서 비슷한 것을 발견할 수 있습니다.PERIOD_M1이러한 전체 대문자 변수는 FMZ의 기본 범용 변수이며, 관심있는 사람들은 직접 사용할 수 있는 특정 값을 직접 로그할 수 있다.

데이터 복귀 예시:

[ {"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432}, {"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935}, {"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361}, ...... ]

K 선의 예시:

function main(){ var close = [] var records = exchange.GetRecords(PERIOD_H1) Log('total bars: ', records.length) for(var i=0;i<records.length;i++){ close.push(records[i].Close) } return close }

GetTrades

특정 시간 범위에 대한 거래 데이터를 취득하기 (자기 거래 데이터가 아닌), 일부 거래소는 지원하지 않습니다. 비교적 드물게 사용되며, API 문서에서 자세한 내용을 확인할 수 있습니다.

거래할 수 있는 계정을 가져오기

이러한 인터페이스는 계정과 관련되어 있기 때문에 직접적으로 액세스할 수 없으며 API-KEY 서명이 필요합니다. FMZ 플랫폼은 백그라운드 통합 자동 처리가 되어서 직접 사용할 수 있습니다.

GetAccount에서 계정을 가져오기

계정 정보를 얻는다. 가장 많이 사용되는 인터페이스 중 하나이며, 예약을 하기 전에 호출해야 합니다. 잔액이 부족하지 않도록 하기 위해.{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}。 이 중 Stocks는 거래 부리의 거래 통화 사용 가능한 잔액, FrozenStocks는 미완성 주문의 냉동 잔액, Balance는 계산 통화의 사용 가능한 잔액, FrozenBalance는 냉동 잔액이다.BTC_USDT주식은 BTC를 의미하고, 잔액은 USDT를 의미한다.

참고로, 반환된 결과는 지정된 거래쌍의 결과이며, 거래 계좌의 다른 통화에 대한 정보는 Info 필드에 있으며, 여러 거래쌍을 조작하는 것은 여러 번 호출할 필요가 없습니다.

현재 거래된 쌍의 총 가치를 보여주는 디스크:

function main(){ while(true){ var ticker = exchange.GetTicker() var account = exchange.GetAccount() var price = ticker.Buy var stocks = account.Stocks + account.FrozenStocks var balance = account.Balance + account.FrozenBalance var value = stocks*price + balance Log('Account value is: ', value) LogProfit(value) Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed //when run in debug tool, add a break here } }

Buy에서 구매

아래의 요금. 호출 방법은 다음과 같습니다.exchange.Buy(Price, Amount)또는exchange.Buy(Price, Amount, Msg),Price는 가격, Amount는 수량,Msg는 추가 문자열로 리드 디스크 로그에 표시될 수 있습니다. 이 방법은 주문을 올리는 방식입니다. 즉시 완전히 거래되지 않으면 미완성 주문이 생성됩니다. 주문은 성공적으로 주문 id로 반환되며, 실패하면 주문 id로 반환됩니다.null, 주문 상태를 확인하기 위해 <unk>

만약 하향 가격으로 구매할 경우, Price는 -1, Amount는 하향 가격으로 구매할 수 있습니다.exchange.Buy(-1, 0.5)거래가 맞습니다.ETH_BTC일부 거래소에서는 시가 표를 지원하지 않으며, 선물 반추도 지원하지 않습니다.

일부 거래 모든 가격과 수량 정확도 요구 사항, 사용할 수 있습니다_N()정밀 함수를 제어한다. 선물 거래에 대한 추가적인 의미가 있다.

가격에 도달했을 때 구매한 예는:

function main(){ while(true){ var ticker = exchange.GetTicker() var price = ticker.Sell if(price >= 7000){ exchange.Buy(_N(price+5,2), 1, 'BTC-USDT') break } Sleep(3000)//Sleep 3000ms } Log('done') }

팔고 팔아

하부매매요소 △ 매수요소 △ 매수요소 △ 매수요소 △ 매수요소 △ 매수요소exchange.Sell(-1, 0.2), 0.2 ETH를 판매하는 것을 의미합니다.

GetOrder에서 주문을 받아

주문 id에 따라 주문 정보를 얻는다. 일반적인 인터페이스, 호출 방법exchange.GetOrder(OrderId),OrderId은 주문 ID이며, 주문할 때 반환됩니다.**주문 유형에 주의하십시오Type필드 및 주문 상태Status실제 값은 숫자이며, 다른 의미를 나타내지만 기억에 좋지 않습니다. FMZ는 미완성 주문의 경우와 같이 전 세계 상수를 사용하여 이러한 값을 나타냅니다.Status0과 같습니다.ORDER_STATE_PENDING이 모든 범지구 상수는 문서에서 확인할 수 있습니다.**ᄂ) 결과를 반환합니다.

{ "Id":125723661, //订单id "Amount":0.01, //订单数量 "Price":7000, //订单价格 "DealAmount":0, //已成交数量 "AvgPrice":0, //成交均价 "Status":0, // 0:未完全成交, 1:已成交, 2:已撤单 "Type":1,// 订单类型,0:买单, 1:卖单 "ContractType":"",//合约类型,用于期货交易 "Info":{} //交易所返回原始信息 } }

특정 양의 동전을 구매하는 전략:

function main(){ while(true){ var amount = exchange.GetAccount().Stocks var ticker = exchange.GetTicker() var id = null if(5-amount>0.01){ id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2)) }else{ Log('Job completed') return //return the main function, bot will stop } Sleep(3000) //Sleep 3000ms if(id){ var status = exchange.GetOrder(id).Status if(status == 0){ //这里也可以用 status == ORDER_STATE_PENDING 来判断。 exchange.CancelOrder(id) } } } }

GetOrders에서 주문이 완료되지 않았습니다.

현재 거래된 모든 미완성 주문에 대한 목록을 가져옵니다. 미완성 주문이 없으면 빈 배열을 반환합니다. GetOrder와 같은 주문 목록에 대한 구체적인 결과

모든 주문에 대한 현재 거래를 취소하는 예시:

function CancelAll(){ var orders = exchange.GetOrders() for(var i=0;i<orders.length;i++){ exchange.CancelOrder(orders[i].Id) // cancel order by orderID } } function main(){ CancelAll() while(true){ //do something Sleep(10000) } }

CancelOrder 철회

주문에 따라 주문을 취소한다.exchange.CancelOrder(OrderId)○ 취소 성공 반환 true, 그렇지 않으면 반환 false ○ 주의 주문이 완전히 거래 된 경우 취소 실패

선물과 영구 계약

디지털 화폐 선물 거래와 현금 거래는 약간 다릅니다. 위의 현금 거래의 기능은 또한 선물, 단기 거래에 고유한 기능이 있습니다. 디지털 화폐 선물 절차 거래를 수행하기 전에 웹 사이트에서 수작업에 익숙해져야하며, 포지션 개시, 경감, 전 포지, 경감, 레버리지, 경감 손실, 부동 수익, 보증금 등의 개념과 그에 따른 계산 공식과 같은 기본 개념을 이해해야합니다. 각 선물 거래소에서 관련 튜토리얼을 찾을 수 있으며, 스스로 학습해야합니다.

영구 계약은 선물 계약과 유사하지만 동시에 다공백을 보유하는 개념이 없습니다.

거래소가 OKEX 및 Huobi 선물과 같은 선물 현금을 동시에 지원하는 경우, 거래소 인터페이스에서 OKEX 선물 칸과 Huobi 선물 칸을 개별적으로 선택하여 FMZ에서 현금과 다른 거래소로 간주해야합니다.

SetContractType 계약 설정

선물 거래의 첫 번째 단계는 거래하고자하는 계약을 설정하는 것입니다. OKEX 선물은 실盘 또는 회수기를 만들 때 BTC 거래 쌍을 선택합니다. 또한 코드에 해당 주, 다음 주 또는 분기 계약이 설정되어야합니다. 설정하지 않으면 요청됩니다.invalid contract type。**현금 거래 쌍과 달리, 선물 계약은 거래 거래 통화인 BTC와 같이 보장을 한다. 거래 쌍은 BTC를 추가하는 BTC_USD 거래 쌍을 일반적으로 나타냅니다. USDT로 보장을 하는 미래가 존재한다면, BTC_USDT 거래 쌍을 추가하는 실시판을 만들 필요가 있다.**거래 쌍을 설정한 후, 영구, 주, 다음 주 등과 같은 특정 계약 유형을 설정해야합니다. 계약을 설정한 후, 거래, 구매 및 기타 작업을 수행 할 수 있습니다.

비트코인, OKEX, HuobiDM 등은 코인 기반 및 USDT 기반의 계약이 존재하며, 실디 디스크 설정 계약을 추가할 때 구분할 필요가 있다. 구체적인 설정은 다음과 같다.

//OKEX期货 exchange.SetContractType("swap") // 设置为永续合约 exchange.SetContractType("this_week") // 设置为当周合约 exchange.SetContractType("next_week") // 设置为次周合约 exchange.SetContractType("quarter") // 设置为季度合约 //HuobiDM exchange.SetContractType("this_week") // 设置为当周合约 exchange.SetContractType("next_week") // 设置为次周合约 exchange.SetContractType("quarter") // 设置为季度合约 exchange.SetContractType("swap") // 设置为永续合约 //币安期货 exchange.SetContractType("swap") // 设置为永续合约,注意币本位和USDT本位都存在永续 exchange.SetContractType("quarter") // 设置为当季合约 exchange.SetContractType("next_quarter") // 设置为次季合约 //BitMEX exchange.SetContractType("XBTUSD") // 设置为永续合约 exchange.SetContractType("XBTM19") // 具体某个时间结算的合约,详情登录BitMEX查询各个合约代码 //GateIO exchange.SetContractType("swap") // 设置为永续合约,不设置默认为swap永续合约。 //Deribit exchange.SetContractType("BTC-27APR18") // 具体某个时间结算的合约,详情参看Deribit官网。

GetPosition 포지션

현재 포지션 정보 목록을 가져오기 위해, OKEX(OKCOIN) 선물은 얻을 수 있는 계약 유형을 지정하는 파라미터를 전송할 수 있습니다. 포지션이 없으면 빈 목록을 반환합니다.[]│ 보유정보는 다음과 같이 반환됩니다. 구체적인 정보는 많고, 거래에 대한 구체적인 분석과 결합해야 합니다.

데이터 타입변수 이름설명하다

"Object HDI Info HDI 거래소에서 반환된 원시 구조"
"number", "MarginLevel", "bar size", "OKCoin"은 10 또는 20, "OK Futures"의 "full stocks" 모드는 "fixed 10"로 반환됩니다.
"number"은 "Amount"을 뜻하며, "OKCoin"은 "계약의 양"을 뜻합니다.
"FrozenAmount" "FrozenAmount" "FrozenAmount" "FrozenAmount" "FrozenAmount"
<unk>버 <unk>프라이스 <unk>더 지주 평균 가격
<unk>버 Margin Margin Margin
<unk>number <unk>Profit <unk>상품 선물: 지분<unk>시장 손실, 디지털 통화: ((디지털 통화 단위:BTC/LTC, 전통적인 선물 단위:RMB, 참고: OKCoin 선물 전仓 상태에서 흑자를 달성하는 것을 가리키고, 지분<unk>손실이 아닌 지분<unk>손실을 가리키고)
▲const DATAType DATAPD_LONG는 다수 상위 포지션 (((CTP에서 closebuy_today 평면), PD_SHORT는 공백 포지션 (((CTP에서 closesell_today 평면), (CTP 선물에서) PD_LONG_YD는 어제 다수 상위 포지션 (((closebuy 평면), PD_SHORT_YD는 어제 공백 포지션 (((closesell 평면)
String arrayContractType 상품은 계약 코드, 주식은 거래소 코드_ 주식 코드 <unk>, 특정 매개 변수 SetContractType의 전송 타입

function main(){ exchange.SetContractType("this_week"); var position = exchange.GetPosition(); if(position.length>0){ //特别要注意引用前要先判断position长度再引用,否则会出错 Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType) } }

미래에셋 거래

먼저 레버 크기와 호출 방법을 설정해야 합니다.exchange.SetMarginLevel(10)10은 10배의 레버리지를 의미하며, 레버리지를 지원하는 크기는 해당 거래소에서 확인하고, 10은 10배의 레버리지를 의미합니다.**참고: 레버리지는 거래소에서 설정되어야 합니다. 코드는 거래소에서 설정된 것과 일치해야 합니다. 그렇지 않으면 오류가 발생합니다.**│ 또는 설정하지 않고도, 기본 레버를 사용한다.
다음으로 거래 방향을 설정하고, 호출 방법을 설정합니다.exchange.SetDirection(Direction) "이런 일이 벌어진다면, 우리가 어떻게 해야 할까요?"**선물과 달리, 영구 계약이 동시에 다공개 개념을 보유하지 않으면, 즉 단일 포지션을 보유하는 것은 허용되지 않으며, 다공개하면 자동으로 다공개가 이루어지며, 모든 것은 단지 설정해야합니다.buy그리고sell가능. 양방향 포지션을 지원하는 경우 설정이 필요합니다.closebuy,closebuy。**특정 관계:

작동SetDirection의 변수하향 함수
상장 개설exchange.SetDirection("buy")exchange.Buy()
평다보상exchange.SetDirection("closebuy")exchange.Sell()
공백점exchange.SetDirection("sell")exchange.Sell()
공백exchange.SetDirection("closesell")exchange.Buy()

마지막으로 구체적인 개시 및 매각 코드가 있으며, 하차 주문량은 거래소마다 다릅니다. 예를 들어 huobi 선물은 수표에 따라 한 장은 100달러이다. 선물 재검토는 시장 가격을 지지하지 않는다.

function main(){ exchange.SetContractType("this_week") // 举例设置 为OKEX期货 当周合约 price = exchange.GetTicker().Last exchange.SetMarginLevel(10) //设置杠杆为10倍 exchange.SetDirection("buy") //设置下单类型为做多 exchange.Buy(price+10, 20) // 合约数量为20下单 pos = exchange.GetPosition() Log(pos) Log(exchange.GetOrders()) //查看是否有未成交订单 exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell") exchange.Sell(price-10, 20) }

아래는 전체 평점 전략의 구체적인 예입니다.

function main(){ while(true){ var pos = exchange.GetPosition() var ticker = exchange.GetTicekr() if(!ticker){ Log('无法获取ticker') return } if(!pos || pos.length == 0 ){ Log('已无持仓') return } for(var i=0;i<pos.length;i++){ if(pos[i].Type == PD_LONG){ exchange.SetContractType(pos[i].ContractType) exchange.SetDirection('closebuy') exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount) } if(pos[i].Type == PD_SHORT){ exchange.SetContractType(pos[i].ContractType) exchange.SetDirection('closesell') exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount) } } var orders = exchange.Getorders() Sleep(500) for(var j=0;j<orders.length;j++){ if(orders[i].Status == ORDER_STATE_PENDING){ exchange.CancelOrder(orders[i].Id) } } } }

디지털 통화 레버리지 거래

코드에서 레버리지 계정으로 전환해야 합니다. 다른 것은 현금 거래와 동일합니다.

exchange.IO (("trade_margin") 를 사용하여 계정 모드로 전환하면 계정 자산의 주문 및 취득은 거래소의 레버리지 인터페이스를 방문합니다.
exchange.IO (("trade_normal") 를 사용하여 일반 계정 모드로 다시 전환하십시오.

지원하는 거래소:

  • OKEX V3: 레버리드 계정 모드의 거래 쌍은 일반적인 것과 다릅니다. 일부 거래 쌍은 그렇지 않을 수 있습니다.
  • 비트코인: 레버리지 계정 모델의 거래 쌍은 일반 거래 쌍과 다릅니다. 일부 거래 쌍은 그렇지 않을 수 있습니다.
  • ZB: 자금이 QC로만 이동할 수 있으며, 레버드 거래 부문, 서로 다른 거래 쌍 사이의 자금 독립, 즉 ETH_QC 거래 쌍의 QC 코인 수, BTC_QC에서 볼 수 없습니다.
  • FCoin
  • 바이낸스 (Binance)

상품 선물 거래

상품 선물 거래와 디지털 화폐 선물 거래에는 큰 차이가 있다. 첫째, 상품 선물의 거래 시간은 짧고, 디지털 화폐는 24시간 거래한다. 상품 선물의 협약도 일반적으로 사용되는 REST API가 아니다. 상품 선물의 거래 주파수 및 기금 수 제한은 디지털 화폐는 매우 느슨하다. 따라서 거래 상품 선물에는 특별한 주의가 필요한 많은 부분이 있으며, 풍부한 조작 수동 조작 경험이 권장된다. FMZ는 simnow 상품 선물 시뮬레이션 디스크를 지원한다. 참조: https://www.fmz.com/bbs-topic/325 。 상품 선물 회사는 추가: https://www.fmz.com/bbs-topic/371

상품 선물과 2019년 6월 개설된 개인 개인 사용자에 필요한 개설된 선물 거래자 신청 허가 코드 ((특정 신청 필요한 자료 템플릿은 위키백과 또는 QQ 그룹에서 알릴 수 있습니다), 일반적으로 4-5일 정도 걸리고, 단계가 다소 번거롭습니다. FMZ 양적 플랫폼은 각 선물 서비스 제공자에게 소프트웨어 라이선스를 신청한 프로그램 거래 업체로서, 사용자가 직접 신청할 필요 없이 사용할 수 있으며, 추가된 선물 거래자는 탐색 <unk>을 통해 FMZ가 이미 신청한 목록을 볼 수 있습니다. 구체적인 참고 게시물: https://www.fmz.com/bbs-topic/3860 。 귀하의 선물 공급자가 목록에 없거나 자체로 신청하거나 거래 개설자를 다시 지원하는 경우 일반적으로 2일 정도 걸립니다. FMZ와 일부 거래자가 깊은 협력 관계를 맺고있는 경우, 예를 들어, 안토 앙타이 주, FMZ의 상품 구매 기관은 FMZ의 플랫폼을 사용하며, 사용자가 자동으로 개설 할 수 있습니다.

FMZ 플랫폼 아키텍처의 장점으로 인해 사용자는 또한 여러 개의 선물 거래자 계정을 추가 할 수 있으며, 다른 상품 선물 프로그래밍 거래 소프트웨어가 수행 할 수없는 기능을 구현 할 수 있습니다. 예를 들어, 고주파 틱의 합성, 참조: https://www.fmz.com/bbs-topic/1184

정책 프레임워크

우선, 24시간 거래가 아닌 로그인 작업이 필요하기 때문에 거래하기 전에 링크 상태를 판단해야 합니다.exchange.IO("status")~을 위한true연결된 거래소 ᅳ 로그인 성공하지 않은 경우 API를 호출하고 'not login'을 요청하지 않습니다. 전략 시작 후 Sleep ((2000), 로그인 일정 시간을 부여할 수 있습니다. 가입을 다시 시도할 수도 있습니다._C(exchange.SetContractType,"MA888")이 사진은 "미국 항공사"의 사진입니다.

상품 선물의 취득 및 거래 코드는 디지털 화폐 선물과 동일하며, 여기서 다른 점과 주의해야 할 사항에 대해 소개한다.

function main(){ _C(exchange.SetContractType,"MA888") //没登陆成功是无法订阅合约的,最好重试一下 while(true){ if(exchange.IO("status")){ var ticker = exchange.GetTicker() Log("MA888 ticker:", ticker) LogStatus(_D(), "已经连接CTP !")//_D获取事件 } else { LogStatus(_D(), "未连接CTP !") Sleep(1000) } } }

상품의 미래형 창고 거래를 사용하는 것이 좋습니다 (이후 설명), 이 때 코드는 매우 간단하여 번거로운 세부 사항을 처리 할 필요가 없습니다. 源代码复制地址:https://www.fmz.com/strategy/57029

function main() { // 使用了商品期货类库的CTA策略框架 $.CTA(Symbols, function(st) { var r = st.records var mp = st.position.amount var symbol = st.symbol /* r为K线, mp为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则不持仓, symbol指品种名称 返回值如为n: n = 0 : 指全部平仓(不管当前持多持空) n > 0 : 如果当前持多仓,则加n个多仓, 如果当前为空仓则平n个空仓,如果n大于当前持仓, 则反手开多仓 n < 0 : 如果当前持空仓,则加n个空仓, 如果当前为多仓则平n个多仓,如果-n大于当前持仓, 则反手开空仓 无返回值表示什么也不做 */ if (r.length < SlowPeriod) { return } var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod)); if (mp <= 0 && cross > ConfirmPeriod) { Log(symbol, "金叉周期", cross, "当前持仓", mp); return Lots * (mp < 0 ? 2 : 1) } else if (mp >= 0 && cross < -ConfirmPeriod) { Log(symbol, "死叉周期", cross, "当前持仓", mp); return -Lots * (mp > 0 ? 2 : 1) } }); }

CTP 데이터 취득 모드

상품 선물은 CTP 프로토콜을 사용하며, 모든 거래상황과 주문 거래는 변경된 후에만 통보되며, 주문, 계정, 입장을 조회하는 것은 적극적인 조회입니다. 따라서 이벤트 드라이브의 높은 주파수 전략에 적합합니다. 기본 모드에서 거래상황을 얻는 인터페이스는GetTickerGetDepthGetRecords항상 캐시 된 데이터가 최신 데이터를 얻기 위해 있으며, 데이터가 없으면 데이터가있을 때까지 기다립니다. 따라서 전략은 Sleep을 사용하지 않습니다. 상황이 변경되면, ticker, depth, records는 업데이트됩니다. 이 때 임의의 인터페이스를 호출하면 즉시 반환됩니다. 호출 된 인터페이스 상태는 업데이트 모드를 기다리고 있습니다. 다음 번에 동일한 인터페이스를 호출하면 새로운 데이터가 반환 될 때까지 기다립니다.

만약 당신이 모든 데이터를 얻을 수 있다면, 심지어 오래된 데이터라도, 당신은 즉시 업데이트 모드로 전환할 수 있습니다.exchange.IO("mode", 0)이 때 전략은 이벤트 드라이브로 쓰일 수 없으며, SLeep 이벤트를 추가하여 빠른 죽음의 순환을 피해야 한다. 일부 낮은 주파수 전략은 이 모드를 사용할 수 있으며, 전략 설계는 간단하다.exchange.IO("mode", 1)기본 캐시 모드로 되돌릴 수 있습니다.

단일 계약을 작동 할 때, 기본 모드를 사용할 수 있습니다. 그러나 여러 계약이라면, 계약 중 하나가 업데이트되지 않은 상태가 발생할 수 있으며, 이는 거래 인터페이스를 막고 다른 계약의 거래 상태 업데이트도 얻을 수 없습니다. 이 문제를 해결하려면 즉시 업데이트 모드를 사용할 수 있지만, 고주파 전략을 작성하지 않습니다. 이 때 이벤트 푸시 모드를 사용하여 주문과 거래의 추진을 얻을 수 있습니다.exchange.IO("wait")상품 선물에서 드물게 사용되는 여러 거래소 객체를 추가하면 사용할 수 있습니다.exchange.IO("wait_any")이 때 반환된 인덱스는 반환된 거래소 인덱스를 나타냅니다.

트래픽 틱 변경{Event:"tick", Index:交易所索引(按实盘上交易所添加顺序), Nano:事件纳秒级时间, Symbol:合约名称}
주문을 전송: {Event:"order", Index:交易所索引, Nano:事件纳秒级时间, Order:订单信息(与GetOrder获取一致)}

이 시점에서 전략 구조는 다음과 같이 작성할 수 있습니다.

function on_tick(symbol){ Log("symbol update") exchange.SetContractType(symbol) Log(exchange.GetTicker()) } function on_order(order){ Log("order update", order) } function main(){ while(true){ if(exchange.IO("status")){ //判断链接状态 exchange.IO("mode", 0) _C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。 _C(exchange.SetContractType, "rb888")//订阅rb while(true){ var e = exchange.IO("wait") if(e){ if(e.event == "tick"){ on_tick(e.Symbol) }else if(e.event == "order"){ on_order(e.Order) } } } }else{ Sleep(10*1000) } } }

상품 선물과 디지털 화폐의 차이점

또한, 상품 선물과 디지털 통화 거래소의 차이에 주목하십시오. 예를 들어, GetDepth는 실제로 1 개의 깊이 (~ 5 개의 깊이 요금이 비싸) 만이 있으며, GetTrades는 거래 역사를 얻을 수 없습니다 (~ 포지션 변경에 따라 시뮬레이션되며 실제 거래 기록이 없습니다). 상품 선물에는 오락 제한이 있으며, 오락 할 때, 깊이 판매 한 판매 가격은 오락 가격이며, 주문량은 0이며, 오락 할 때, 구매 한 구매 가격은 오락 가격이며, 주문량은 0입니다.

계약 설정

exchange.IO (("instruments"): 거래소의 모든 계약 목록 {계약 이름: 상세}을 사전 형식으로 반환하고, 실디 디스크만 지원한다.
exchange.IO (("products"): Exchange의 모든 제품 목록을 {상품 이름: 상세} 사전 형식으로 반환합니다.
exchange.IO (("subscribed"): 이미 가입한 상태의 계약을 반환하고, 형식상 동일하며, 실 디스크만 지원한다.

전통적인 CTP의 미래ContractType즉, 계약 ID를 가리키고, 대소문자를 구분한다.exchange.SetContractType("au1506")계약 설정 성공 후 반환 계약의 세부 정보, 예를 들어 최소 한 번 구매한 금액, 수료, 배달 시간 등. 여러 계약에 가입할 때, 첫 번째 가입 요청이 진짜로 보내질 때만, 그 다음에는 코드 수준에서 거래 쌍을 전환할 때만, 시간이 걸리지 않습니다. 주력 연속 계약은 MA888과 같은 코드 888이며, MA000과 같은 연속 지수 계약은 000입니다. 가상 계약 거래는 재측정만 지원하며, 실제 디스크는 취득만 지원합니다.그러나 맥 언어는 주력 계약을 조작할 수 있으며, 프로그램은 자동으로 포지션을 변경합니다. 즉, 비주력 포지션의 포지션을 제거하고 주력 포지션에 새로운 포지션을 열습니다.

로그인이 성공하지 않으면 계약을 설정할 수 없지만 즉시 반환되므로 CTP 로그인이 완료되었다는 것을 알고 _C로 다시 시도할 수 있습니다. 로그인이 성공한 후에는 계약을 다시 설정하는 것은 시간이 오래 걸리지 않으며 실제 네트워크 접속도 발생하지 않습니다.

포지션 개시

SetDirection방향에 대한buy, closebuy, sell, closesell4개의 변수, 상품의 선물이 더 많이 나갑니다.closebuy_today그리고closesell_today"아, 내가 지금 이 상황을 보고 있다.closebuy/closesell평지전 포지션에 대해서는, 단지 지난 주기의 품종을 구분하여 평지오늘평지전 포지션에 영향을 미칠 수 있으므로 우선 평지전 포지션이 필요하다. CTP 전통적인 선물에 대해서는, 제2변수 ?? 1 ?? 또는 ?? 2 ?? 또는 ?? 3 ?? 를 설정할 수 있으며, 각각 투기 ?? , ?? 수리 ?? , ?? 수리 ?? 을 설정할 수 있으며, 암묵적 투기가 설정되지 않는다.구매, 거래, 포지션 획득, 주문 획득, 인출, 계좌 획득과 같은 구체적인 작업은 디지털 화폐 선물 거래와 동일합니다.

작동SetDirection의 변수하향 함수
상장 개설exchange.SetDirection("buy")exchange.Buy()
평다보상exchange.SetDirection("closebuy")exchange.Sell()
공백점exchange.SetDirection("sell")exchange.Sell()
공백exchange.SetDirection("closesell")exchange.Buy()

아래의 예제는 구체적인 평소 위치 함수입니다. 이 예제는 너무 단순하기 때문에, 거래 시간에 있는지, 거래가 완전히 이루어지지 않았는지, 주문을 중고 시험하는 방법, 최대 주문 수량이 얼마나 되는지, 주파수가 너무 높지 않은지, 구체적으로 마이너스 또는 마이너스 등과 같은 일련의 문제를 고려해야합니다. 참고용으로만.**하드 디스크의 가공 저장소는 플랫폼으로 포장 된 클래스 라이브러리를 사용하는 것이 좋습니다. https://www.fmz.com/strategy/12961**ᄒ 클래식 라이브러리 섹션에서 자세한 설명이 있으며, 클래식 라이브러리 소드 코드를 공부하는 것도 좋습니다. ᄒ

function Cover(contractType, amount, slide) { for (var i = 0; i < positions.length; i++) { if (positions[i].ContractType != contractType) { continue; } var depth = _C(e.GetDepth); if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) { exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy"); exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "平今" : "平昨", 'Bid', depth.Bids[0]); } else { exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell"); exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "平今" : "平昨", 'Ask', depth.Asks[0]); } } }

상품 선물 지원 사용자 지정 주문 유형 (실드 디스크 지원, 역측정 지원하지 않음), 후의 <unk> 방식 지정, <unk>에 부착_<unk> 뒤에 있는 것은

exchange.SetDirection("buy_ioc"); exchange.SetDirection("sell_gtd-20170111")

특정 후자는 다음과 같습니다.

  • ioc 즉시 완료, 그렇지 않으면 THOST_FTDC_TC_IOC 취소
  • gfs 이 섹션은 THOST_FTDC_TC_GFS로 유효합니다
  • gfd 당일 유효한 THOST_FTDC_TC_GFD
  • gtd 지정된 날짜 이전에 유효한 THOST_FTDC_TC_GTD
  • gtc 취소 전 유효한 THOST_FTDC_TC_GTC
  • gfa 집합 경매가 유효하다 THOST_FTDC_TC_GFA

이산 인터페이스

상품 선물 거래소에서 기본적으로 열리는 것은 CTP 인터페이스이며, 요청이 있을 경우, 이스천 인터페이스로 바꿀 수 있다. FMZ의 패키징을 통해 호출하는 방법은 동일하다. 차이점은 계정, 주문, 보유는 푸시 모드이기 때문에 관리자가 이 데이터를 로컬로 유지하며, 해당 인터페이스를 호출할 때 즉시 반환되며, 실제로 요청을 발송하지 않는다.

이스케인 프로토콜은 다음과 같이 주문 유형을 사용자 정의합니다.

  • gfd 당일 유효 TAPI_ORDER_TIMEINFORCE_GFD
  • gtc 취소 전 유효하다 TAPI_ORDER_TIMEINFORCE_GTC
  • gtd 지정된 날짜 이전에 유효하다
  • fak 부분 인수, 나머지 부분을 취소 TAPI_ORDER_TIMEINFORCE_FAK
  • ioc 즉시 완료, 그렇지 않으면 취소 TAPI_ORDER_TIMEINFORCE_FAK
  • 포크가 완전히 거래하지 못해서 모두 취소 TAPI_ORDER_TIMEINFORCE_FOK

일반적으로 사용되는 글로벌 함수

로그 일기 및 위키미디어 전송

실 디스크 인터페이스의 Log는 문자열 뒤에 @ 문자를 더하면 메시지가 전송 큐에 들어가고, WeChat 또는 telegram을 연결하면 바로 전송된다.Log('推送到微信@')

로그 색상도 사용자 정의할 수 있습니다.Log('这是一个红色字体的日志 #ff0000')#ff0000RGB 색상으로 16배를 나타냅니다.

모든 로그 파일은 호스트의 디렉터리에 있는 실 디스크의 sqlit 데이터베이스 내에 존재하며, 다운로드하여 데이터베이스 소프트웨어를 사용하여 열 수 있으며, 복사하여 백업 복구를 할 수도 있다.

LogProfit 수익을 인쇄합니다

수익을 기록하고, 실 디스크 인터페이스에 수익 곡선을 그리는 것, 실 디스크를 재부팅한 후에도 유지할 수 있다.LogProfit(1000)주의하세요.LogProfit이 값은 반드시 수익이 아니라, 어떤 숫자일 수 있고, 스스로 작성해야 한다.

LogStatus 상태<unk> 표시 (표 포함)

레지드 디스크 상태, 로그 기록이 저장되고 계속 갱신되기 때문에, 저장되지 않은 정보만 표시해야 하는 경우,LogStatus기능.LogStatus<unk>의 arguments는 문자열이며, <unk>의 정보를 표현하는 데에도 사용될 수 있다.

구체적인 디스크 상태 위치를 보여주는 표의 예시:

var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}; LogStatus('`' + JSON.stringify(table) + '`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格) LogStatus('第一行消息\n`' + JSON.stringify(table) + '`\n第三行消息'); // 表格信息也可以在多行中出现 LogStatus('`' + JSON.stringify([table, table]) + '`'); // 支持多个表格同时显示, 将以TAB显示到一组里 LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n'); // 上下排列显示多个表

수면

이 변수는 밀리초수입니다.Sleep(1000)휴면 1초. 거래의 모든 접근 빈도 제한으로 인해, 일반적인 전략은 죽은 순환에 휴면 시간을 추가한다.

_G 데이터 저장

하드 디스크가 다시 시작되면 프로그램이 다시 시작됩니다._GJSON 서열화된 내용을 저장할 수 있는 매우 편리하고 실용적인 방법입니다._G함수는onexit()이 방법은 전략이 종료될 때마다 필요한 정보를 자동으로 저장합니다.
그리고, 만약 여러분이 더 많은 포맷된 데이터를 저장하고 싶다면,_G 함수는 잘 쓰이지 않는데, 파이썬을 사용하여 데이터베이스에 직접 쓸 수 있다.

function onexit(){ _G('profit', profit) } function main(){ _G("num", 1); // 设置一个全局变量num, 值为1 s _G("num", "ok"); // 更改一个全局变量num, 值为字符串ok _G("num", null); // 删除全局变量 num _G("num"); // 返回全局变量num的值,如果不存在返回null var profit = 0 if(_G('profit')){ profit = _G('profit') } }

_N 정확 함수

주문을 할 때 가격과 수량의 정확성을 제어하는 경우가 많으며, FMZ는 소수점의 소수를 저장하는 FMZ_N 함수를 내장하고 있습니다._N(4.253,2)4.25이 됩니다.

_C: 자동 재시험

모든 API에 접속할 때 성공할 수 있다는 보장은 없습니다._C는 자동으로 다시 시도하는 함수이다. () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()_C(exchange.GetTicker), 기본 재시험 간격은 3초이며, 재시험 간격을 제어하기 위해_CDelay 함수를 호출할 수 있습니다. 예를 들어,_CDelay(1000).GetTicker(),exchange.GetDepth,GetTrade,GetRecords,GetAccount,GetOrders, GetOrderC++에서는 C++를 C++에서 C++에서 C++에서 C++에서 C++에서 C++에서 C++에서

CancelOrder_C 함수를 사용할 수 없습니다, 왜냐하면 철회 실패는 여러 가지 이유가 있기 때문에, 한 단자가 거래 된 경우, 철회 함수는 다시 실패로 돌아옵니다. _C 함수를 사용하면 계속 다시 시도 될 수 있습니다.

_C 함수는 또한 C 함수에도 사용될 수 있다.

function main(){ var ticker = _C(exchange.GetTicker) var depth = _C(exchange.GetDepth) var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数 }

_D 날짜 함수

직접 호출_D()현재 시간 문자열을 반환합니다.2019-08-15 03:46:14ᄒ 만약 재검토 중 호출되면 재검토 시간을 반환한다. ᄂ은 _D 함수를 사용하여 시간을 판단할 수 있다. _D().slice(11) > '09:00:00':

_D(timestamp,fmt),ms 시간<unk>을 시간 문자열로 변환합니다._D(1565855310002)fmt은 시간 포맷입니다.yyyy-MM-dd hh:mm:ss

TA 지표 함수

일부 일반적인 지표 함수, 예를 들어 MA\MACD\KDJ\BOLL와 같은 일반적인 지표는 FMZ 플랫폼에 직접 내장되어 있으며, 구체적인 지원 지표는 API 문서를 참조하십시오.

지표 함수를 사용하기 전에 K 선의 길이를 판단하는 것이 좋습니다. K 선의 길이가 계산에 필요한 주기를 충족하지 못할 때, 결과는null。 입력된 K선 길이가 100이고 MA의 주기율이 10인 경우, 처음 9개의 값은 모두 null이고, 뒤로는 정상으로 계산한다。

자바스크립트는 3rd-party 라이브러리로서 완전한 talib를 지원합니다.talib.CCI(records)참고: http://ta-lib.org/function.html 。 파이썬은 자체적으로 talib 라이브러리를 설치할 수 있으며, 컴파일 필요성 때문에 pip을 사용하여 간단하게 설치할 수 없으며, 자체적으로 설치 방법을 검색할 수 있다.

지표 함수는 K선 데이터로 전송하는 것 외에도 임의의 배열로 전송할 수 있다.

function main(){ var records = exchange.GetRecords(PERIOD_M30) if (records && records.length > 9) { var ma = TA.MA(records, 14) Log(ma) } }

자바스크립트 함수

여기서는 실 디스크에서 자주 사용되는 자바스크립트 함수들을 소개합니다.

  • Date.now()현재 시간대에 돌아가
  • parseFloat()문자열을 숫자로 변환합니다.parseFloat("123.21")
  • parseInt()문자열을 정수로 변환합니다.
  • num.toString()숫자를 문자열로, num를 숫자 변수로 변환합니다.
  • JSON.parse()Json 문자열을 포맷합니다.JSON.parse(exchange.GetRawJSON())
  • 자바스크립트 자체 Math 라이브러리 함수는 다음과 같습니다.Math.max(),Math.abs()다른 일반적인 수학 연산, 참조: https://www.w3school.com.cn/jsref/jsref_obj_math.asp
  • FMZ에서 인용한 JavaScript 제3자 math 라이브러리, 참조: https://mathjs.org/
  • FMZ는 자바스크립트 3rd-party underscore 라이브러리를 참고하여 많은 Js의 번거로운 작업을 용이하게 해줍니다. 참고: https://underscorejs.org/

템플릿 라이브러리

실장 전략 기능을 작성하는 데 고려해야 할 사항은 매우 많습니다. 예를 들어, 5 동전을 구입하는 것과 같은 간단한 기능은 다음과 같습니다. 현재 잔액이 충분합니까? 주문의 가격은 무엇입니까? 정확도는 무엇입니까? 시장을 충격을 피하기 위해 주문을 분할 할 필요가 없습니까? 미완성 주문을 처리하는 방법? 기타 기타 세부 사항. 다른 전략에서 이러한 기능은 동일합니다.

자바스크립트 디지털 통화 거래 클래스 라이브러리와 상품 선물 거래 클래스 라이브러리는 기본으로 내장되어 복제할 필요가 없습니다. 다른 템플릿 클래스 라이브러리는 정책 광장에서 찾을 수 있습니다. 템플릿 클래스 라이브러리를 복제하고 저장하고 자신의 전략을 만들 때 사용하려는 클래스를 선택하면 사용할 수 있습니다.

JavaScript 템플릿 함수는$시작하기 위해, Python는ext시작.

디지털 통화 거래 클래스 백서

소스 코드 주소:https://www.fmz.com/strategy/10989 , 이미 내장되어 있으며 복제할 필요가 없습니다. 특정 함수의 구현 방법은 소스를 직접 참조 할 수 있습니다.

계정을 이용하기:

$.GetAccount(e) Log($.GetAccount()); // 获取账户信息, 带容错功能 Log($.GetAcccount(exchanges[1]));

이 문서는

$.Buy/Sell(e, amount) $.Buy(0.3); // 主交易所买入0.3个币 $.Sell(0.2); // 主交易所卖出0.2个币 $.Sell(exchanges[1], 0.1); // 次交易所卖出0.1个币 $.CancelPendingOrders(e, orderType) $.CancelPendingOrders(); // 取消主交易所所有委托单 $.CancelPendingOrders(ORDER_TYPE_BUY); // 取消主交易所所有的买单 $.CancelPendingOrders(exchanges[1]); // 取消第二个交易所所有订单 $.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // 取消第二个交易所所有的卖单

"이봐요.

$.Cross(periodA, periodB) / $.Cross(arr1, arr2); var n = $.Cross(15, 30); var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6]) 如果 n 等于 0, 指刚好15周期的EMA与30周期的EMA当前价格相等 如果 n 大于 0, 比如 5, 指15周期的EMA上穿了30周期的EMA 5个周期(Bar) 如果 n 小于 0, 比如 -12, 指15周期的EMA下穿了30周期的EMA 12个周期(Bar) 如果传给Cross不是数组, 则函数自动获取K线进行均线计算 如果传给Cross的是数组, 则直接进行比较

$.withdraw(e, currency, address, amount, fee, password) 를 가져오는 함수:

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

상품 선물 거래 클래사비

상품 선물 거래 클래스 라이브러리 사용 안정성, 권장 사용 ᆞ 소스 코드 주소: https://www.fmz.com/strategy/12961 。 이미 내장되어 있으며 복제할 필요가 없습니다 。

CTA 자료관

  • 디스크는 자동으로 주력 연속으로 지수를 매핑합니다.
  • 자동으로 처리됩니다
  • 리포팅은 rb000/rb888 같은 매핑을 지정할 수 있습니다. rb 지수 트랜잭션을 주력 연속으로 매핑하는 것입니다.
  • rb000/MA888 같은 다른 계약에도 매핑할 수 있습니다. rb000/MA888은 rb 지수의 K선을 보고 MA 주력을 연속적으로 거래합니다.
function main() { $.CTA("rb000,M000", function(r, mp) { if (r.length < 20) { return } var emaSlow = TA.EMA(r, 20) var emaFast = TA.EMA(r, 5) var cross = $.Cross(emaFast, emaSlow); if (mp <= 0 && cross > 2) { Log("金叉周期", cross, "当前持仓", mp); return 1 } else if (mp >= 0 && cross < -2) { Log("死叉周期", cross, "当前持仓", mp); return -1 } }); }

클래스 라이브러리 호출 예제

function main() { var p = $.NewPositionManager(); p.OpenShort("MA609", 1); p.OpenShort("MA701", 1); Log(p.GetPosition("MA609", PD_SHORT)); Log(p.GetAccount()); Log(p.Account()); Sleep(60000 * 10); p.CoverAll("MA609"); LogProfit(p.Profit()); Log($.IsTrading("MA609")); // 多品种时使用交易队列来完成非阻塞的交易任务 var q = $.NewTaskQueue(); q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) { Log(task.desc, ret) }) while (true) { // 在空闲时调用poll来完成未完成的任务 q.poll() Sleep(1000) } }

도면 클래스 저장소

원본의 그림 함수는 비교적 복잡하기 때문에, 다음 튜토리얼에서 소개될 예정이며, 초보자는 직접 그림 클래스 라이브러리를 사용하는 것이 좋습니다. 매우 간단한 그림 접기 라인 그래프, K 라인 그래프 등이 있습니다. FMZ는 간단한 클래스 라이브러리를 내장하고 있으며, 정책 편집 페이지에서 볼 수 있으며, 내장되지 않은 경우 사용자가 직접 복사하고 저장한 후 정책에서 참조를 선택해야 합니다.

img

자바스크립트 모형화 지도 도서관 복제 주소: https://www.fmz.com/strategy/27293
파이썬 인쇄 라인 클래스 라이브러리 복제 주소: https://www.fmz.com/strategy/39066

예를 들어:

function main() { while (true) { var ticker = exchange.GetTicker() if (ticker) { $.PlotLine('Last', ticker.Last) //可以同时画两条线,Last是这条线的名字 $.PlotLine('Buy', ticker.Buy) } Sleep(6000) } }

정책 변수 설정

정책 편집 아래에 정책 변수 설정이 있으며, 정책의 글로벌 변수에 해당하며, 코드에서 임의의 위치에 액세스 할 수 있습니다. 정책 변수는 리드 디스크 인터페이스에서 수정할 수 있으며, 재부팅 후 효력을 발휘합니다. 따라서 일부 변수를 매개 변수로 설정할 수 있으며, 정책을 수정하지 않고도 변수를 변경할 수 있습니다.
img

  • 변수 이름위 그림의 number, string, combox 등이 정책 그룹에서 직접 사용할 수 있다.
  • 설명하다: 매개 변수의 이름은 정책 인터페이스에서, 매개 변수의 의미를 이해하기 쉽다.
  • 참고 사항: 매개 변수의 상세한 설명, 이 설명은 마우스가 매개 변수 위에 머무르면 그에 상응하는 것이 표시된다.
  • 유형: 이 변수의 유형은 아래에서 자세히 설명한다.
  • 기본값이 변수의 기본값은:

문자열 타입과 숫자 타입은 이해하기 쉬우며 가장 많이 쓰이는 타입입니다. 아래의 드로브는 선택 가능한 드로브를 표시합니다. 아래의 드로브 SYMBOL 파라미터 값은BTC|USDT|ETH, 매개 변수 페이지에서 USDT를 선택하면, 정책의 SYMBOL 값은 USDT의 인덱스 1이다. 선택 항목은 선택 가능한 상자이며, true로 선택, 그렇지 않으면 false이다.

다른 많은 변수들이 있습니다. https://www.fmz.com/bbs-topic/1306

전략 백테스팅

전략의 정량화를 완료한 후, 전략이 역사 데이터에서 어떻게 수익을 얻었는지 확인하기 위해 전략의 역사 데이터를 사용하여 전략을 테스트 할 수 있습니다. 물론 재검토 결과는 참조로만 제공됩니다. FMZ 정량 플랫폼은 디지털 화폐 현금, 선물, BitMEX 영구 계약, 상품 선물의 재검토를 지원합니다.
자바스크립트 회귀는 브라우저에서 수행되며, 파이썬 회귀는 호스트에서 필요하며, 플랫폼을 사용하여 공용 호스트를 제공할 수 있다. 맥 언어의 회귀는 더 많은 매개 변수가 설정되어야 하며, 구체적인 맥 언어 문서를 참조한다.

반향 메커니즘

onbar 재검토 메커니즘은 K선에 기반하여, 각 K선은 재검토 시간점을 생성하며, 이 시간점에서는 현재 K선의 상가, 거래량 등의 정보를 얻을 수 있으며, 이 시간점 이전의 역사 K선 정보를 얻을 수 있다. 이 메커니즘의 단점은 분명하다: 하나의 K선에서, 오직 한 번의 매매를 생성할 수 있으며, 일반적으로 K선의 종결 가격이다. 그리고 하나의 K선은 오직 네 개의 상가, 가격의 변화까지 얻을 수 있다. 한 줄의 K선 내에서 가격이 어떻게 변하는지, 가장 높은 가격이 먼저 발생하는가, 가장 낮은 가격 또는 먼저 발생하는가 등에 대해서는 아무런 정보가 없다. 1시간 K선을 예로 들면, 실시간 디스크는 확실히 몇 초 간격으로 거래 상황을 얻을 수 있으며, 거래 명령은 디스크에서 발급되기를 기다리지 않고 방출된다.

FMZ 플랫폼 회귀는 아날로그 수준의 회귀와 실 디스크 수준의 회귀를 구분한다. 아날로그 수준의 회귀는 하위 K 라인 주기에 따라 모의적인 tick를 생성한다. 각 하위 K 라인 주기에는 14 개의 회귀 시점이 생성되며,**실제 디스크 수준은 실제 수집된 틱 (tick) 이고, 대략 몇 초에 한 번씩, 현재는 부분적으로 실제 심도를 지원하고 있습니다.**데이터의 양이 많고, 회수 속도가 느리므로, 특별히 긴 시간을 회수할 수 없다. FMZ의 회수 메커니즘은 전략이 하나의 K 라인에서 여러 번 거래할 수 있게 해 주며, 단지 상환 가격 거래만 할 수 있는 상황을 피하고, 더 정확하고 회수 속도를 고려한다. 구체적인 설명은 참고할 수 있다: https://www.fmz.com/digest-topic/4009

리베이트의 전략 프레임워크는 리스크와 동일하며, 모두 죽은 순환이다. 리베이트가 다른 리베이트 지점에서 점프하기 때문에, 이 때 Sleep을 사용하지 않고, 하나의 순환이 끝나면 자동으로 다음 시점으로 점프한다. 그러나 파이썬은 프로그램 메커니즘으로 인해, a를 강제해야 한다.Sleep(10)이 사진의 제목은 "아마도 더 이상 살 수 없다"입니다.

사진 촬영

재검토 엔진은 사용자의 주문 가격과 재검토 시점의 수요 가격을 기준으로 합쳐, 구매 가격이 판매보다 높으면 판매를 위해 거래한다. 거래할 수 없다면, 상장 목록이 생성된다. 거래를 보장하기 위해 슬라이드 포인트를 추가해야 한다. 재검토 때 창고를 열지 못하거나 평평하지 않는 상황이 발생하면, 미처 제공되지 않은 주문으로 인해 포지션이 얼어붙었는지 확인한다.

페이지 설정

img

    1. 재검토 페이지의 선택, 왼쪽은 정책 편집 페이지 <unk>
    1. 재검토 시작 끝 시간, 데이터가 완전하지 않기 때문에 재검토는 데이터가 있는 시간으로부터 바로 시작할 수 있다.
    1. 재검토GetRecords()함수의 기본 주기, 또는 코드에서 주기 변수를 지정할 수 있다.
    1. 피드백 메커니즘의 선택
    1. 표시 또는 숨기기 및 다중 응답 설정.
    1. 최대 로그 수, 수익 데이터 수, 차트 데이터 수 등, 너무 많은 데이터로 인해 브라우저가 막히는 것을 방지하기 위해.
    1. 하층 tick은 K선 주기에 따라 생성된다.
    1. 거래 지점
    1. ERROR TOLERANCE, API 요청 오류를 모방하고, 정책 ERROR TOLERANCE를 검사한다.
    1. 거래 아이콘을 그리는지, 재검토에서 TA 지표 함수를 사용하면 아이콘에 표시되며, 매매도 표시됩니다.
    1. 수수료 설정
    1. 거래소-거래 쌍과 자산을 추가한다.
    1. 재측정 파라미터 설정, 만약 파라미터가 숫자라면 또한 1키 최적화 파라미터를 지원하고, 자동으로 일정 범위에 따라 범위를 거쳐 파라미터 재측정을 한다.

리드 디스크와 반사

    1. 재검토할 때 유효한 행태는 GetTicker와 GetRecords뿐이며, 다른 경우의 깊이와 거래 역사는 모두 사실이 아니다.
    1. 재검토 추가된 거래소는 독립적인 계정이며, 현재 교환 거래 쌍을 지원하지 않습니다. 따라서 하나의 계정에서 두 개의 거래 쌍을 운영할 수 없습니다.
    1. 재검토에서는 네트워크 요청을 사용할 수 없습니다.
    1. 회색은 IO 확장 프로그램을 사용할 수 없으며, 가장 기본적인 API만 작동할 수 있다.
    1. 재검토는 표준 데이터만 얻을 수 있고, Info와 같은 디스크에 연결된 데이터는 존재하지 않는다.
    1. 재검토에서 거래가 되지 않을 수도 있습니다. 주문을 동결하는 경우 주의하십시오.
    1. 상품 선물 재검토는 시장 가격을 지지하지 않는다.

정책의 용납과 일반적인 오류

앞서 언급했듯이, 실 디스크에서 API 인터페이스를 사용해서 접속이 실패하고 돌아오는 경우도 있습니다.null이 경우, 데이터의 사용은 오류가 발생하여 하드 디스크가 정지될 수 있기 때문에, 오류를 용인하는 전략이 필요합니다.

일반적으로 사용되는 오류 용인 방법

일반적인 잘못된 이유:

  • API 접속 네트워크 오류, 인터페이스 접속 오버타임은 null을 반환하고, 이 때 사용은 오류를 보고한다.
  • 거래소 제한 오류는 ip 제한, 주문 정확도, 접속 빈도, 변수 오류, 자산 부족, 시장이 거래할 수 없으며, 완료 된 주문을 취소하는 등과 같습니다. API 문서는 오류 코드에 따라 구체적으로 검색 할 수 있습니다.
  • 거래소는 데이터 오류를 반환하고, 빈 깊이, 지연된 계정 정보, 지연된 주문 상태 등과 같이 가끔 발생합니다.
  • 프로그램 논리 오류.

API를 사용하여 데이터를 반환하기 전에 null인지 여부를 판단해야 합니다. 아래는 집중적으로 사용되는 방법을 소개합니다:

//1.判断为null进行处理 var ticker = exchange.GetTicker(); while(ticker == null){ Log('ticker 获取出错'); ticker = exchange.GetTicker(); } Log(ticker.Last); // 2.判断不为null再进行引用 var ticker = exchange.GetTicker(); if(!ticker){ Log(ticker.Last); } // 3._C()函数重试 var ticker = _C(exchange.GetTicker); Log(ticker.Last); // 4. try catch容错 try{ var ticker = exchange.GetTicker(); Log(ticker.Last); } catch(err){ Log('ticker 获取出错'); }

만약 여러분이 잘못된 정보를 얻으려 한다면GetLastError(),는 마지막 오류 정보 문자열을 반환하여 오류에 대한 차이 처리를 할 수 있습니다.

FAQ

포럼의 제목에는 많은 오류가 있습니다. https://www.fmz.com/bbs-topic/1427 。 여기서는 몇 가지의 오류를 정리하고, Ctrl+F 검색을 하면 다음과 같습니다。

어떻게 보호자를 배치해야 할까요?

"관리자 추가"에서 자세한 내용을 볼 수 있습니다.

"이런 일이 벌어진다면, 어떻게 해야 할까요?"

https://www.fmz.com/markets에 있는 몇몇 사람들은 대행 서비스를 제공하거나 그룹에서 상담을 받습니다.

모든 인터페이스에 접속할 때 타임아웃이 표시됩니다.

즉, 거래소 인터페이스에 접속할 때 오프타임이 발생하면 문제가 되지 않으며, 해당 네트워크에 접속할 수 없다고 계속 표시하면 해외 서버를 사용해야 한다.

ERR_INVALID_POSITION 오류

회수 시스템 보고 오류, 일반적으로 전략으로 작성 오류, 보유가 없거나 보유량이 부족할 때, 순평한 포지션을 시도하면, 이 보고 오류가 발생한다.

symbol not set

퓨처스 거래소 회귀, 코드에 계약이 설정되지 않았습니다. exchange.SetContractType 함수를 참조하십시오.

BITMEX 429 오류, {"error":{"message":"Rate limit exceeded retry in 1 seconds ......"}}

거래소 인터페이스를 이용하는 빈도가 높습니다.

{"status":6004,"msg":"timestamp is out of range"}

서버 타임<unk>이 범위를 초과하면 서버 시간을 업데이트해야 합니다. 너무 크게 편차해서는 안됩니다.

GetOrder(455284455): Error: invalid order id or order cancelled.

일부 거래소에서 주문이 취소되면 거래소는 해당 주문 정보를 유지하지 않고 액세스할 수 없습니다.

GetOrders: 400: {"code":-1121,"msg":"Invalid symbol."}

유효하지 않은 트랜잭션 페어, 트랜잭션 페어 설정 오류인지 확인하세요.

Secret key decrypt failed

API KEY 해독 실패, APIKEY를 구성한 후 FMZ 암호를 수정한 경우 FMZ에 거래소 페이지를 추가하여 거래소 APIKEY를 재설정하십시오.

Signature not valid: Invalid submission time or incorrect time format [유효하지 않은 제출 시간, 또는 시간 형식 오류]

리눅스 서버를 사용하는 것이 좋습니다. 또는 이 문제가 발생하는 윈도우 시스템에서 설치 시간 동기화 소프트웨어를 사용하는 것이 좋습니다.

왜 글로벌 에이전트가 설치되어 관리자가 거래소 API에 접근할 수 없는가?

전 세계 대리인은 대리 호스트 네트워크 포트가 없으며, 지연 문제로 인해 해외 서버를 배포하는 호스트가 좋습니다.

어떻게 하면 FMZ에 올리지 않고 지역으로 저장할 수 있을까요?

파이썬을 사용하면 로컬 파일을 가져와 FMZ의 API에 따라 작성된 정책에 따라 정상적으로 파일로 저장하여 자신의 서버의 실행 경로 아래에 실행을 직접 읽을 수 있습니다.

#!python2.7 def run(runfile): with open(runfile,"r") as f: exec(f.read()) def main(): run('my.py')

거래소 테스트 네트워크를 사용하거나 API 기반 주소를 변경하는 방법

exchange.SetBase () 를 사용하여 해당 API 기반 주소로 직접 전환할 수 있다. 예를 들어:

exchange.SetBase("https://www.okex.me")
Related Recommendations
Comment
All comments (27)

    api

    3 years ago

    如何在本地实现策略运行呢?我写了一个简单的Log输出语句,并且按照文末的操作。
    第一步,先用一台笔记本作为服务器,运行托管者程序;
    第二步,写一个简单的Log输出信息的test.py程序(FMZ 的API接口函数);
    第三步,按文末那样,写个runfile,通过run.py调用test.py运行。 img

    4 years ago

    我买的网易云量化交易课程怎么没了,现在去哪里看

    5 years ago

    谢谢

    5 years ago

    many

    5 years ago

    hi

    5 years ago

    学习ing

    5 years ago

    有一个小的文字错误,GetAccount 获取账户 介绍中,FrozenStocks应该是冻结余额而不是可用余额吧

    5 years ago

    改了

    5 years ago

    有没有做BTB的实盘教程,

    a year ago

    大佬麻烦问下咱们有官方交流群吗?有时候遇到问题不知道该在哪提问

    5 years ago

    加首页微信,拉你入群

    5 years ago

    加我进群,我的实盘执行不起来

    a year ago

    getorder outtime 获取订单超时,okex的交易所,怎么办

    5 years ago

    再次获取

    5 years ago

    担保资产率获取不到吗,到0%会被强制平仓的担保资产率

    5 years ago

    原始信息里有,可以用GetRawJSON或者查看字段里的info信息

    5 years ago

    我是看1分钟k线图操作的,所以Python死循环的sleep time 可以设置为0.1s,也就是sleep(100)吗,我看你其中写过一个sleep(10),也就是0.1s不会超过huobi HM的API限制吗?

    6 years ago

    exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")

    这儿我试了OKex的永续合约,如果设置成 sell,直接开空了,平不是平多

    6 years ago

    exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")

    这儿我试了OKex的永续合约,如果设置成 sell,直接开空了,平不是平多

    6 years ago

    有些永续合约允许双向持仓的,需要设置平仓。我更新一下,原来只有bitmex

    6 years ago

    不错不错,还有管理回复。。我发现代码里好多拼写错误,哈哈

    6 years ago

    GetOrders 的代码里面有两个拼写错误。。。一个是 function写成了 fuction,另一个是for循环的条件里 ; 打成了 ,

    6 years ago

    嗯嗯,已改正,感谢指出错误

    6 years ago

    是我错了。。。
    exchange.Buy(-1, 0.5),交易对是ETH_BTC,市价单代表买入0.5BTC的ETH
    exchange.Buy(price, 0.5),如果是这种限价单,则代表用price的价格买入 0.5ETH

    6 years ago

    exchange.Buy(-1, 0.5),交易对是ETH_BTC,则代表市价买入0.5BTC的ETH

    这里应该是【代表市价买入0.5ETH】

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)