0
フォロー
78
フォロワー

Python を使用した価格モメンタム分析のための定量的取引戦略の実装

作成日:: 2019-08-09 15:49:06, 更新日:: 2024-12-19 21:03:15
comments   1
hits   3521

Python を使用した価格モメンタム分析のための定量的取引戦略の実装

価格モメンタム取引戦略の紹介

モメンタム取引戦略は、一定期間内の始値、最高値、最低値の関係を通じてロングとショートの勢力の比較を分析し、現在の市場におけるロングとショートの勢力の分布を間接的に把握します。価格変動を分析して将来の価格動向を追跡します。

価格モメンタム分析は、従来の手動取引、特に日中の一方的なトレンドを判断する際に広く使用されています。トレンドはどうなっているのか、というのはよくある話題です。トレンドを定量化する最良の方法は、ロングとショート両方の強さを比較することです。定量的な比較の点では、価格モメンタム分析は最良の指標の 1 つです。

この記事では、この戦略を使用して、Huobi.com 上のデジタル通貨の自動スポット取引プログラムを開発します。

価格モメンタムを計算する式

AR = [N日間の(高値-始値)の合計 / N日間の(始値-安値)の合計] * 100

その中で:

  • N: 毎日の期間の統計ウィンドウ。通常はデフォルトで 30 日間です。これは、1 か月に約 30 日間の有効な取引日があるためです (デジタル通貨は 24 時間 365 日取引されるため、この数字は少し控えめかもしれません)。

  • 高値: その日の最高価格

  • 始値: 当日の始値

  • 安値: その日の最低価格

価格の勢いをどう使うか

価格の勢いは、一定期間における最高価格と最低価格の間の始値の位置を反映します。この位置は、両者の綱引きを判断するための基準となります。

  • この値は100前後と想定します。100を超えると強気の勢力が高まり始め、100を下回ると弱気の勢力が集まり始めます。
  • AR値が上昇すると、市場が活発で、人気が高く、強気派が急速に前進していることを意味します。しかし、高すぎる場合は、価格が買われすぎの領域に入ったことを意味し、適切なタイミングを選ぶ必要があります。ポジションをクローズします。 AR値の高さに特に基準はありませんが、一般的にはAR値が120前後まで上昇すると、価格は下落しやすくなります。
  • AR値が下がると、市場が不況に陥り、弱気派が意気揚々としており、強気派がもっと頑張る必要があることを意味します。AR値が低すぎる場合は、価格が売られ過ぎの領域に落ち込んだ可能性があることを示唆しており、ロングする機会を待つことも検討できます。一般的に、AR 値が 50 を下回ると、価格は下落が止まり、代わりに上昇します。

注: 上記の数値はすべてデフォルト値であり、決して真実ではありません。実際の取引プロセスでは、市場の変化に応じてこの範囲を調整し、現在の市場状況に適応する必要があります。

Python を使用して価格モメンタムの定量的取引戦略を実装する

いつものように、FMZ.COM を開き、アカウントにログインし、コントロール センターをクリックして、ホストとロボットを展開します。

ホストとロボットの展開方法の詳細については、以前の記事を参照してください: https://www.fmz.com/bbs-topic/4140

独自のクラウド コンピューティング サーバー展開ホストを購入したい読者は、この記事を参照してください: https://www.fmz.com/bbs-topic/2848

次に、左側の列にある戦略ライブラリをクリックし、「新しい戦略」をクリックします。

戦略作成ページの右上隅で、図に示すように、プログラミング言語として Python を選択することを忘れないでください。

Python を使用した価格モメンタム分析のための定量的取引戦略の実装

次に、コード編集ページにPythonコードを書き込みます。次のコードには非常に詳細な行ごとのコメントがあり、読者はゆっくりと理解して評価することができます。さらに重要なのは、この戦略はスポット取引に基づいて書かれていますが、次のコードのスケーラビリティは先物取引も考慮に入れています。興味のある読者は、次のコードを先物取引に書き直してみてください。戦略自体のロジックは普遍的です。 Inventor Quantitative Platform では、主要な現物および先物取引所の API インターフェースを用意しているため、書き換え作業は非常に簡単で便利です。

Huobi のビットコインスポットを取引ターゲットとして使用し、この戦略の実装を開始します。

