SBCZ80ルーズキットの製作(リセット不良対策編)
2020.09.20
以前にZ80高速版を手に入れておいたので、SBCZ80を製作してみました。せっかく製作するので、ついでに下記の改造をしてみました。

①DRAM容量アップ(48KB)
②クロック高速化(8MHz)
③シリアル速度自動設定(9.6kbps~115kbps)

それぞれの内容については、順次紹介していく予定ですが、例のごとく必要な基板の箔カットを行った後、配布されているROMイメージを使って基本動作確認を行ったところ、立ち上げメッセージが出てきませんでした。

CPU周りの波形解析すると、CPUリセット後、SIOの初期設定が行われていましたが、RTSがアクティブになりませんでした。プログラムとしては、正常な動作をしているため、回路図、CPU・SIOデーターシートを確認しましたが、特に問題は発見できませんでした。

各部の波形を確認するとCPUのRESET信号が徐々に電圧が上がっていくのが気になり、再度データシートを確認すると、RESET入力は、基本的なTTLレベルの入力信号となっていました。リセット回路は、CPUリとSIOに接続されているので、徐々に立ち上がる入力信号の場合、動作が閾値電圧に左右されることが予想されます。

SBCZ80のリセット回路は、時定数470mSのCRで構成されているので、仮に10mVの閾値電圧の差があると、簡易計算で0.01V/5V*470mS=0.94mS程度の遅延差が発生します。このことは、SIOの閾値電圧が、CPUの閾値電圧に比べ10mV高いと、CPUがSIOを約1mS以内にSIOの初期設定をすると、SIOはリセット中で、初期設定ができないことになります。

確認のため、C15を0.01uFに交換すると、正常にSIOが動き始めました。CPUとSIOはZilog製ですが、たまたま相性が悪かったようです。

相性が悪いCPUとSIOの対策案:

①相性が良いCPUとSIOに交換する(SIOのリセット閾値電圧が、CPUのそれに比べ低い)
②C15を小容量に変更する(0.01uF程度、但し電源SWでのリセットに問題が残ることがある)
③モステックの資料のようにCR回路の後にシュミットトリガー回路を使用する
④CPUリセット後、十分待ってからSIOの初期設定を行う

もし、SBCZ80が動かない場合、②でリセットボタンを押して切り分けをしてはいかがでしょうか。恒久的には、③が良いかもしれません。

下記は、モステックの資料からの転載です。


今回の改造では、PIC12F822で、CPUクロック、CPUリセット、NMI信号、SIOクロックを発生させることにしました。
2020.09.20 12:48 | 固定リンク | SBCZ80
AI投資予測へのチャレンジ ~ ロボアドの上を行く投資コース予測
2020.08.28
プロが、運用実績データを眺めながら、コース変更をすれば、良い結果がでると思いますが、初心者には難しいかもしれません。そこで、AI投資予測(ディープラーニングに代表される機械学習)にチャレンジしてみることにしました。うまくいけば、新しいロボアド(ダイナミック・ロボット・アドバイザー)ができることになるかもしれません。

一度、ディープラーニングに触れてみたいと思っていた中で、投資予測に関して、以前の仕事関係者からディープラーニングでは、予測精度があまり出なかったと聞いたため、戦々恐々でスタートしました。

当初、時系列データ分析で、各コースの基準価格を入力して将来の基準価格を予測させてみましたが、予測された基準価格から有望なコースを判定しようとすると、わずかな差に左右されるようでした。

そこで、文字認識のように8種類(コース)に分類される画像データ(2次元時系列データ)を入力し、8種類各々の確率を推定するモデルを考えました。なんとなく用途実績があり、曖昧な判定をこなす機械学習に向いている気がしました。上記画像データに相当するのは、今回では市場指数の時系列になります。教師データは、各コースの基準価格の騰落率実績に基づき、コースを選択します。

動的なコース選択予測を下記のような条件で検証を行ってみました。市場指数と各コースの運用成績の相関があるだろうとの仮定を立て、日経225、ダウ、ドル円、米国10年債を採用しましたが、教師データにHコースを除外しているため、Hコースに相関がありそうなナスダック指数は、外すことにしました。

①環境:anaconda環境下(python=3.7.7、tensorflow==1.15.3、keras=2.3.1)、
 spyderを使用
②入力データ(25営業日分):日経225、ダウ、ドル円、米国10年債
③教師データ:翌月11~翌々月11日までの最大騰落率のコースが「1」のデータ
 (但し、Hコースは除外)
