目次
この記事、というかメモは、自分が勉強や試行錯誤している最中の記録です。殴り書きにご注意ください。
何もかも分からない今の自分の認識
- 自動で取引すること自体は、証券サイトがAPI用意してくれていて、それを自分のプログラムに組み込めばいい?それともGUIのクリック位置等を記録して再現するのか?
- 良く分からないのが、未来予想する投資のアルゴリズム。数学を学ばなければならない?その数学を投資話に落とさないといけないのか?
- というかFXって何?
FXに対するQ&A
- そもそもFXって何?
- 外貨取引のこと。外貨為替。
- 株と違って取引可能な時間が制限されていない。24時間。土日と1/1は休み。
- 証拠金という、必ず取引するという保証金を入れて、自分のお金でなくレバレッジという元手の数倍で取引することが可能。損益は証拠金に反映される。
- 取引の手数料が普通に外貨を買うと1円1ドルぐらい掛かるがコレは1銭とか。会社によって違う
- どういう理屈で儲けるの?
- 為替差益によって儲ける。ドルが上がると見越して、ドルを買っておき、上がったタイミングで売れば、その差が利益。
- インカムゲイン(利息)で儲ける方法がある。金利差をスワップと言い、外貨の金利差によって毎日朝7時に得れる金利がある。当然、逆も然りなのでマイナスもありえる。
- どんなリスク・コストがあるの?
- スプレッドという売買の差がある。買った時は100円で1ドル買えても、為替は動いてなくても、1ドル売ると99円帰ってくる場合、1円の損益が発生している。これは金融機関の取引手数料みたいなもので、取引会社によって違う。
- 短期と長期の取引で何が違うの?
- 調べても人によると言う答えばっかり。
- ベターなのは、短期はレバレッジを5-10倍など高めに効かせて、損切りもしながらトレードらしい。
- 長期は金利が高めの豪ドルなどを保持し続けて、スワップポイントを稼ぐなどらしい。
- 単純に長期だと取引回数が少ないので、スプレッドによるコストが少ない。
- 利益出たら何すれば良い?税金とか。儲けて、そのまま続けて負けたら、どうなる?プラマイゼロ?プラスの分に税金かかる?
- FX取引で発生した利益には先物取引に係る雑所得等として、所得税+住民税(地方税)が課税されます。課税方式は申告分離課税となるため、原則として確定申告が必要らしい。一律20.315%(所得税15.315%、住民税(地方税)5.0%)らしい。
- 年収2,000万円以下の会社員で、給与を1カ所から受けていて、かつ、その給与の全部が源泉徴収の対象となる場合において、給与所得・退職所得以外の所得(FX取引で得た利益を含む)の合計額が20万円以下の場合は確定申告が必要らしい。
- 損益出たら何かできる?控除申請とか。
- FX取引の損失で損益通算を行っても、その年に控除しきれなかった損失が残った場合は、確定申告を行うことで損失を翌年以降3年間にわたって先物取引に係る雑所得等の利益から控除できます。
- どういう理屈で為替の値段が動くの?
- 通貨の需要と供給のバランスで動く。つまり、いっぱい買われれば、その通貨の需要が高まるので、値段が高くなる。
- 取引が多い通貨ほど、それだけ値動きが、ある。つまり短期に向いている?
- 何円からできるの?
- 証券会社による。
- ユーロ/ドルとか円/ドルとか種類があるけど、どれがいいの?
- そんなことを明言しているサイトが無かった。
- 短期は取引量の多さで見た方が良い気がしている。円ドルとか。
- 長期は金利差か。
調査・勉強中の疑問
- プライス?のBidとかAskって何?
- ビッド(bid)とはFX業者が提示している買値、自分たちから見ると売値のことです。反対にFX業者が提示する売値、つまり自分が買う値段はオファー(Offer)、あるいはアスク(ask)と呼ばれます。
- ティックデータって何?
- 一定間隔ごとに更新される取引レート(のひとつひとつの値)のことを指すらしい。相場が落ち着いているときは、横一直線または起伏に乏しいティックチャートが描画され続ける。
自動化を学ぶために、全体をざっくり理解する
- 自動取引の前に、テストをするのが当たり前らしい。
- テストのことを、バックテストと呼ぶ模様。
- バックテストとかに使う過去のデータをヒストリカルデータとか読んでいた。(英語カナにして長くすんなよ・・過去データでええやん)
投資自動化を考えていく上で、道のりが長そうなので、3段階に考えを分けることにした。
バックテスト環境を作る、取引アルゴリズムを考える、自動取引を実行する環境を作る
バックテスト環境を作るにはどうしたらいいのか?
- まずは触ってみて、動かしてみて、遊んでみる&自分の環境で皆と同じことができることを確認する。
- pythonのbacktesting.pyというやつが良く出てくる
- 参考
- pythonの環境に種類があるらしい。
- Anaconda
- 研究者向け。色々な分析向けのライブラリがある模様。
- pylp?
- 公式標準?
- とりあえず、普通にWindows用のPythonをインストール
- Anaconda
- pip install backtestingをターミナルで実行し、インストール。
- とりあえず、以下のサイトを参考に、環境構築移行から真似てみる
- https://qiita.com/kazama1209/items/98f63b624f3987ba3322
- コピペして実行。
- 特に何も起こらない
- 以下のサイトを参考に真似てみる
- https://optrip.xyz/?p=2240
- pip install pandas_datareaderでインストール
- pip install matplotlibでインストール。
- できた。同じことができる、できる環境であると確認できた。FX版ではどうか試してみる。
- ベースは今試したコードで、中身を以下のサイトを参考にFX
用に変えてみる- https://qiita.com/kazama1209/items/98f63b624f3987ba3322
- このサイトだとJupter?を使っているから、表示が簡略化している気がする。自分だとそのままではエラーが発生しないが、グラフも出ない。最後にplt.show()で明示的にグラフ表示をしたらできた。
- 自分でも再現することができることを確認。
バックテスト関連について理解を深めていく
コピペ再現はできた。何をやっているから、どうなる、という理解を得てできるように学んでいく。
過去データが欲しい
- 過去データが無いと始まらない。為替のデータを以下のサイトからダウンロードした
Pythonで自動で落とした。
from histdata import download_hist_data as dl
from histdata.api import Platform as P, TimeFrame as TF
pf = P.GENERIC_ASCII
tf_1 = TF.TICK_DATA
tf_2 = TF.ONE_MINUTE
current_year = 2010
end_year = 2022
current_month = 1
while current_year <= end_year:
dl(year=current_year, pair='usdjpy', platform=pf, time_frame=tf_2)
current_year += 1
while current_month <= 12:
dl(year='2022', month=current_month, pair='usdjpy', platform=pf, time_frame=tf_2)
current_month += 1
- サイトに載っていない困ったこと
- ティックデータではなくて、One_Minuteで取得しようとするとエラー。time_frameを変更しただけなのに・・・
- 月ごとに取れない。monthは消して、yearだけの指定だと取得できた。
ライブラリについて学びたい
Pandas
- データ解析ライブラリである
- データフレームなどの独自データ構造が提供されている
- CSVやExcel、RDBなどにデータを入出力できる
- import pandas as pdこんな感じで、pdという名前でPandasを扱えるようにする。
- read_csv()
- filepath:読み込むCSVファイルの名前。必須
- sep:区切り文字の指定(delimiterパラメーターも使える。ただし、両者を同時に指定することはできない)。省略可。省略時はカンマ「,」が指定されたものとして扱われる
- header:ヘッダー行の指定。省略可。省略時は読み込んだ内容からヘッダー行と列名を推測する
- names:列名の指定。省略可
- index_col:行ラベル(行にアクセスするためのインデックス)となる列の指定。省略可。省略時は各行には整数値でアクセスする
- parse_dates:trueなら。日付としてパースするかどうかの指定。indexが日付ならdatetimeに変換される。
- inplaceとは?
- pandasライブラリにはインプレースで変更するオプションが何度もあります。例えばrename関数で列名や行名を変更しても、新しいpandas.DataFrameが返されるだけです。そこで、inplace=trueにすると、元のpandas.DataFrameが変更される。
- set_index
- 指定した列がIndexに設定されて、行名になる。
- tail()やhead()
- ()の中に何も指定しなければ、デフォルトで5行のデータを確認する。tailなら末尾から、headなら頭から。100行のデータがあって、printしていたら、末尾から5行だけprintされるなど。
backtesting
- データ形式
- BacktestingではOHLCまたはOHLCVデータをPandasのDataFrameの形式で用意。カラム名は最初の文字が大文字で正確に ‘Open’, ‘High’, ‘Low’, ‘Close’ である必要があります。 ‘open’, ‘high’, ‘low’, ‘close’ で渡してもエラーとなるので注意。またDataFrameのカラムは上記の4つ以外に存在してもBacktetingに渡すことが可能。
- axisって何?
- axis=0なら縦の列方向に沿った処理を行う。axis=1なら横の行方向に沿った処理を行う。例えば、array=np.array([[1,1,1][1,2,3]]) np.sum(array,axis=0)なら、0で縦方向でのSUMなので、[2,3,4]になる。
- Strategyクラス
- バックテストにつかう取引ルール。backtesting.Strategyクラス使って、init() メソッドと next() メソッドをオーバーライドする。
- initは初期設定。nextで使うデータ等を設定する。init内に書くのか、フィールドに書くのかの違いは、バックテストメソッドで渡されるデータを使えるか使えないかだと思っている。initなら引数として使える気がしている。
- nextはインプットとするヒストリカルデータの行ごとに呼ばれる処理。つまり取引の判断処理だと思っている。
- plot機能を使おうとすると、プロット数が多すぎたらエラーになった。
- 具体的には、10年のデータを1分足で読み込もうとするとエラーで、1時間ごとのデータならOKだった。1週間分のデータにしたら分足でも問題なかったので、ただのデータ量の問題だと思っている。
- 調査しても情報が出てこない・・・。
取引のアルゴリズムを考えていく
ここまで学んできたのは、ゴールデンクロスやデッドクロス等のシンプルなアルゴリズム。
最初はシンプルで十分だと思うので、不満はないが、他に良いアルゴリズムがないか調査してみる。
【2023/6/11】FXの自動取引を運用含めて、もう少し深く考え始める。MT4?
ここまで取引ロジックを深く考えてきたが、どういう風に自動売買するのか、どう運用するのか見えていない。世の中のみんなはどうしているのか含めて調べた。
まず前提として、
基本的に、他人が売っている自動取引ツールやアプリなどは、買わないつもり。
自分で作っていないから、中身を熟知していないので、リスクを把握してコントロールできないため。
そんな難しいこと考えなくても、自動で流すだけでOKって言っているツールは、完全な自動運用で、作った時点からの変化に対して補正もできるのか?できるものなら、何でお前が使わんの?ってなるから。
あくまで、自分でロジックを考えて、利益の出る構造を考えて、自己責任で、自作する。お金の損得だけじゃなくて、知識と経験が身につくので、成功しようが失敗しようが得れるものがあるというのが良い。
自動売買の手段
最初に考えたのはPythonとかでプログラムを組んで取引すること。
その場合、手で注文するのと同じように、FX取引できるネット証券のブラウザを自動操作するような作りにするか、
証券会社が提供するAPIを利用して、注文する場合はAPIを呼び出せばいい形で、アプリを作るか、
を考えた。
前者の場合は、ブラウザ操作と言っているが、実際はHTMLを読み込んで解析して、クリックの代わりにPOSTする形だと思う。つまり、いわゆるスクレイピングみたいなことをするのだと思うが、それを許容する会社が見当たらない。なので、前者はしれっと黙ってやる分には、何も問題ないかもしれないが、このような記事などのWEB上で、手法や結果を公開するのはどうかなと思い、この選択肢は消えた。
後者のAPIでやる方法は、APIを公開していて、無料で使えそうで、情報が割と見つかるのはOANDA。
しかし、プロコースであることやゴールドランクという、1か月の取引量が一定以上ないとNG、みたいな条件があったので、うーん、と悩む。
完全自作でなくても、MT4というツール?を使って自動化できる、そして自動化ロジックは自作できるという情報を見つけた。
MT4?UI部分を考えなくても良いので、ロジックに専念できるか?
MT4とMT5というバージョン違いがあるらしい。というかMTほにゃららって何?
MT4(5)はロシアのメタクオーツ社が開発したチャート兼トレードアプリらしい。
→国内FX業者が提供しているツールがあるが、違いとしてはMTは自分でカスタマイズできる。あとから機能を追加できるとのこと。
MTはどこの業者でも使えるわけではないっぽい。採用されている業者だけ?
→それはそうっぽい。けど大体の業者でありそう。
インジケータ、EAというものを使えば機能を追加できるらしい。
→このEAというのが自動売買ロジックで、それを自作すれば、UI気にしなくても、ロジックだけで済みそう。
最初からテクニカル指標が入っている(ナビゲータウィンドウ)
→今のところ良く分からないから、ふーんて感じ。取引ロジックの中で呼び出したりして組み込めるのかな?
自分で作成したりダウンロードしたりはパソコンのダウンロード版のみっぽい。
→特に問題なし。スマホ版を使う気はない。
MT4,5はMQL4,5というC言語ベースの開発言語で作成されている。言語が違うので4と5に互換は無い。
EA(エキスパートアドバイザー)を使って自動売買が可能。バックテストができる。
MT5はまだ一部の業者のみらしい。国内だとMT5はまだない?
→MT4で良い。こだわりなし。
FX業者選定
国内業者だと、OANDAかFXTFで迷った。
- FXTF
- MT4は取引手数料かからないが、EAを使用した特定の通貨の新規取引には手数料がかかる。1000通貨で4円らしい。
- つまり、米ドル円なら、スプレッドが0.1銭で、そこに上記の手数料が加わり、実質スプレッドが0.5銭になるのと一緒。
- ただし、主要な通貨以外はかからないので、マイナーな通貨で取引する場合は良いかも。
- OANDA
- スプレッド0.5銭。MT4の取引手数料は無料
- APIもあるが、条件が色々あるので現状では微妙。
利用コストは同じぐらいか。調査しているときに、OANDAはイベント時のスプレッドの拡大が大きいみたいなことを耳にした。が、それイベント時以外は総合的に優れているとかなんとか。
初めて自作するという、自分の特色があるので、テストが気軽にできるのが良いのだが、OANDAはテストアカウントに期間がありそう。
正直、どっちでも良いのだが、取引テストが簡単にできそう(実態はやってみないと分からないが。)という点で、FXTFを選択。
FXTFのMT4をダウンロードし、自作をしてみる。
初めて、MT4でEA自作する
自分が勉強するときに参考にさせてもらったサイト。
MT4で自作しちゃお~:https://yukifx.web.fc2.com/index.html
現在、勉強中・・・