晴れ時々、FX

My dairy fx life

第12回 AIトレードシステム構築

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

とりあえず、データのスクレイビングを調べていたら、

便利なツールが見つかり、すっかり遊んでいた・・・

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エンジニアって、うんざりするんだよねえ・・・

第11回 AIトレードシステム開発

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

ソースコードの置き換え → これまでインジケータの新部分を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=*1;}

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=*2;}

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*3<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*4<0.001 && RSI[i]>buf3[i] && RSI[i+2] margin){

buf5[i]=RSI[i];

} else {

buf5[i]=EMPTY_VALUE;

}

}

return(0);

}

*1:hp2-hp1)/(hp2n-hp1n

*2:lp1-lp2)/(lp2n-lp1n

*3:buf4[i]-buf4[i+1])-(buf4[i-1]-buf4[i]

*4:buf3[i]-buf3[i+1])-(buf3[i-1]-buf3[i]

第10回 AIシステムトレード

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

第九回 AIトレードシステム開発

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勉強とシステム開発にかけれるリソースを
いろいろと考えている。




コロナ禍にふと思う・・・

師走である。

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

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

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

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

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

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

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


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

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

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

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


第8回 AIシステムトレード開発

近況


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

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

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


本題


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

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

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

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

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

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

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