④モデル構成:隠し層が100あるシンプルなLSTM
⑤学習:日々の入力データに対するコース選択の教師データ
 (設定当初から2020/1/29まで、約900セット)をepochs: 1800で学習
⑥評価:学習したモデルを使い、2020/1/30時点で翌月運用コースを予測
⑦翌月分を追加学習し、2020/28時点で翌月運用コースを予測
⑧同様に、2020/6/29時点まで翌月運用コースを予測

下記は、モデルのサマリーです。

Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 25, 4) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 100) 42000
_________________________________________________________________
dense_2 (Dense) (None, 8) 808
=================================================================
Total params: 42,808
Trainable params: 42,808
Non-trainable params: 0

各々の予測したい時点より前のデータにより学習し、2020/1~2020/6までを予測した結果、上限理論値騰落率12.20%に対して、予測騰落率9.47%(年率換算16.23%)となり、77.62%の到達率を獲得できました。コロナショックを受けた期間ですが、良い成績を確保できています。ちなみにリスクは大きいが、リターンが大きいコースHの実績騰落率は、-3.99%ですので、13.46%も優れていることになります。

予測日 翌月最適 翌月予測 翌月最適 翌月予測 翌月理論 翌月コースH
コース  コース コース コース 上限 崩落率
崩落率 崩落率 崩落率
2019/12/30 5 7 0.56% 0.54% 0.56% 0.52%
2020/1/30 1 1 -1.97% -2.00% -1.97% -16.10%
2020/2/28 5 7 -1.64% -2.55% -1.61% -17.21%
2020/3/30 7 7 0.45% -0.46% 1.00% -14.61%
2020/4/28 7 7 8.05% 7.15% 9.56% -6.05%
2020/5/29 1 1 8.00% 7.09% 9.50% -6.69%
2020/6/29 7 7 10.37% 9.47% 12.20% -3.99%

※翌月最適コースとは、月間騰落率実績がわかってから選択したコース(コースHを除く)
※翌月予測コースとは、学習したモデルで翌月を予測したコース
※翌月最適コース崩落率とは、翌月最適コースに基づく、2020/1運用開始日からの騰落率
※翌月予測コース崩落率とは、翌月予測コースに基づく、2020/1運用開始日からの騰落率
※翌月理論上限崩落率とは、コースA~Hの月間騰落率実績が高いコースを選んだ最大騰落率、
 2020/1運用開始日からの騰落率
※翌月コースH崩落率とは、コースHを選択した場合、2020/1運用開始日からの騰落率



1か月程度で検証ができことは、tensorflow、kerasのおかげだと、実感しました。経験と試行錯誤は、必要なものの、データと検証方法さえあれば、用途は結構広げられる気がしました。

参考までに、下記は、lossとaccracyの推移で、2016/6~2019/12月末前日の学習の収束状況です。赤が評価データにたいする精度、青は、教師データに対する誤差に相当します。教師データが、「0」と「1」ですので、予測データが教師データをトレースできるまで、収束速度があまり速くありませんが、なんとか収束でき、コース予測精度は悪くありません。


次は、モデルが予想したコース番号(1がコースA、8がコースH)です。


下記は、学習後に求まった予測データに基づく騰落率結果になります。この場合、2020/2以降は、予測精度が落ちるため、解離がありますが、翌月の予測が重要ですので、問題になりません。


モデル構造は、教科書通りにシンプルですが、それなりに苦労した部分は、学習用入力データ、教師データ、検証入力データを作成する部分と本当に必要な月末時点の翌月予測コースの抽出でした。いわゆる前処理と後処理ですが、機械学習には、結構重要なことがわかりました。一旦、学習・評価が回れば、後は、モデル構造・学習段階のチューニングとその評価を効率的にこなせる高性能PCや、NVIDIA Jetson Nanoのような並列マシンがあると、結構効率的にできそうです。

入力データのCSVレイアウト(基準価格と市場指標)は、"Date fund_A fund_B fund_C fund_D fund_E fund_F fund_G fund_H N225 DJ USD USB IXIC"です。すべて公開情報です。決算日の24日前からの日々市場データと日々コース別基準価格を用意する必要があります。このデータから、市場データに対応する将来騰落率を計算し、それに基づく最適コース選択を行いました。
実際に予測したい月末データだけでは、学習に必要な件数が不足してしまうため、日々の学習データに対する将来騰落率を用意し、件数を増やすことにしました。月末前日の営業日入力データに対する翌月運用コースの予測が実際のコース選択に使用できることになります。
ちなみに、RNNの種類としてsimple_RNN、GRU、LSTMを使ってみましたが、LSTMが最も良い結果が出ました。また、2ヶ月先の予測は、あまり精度がよくない傾向がありましたが、翌月の予測は、そこそこです。

