파이썬 버전의 단일 플랫폼 균형 전략

저자:리디아, 창작: 2022-12-02 21:38:52, 업데이트: 2023-09-20 11:14:48

img

자바스크립트 버전

전략 주소:https://www.fmz.com/strategy/345

이 기사에서는 간단한 자바스크립트 전략을 포팅하는 연습을 해보자. 전략 포팅을 통해 FMZ 퀀트 트레이딩 플랫폼 인터페이스의 호출에 더 익숙해 질 수 있으며 플랫폼 개발 전략에서 다른 언어들 간의 약간의 차이를 이해할 수 있습니다. 사실, 자바스크립트 버전과 파이썬 버전의 차이점은 인터페이스 호출이 기본적으로 같기 때문에 매우 적습니다.

전략 설명

자바스크립트 버전에서 인용된 설명:

이것은 포지션을 개설하는 것을 요구합니다. 예를 들어, 계정이 5000 위안과 한 화폐를 가지고 있다면, 화폐의 가치가 5000 위안의 계정 잔액보다 크고 가격 차이가 임계 값을 초과하면, 예를 들어, 화폐가 이제 6000 위안의 가치가 있다면, (6000-5000) / 6000/2 화폐를 팔고, 화폐가 상승했다는 것을 나타내고 돈을 다시 변환 할 수 있습니다. 화폐가 하락했다면, 예를 들어, 4000 위안, 우리는 (5000-4000) / 4000/2 화폐를 구입합니다. 화폐가 감소하면, 몇 개를 구입합니다. 다시 상승하면, 다시 판매, 균형과 마찬가지로, 두쪽은 다른 헤지를 가지고 있습니다. 그래서 나는 그것을 균형 전략이라고합니다.

전략의 원리는 매우 간단합니다. 자바스크립트 버전의 코드는 길지 않고 70 줄 이상입니다. 더 간결한 문법과 함께 파이썬 언어 전략이 이식되고 코드는 훨씬 짧으며 초보자 학습에 매우 적합합니다. FMZ 퀀트 트레이딩 플랫폼에서 개발자가 공유하는 코드가 많이 있으며 언어가 지원합니다.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

이 전략의 매개 변수는 자바스크립트 버전과 완전히 일치합니다. 전략 코드는 또한 문장별로 이식됩니다. 프로그램 구조는 변경되지 않았습니다. 당신은 문장별로 다른 언어로 작성 된 전략을 비교할 수 있습니다.

백테스팅

매개 변수 구성

img

통계자료

img img

전략 주소:https://www.fmz.com/strategy/183374

전략은 참조, 학습 및 백 테스트를 위한 것입니다. 당신이 관심이 있다면, 당신은 최적화하고 업그레이드 할 수 있습니다.


관련

더 많은