
전략 주소: https://www.fmz.com/strategy/345
이 글에서는 간단한 JavaScript 전략을 이식하는 연습을 해보겠습니다. 전략을 이식하면 Inventor Quantitative Trading Platform 인터페이스의 호출에 더 익숙해지고 플랫폼에서 전략을 개발할 때 다양한 언어 간의 미묘한 차이점을 이해하게 됩니다. 사실, JavaScript 버전 전략과 Python 버전 간의 차이점은 다음과 같습니다. 인터페이스 호출이 기본적으로 동일하기 때문에 전략이 매우 작습니다.
JavaScript 버전의 지침을 인용하면 다음과 같습니다.
여기에는 포지션을 개설해야 합니다. 예를 들어, 계좌에 5,000위안과 1코인이 있고, 코인의 가치가 계좌 잔액 5,000보다 크고 가격 차이가 임계값을 초과하는 경우, 예를 들어 코인의 가치는 이제 6,000입니다. 위안화로 환산하면 (6,000-5,000)/6,000./2코인으로 환산하면 코인 가격이 상승한 것이므로 원금을 환전하고, 코인 가격이 하락하여 예를 들어 4,000위안이 되면 (5,000-4,000)/4,000/2코인을 매수합니다. 코인을 사고, 코인이 떨어지면 다시 사고, 가격이 다시 오르면 다시 팔아요. 양쪽에 다른 헤지가 있는 저울과 똑같거든요. 그래서 저는 이를 균형 전략이라고 이름 붙였습니다.
전략 원칙은 매우 간단하며, 자바스크립트 버전의 코드도 길지 않아 70줄이 넘습니다. 더 간결한 구문으로 Python 언어 전략으로 이식되어 코드가 더 짧고 초보자가 배우기에 매우 적합합니다. Inventor Quantitative Trading Platform에서 개발자가 공유하는 코드가 많고 언어가 지원합니다.JavaScript/C++/Python등등, 개발 언어를 하나 더 익히는 것은 학습, 연구 및 개발 전략에 도움이 될 뿐 아니라 플랫폼의 다양한 API 인터페이스에 더 익숙해지는 데도 도움이 됩니다.
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
InitAccount = None
def CancelPendingOrders():
ret = False
while True:
orders = _C(exchange.GetOrders)
if len(orders) == 0 :
return ret
for j in range(len(orders)):
exchange.CancelOrder(orders[j].Id)
ret = True
if j < len(orders) - 1:
Sleep(Interval)
return ret
def onTick():
acc = _C(exchange.GetAccount)
ticker = _C(exchange.GetTicker)
spread = ticker.Sell - ticker.Buy
diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
ratio = diffAsset / acc.Balance
LogStatus("ratio:", ratio, _D())
if abs(ratio) < threshold:
return False
if ratio > 0 :
buyPrice = _N(ticker.Sell + spread, ZPrecision)
buyAmount = _N(diffAsset / buyPrice, XPrecision)
if buyAmount < MinStock:
return False
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
else :
sellPrice = _N(ticker.Buy - spread, ZPrecision)
sellAmount = _N(-diffAsset / sellPrice, XPrecision)
if sellAmount < MinStock:
return False
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
return True
def main():
global InitAccount, LoopInterval
InitAccount = _C(exchange.GetAccount)
LoopInterval = max(LoopInterval, 1)
while True:
if onTick():
Sleep(1000)
CancelPendingOrders()
Log(_C(exchange.GetAccount))
Sleep(LoopInterval * 1000)
코드는 다음으로 시작합니다
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
백테스트 구성이란, 백테스트 구성(설정)이 코드 형태로 저장되고, 백테스트는 이 설정에 따라 자동으로 구성된다는 것을 의미합니다. 이 부분은 삭제할 수 있습니다. 삭제하는 경우 백테스트 중에 백테스트 페이지에서 백테스트 구성 정보를 수동으로 설정해야 합니다. 참고: https://www.fmz.com/bbs-topic/859
이 전략의 매개변수는 JavaScript 버전의 매개변수와 정확히 동일합니다. 전략 코드도 문장별로 이식되었으며 프로그램 구조는 변경되지 않았습니다. 문장별로 비교하여 다른 언어로 작성된 전략 간의 차이점을 확인할 수 있습니다. 언어.
매개변수 구성

통계


전략 주소: https://www.fmz.com/strategy/183374
이 전략은 참조용, 백테스팅 및 테스트용일 뿐입니다. 관심이 있다면 최적화하고 업그레이드할 수 있습니다.