DBに接続して対数変化率のグラフのプロットから
今考えているのは
bfとbffxで相関係数を比べて
bf↓bffx↑の方向で乖離しすぎた場合
bfjpy買いbffxjpyで売り。戻ってきたとこで決済。
というのを考えているが
必要な入金額的にはbfjpyに10万bffxに3万とかかな、
もっと安くてもやれると思うけど。
まあ自前でデータ取ってるDBに
pythonで接続するところから。
pandasにあるpandas.io.sql.read_sqlをつかう
とりあえず全部読み込む
0.5秒ごとのティックを記録してるので二日分でも大量
%%timeitで計測
216458 rows × 12 columns
8.52 s ± 78.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
1分20秒弱か全部はちょっとだめだというのが分かったので
減らすか、一日単位で区切るとして。
.npz形式のファイルで対数変化率と相関係数を出力
(メモ)このへんはとりあえず今後自動化したいところ。
8日のカラムbidとbidf(fx),askとaskf(fx)を
select id,time,bid,bidf,ask,askf from bf;
dfl = pd.io.sql.read_sql("SELECT * FROM bf where time between '2018-01-08' and '2018-01-09';", cnx)
これだと9日の00:00:00が入っちゃうなあ、
そんなに問題でもないけど。08 23:59:59にするか。
dfl = pd.io.sql.read_sql("SELECT id,time,bid,bidf,ask,askf FROM bf where time between '2018-01-08' and '2018-01-08 23:59:59';", cnx)
pandasのdfにするだけで偉い苦労したわ
とりあえずプロット
横軸を時間じゃなくてIDにするかなあ、
一発で対数変化率には出来ないくさいなあ。
なんか方法あったら教えてほしい。
対数変化率に変換するので長さを取得
>>>len(dfl.index)
134269
(メモ)0を含んでいる数で出る
lenA=len(dfl.index)
lnp = np.array(dfl.bid[:lenA-2])
lnp2 = np.array(dfl.bid[1:lenA-1])
p=(lnp2-lnp)/lnp2
ここまでやってbfで買いbffxで売りなんだから
askとbidfで計算しないとダメだと気付く。
修正した、npzで保存して終わろう。
loadして保存できているのを確認。
プロットしないといけないなあと思いつつ疲れた
データサイエンティストだったらこっからいろいろやれるはずだが私は違うのでかなしいなあ。
ぼやいててもしょうがないので勉強しつつ手を動かすのであるが。
一億円への道は遠い。
MT4からMySQLに接続する。
まずはローカルからやってみる。
OnInItで接続して
OnDeinitで切断かな。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 23.2.3.52 mysql_real_connect()
ログインに失敗するんだよなあ
https://www.mql5.com/en/articles/932
こっちのが楽に実装できそうだなあ。
なるほど
MyConnection.iniにパスとか書いとけばあとはほとんどそのままでいけるのか。
チャートを開きまくってって考えてたけど
ティックが更新されるってのを生真面目に考えずに一つのチャートの初めのティックで他の通貨もとってくるって感じにするか。
ただDBに接続するだけで終わってしまったぜ。
こんなのあるよっていう紹介になったなあ、まあやりつつ更新なのでしょうがないが。
次回までにMySQLを勉強しつつ実用に耐えるDBの設計をしたいところ。
パーセント点の残差によってボラリティを算出する。
すべてを同じスケールで見る自作インジケーター - nemui3900’s blog
これ(pten)の50からの残差でボラリティを評価しましょうってことです。
1000本くらいのサンプルで、ようはptenのperiに1000を入れるのがいいでしょう。
俺が公開しているインディケータはパラメーターの値がめちゃくちゃなのが多いです。
思想にあった値にしなければまともなインディケータにはならないのだけど。地が意地悪なのでそういう仕様です。
さあつくろう。
そのままPtenの設計のままsumを用意して足してもいいけど
配列の二分探索【ArrayBsearch】|MQL言語リファレンス日本語翻訳マニュアル|メタトレーダーでMQLプログラミング自動売買 メタシス・シーカー
ArrayBsearchを使用した自作関数化するのがスマートそうです。
ということでまずはptenをArrayBsearch化。
真ん中が往来のパーセント点で下がArrayBsearch化したもの。まるで違うしあきらか間違っている。
何か変なコトやってしまっているんだろうけどあまりにも単純なコードなので治すのは諦めて
往来の方を関数化しよう。
やってる途中で謎が解けてArraySetAsSeriesが足りていなかっただけだった。
結局ArrayBsearch化に成功。
眠い | ptenv45.zip ダウンロード | uploader.jp
残差をボラリティとするのは
ただ足すだけなのですぐに出来たが
一応残差を絶対値で算出した方式も作る。
眠い | PV.zip ダウンロード | uploader.jp
一応パラメーターはちゃんとしときました(笑)。
nemui's Accelerator、nemui's Acceleratorとはなんなのか。
nemui's Acceleratorとはなんなのか。
大抵の思いついたことはすでに誰かがやってて、
それを公開しているかしていないかという問題なだけなので。
ただ俺が探せていないだけかもしれないけどなさそうだった
というより探すより作ったほうが早いので
俺が作ったインディケータです。
アクセラレータって名前にしようと思ったんだけどそれはすでに有名なのがあるのでやめました。
そしてHDDが壊れたタイミングでどこにもバックアップを取ってなかったのでこの世から消滅したインディケータです。
なぜ公開しようと思ったかというと一度消えたあとにブログ書いといたらすごい復旧が楽だったからです。
ようはバックアップのついでです。
その公開するインディケータはもちろん今から作るのです。なくなったからね。
今さっき説明用につくったインディケータです
画像のオレンジのヒストグラムを足した物が眠いズアクセラレータなのです。説明が不足しているだろうからコードを載せます。
ある期間のnを使ってlog(close[i]/close[n-i])のΣを求めます。
それがこれです。期間20日のnemui's Acceleratorと比較用にモメンタム(20)を表示した図。
使い方については各々考えてください。
なぜこれが必要になったかを考えたら少しだけ捗るかもしれない。
以上解散。
眠い | na.zip ダウンロード | uploader.jp
↑nemui's Accelerator
シャンデリアストップを実装しよう。part2
さてここでストップレベルの計算方法ですが
Close[1]+25パーセント点(対数)[1]*Close[1]
もしくはClose[1]+75パーセント点(対数)[1]*Close[1]
で小数点を丸める。
そろそろどんだけパーセント点好きなんだよってツッコミが入りそうだけど実測値が大好きなので我慢しろとしか。
EAをいきなり書いてもいいんだけど。
まずはインディケーターを作成していく。
Close[1]+75パーセント点(対数)[1]*Close[1]
Close[1]+25パーセント点(対数)[1]*Close[1]
でチャネル化する。
しかしコレを基準にすると2本前のレベルを見ていることになるな、
まあそれで生じる損失そんなないからいいのか。
やっと出来た、OnInitにバッファ登録するの単に忘れてすげえ悩んだ。
インジケーターができたのでEAを作る。
ただあまりにも時間がかかって萎えたので説明なしで終わっておこう。
分岐に注意するだけだし。
シャンデリアストップを実装しよう。part1
MQLでシャンデリアストップ(トレーリングストップ)を実装しようとした時に考えつくのは注文時のストップにまず任意の距離を入れて。
それを基準に上がれ(もしくは下がれ)ば注文を変更して入れ替える方式。
それとは別にシステムがストップレベルを判断して価格と比べてポジションを閉じる方法。
ってことで今回は後者のEAを作っていく。
たしか何度か作ったはずだがHDDとともに逝ってしまったようだ。
まっさらな状態から新しくつくろう。そもそももうどうやってたか覚えてねえし。
まずはフローチャートを作成する、
意外とちょっとした分岐も図を書かないと間違うものである。人間の脳みそをあまり信用してはいけない。
blogのお絵かきツールを使って図を書こうかと思ったが無理があった、
フリーのツールで作成しよう。
出来ました、謎にofficeの承認に失敗していることに気がついた。
しかしまあ使わん気もしないでもない。もらったものだしどうすっかな。
まあいいや。
ってことでエクセルを使わないでかけるものを探す
結構便利な作図ツールは下
どうせ俺はボリュームの最初の値しか使わないのでこんな感じ
すべての値を使う人はどうやるかしりません。
さてこれをEAのひな形として書いていく。
とりあえずExitの実装をしたいだけだがinのルールも必要なので
みんな大好きな移動平均のクロスでいいかな。
ってことでまず移動平均のドテンシステムの作成。
移動平均の自作関数。基本的なMQL5の動作を割と使っているので一度ちゃんと目を通してみるといいかも。
んで出来たので。
意外とMQL5の質素なEAとしては需要がありそなのでアップローダーに一応あげとこう
眠い | mac.zip ダウンロード | uploader.jp
こいつにシャンデリアストップを搭載していく。
しかしよく考えたらどういう追随方法を取るか考えていない、
というかすでにあるのだが説明していなかった。
長くなりそうなのでいったんここで終わり。
EA作成風景。(KUEAに挑むpart7)
さてできたので最適化したくなるが
まずは本当にできているかをしっかり確認する。
この確認が俺はあまり好きではなくて下手な気がする
このへんは今後の課題でもっとうまくやる方法を考えるべきなのだろう。
まず適当なパラメーターでストラテジーテスターを起動して
スタート
結果がでてチャートが開きますが
結果は見る必要はなくチャートの売買のポイントに用があります
これに予め作っておいたKU1DAYのパーセント点を描写するインジケーターを乗せるのですがMQL4で作った気がするので。
MQL5に移植します。
ほぼコピペで行けるような書き方をしているのでこのとおり。
だめじゃねえかって。そういえばシンボル名にmを付けないといけないのだった。
くっそ遅いしなんか全然だめじゃねえか。
ってことで何がどう間違っているかを探る。
このMQL4から持ってきたインジケーターの動きが怪しいのでそっちを先に見直す。
ひとまずUseWeekEndを使うのをやめてKUPOWERの計算でコピークローズのスタートポジをintからdatetaimeに変更することに。
それによって現在の足のオーバーフローがおこって表示がされなくなるけど
ストラテジーテスターでは見れるのでそれでデバッグを進めることにする。
と思ったら表示されたりされなかったり
EURUSDではダメだったりなぞである、まあストラテジーテスターでやればいいのか。
ほぼうまく行ってるのだがところどころ勝手にポジションをとったりしている
たぶんデータの抜けが原因だろう。
EAの方もcopycloseのスタートポジにdatetimeを使うことにする。
ようやくまともに動いたので。
やる必要もそんなにないのだが一応最適化に進む。
週末でパーセント点をリセットを外したのでまあまあ時間がかかるので
この時間は思慮時間である。
そもそも突出した時に突出した国はEXITしてノーポジにするべきである。
そして回帰する部分のロジックをもっと機能させる必要がある。
まずは突出=ノーポジを作成しなければなるまい。
ノーポジ部分完成。分岐の間違えさえしないようにしたらいいだけだな。
あとでちゃんと動いているか確認する。
回帰を考えるのだが、KUDAY1として一日の差分だけで考えてるのが良くないのだろう。
KUMOM(ある期間の差分)で考えるのが自然だと思う。
↓のサブウインドウでトレードしようって話。
これで0に回帰させてもそこまで問題ないだろう。
しかし突出部分はいいにしても回帰の方向や方式についてはまだまだ考えるべきだろう、この部分をうまいことやれば収益性が見込めそうだ。
俺のEAとしてはループが素晴らしく多いので最適化が破格の長さで
考える時間はかなりある。
例えば今のところ分母と分子で0の距離のみで比べているが
強い側(プラス)と弱い側(マイナス)っていう概念を取り入れるとか
相関でフィルタを組み込むとかできそうだ。
EAとしては完成していて挑戦は成功だ。
あとは収益化させるだけなのだが
公開するべき情報としてはもう終わりな気がするのでそれ以上いけない。
くーちゃんが残した国の地図から街の地図ぐらいまでは宝に近づいたんじゃないかね?
CopyCloseでdatetimeに変えて
モメンタム化したひな形EA
眠い | kutes5.zip ダウンロード | uploader.jp
収益化したいなら突出の検知の精度を上げて軽くして回帰のロジックを正しくした上で最適化してそれをMQL4に逆輸入して使ってください。
いかなる損失の責任もおいません。
これであとはこっそり進めていくので終わりだ。
しかしほとんどの大事な部分はブログに記せただろう。
要するについつい収益化するためのロジックに目が行きがちだが
そんなことよりもちゃんと想定どおり動く部品を組み合わせてしっかり軽く作ることのほうがよっぽど大事で。
それは繰り返しの実践でしか培われない。
その実践をこのおもちゃ(KUTEST5)で培って、むしろ何でこうしないんだ
こうしたほうがいいだろうってなればこの企画は大成功である。
俺は思ったことを具現化する能力がそのままシステムトレーダーの力だと思っている。
ちなみにコレは全然軽くないから落第点なのだ。
検証の作業が目白押しなので設計の段階から常識的な軽さにする必要があったがその辺をあまり考えられていなかった。
まあブログのネタのための物なので裏でこっそり軽くするけどな。
そして最後にうまく行った時には俺にもその回帰のロジックを教えてくれたらいいと思う。