全通貨ペアのスワップポイントを取得するコードを3年ほど前に紹介しましたが、
一日何円入るのかはなかなかつかみにくいと思います。
その時の記事
スワップポイントの確認方法
スワップタイプが4種類あり(パターン3は見たことがありません)
それぞれに計算方法があります。
全通貨ペアのスワップポイントを取得するコードを3年ほど前に紹介しましたが、
一日何円入るのかはなかなかつかみにくいと思います。
その時の記事
スワップポイントの確認方法
スワップタイプが4種類あり(パターン3は見たことがありません)
それぞれに計算方法があります。
t検定を用いて、仲値後の曜日が取引結果に及ぼす影響を調査してみました。
使用したサンプルデータは、9:55にドル円ショートの取引を行い、一定時間後にクローズするという単純な取引結果でした。
2005年以降の4670回の取引データを確認した結果は以下のようになった。
時間軸を考慮しない単純移動平均(SMA)及び加重移動平均(LWMA)を用いて、取引成績に対して曜日による影響を分析しました。その結果、金曜日には有意に高い成績が見られる一方、火曜日には有意に低い成績が観察されました。
統計的有意差があるかをt検定で調べてみた。
p値が0.05以下の場合有意差があるということになる。
t検定を用いて統計的な有意差を検証した結果、金曜日においては有意差があることが明らかとなりました。一方で、火曜日については有意差は認められませんでした。
AUDNZD
H-Lの平均ボラティリティ(High÷Low) 年月
色は赤:大きい 黄色:普通 緑:小さい
※バックテストのチャートを見ると2007-2009に急成長し、あとはなだらかというグラフがあるが、この時期はボラティリティが高いので利益・損失が大きくなる。その結果2007-2009に最適化されてしまい、運用すると期待外れになりやすい。AUDNZDも同様の傾向 2010年以降の最適化がよさそうです。
年(時期)による影響は強いが、月による影響はないようだ。
AUDNZDについてTACA的分析とその備忘録
( ..)φメモメモ
※時間はすべてMT4時間(GMT+2/+3)です。
①通貨の平均的な動き
一日の動きはこのような感じになりました。
オレンジ:Close-Open(終値から始値を引いた値 動きを確認)
MT5はいろいろな理由でティックが動きます。
ティックが動いた理由はMqlTick構造体にSymbolInfoTick()変数で値を代入し、flagsを見ることで確認できます。
フラグの値は2進数です。
Tick.flagsの確認は以下のコードような流れになります。
実際に表示すると2や4が表示されますが6も表示されます。
Bid,Ask両方の価格が変更されると6になります。
また、まれに0が戻ってくることがあります。
理由なきティックということでしょうか!
MT5取り扱いのFX会社4社でどのような数字が戻ってくるか確認しました。
0:理由なし
2:Bid価格変更
4:Ask価格変更
6:Bid+Ask価格変更
外為ファイネストは98,100,102と不思議な数字が出ています。
98=2+32+64 /100=4+32+64 102=6+32+64
32:買い取引
64:売り取引
外為ファイネストは常に売り買い取引のフラグが立っているようです。
どの業者でもTICK_FLAG_BID=2が立っていることを条件にする場合ビッド演算子を使います。
ビッド演算子 &は 2進数の同じ桁の数字が両方1の場合1になります。
例)0b0011 & 0b0110 -> 0b0010
0b0011
0b0110
---------
0b0010
先頭0bは2進数という意味です。
一番左の桁は両方0なので0になります 0&0 -> 0
左から2つ目の桁は0と1で0になります 0&1 -> 0
左から3つ目の桁は1と1で1です 1&1 -> 1
一番右の桁は 1と0で0です 1&0 → 0
0b0011 & 0b0110結果は0b0010になります。
---------------------------------------------------
難解ですが二進数のフラグを調べるには便利な方法です。
ややこしいので例を4つほど記述します。
Tick.flags=2の場合 2は0b0010
TICK_FLAG_BID=2 2は0b0010
Tick.flag & TICK_FLAG_BID ->0b0010 = 2
Tick.flags=4の場合 4は0b0100
TICK_FLAG_BID=2 2は0b0010
Tick.flag & TICK_FLAG_BID ->0b0000 = 0
Tick.flags=6の場合 6は0b0110
TICK_FLAG_BID=2 2は0b0010
Tick.flag & TICK_FLAG_BID ->0b0010 = 2
Tick.flags=15の場合 6は0b1111
TICK_FLAG_BID=2 2は0b0010
Tick.flag & TICK_FLAG_BID ->0b0010 = 2
MT4の過去データーをCSVにダウンロードしてEXCELで分析します。
EXCELは100万行(正確には104万8576行)までしか取り扱うことができません。
MT4からDLしたCSVは古いデータから新しいデータの順で並んでいるため、最近のデーターが削除されます。
ex.)2005.1~のM5のデーターをエクセルで開けると2019.5までしか入りません。
そこで、EXCELをつかって新しい方から順にデーターが残るようにします。
①エクセルを立ち上げる → 「データ」 →「テキストまたはCSVから」
②ファイルを選んで「インポート」
以下のようなサブ画面が立ち上がります。
Power Queryエディターが立ち上がります。
テーブルに、なっているため色がついています。
日時もしっかり、EXCEL形式に変換されます。嬉しいおまけです。
前回はPythonでMT5にログインをしました
今日はMT5からデーターを取得しグラフにします。
①初期設定
#pip install MetaTrader5
import MetaTrader5 as mt5
from datetime import datetime
import matplotlib.pyplot as plt
mt5.initialize()
詳しくは前回の記事を御覧ください。
②過去データーの取得
copy_rate_range()に通貨ペア 時間足 取得開始日時 取得終了日時を与えます。
usdjpy = mt5.copy_rates_range("USDJPY.ps01",mt5.TIMEFRAME_M1,datetime(2022,10,15,20), datetime(2022,10,24,12))
※通貨ペアはUSDJPYだけでなくサフィックス(今回はフィリップ証券を使用していますので.ps01)が必要です。
時間足の記述はmt5.TIMEFRAME_xxです。
取得開始日時、取得終了日時はdatatime を使用します。
作画についてはmatplotlibを調べてください。
MT5はスプレッドが記録されるのが特徴ですので、介入時のスプレッドを見てみます。
赤線:USDJPYレート
青線:スプレッド
MT5はEA開発者にとって最適化が複数のコアででき時間短縮のメリットがありますが、コードがややこしいことは大きなハードルになっていると思います。
そのためかMT5にはcTrader ライブラリーが標準で組み込まれていたり、Pythonで操作できるパッケージが用意されています。
今回はPythonをつかってMT5にログインをします。
環境
MT5(フィリプ証券)build 3446
Windows 11 Pro 21H2 22000.1098
Jupyter Lab 3.2.9
Python 3.8.10
準備①
MT5の設定
「ツール(T)」→「オプション(O)」
準備② ライブラリーのインストール
pip install MetaTrader5
※pipが古くつまずきました うまくいかない特はアップグレードしてください。
MT5の接続
import MetaTrader5 as mt5
mt5.initialize()
initialize()でMT5と接続されます。成功したときはTrueが表示されます。
※MT5が起動していないときは最後に起動したMT5が起動します。
PCに複数のMT5をインストールしてあり、起動したいMT5を指定する場合
mt5.initialize('C: ~フルパス~')
MT5 バージョンの確認
mt5.version()
結果は(500, 3446, '24 Sep 2022')が返ってきました。
MT5 ログイン
mt5.login( xxxxxxx, password="yyyyyyy", server="trading.phillip-mt5.jp:443")
ログイン情報を入れてください。 xxxxxxxx はログイン:に入れる値 yyyyyyはパスワード:に入れる値 serverはサーバー:に入れる値です。
最近為替介入で相場が楽しくなってきています。
あらためて介入ってなんだろうと思い整理をしてみました。
M1で動作するEAでM5のデータを参照する時
EAをM1のチャートのセットしてからM5のデータをダウンロードするのに数ティック時間が必要です。
上位足のデータがダウンロード済みの場合は問題ありませんが、ダウンロードまでの数ティックに誤動作が発生しないように気をつける必要があります。