俺にも執筆活動させろボケ

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)を

sqlで取り出す日付は一度忘れてカラムだけ

select id,time,bid,bidf,ask,askf from bf;

itref.fc2web.com

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にするだけで偉い苦労したわ

とりあえずプロット

f:id:nemui3900:20180109135655j:plain

横軸を時間じゃなくて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で保存して終わろう。

f:id:nemui3900:20180109150222j:plain

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にパスとか書いとけばあとはほとんどそのままでいけるのか。

f:id:nemui3900:20150310185955j:plain

チャートを開きまくってって考えてたけど

ティックが更新されるってのを生真面目に考えずに一つのチャートの初めのティックで他の通貨もとってくるって感じにするか。

ただDBに接続するだけで終わってしまったぜ。

こんなのあるよっていう紹介になったなあ、まあやりつつ更新なのでしょうがないが。

次回までにMySQLを勉強しつつ実用に耐えるDBの設計をしたいところ。

 

 

 

パーセント点の残差によってボラリティを算出する。


すべてを同じスケールで見る自作インジケーター - nemui3900’s blog

 

これ(pten)の50からの残差でボラリティを評価しましょうってことです。

1000本くらいのサンプルで、ようはptenのperiに1000を入れるのがいいでしょう。

俺が公開しているインディケータはパラメーターの値がめちゃくちゃなのが多いです。

思想にあった値にしなければまともなインディケータにはならないのだけど。地が意地悪なのでそういう仕様です。

 

さあつくろう。

そのままPtenの設計のままsumを用意して足してもいいけど

配列の二分探索【ArrayBsearch】|MQL言語リファレンス日本語翻訳マニュアル|メタトレーダーでMQLプログラミング自動売買 メタシス・シーカー

ArrayBsearchを使用した自作関数化するのがスマートそうです。

 

ということでまずはptenをArrayBsearch化。

f:id:nemui3900:20150224140542j:plain

真ん中が往来のパーセント点で下がArrayBsearch化したもの。まるで違うしあきらか間違っている。

何か変なコトやってしまっているんだろうけどあまりにも単純なコードなので治すのは諦めて

往来の方を関数化しよう。

やってる途中で謎が解けてArraySetAsSeriesが足りていなかっただけだった。

結局ArrayBsearch化に成功。

眠い | ptenv45.zip ダウンロード | uploader.jp

 

残差をボラリティとするのは

ただ足すだけなのですぐに出来たが

一応残差を絶対値で算出した方式も作る。

f:id:nemui3900:20150224145356j:plain

 

眠い | PV.zip ダウンロード | uploader.jp

一応パラメーターはちゃんとしときました(笑)。

 

nemui's Accelerator、nemui's Acceleratorとはなんなのか。

nemui's Acceleratorとはなんなのか。

大抵の思いついたことはすでに誰かがやってて、

それを公開しているかしていないかという問題なだけなので。

ただ俺が探せていないだけかもしれないけどなさそうだった

というより探すより作ったほうが早いので

俺が作ったインディケータです。

アクセラレータって名前にしようと思ったんだけどそれはすでに有名なのがあるのでやめました。

そしてHDDが壊れたタイミングでどこにもバックアップを取ってなかったのでこの世から消滅したインディケータです。

なぜ公開しようと思ったかというと一度消えたあとにブログ書いといたらすごい復旧が楽だったからです。

ようはバックアップのついでです。

その公開するインディケータはもちろん今から作るのです。なくなったからね。

f:id:nemui3900:20150218141906j:plain

今さっき説明用につくったインディケータです

画像のオレンジのヒストグラムを足した物が眠いズアクセラレータなのです。説明が不足しているだろうからコードを載せます。

f:id:nemui3900:20150218142258j:plain

 

ある期間のnを使ってlog(close[i]/close[n-i])のΣを求めます。

f:id:nemui3900:20150218144645j:plainf:id:nemui3900:20150218144423j:plain

 

それがこれです。期間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本前のレベルを見ていることになるな、

まあそれで生じる損失そんなないからいいのか。

f:id:nemui3900:20150203184055j:plain

やっと出来た、OnInitにバッファ登録するの単に忘れてすげえ悩んだ。

インジケーターができたのでEAを作る。

 

f:id:nemui3900:20150203193132j:plain

ただあまりにも時間がかかって萎えたので説明なしで終わっておこう。

分岐に注意するだけだし。

眠い | chandelier.zip ダウンロード | uploader.jp

シャンデリアストップを実装しよう。part1

MQLでシャンデリアストップ(トレーリングストップ)を実装しようとした時に考えつくのは注文時のストップにまず任意の距離を入れて。

それを基準に上がれ(もしくは下がれ)ば注文を変更して入れ替える方式。

それとは別にシステムがストップレベルを判断して価格と比べてポジションを閉じる方法。

ってことで今回は後者のEAを作っていく。

たしか何度か作ったはずだがHDDとともに逝ってしまったようだ。

まっさらな状態から新しくつくろう。そもそももうどうやってたか覚えてねえし。

まずはフローチャートを作成する、

意外とちょっとした分岐も図を書かないと間違うものである。人間の脳みそをあまり信用してはいけない。

blogのお絵かきツールを使って図を書こうかと思ったが無理があった、

フリーのツールで作成しよう。

出来ました、謎にofficeの承認に失敗していることに気がついた。

しかしまあ使わん気もしないでもない。もらったものだしどうすっかな。

まあいいや。

ってことでエクセルを使わないでかけるものを探す

f:id:nemui3900:20150203165512p:plain

結構便利な作図ツールは下

EggPad - らんらんるー

 

どうせ俺はボリュームの最初の値しか使わないのでこんな感じ

すべての値を使う人はどうやるかしりません。

 

