デイトレード アルゴリズムを構築し、無料サービスのみを使用してクラウドで実行する
まず最初に、次のコマンドで GitHub からスクリプトを取得します:
git clone https://github.com/alpacahq/Momentum-Trading-Example.git
次に、お気に入りのテキスト エディタで開き、指示に従って操作します。 ファイルの先頭付近には、API の情報 (キー ID、シークレットキー、接続先 URL) を入力するプレースホルダーがあることに注意してください。
プレースホルダー文字列を独自の情報に置き換えると、スクリプトを実行する準備が整います。 しかし、シミュレーション口座の (完全に架空の) お金にさえ触れさせる前に、このスクリプトが何をするのかを確認しておきましょう。 (
大まかに言うと、これはモメンタムベースのアルゴリズムです。 市場が開いた後の最初の15分間は、常にかなり慌ただしいので、取引しません。 しかし、15分から1時間までの間に、前日の終値から少なくとも4%上昇した銘柄を探します。 そして、十分に高くなる (目標価格に達する) か、低くなりすぎる (ストップ レベルに達する) まで保有します。
コードの接続情報の下に、設定可能な追加の変数がいくつかあることにお気づきでしょう。 これらは、アルゴリズムのニーズに最適になるように簡単に調整できます。
私たちは、いくつかの点を調べることにより、リストを絞り込みます。 また、注文を満たすのに十分な流動性のある株式であることも確認したいと思います。
アルゴリズムが許容範囲内にあることを確認するために、default_stop
risk
default_stop * risk * account_balance
.
ここでは、初期化データを取得する方法については説明しません。 さらに興味深いのは、Polygonからリアルタイムでデータをストリームすることもできる点です。 (これは最近発表された「HFT的」な例でも行われており、これよりもはるかに頻繁に取引を行い、小さなオーダーブックのアンバランスから利益を得ようとする、別のAlpacaデイトレードアルゴリズムの例です。)
Alpaca の Python SDK を使用して、3 種類のストリーミング チャンネルに接続します。 1 つ目は trade_updates
で、これは単に Alpaca への接続であり、注文に関する更新が発生したときにそれを聞くことができます。
他の 2 つのチャネルは、A.<symbol>
AM.<symbol>
です。 これからウォッチする各銘柄について、それらのチャンネルに登録し、Polygon からその銘柄の価格と出来高に関する更新情報を受け取れるようにしています。 A
AM
A
AM
A
AM
を信頼することにより、接続やその他の不具合に対する回復力を少し高めます。
受信データを集計に追加したら、まだ株式を注文していなければ、それが良い買い物に見えるかどうか確認します。 私たちは「買い時」を、MACD がプラスで伸びていて、適切な取引量で取引され、昨日の終値から今日までに 4% 以上上昇しているものと定義しています。 また、市場が開いた後もその勢いが維持されていることを確認したいので、市場が開いてから最初の15分間で価格が最高値より高いかどうかを見ます。
ある銘柄にポジションを持っている場合、その銘柄のバーが来るたびに、売るべき時が来たかどうかも確認します。 株価が目標価格またはストップロスに達したとき、あるいはMACDがその銘柄の勢いが衰え、コストベースまで下がったことを示唆したときに、売ります。 理想的には、設定した目標価格に十分な銘柄が到達し、ストップロスに到達した銘柄から損失を回収し、さらに利益を得ることができます。
取引日の終わりには、市場価格で開いた残りのポジションを清算します。 成行注文の使用は一般に理想的ではありませんが、この場合、夜間保有する潜在的なコストが、ポジションにかけるリスクよりも大きいため、使用されるのです。
長い run()
メソッドの下をスクロールすると、Alpaca Calendar API エンドポイントを使用して、市場がいつ開き、閉じるかを確認する方法を見ることができます。 これを利用すれば、Cronジョブを設定して毎日同じ時間にスクリプトを実行することができ、市場の休日や開始時間の遅れによる問題を心配する必要がありません。 多くの人はスクリプトを手動で実行することを好みますが、スクリプトを単独で実行させるオプションがあることは素晴らしいことです。