FC2ブログ
にほんブログ村 為替ブログ システムトレード 自作EA派へ にほんブログ村 為替ブログ ユーロドルへ

ほったらかしのメタトレードで資産1億円を目指す

今月から楽天のアフェリエイトをやっています。
サイトを経由するだけで、購入金額の1%が懐に入ってきます。
ぜひぜひ、皆様もお試しくださいね。

今月から楽天のアフェリエイトをやっています。
サイトを経由するだけで、購入金額の1%が懐に入ってきます。
ぜひぜひ、皆様もお試しくださいね。

03 | 2021/04 | 05
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

最強EA 9.2

無料ダウンロード

最近、このブログ更新ができていない・・・

とりあえず、データのスクレイビングを調べていたら、
便利なツールが見つかり、すっかり遊んでいた・・・

link


今回のチャレンジ

前にPYTHONで書くなんてことを宣言したのであるが。。。
実のところ、使い方を考えていた時に思ったのであるが、
グラフで見栄えを出すところを、WEBページから見せるのに、
PYTHONだと、結局はMATPLOTなどのライブラリに頼ることになり、
そうなると、IMAGE画像をWEBで見るような、ショボいUIになることが想像できる。

実は、RSI_BREAKOUTのインジケータは、ユーザー側でBLOGパーツのような形で
公開できればと考えていて、そうなるとやはりJavascriptで書けたほうが
良いのではないかと、思うようになった。

最終的にAI処理も、サーバー側よりも、ユーザー側のブラウザ(こういうのをエッジ処理というが)
のほうが、やりやすいと思うので、まずはJSで書こうと思う。
(もちろん、これは自分のITスキルを伸ばすことも視野に入れている)



1)データの成形

為替データは、ココから入手した。 セントラルなんとか

参考記事  https://designsupply-web.com/media/knowledgeside/5432/

とりあえず、JSで出来るらしいので安心・・・

2)グラフの表示
 JSを使ってチャート表示させるには、いろんなツールがあって悩む

Google Chart https://developers.google.com/char
d3.js https://d3js.org/
さらにnvd3.js https://nvd3.org/
c3.js https://c3js.org/

しかし、ライブラリが多すぎて、さっぱり身につかない。

だからJSエンジニアって、うんざりするんだよねえ・・・
スポンサーサイト





今日から、地道にコーディングをやっていく

ソースコードの置き換え → これまでインジケータの新部分をmql4で書いていた。これをまずpythonに書き換える必要がある。
https://github.com/chanmoto/rsi_breakout

ソースはMQL4であるが、要はCライクな言語である。

最近はPYTHONを触り始めたので、これに書き換えるところから始めることにする。

乖離率の計算は下記
Kairi_buffer[i] = (RSI[i]-mov_rsi[i])/mov_rsi[i];

区間に分けて考えていく

j=0;
for(i=1; j if (Kairi_buffer[i] * Kairi_buffer[i+1] <= 0){
ii[j] = i;
j++;
if(j>2){
if(ii[j-1]-ii[j-3] j=j-2;
}
}
}
}

乖離率の変曲点で、上下をグループ分けする。

