Python バージョンの単一のプラットフォームバランス戦略

作者: リン・ハーンリディア作成日:2022-12-02 21:38:52 更新日:2023-09-20 11:14:48 更新日:2020-09-20 更新日:2021-09-20 更新日:2021-09-20 更新日:2021-09-20 更新日:2021-09-20 更新日:2021-09-20 更新日:2020-09-20 更新日:2020-09-20 更新日:2020-09-20 更新日:2020-09-20 更新日:2020-09-20 更新日:2020-09-20 更新日:2020-09-20

img

JavaScript バージョン

戦略アドレス:https://www.fmz.com/strategy/345

この記事では,簡単なJavaScript戦略の移植を練習しましょう. 戦略移植を通じて,FMZ Quant Trading Platformインターフェイスの呼び出しにより馴染み,プラットフォーム開発戦略における異なる言語間のわずかな違いを理解することができます. 実際,JavaScriptバージョンとPythonバージョンの違いは非常に小さいので,インターフェース呼び出しは基本的に同じです.

戦略の説明

JavaScript 版から引用した記述:

これはポジションを開く必要があります. 例えば,口座に5000元と1つの通貨がある場合,通貨の価値が口座残高5000元よりも大きく,価格差が限界値を超えると,例えば,通貨が現在6000元に相当している場合,通貨が値上げしたことを示す (6000-5000)/6000/2通貨を売却し,お金を戻すことができます.通貨が値下げした場合,例えば4000元,私たちは (5000-4000)/4000/2通貨を購入します.通貨が減少した場合,いくつか購入します.再び上昇した場合,再び販売します.バランスのように,両側には異なるヘッジがありますので,私はそれを均衡戦略と呼んでいます.

戦略の原理は非常にシンプルです. JavaScript バージョンのコードは長くはなく,70行以上しかありません. より簡潔な文法を持つ Python 言語戦略が移植され,コードははるかに短く,初心者学習に非常に適しています. 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

この戦略のパラメータはJavaScriptバージョンと完全に一致しています. 戦略コードも文ごとに移植されています. プログラムの構造は変更されていません. 異なる言語で書かれた戦略を文ごとに比較できます.

バックテスト

パラメータ設定

img

統計

img img

戦略アドレス:https://www.fmz.com/strategy/183374

戦略は参考,学習,バックテストのみです. あなたが興味がある場合は,それを最適化してアップグレードすることができます.


関連性

もっと