avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

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

作成日:: 2020-02-05 10:02:03, 更新日:: 2023-10-12 21:20:47
comments   1
hits   2701

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

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

JavaScript バージョン

戦略アドレス: 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コインを売却します。これはコインの価値が上昇したことを意味します。お金を元に戻します。コインの価値が例えば4000元に下落した場合は、(5000-4000)/4000/2を購入します。コインを保有している場合、コインが下がったときにいくらか買い戻し、再び上がったら再び売ります。バランスと同じように、両側に異なるヘッジがあるため、これをバランス戦略と名付けました。

戦略の原理は非常にシンプルで、JavaScript バージョンのコードは長くなく、70 行強しかありません。より簡潔な構文を持つPython言語戦略に移植されたコードは短く、初心者が学習するのに非常に適しています。Inventor Quantitative Trading Platformには開発者によって共有されたコードがたくさんあり、言語はサポートしています。JavaScript/C++/Pythonなど、もう 1 つの開発言語を習得すると、学習、研究、開発戦略に役立つだけでなく、プラットフォームのさまざまな 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版と全く同じです。戦略コードも文ごとに移植されており、プログラム構造は変更されていません。文ごとに比較して、異なる言語で書かれた戦略の違いを確認できます。言語。

バックテスト

パラメータ設定 単一プラットフォーム均衡戦​​略の Python バージョン

統計 単一プラットフォーム均衡戦​​略の Python バージョン

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

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

この戦略は参考、バックテスト、テストのみを目的としています。興味があれば、最適化してアップグレードすることができます。