if(Kairi_buffer[ii[0]]<0)
{
for(ll=0; ll {
Hi_stack[ll] = ArrayMaximum(RSI, ii[1+ll*2]-ii[0+ll*2]+1, ii[0+ll*2]+1);
Lo_stack[ll] = ArrayMinimum(RSI, ii[2+ll*2]-ii[1+ll*2]+1, ii[1+ll*2]+1);
}
}
else
{
for(ll=0; ll {
Hi_stack[ll] = ArrayMaximum(RSI, ii[2+ll*2]-ii[1+ll*2], ii[1+ll*2]+1);
Lo_stack[ll] = ArrayMinimum(RSI, ii[1+ll*2]-ii[0+ll*2], ii[0+ll*2]+1);
}
}

ここからが実体線と予想線を作るところ(最大のポイント)

for(ll=0;ll {
hp1=RSI[Hi_stack[ll]];
hp2=RSI[Hi_stack[ll+1]];
hp1n=Hi_stack[ll];
hp2n=Hi_stack[ll+1];
hp3n=Hi_stack[ll-1];

if(hp2n!=hp1n) { rh=((hp2-hp1)/(hp2n-hp1n));}

lp1=RSI[Lo_stack[ll]];
lp2=RSI[Lo_stack[ll+1]];
lp1n=Lo_stack[ll];
lp2n=Lo_stack[ll+1];
lp3n=Lo_stack[ll-1];

if(lp1n!=lp2n){ rl=((lp1-lp2)/(lp2n-lp1n));}

for(k=0;k for(k=0;k for(k=1;k<=hp1n-hp3n;k++){ buf3[hp1n-k]=hp1-rh*k;}
for(k=1;k<=lp1n-lp3n;k++){ buf4[lp1n-k]=lp1+rl*k;}
}

for(i=0; i buf5[i]=EMPTY_VALUE;
buf6[i]=EMPTY_VALUE;
}


いかが売買サイン

for(i=0; i // SELL
if ( buf4[i]>=buf4[i+1] && MathAbs((buf4[i]-buf4[i+1])-(buf4[i-1]-buf4[i]))<0.001 && RSI[i] < buf4[i] && RSI[i+2] > buf4[i+2] && buf4[i+1] - RSI[i+1] > margin){
buf6[i]=RSI[i];
} else {
buf6[i]=EMPTY_VALUE;
}
// BUY
if ( buf3[i]<=buf3[i+1] && MathAbs((buf3[i]-buf3[i+1])-(buf3[i-1]-buf3[i]))<0.001 && RSI[i]>buf3[i] && RSI[i+2] margin){
buf5[i]=RSI[i];
} else {
buf5[i]=EMPTY_VALUE;
}
}
return(0);
}

https://qiita.com/EasyCording/items/1fa5780d55424306d1de

久しぶりの更新をしている

最近、AIやらWEBやら、本当に技術の進歩がすさまじく、
この勢いの中で、自分の進化が遅いことに、
すっかりあきれてしまっている。

ここらで初心に戻らないと、本当に潰されそうな気がしてならない。

考えれば、10年ぐらい前の時代が、
すごく時間の流れが緩やかで、
過ごしやすかった気がする。

最近、特にリモートワークで家にいる時間が長くて、
時間はたくさんあるのに、頭の成長ができていないことに
我ながら嘆いている。
(逆を言えば、普段仕事に追われて、勉強する時間が
取れなかったころに比べて、今は真逆の悩み事を抱えている)


AIトレード

 半年かけてAIを学んできたことであるが、やはり問題の複雑さをAIで解くことは
非常に苦手であって、逆に言えば、問題を極力簡単にしてあげることが、
やはりAI使いこなしのコツなのではないかと考えている。

 前の検討では、PFチャートから何らかの予想を考えていたが、
これはある意味、問題の複雑化が災いして、いかに解かせるのか?
といった、妙なところで試行錯誤していたようだ。

参考記事
http://1969681.blog66.fc2.com/blog-entry-592.html


MTブレイクラインへの適用

 AIの得意分野としては、やはりパターン認識と、0/1判断のようなところから
再度、出直してみようかと思う。
 以前にMT4のインジケータで、後出しじゃんけんのようなものがあった。
いわゆるデータにあわせて、つじつまを合わせをするものであって、
リアルタイムで出しているサインを、後になって消去してしまうようなものだ。

 こういうのをウソ発見器とでもいうべきだろうか?

 インジケータが出したサインを、そのあとに控えているAIが、
あたかも、ウソ?、ホント?を出してくれるようなものを
作ればいいのではないか?

 幸いながらバックテストを実施すれば、サインが出た時の状況と、
その後、サインが消灯したのかは再現でき、これは大量に学習データを用意することができる。
 
 少なくとも、自分が開発したMTブレイクラインも、少なからず
そういうタイプのインジケータであった。
 
 今回はやはり初心に戻って、当初のインジケータ開発で遭遇していた
つじつま合わせに対して、AIで判定をすることを考えてみたいと思う。

MTブレイクアウトの過去記事はこちら

http://1969681.blog66.fc2.com/blog-entry-25.html
http://1969681.blog66.fc2.com/blog-entry-363.html



2021年が1か月たちました。

この間いろいろあったのですが、下記の本を購入しました。



感想を言うと、ディープラーニングの勉強を終えたからといっても、
ファイナンス工学に応用するには、まだまだ先が長いことを痛感しました。

しかしながら、いくつかは参考になったことがあります。


1)トリプルバリア戦略について

 これまでボックストレードと言うものがあることを漠然と知っていましたが、
これを機械学習でフィッティングすれば、けっこう面白そうと思いました。

 詳細は下記の方の記事に委ねます・・・

https://qiita.com/cryptrader/items/a5e96dca42ddbab58d70

2)定常性とメモリーについて
 
 価格変動には2つの要因がありうる。

 メモリー   移動平均のような過去の価格を基準とした要因
 定常性   モメンタムのようなその時点での需給バランス要因

 どっちが支配的と言うのは、相場によって性格が変わる。

 再現性の得やすいのは、やはり定常性だとか・・・

 つまりレンジ相場における、RSIなんかがトレード予想に向いている。 

https://hawk-tech-blog.com/python-financial-machine-learning-05/

しかし、奥が深すぎて、完全に消化不良・・・( ^ω^)・・・


年末に購入した書籍であるが、今回は内容を一切見ないでamazonポチしてしまったが、
これは完全に失敗してしまった。

てっきりテクニカルのAI分析の内容かと思えば、まったく違っていた。(前作の評判と誇大広告につられてしまった)


でもって本当に欲しかったのは、こっちだがやはり著者が同じだと
内容も分かりにくいし、やはり書籍の初見なしというのは危険だ・・・



最近のパターンは、本屋で見る → 国立図書館にないか調べるであるが、
考えてみたら、昨年は書籍購入だけでも60万ぐらい使っている。
(今年は書籍は、本当に買わないことを実行していきたい。組合のカフェテリアプランで16000円までは買える分で我慢すること)

そんなこんなで、新年早々、AI勉強とシステム開発にかけれるリソースを
いろいろと考えている。






2021/01/03 11:41|-TB:0CM:0
師走である。

コロナの影響というのは、直接的ではないかもしれないが
企業がリモートワークを推進するごとに、残業がなくなり
ダイレクトに家計に響いている気がする。

だって、リモートワークのために投資したことは、
  • 昇降机
  • ブルブルマシン
  • バランスチェア
  • 足元ヒータ

すべてこれ、個人の購入かもしれないが、こうして電気代や光熱費も
本来は企業が負担して当然の経費なはずである。

通勤代はテコ入れされてはいないが、そのうち日本企業がリモートワークを
今後も続けるのであれば、どこかでカットされるだろう。

何かの記事で読んだが、これらの負担が企業年金の財源になっているとも聞く。

これからは、日本社会全体を見渡して、社会構造を変化させていく、
大きな社会実装を迫られているのだろうと思う。

そんな呟きをしつつ、やはり一方でAIを駆使できるエンジニアと、
FXトレーダの両立で、今後の自分の先行きもしっかり見据えなければならない・・・


今日はあと年末を4日残すのみとなり、いろいろ振り返りをやっている。

溜めに溜めた本棚のIT書籍を眺めながら、この額いくらなんだろうと・・・
ふと気になったが、これらの書物はいつか自分の投資となって
戻ってくるとは信じている。
(本来、IT企業に勤めていたら、会社の書籍で自由に読めていいレベルと思うが、
会社の図書館で借りれる書籍は、ACCESS、JAVAなど昔、ITシステム部門が
自前で開発していたころの残骸しかない・・・)

これからは、ますます企業に縛られず、自分自身で生き残りをかけた
戦いができるように、いまは試練といったところか・・・

このコロナ禍で多くの人が、苦しんでいると思う。
しかしながら、このピンチはチャンスでもあり、
いかに変化に柔軟に対応できるか・・・
それは生物の進化の法則であり、そうして生き残った者だけが
後世に残るんだと思う。




2020/12/28 12:00|つぶやきTB:0CM:0

近況


コロナの影響はじわじわと押し寄せており、
昨日はMEGAドンキーに行ったのであるが、結構人が多くて
マスクをしていても、どこも混雑していて、
ときどき、ここでコロナ出たら、一巻の終わりやんか・・・って、状況によく出くわす。

別に街に出たところで、何もいいこともないのであるが、
やはり性格的には、不要不急の外出をしなくては、いけない性質(たち)なんだと思う。

そうして、どこかでコロナに感染してしまう・・・
(世の中の人々の大半が、そうなんだと思うが)


本題


今日の本題であるが、やはりAIというのは、
学習データの与え方や、ネットワークの組み方など
いわゆる、調教の部分に難しさを感じている。

自分の手足以上に、ペットを飼いならすかのごとく
どんな餌を与えて、どんな環境で飼育したら、
言うことを聞いてくれるのか、なかなか難しいように思う。

本屋に行って、それこそPythonを使ってAIの本は
山ほど見つかるのであるが、どのような構成でモデリングしたらよいのか
その部分については、あまり開示されていないように思う。

とりあえず、この週末に検討したこととしては
1)教師データを増やすこと
 これまで日足で5000データほど与えていたが、PFデータでは時間圧縮がされるため、これを15分足にしてみた。

 データはOANDAのメタトレードのものをCSV保存して使っている。

2)ハイパーパラメータの工夫
 BATCHサイズや、時間軸のステップ長さなど、まだまだ調整する必要がある。
 これらの変更と調整の部分で、ソースコードを関数式に変更した。
 パラメータ調整自体が、最適化問題になるため、この部分は別途でループを回す必要がある。
 MT4であれば、遺伝的最適化法があるが、AIの場合は外付けで最適化問題を解く必要がある。

