Help us understand the problem. What is going on with this article?

アルゴリズムトレードへの誘い

More than 3 years have passed since last update.

アルゴリズムトレードとは

アルゴリズムトレードは、コンピューターシステムがマーケットの動向に応じて、自動的に売買注文のタイミングや数量を決めて注文を繰り返す取引のことをいう。

モチベーション

  • FXは世界で最も大規模なオンラインゲーム
  • お金がぐぐぐっと増えると脳から大量の快楽物質が得られる(実際、金に特化して反応する脳の部位がある というのをNスペか何かで見た)
  • 脱社畜 投資
  • 機会学習とか最近はやりのディープラーニングとかの応用として何か作りたい

アルゴリズムトレードの魅力

鉱山で金を発掘しているような感覚があり、検証段階で良さげな結果が得られた時はウキウキが止まらなくなる。自分の涎に気づかないことすらある。

アルゴリズムトレード全体の流れ

自分がよくやるやり方1:ルールを見つけてコーディングする

MT4を使えばすべてがひとつのツール上で完結するので、チャートを眺めていてこのルールでいけるんじゃね?と思い立ったらぱぱっと試せる。

  1. チャートを眺める
  2. 何か規則らしきものを見つける
  3. その規則めいたものをささっとコーディングする(MT4のMQLという言語を用いる)
  4. ツールで検証する(MT4のバックテストツールを用いる)
  5. コードミス等によるリスクを減らすために数日間テスト口座で運用する(MT4のデモ口座でログインして自動取引モードをオンにする)
  6. 良い結果なら実践投入(そのままMT4で実弾の入った口座にログインして自動取引モードにする)

少し具体的に。
1.チャートを眺める
2.何か規則らしきものを見つける
見つける.PNG
すごくベタだけど、例えばこのチャートから、おっなんか近い過去に何度か同じ値で反転したなら、その次もまた反転しそうだ、というパターンが見つかる。

3.その規則めいたものをささっとコーディングする(MT4のMQLという言語を用いる)
lang:filename
void OnTick(void){
if(なにか条件){
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,ALLOW_SLIPPAGE,NULL,Ask+TakeProfit*Point,"comment",Magic,0,Green);
}
}

MQL4という言語の雰囲気はこんな感じで、相場の価格が変動するごとにOnTick()関数が走るので、その中にメインのロジックを書いていく。
売り買いの注文を入れるようなドメイン依存な操作はすべて関数が用意されている。ちなみに上のOrderSend()は注文を入れる関数。
便利な関数としては、移動平均やボリンジャーバンドはもちろん、他にもさまざまなシステムトレードで使いそうな数値を返してくれる関数が用意されている。

4.ツールで検証する(MT4のバックテストツールを用いる)
過去の相場の値動きに対して、作ったアルゴリズムでどのくらい儲かるのかをテストできる。MT4内にそのツールがある。
どこでどのくらい損失があったかもチャート上に表示され、チャートでのエラー解析もしやすい。
てst.PNG

5.コードミス等によるリスクを減らすために数日間テスト口座で運用する(MT4のデモ口座でログインして自動取引モードをオンにする)
6.良い結果なら実践投入(そのままMT4で実弾の入った口座にログインして自動取引モードにする)

自分がよくやるやり方2:Rでデータマイニング的に聖杯を見つける

↑のやり方と基本的な方針は同じだが手段が違う。
Rは統計的な処理を得意とする言語なので、そういう方面でやりたい場合にいい。
あと、MT4による検証は処理時間がRに比べて遅いので、すぐに結果の概要を見て、ものすごい勢いでトライ&エラーを繰り返したい場合にはRの方が捗る。

  1. チャートを眺める
  2. 何か規則らしきものを見つける
  3. その規則めいたものをRで実装する
  4. Rで検証用のソースコードを書いて検証 Image2.png
  5. 結果を見て、規則を修正するなど改良 → 3に戻る
  6. 良い結果ならMT4にそのルールを移植して実践投入

自分がよくやるやり方3:機械学習を用いる場合

学習モデルをじっくり時間をかけて作り、MT4からそれを呼び出して用いる。

  1. 学習モデルの作成
    機械学習を用いる場合はMT4やMQLでは非力であるため、perlやpythonなどを用いる。これらの言語にはすでに強力な機械学習のライブラリがいろいろそろっている。

  2. API化
    最終的に満足のいく結果が得られたら、その学習モデルをAPI化する。
    チャートの足の情報など、アルゴリズムに必要な情報を入力として与えると、{売り|買い|何もしない}などの基本動作を出力として返すようにする。

  3. MT4からAPIの利用
    MQLから何らかの方法でAPIを叩いて、そのAPIの出力結果に従いトレードするようにプログラミングする。
    URLのRequestを投げることができるので、作ったAPIをURLとしてアクセスできる状態

  4. テスト口座でテスト運用

  5. 問題なければ実弾投入

他人が作成した優れたアルゴリズムを見つける

http://www.metatrader4.com/en/signals/overview
MT4では作成したアルゴリズムを簡単にパッケージ化して他人に配布/販売する仕組みが備わっている。
インターネットに公開されたアルゴリズムから有効なものを見つけるのは、かなり玉石混交の世界で地雷も多い。
しかし中には純粋無垢な大学生が統計の勉強がてら作ってみましたーみたいなノリで公開している無料のアルゴリズムが結構優れものだったりする。

儲け方

・自分の資金で運用する
・アルゴリズムの販売

資金が少ない場合はアルゴリズムを販売の方が効率がよいこともある
販売サイトの一例:http://fx-on.com/

結局ランダムウォークじゃないのか? システムトレード自体にそもそも可能性あるのか?

みたいな話。

ファンダメンタル要因が統計的に優位なレベルでチャートに反映されていないという事実がもし仮にあったとしても、金融的なテクニカル要因だけでも十分に

左の図は、どの価格にどのくらい売り/買い注文がどのくらいあるかを示している。
節目となる価格に注文が多いことがわかる。
Image.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away