さてこれをEAのひな形として書いていく。

とりあえずExitの実装をしたいだけだがinのルールも必要なので

みんな大好きな移動平均のクロスでいいかな。

ってことでまず移動平均のドテンシステムの作成。

f:id:nemui3900:20150203173316j:plain

移動平均の自作関数。基本的なMQL5の動作を割と使っているので一度ちゃんと目を通してみるといいかも。

 

んで出来たので。

f:id:nemui3900:20150203173514j:plain

意外とMQL5の質素なEAとしては需要がありそなのでアップローダーに一応あげとこう

眠い | mac.zip ダウンロード | uploader.jp

 

 

こいつにシャンデリアストップを搭載していく。

しかしよく考えたらどういう追随方法を取るか考えていない、

というかすでにあるのだが説明していなかった。

長くなりそうなのでいったんここで終わり。

 

EA作成風景。(KUEAに挑むpart7)

さてできたので最適化したくなるが

まずは本当にできているかをしっかり確認する。

この確認が俺はあまり好きではなくて下手な気がする

このへんは今後の課題でもっとうまくやる方法を考えるべきなのだろう。

まず適当なパラメーターでストラテジーテスターを起動して

スタート

f:id:nemui3900:20150130124202j:plain

結果がでてチャートが開きますが

結果は見る必要はなくチャートの売買のポイントに用があります

f:id:nemui3900:20150130124842j:plain

これに予め作っておいたKU1DAYのパーセント点を描写するインジケーターを乗せるのですがMQL4で作った気がするので。

MQL5に移植します。

ほぼコピペで行けるような書き方をしているのでこのとおり。

f:id:nemui3900:20150130130037j:plain

だめじゃねえかって。そういえばシンボル名にmを付けないといけないのだった。

f:id:nemui3900:20150130131115j:plain

くっそ遅いしなんか全然だめじゃねえか。

ってことで何がどう間違っているかを探る。

このMQL4から持ってきたインジケーターの動きが怪しいのでそっちを先に見直す。

ひとまずUseWeekEndを使うのをやめてKUPOWERの計算でコピークローズのスタートポジをintからdatetaimeに変更することに。

それによって現在の足のオーバーフローがおこって表示がされなくなるけど

ストラテジーテスターでは見れるのでそれでデバッグを進めることにする。

と思ったら表示されたりされなかったり

f:id:nemui3900:20150130143052j:plain

EURUSDではダメだったりなぞである、まあストラテジーテスターでやればいいのか。

f:id:nemui3900:20150130143508j:plain

ほぼうまく行ってるのだがところどころ勝手にポジションをとったりしている

たぶんデータの抜けが原因だろう。

EAの方もcopycloseのスタートポジにdatetimeを使うことにする。

f:id:nemui3900:20150130144515j:plain

ようやくまともに動いたので。

やる必要もそんなにないのだが一応最適化に進む。

週末でパーセント点をリセットを外したのでまあまあ時間がかかるので

この時間は思慮時間である。

そもそも突出した時に突出した国はEXITしてノーポジにするべきである。

そして回帰する部分のロジックをもっと機能させる必要がある。

まずは突出=ノーポジを作成しなければなるまい。

ノーポジ部分完成。分岐の間違えさえしないようにしたらいいだけだな。

あとでちゃんと動いているか確認する。 

 

回帰を考えるのだが、KUDAY1として一日の差分だけで考えてるのが良くないのだろう。

KUMOM(ある期間の差分)で考えるのが自然だと思う。

 

f:id:nemui3900:20150130152137j:plain

 ↓のサブウインドウでトレードしようって話。

これで0に回帰させてもそこまで問題ないだろう。

 しかし突出部分はいいにしても回帰の方向や方式についてはまだまだ考えるべきだろう、この部分をうまいことやれば収益性が見込めそうだ。

俺のEAとしてはループが素晴らしく多いので最適化が破格の長さで

考える時間はかなりある。

例えば今のところ分母と分子で0の距離のみで比べているが

強い側(プラス)と弱い側(マイナス)っていう概念を取り入れるとか

相関でフィルタを組み込むとかできそうだ。

EAとしては完成していて挑戦は成功だ。

あとは収益化させるだけなのだが

公開するべき情報としてはもう終わりな気がするのでそれ以上いけない。

f:id:nemui3900:20150130154032j:plain

くーちゃんが残した国の地図から街の地図ぐらいまでは宝に近づいたんじゃないかね?

 

CopyCloseでdatetimeに変えて

モメンタム化したひな形EA

眠い | kutes5.zip ダウンロード | uploader.jp

 収益化したいなら突出の検知の精度を上げて軽くして回帰のロジックを正しくした上で最適化してそれをMQL4に逆輸入して使ってください。

いかなる損失の責任もおいません。

 

これであとはこっそり進めていくので終わりだ。

しかしほとんどの大事な部分はブログに記せただろう。

要するについつい収益化するためのロジックに目が行きがちだが

そんなことよりもちゃんと想定どおり動く部品を組み合わせてしっかり軽く作ることのほうがよっぽど大事で。

それは繰り返しの実践でしか培われない。

その実践をこのおもちゃ(KUTEST5)で培って、むしろ何でこうしないんだ

こうしたほうがいいだろうってなればこの企画は大成功である。

俺は思ったことを具現化する能力がそのままシステムトレーダーの力だと思っている。

 

ちなみにコレは全然軽くないから落第点なのだ。

検証の作業が目白押しなので設計の段階から常識的な軽さにする必要があったがその辺をあまり考えられていなかった。

まあブログのネタのための物なので裏でこっそり軽くするけどな。

 

そして最後にうまく行った時には俺にもその回帰のロジックを教えてくれたらいいと思う。