3)最適化法
 大学院時代にやっていた共役勾配法が、こんな時に役に立ってくるとは・・・
 「ハイパーサーミアの加温条件最適化の研究」という、修士論文であるが、25年も前に
AIがまだ無名な時代に学んだことがある。
 会社に入ってからは、実験計画法という形で、条件最適化をやっていて、この知識も融合すれば
鬼に金棒の気がする。
 結局AIの知識って、プログラミングだけの話と思っていたが、
統計解析や品質工学やモデル解析など、いろんなことが絡んでくるねえ・・・
 会社に入って、熱解析シミュレーションや構造最適化をやっていたので、
そういう知識を生かせるのかもしれない。







なんとなく完成した


P&Fチャートを使ったAI予測結果を示す。

真値
true.png
AI予測
pred.png

モデル


  • 入力ベクトルは下記の9つとした。
  • pips 0.0005から0.0013まで、0.0001づつ増やしたPFチャート
  • タイムスパン history_points = 20
  • 結局はLSTMを2層使っている
  • 入力ベクトル 9 + 時間ベクトル 20という感じ
  • ほぼ強引に一致させた感じである
  • ハイパーパラメータの調整が難しい

    pff1 = csv_to_dataset_pf(data,0.0005,i,500)
    pff2 = csv_to_dataset_pf(data,0.0006,i,500)
    pff3 = csv_to_dataset_pf(data,0.0007,i,500)
    pff4 = csv_to_dataset_pf(data,0.0008,i,500)
    pff5 = csv_to_dataset_pf(data,0.0009,i,500)
    pff6 = csv_to_dataset_pf(data,0.0010,i,500)
    pff7 = csv_to_dataset_pf(data,0.0011,i,500)
    pff8 = csv_to_dataset_pf(data,0.0012,i,500)
    pff9 = csv_to_dataset_pf(data,0.0013,i,500)