今後、精度アップのため、モデル構造・設定項目のチューニングができたらと考えていますが、まだ定かではありません。

いずれにしても、AI技術がなければ、アマチュア(素人?)では効率的な翌月のコース選択は、難しいと思いました。今回は、コースA~Gの選択範囲で過去7か月の実データ検証を行いましたが、下落局面の予測に優れ、コロナショックにもめげず良いパフォーマンスが達成できたことから、ラップ口座の弱点をカバーできそうです。実際の運用に活かしてみたいと思います。運用結果が良ければ、再度紹介するかもしれません。(今回は、内容的に難解な部分もありますが、興味ある方は、参考にしていただければと思います。)
AI投資予測へのチャレンジ ~ 中長期運用と投資一任契約(ラップ口座)
2020.08.27
アマチュア無線とはあまり関係ありませんが、アマチュア向けの機械学習技術に関する内容です。

機械学習は、近年急激に発達したAI技術ですが、陰に表に様々な用途に応用され、技術者が足らないと騒がれています。今回は、身近な用途として、金融分野の投資予測にフォーカスしてみました。

さて、様々な資産投資があふれている中で、最近の投資信託は、購入手数料も手ごろになり、お手軽に投資がしやすい傾向になってきました。ただ、中長期の運用に耐える投資信託は、複数の資産に投資するバランス型タイプが向いている気がしますが、1本だけでは限界があります。どのような投資信託を組み合わせたら良いのかわかり辛く、当たりはずれもあります。

このようなニーズに対応するため、中長期の運用で手間をかけずに、それなりのリターンを得ようとした場合、以前から気になっていた投資一任契約(ラップ口座)があります。資産構成割合のリバランスにより、リターンとリスクを最適化しているとのうたい文句になっています。ただ、各社から販売されているわりに、あまり良いイメージがありません。

実際に販売している証券会社の商品説明を聞きくと、投資一任の運用では、必要な期待リターンを選ぶと、過去の運用実績から求まるリスク許容度が提示され、目標が合意できれば、投資先・運用方針を運用会社に一任して、目標達成の推移を見守ることになります。ただ、リターンは、保証されるものではなく、景気によっては上下に振れることが十分あります。長期的には、目標としたリターンが期待できる点とうたっていますが、それにしても運用手数料が高く感じてしまいます。

ラップ口座の問題は、長期的にはリターンが期待できる分散投資運用を行ってはいますが、そのリスク許容度を受け止めざるを得ない現実があります。このような運用では、ある期間で、リターンが高くできても、その後リスクが顕在化して、リターンが高くできない運用となっている気がしてなりません。

そこで、リターンとリスクを動的に選択でき、運用自体は、一任できる投資運用を探してみました。それでみつかったのが、「ON COMPASS」でした。

公開されている商品紹介ページによれば、「ON COMPASS」運用は、月末時点でのコース選択に従い、翌月11日から1か月間行うことができるようです。必要に応じ、契約締結の翌々月の1日から、コース変更可能なようです。また、年齢・投資方針の選択によりリスクの高いコースは、選択できないしくみになっているようです。8コースありますが、年齢が若くないと7コースまでしか選択できないようです。(無料体験で確認可能)

いずれにしても、投資金額の制約がほとんどない点も評価できます。

次に、下記で公開されている各コースの運用実績(2016/6/11~2020/8/11)から、各コースの騰落率を計算すると、

https://www.monex-am.co.jp/price/

Aコース -2.10%、Bコース -4.06%、Cコース 4.43%、Dコース 9.66%
Eコース 14.88%、Fコース 19.11%、Gコース 22.03%、Hコース 24.82%

上位2コースでは、20%を超える実績があります。年率4%程度で悪くはありませんが、次に、この運用実績から、崩落率が最も高いコースを動的に選択できたとしたら、なんと(たら、れば)

動的にコース選択した場合 78.06%

単独コースの3倍以上となり、前記した一任勘定の問題点の仮説が確認できた気がします。上昇局面では積極運用、下降局面では消極運用できたとしたらこれに近くなると思います。この数値は、運用実績を知った後で選択するのですから、数値が良くなるのは当たり前で、上限理論値となります。

運用実績データを眺めながら、経験に基づき、コース変更できれば、ラップ口座の手数料に見合うリターンが実現できるかもしれませんが、AI技術と組み合わせてみたいと思います。まずは、「ON COMPASS」の契約手続きをしてみたいと思います。

- CafeNote -