import types # 导入Types模块库,这是为了应对代码中将要用到的各种数据类型
def main(): # 主函数,策略逻辑从这里开始
    IDLE = 0 # 用来标记持仓状态,可以理解为0即为空闲状态,也就是空仓状态
    LONG = 1 # 多头持仓
    SHORT = 2 # 空头持仓,注意,此策略应用于现货市场,所以不存在空头开仓或者持仓情况,这里这样写,是为了方便理解策略和以后的扩展(如扩展到期货市场)
    state = IDLE # 标记持仓状态的变量
    while True: # 进入循环
        r = exchange.GetRecords() #GetRecords是发明者量化平台的官方API,详细用法请参见:https://www.fmz.com/api
        if len(r) <= 1: # 判断K线是否大于一根,也就是当前是否为开盘状态,否则可能会进入死循环,这里也方便读者进行扩展,大一些的K线周期趋势状态更稳定。
           Log("bar的数量不足, 等待下一根bar...") # 输出日志
           continue # Python循环控制语句,继续下边的循环内容

        # 开始进行价格动量的量化分析
        ar = sum(r.High - r.Open) / sum(r.Open - r.Low) * 100 # 计算公式

        account = _C(exchange.GetAccount) # 获取账户信息,_C同样为发明者量化平台的官方API,用法请参见:https://www.fmz.com/api

        if ar < 95 and (state == IDLE or state == SHORT) :  # AR值小于超卖线且账户拥有资金,则全仓买入
           
           if account["Balance"] > 50:
                exchange.Buy(-1, account["Balance"] * 0.9) # 市价单全仓买入
                state = LONG # 改变持仓状态为LONG
                  
        elif ar > 80 and (state == IDLE or state == LONG):  # AR值大于超买线且账户有持仓,则全仓卖出
            
           if account["Stocks"] > 0.01:
                exchange.Sell(-1, account["Stocks"] * 0.9) # 市价单全仓卖出
                state = SHORT # 改变持仓状态为SHORT
                      
        LogStatus(_D(), exchange.GetAccount() , state) # 更新日志信息

戦略バックテスト

戦略を書いた後、最初にやるべきことは、過去のデータでどのように機能するかを確認するためにバックテストすることです。ただし、バックテストの結果は将来の予測と同じではないことに注意してください。バックテストは、当社の戦略の有効性を検討するために、この情報を参照してください。市場が変化し、戦略が大きな損失を被り始めたら、すぐに問題を特定し、新しい市場環境に適応するために戦略を変更する必要があります。たとえば、戦略が10%以上の損失を被った場合、すぐに戦略を停止し、しきい値の調整から始めて問題を探します。

戦略編集ページでシミュレートされたバックテストをクリックします。バックテストページでは、さまざまなニーズに応じてパラメータを調整できるため、便利で迅速なデバッグが可能です。特に、複雑なロジックと多くのパラメータを持つ戦略の場合、ソースコードを読み、一つずつ修正していきます。

バックテストの時間については、最新の月を選択し、クリックしてHuobiスポット取引所とBTC取引ターゲットを追加します。

Python を使用した価格モメンタム分析のための定量的取引戦略の実装

バックテスト結果を見る

Python を使用した価格モメンタム分析のための定量的取引戦略の実装

この戦略は今月のバックテストで良好なパフォーマンスを示したことがわかります。

価格モメンタム戦略の長所と短所

  • 利点

価格モメンタムが他の従来のテクニカル指標に比べて優れている点は、単一の始値や終値を使用するのではなく、最高値と最低値を組み込む点です。これらは動的に比較され、日中の価格変動を通じて、市場情報はより包括的になり、応答はより速く、よりマクロ的になります。

  • デメリット

価格のモメンタム値を独立して使用して、価格が高すぎるか低すぎるかを判断したり、ロングかショートかを判断したりすると、大きなトレンドで早めに撤退したり、大きな市場暴落で早めに底値で購入したりしてしまう可能性があります。 。一般的に言えば、この戦略は依然としてショック効果戦略に属します。

戦略の閾値設定も、取引対象の特性に応じて決定する必要があります。デジタル通貨市場の価格変動は比較的大きく、取引量も膨大で、特にビットコインなどの主流通貨は価格制限がないため、閾値は従来の株式市場よりも高く、80%の売られ過ぎが問題となっている。このラインに触れることは通常困難です。そのため、買いシグナルは少なくなります。一方、買われすぎラインの 170 は閾値を下回ることが多いため、売りシグナルが頻繁に発生します。これにより、戦略の実行中はほとんどの時間、空ポジションになり、資本利用率が非常に低くなります。今年1月以来、ビットコインは強気相場が続いており、価格は最高値の3,500ドルから13,000ドル近くまで上昇した。閾値は早い段階で 170 ラインを超え、それ以降は高いままです。従来の 170 の買われすぎラインに従って売却した場合、約 5,000 で市場から撤退し、その後にポジションを開くシグナルはなかったため、大きな強気相場でわずかな利益しか得られませんでした。

したがって、この市場には、バックテストやデバッグなしで永遠に利益を上げることができる戦略である聖杯取引戦略はこれまで存在したことがありません。私たち定量的トレーダーは、主観的トレーダーと同様に、最終的には同じ目的地に到達します。市場の変化に適応し、現地の状況に適応し、常に変化する状況に対応する必要があります。戦略が効果的でない場合は、タイムリーに調整する必要があります。

質問がある方は、https://www.fmz.com/bbs にメッセージを残すことができます。戦略やプラットフォーム技術に関することであれば、Inventor Quantitative Platform には専門スタッフが常駐しており、いつでもお答えします。