modelp.png


国立国会図書館 関西館に行ってきました。


AIの棚には、数えきれないぐらいの書籍が並んでいて、
その中からLSTMの項を全部コピーしました。

自然言語処理の本も、多数読みました。
東京から取り寄せた予約したため、今週末にまた行ってきます。

まったく本屋で見たことのないものも多数あり、
すべて書籍名をノートしてきました。

もうAI関係の図書を買いに一般本屋に行くのを辞めます。


PS.
昼食も安く、コロナ禍ですが空いていました。

こんなんが無料で使えるなんて、日本国民はうらやましい。


本論


ここからが今日の本論・・・
とりあえず、予想と正解の比較データをチャートにしてみた。
P&Fチャートを数列にしたものを、0-1の範囲で標準化したので、
どうしても変化の振れ幅の大きいデータに規格化されてしまっている。
どっちかというと、そういう異常なデータはトリミングしてしまった方がいいだろう・・・
Figure_1.png

KERASの処理


a1は教師データx
a2は教師データy

maxa = max(a1.max(),a2.max())      
mina = min(a1.min(),a2.min())

a1=(a1-mina)/(maxa-mina)  0,1で規格化
a2=(a2-mina)/(maxa-mina)    〃

最初、fitとかtransformが、分からへんかったが、ようやく意味が分かった。

要するにfitで統計を計算して、transformで実際のデータに反映する。
今回の場合は、fitを使ってa1の教師データで計算させて(数の少ないa2の方は使わない)
transformでa1,a2に反映させると良いだろう...

それにしてもAIでは、やはりデータの素性というものを吟味しなくてはいけない。
下記の例でいえば、前半と後半では相場の変化量が異なるため、
同じ学習データとして扱ってはならない気がする。

しいて言えば、2つのデータで異なる学習機を作っておき、
それを何らかの運用ルールで切り替えるというような、
少し複雑な処理が必要ではないかと思う。
無題3






参考資料
 https://math.uni.lu/eml/projects/reports/2020_Summer/DiasMoreira.pdf

#進捗

とりあえずKERASを使って、それらしい計算まで出来るようになった。

時系列分析のため、LSTMというのを使っている。

今回はpoint & figureをベースとして、入力ベクトルには32個のパラメータを割り当てている。

ソースコード

  • 最初に適当な4本足データをCSVで取ってくる。
  • 次にPOINT&FIGUREの数列に加工する。
  • PFF1,PFF2,PFF3というのが、PFFを時間軸で数列化したものだ。
 [分割数200のPF数列×19個] [分割数150のPF数列×9個] [分割数100のPF数列×4個] = 32個
  • PF数列は指定日までを時系列に推移させて計算し、それをケツから使っている
  • ケツ[0]が予想すべきデータで、ケツ一個手前[-1]から[-n]までが予想に使うデータである
  • データ長は分割数が小さいほど、データ数が少なくなるように配分している
  • KERASには、全データ範囲で0,1になるように変換したものを突っ込んでいる

AI部分のコードはパクっただけ。
内容ははっきり言って、何にも分かっていない・・・

いちおう、糞リポジトリを置いておく
煮るなり焼くなり、好きにしやがれ!!

model.png

Figure_1.png



motochan

Author:motochan
人に感謝されることをやっていく。誰かに喜ばれること。先に歩いて、道を作っていくこと。喜ばれることを、生きがいにしていく。時代は、後でついてくるもの。自分で感じたことを、自分がやっていく。世の中にないものは、自分で考えていく。理想とするものは、自分が自ら考える。自己の満足が、他人の満足につながる。


詳細はコチラ>>

Copyright(C) 2006 テクニカル講座上級の部屋 All Rights Reserved.
Powered by FC2ブログ. template designed by 遥かなるわらしべ長者への挑戦.