チャートギャラリー(パンローリング社製)の株価更新を自動化する方法

パンローリング社の「チャートギャラリー」というチャートソフトは、
チャート機能よりも、大量の株価情報を管理するデータベースとして利用価値がある。

その機能「Pan Active Market Database」は、32ビット環境しか動作しない等、
やや陳腐化しているものの、約30年分のデータを外部プログラム、EXCEL、ACCESS等から自由自在に扱えて、しかも毎日、最新データを簡単に更新できるので、必需品である。

株価の更新は、毎晩7時頃に、[Panメニュー] から [Panデータ管理]ボタンを押して、
[データ管理] – [取り込み] – [Pan Rolling] という順番でメニュー選択が必要なので、意外と面倒くさい。

最初のうちはこれをいちいち、手でやっていた。
でも、トレード分析ツールを自作し始めてからは、だんだん面倒になってきた。

この作業を毎晩7時に、自動的に実行して最新データを更新してくれると便利だなぁ、と私なら当然考える。

チャート機能を使うだけの人は、手動更新でも十分かもしれないけれども、
Pan Active Market Database」の株価データを二次加工して使用する場合は、
自動更新できるようにシステム化しておかないと、更新を忘れることも出てくる。

さて私は、ボタン押しを自動化するのに便利なツールとして、
uwsc というWindows操作の自動化ツール を使っている。

インストールの必要はなく、zipファイルを展開するだけですぐに使用できる。
展開したフォルダ内に1つ、拡張子 .uws のテキストファイルを1つ作成し、
そこにスクリプトを描き込むだけで、Windows操作が自動化できる。

 

// Pan強制終了 ※念のため
EXEC("taskkill /IM pandtmgr.exe")

// 5秒待つ
SLEEP(5)

// Pan起動
// PanID = EXEC("C:\Program Files (x86)\Pan\pandtmgr.exe")
PanID = EXEC("C:\Program Files\Pan\pandtmgr.exe")

// Pan操作
CLKITEM(PanID, "Pan取り込み", CLK_ACC)

// 更新が終了するまで監視
REPEAT
SLEEP(5)
PanID2 = GetID("データ更新")
CLKITEM(PanID2, "閉じる", CLK_ACC)
UNTIL GetID("データ更新") = -1

// Pan終了
PanID3 = GetID("Panデータ管理")
KBD(VK_ALT, DOWN)
KBD(VK_F4 , CLICK)
KBD(VK_ALT, UP)

 

そして、Windows標準のタスクスケジューラー機能を使って定時起動させれば、
この株価自動更新は、実現化する。

ちなみに私は、「チャートギャラリー」のプロ版を使用していて、日本株、日経先物、米国株を使用している。

米国株は毎日15時頃に前日分が更新され、日本株は毎日19時頃に当日分が更新される。
ごくまれに、更新時間が30分以上遅れる日もあるのを考慮して、
毎日、15時から20時までを、1時間毎に自動更新するように設定している。

 

土曜日に更新するのは、前日の米国株データを反映させるため、である。

株価データの更新後に、ウィンドウが閉じずに残ってしまう場合があるので、
定時起動スクリプトの最初に、強制終了を入れている。

ともかくこんな方法で、どうにか自動更新は、実現できている。

2021年の災難対策

船井幸雄氏の「エヴァへの道」という本を読んでいたら、
その中に気になるフレーズを見つけた。
高木善之さんという方の特別講演(1981年)のエピソードの場面である。
そこで彼に、
「あなたの未来の記憶は正しいような気がする。
だからあなたが見てきた未来の記憶で、特に大事なものだけを三つ教えてほしい」と聞きましたら、
一つ目は、彼が事故にあった十年後にソ連が解体することを見た。
二つ目は、二十年後にアメリカ合衆国が滅ぶことを見た。
これは二〇〇〇年か二〇〇一年頃になります。
三つ目は、四十年後に人類が滅びるのを見た。
と、こう言うのです。私は「あれっ」と思いました。
(船井幸雄.エヴァへの道 地に足をつけ、ゆったりと、21世紀に向かおう(Kindleの位置No.1777-1781).株式会社PHP研究所.Kindle版.)
1981年を基準にすると、
・10年後の1991年に、ソ連は解体していた。
・20年後の2001年に、アメリカ合衆国は滅んでいないが
 同時多発テロの発生をきっかけにデジタル監視社会が加速し、
 アメリカ的な自由主義・民主主義が滅んだのかもしれない。
・30年後の2011年は、ここでは言及されていないけれども
 東日本大震災による原発災害があった。
・40年後の2021年に、人類は滅ばないにしても、
 「コロナ禍&ワクチン禍 」 の発生をきっかけに
 何らかの大きな変化が起こされようとしているのかもしれない。
過去の歴史のパターンからすれば、 xxx1年 という単位で
何かが起きている or 起こされている ことになり、
今回だけ違うと考えるのも無理がある。
改革、革命、新時代、そして「グレートリセット」等の
きれいごとの標語が叫ばれる時には必ず「粛正」が伴う。
そんな土石流の流れに呑まれないようにするためには、
上流と下流の位置関係、つまり、
権力者側 と 一般大衆側 の、双方の考え方を知り、
いざという時に「避難できるようにしておくこと」 である。
それが唯一の、未知の現象への対応策だと思う。

中国製の激安ミニPC「NUCBOX2」を、FXトレーディング練習用に購入した

先日の Amazonプライムデーで、Core-i5搭載のミニPCが 35,000円くらいで売っていたので、買ってみた。
サイズは Mac mini よりも小さく、デザインも悪くない。
定価は45,000くらいで、9,000円引き+クーポン1,000円適用で、1万円引きで買えた。

商品名は GMK ミニPC となっていたけれども、NUCBOX2 という商品名らしい。
CPUは Core-i5 8279U で、4コア8スレッド、メモリが8GB、256GBのSSDというスペックなので、かなりお買い得である。

GMKという会社のホームページは英語だったけれども、調べてみると、中国のようである。
こんなに激安なのだから、少しくらい怪しくても仕方がない。

きれいな箱に入っていたけれども、さっそく空けてみると、やはり、中華品質であることに納得した。
コネクタがズレていて、HDMI端子が刺さらない!

完成品を期待して買ったとしたら、これは紛れもなく「不良品」ということになるけれども、ベアボーンキットの完成版だと考えれて期待していなければ、それほど問題ではない。

さっそく中を開けてみると、やはりマザーボードのネジの付け方が、ズレている。

ネジを付け直して、マザーボードをきちんとはめたら、正常な状態になった。

起動してみると、Windows10 がプレインストールされていたので、いきなり使い始めることができた。

OSまで付いて、こんな激安で買えたのだから、お買い得だったと思う。

このPCは、FXトレーディングの練習用PCに使おうと思う。


4コア8スレッドなので、MT4を同時に起動しても、大丈夫だ。
ちなみに液晶CRTは別売りで、DELL S2421HSX-R という2万円くらいのモデル。
縦表示ができるので、トレーディング用に便利である。

Atom D2700(GMA3650)CPU搭載PCを Windows10 で、リモートデスクトップで活用

それほど古くないのに、Windows10に対応不可能というPCが、ある。
私が使っている、Shuttle製のベアボーンPC「X50V3」も、そのうちの一つである。
OS対応表を見ると、このPCだけは「Windows7 32bit」にしか対応していなくて、Windows10では動作しないらしい。

調べてみると、「X50V3」は、Intel Atom Processor D2700 というCPUを搭載していて、このCPUが問題とのことだった。
CPU内臓のグラフィックチップ Intel GMA 3650 のドライバが提供されていないことが原因のようである。

問題がグラフィックドライバなのであれば、標準グラフィックドライバで使うか、あるいは、リモートデスクトップで使えば問題ない、ということになる。

32ビット版の Windows10 だったら大丈夫だろうと思って、さっそくインストールしてみると、インストール途中で警告は出たけれども、標準グラフィックドライバできちんと起動した。

画面サイズと色は貧弱になるけれども、単純画面の「業務アプリ」や、コマンドで動作するようなコンソールアプリだったら、何の問題もない。
Windows95の時代に独自開発してしまったような古い規格のソフトを動かす場合や、単純なバッチ処理だけのソフトを動かす場合にも、何の不自由もない。

Atom D2700 は、CPUの速度はそれほど速くわけではないけれども、2コアで、計4スレッドで動作するので、業務用としては、まだまだ現役で使えると思う。

リモートデスクトップで接続して使うと、画面もフルHD(1920×1080)で使えるので、ほぼ何の制約もなく使える。

さすがに、リモートデスクトップでは、ゲームや動画再生等の使い道は厳しいけれども、それ以外はほぼ問題ない。2台目のPCとして、あるいは、サーバーとしての役割が適任だと思う。

古いPCには、古いソフトを入れて使うのがよいと思う。
私はこの「X50V3」を、バッチ処理を動作させるためだけに使っているけれども、最新OSでは動かなくなってしまった Windows95時代の16ビット版アプリを入れて使っている。
古いソフト専用のPC、という使い道ならば、ワットマンやハードオフ等で1万円以下で売られているようなジャンクPCをもう一度輝かせることができるかもしれない。

リモートデスクトップで使うなら、ディスプレイは要らないので、GMA3650だったとしても問題ない。

今までに作った、株式トレーディング用の分析ツールについて

昨年、ふとしたきっかけで、相場師朗先生の有料「株塾」に入会する機会を得て、
国内の個別銘柄の株式トレーディングを始めることになった。

それまでは、株価指数とFXしか やっていなかったので、
「銘柄選定」という行為は、ほぼ初めてのことだった。

証券会社のスクリーニングを使えば、業績の良さそうな会社を選べるけれども、
相場(あいば)式に基づく銘柄選定をやろうとすると、
既存のものではなかなかうまくいかないので、作る必要があった。

2020年1月11日に、とりあえず、たたき台として作ってみたのが、
「移動平均線サマリー ver0.1」である。
これは単に、一覧表示させてみただけ、である。

 

次のバージョン(ver2.0)では、日足・週足・月足 のそれぞれで、
PPP(パンパカパン)のシグナルの銘柄を抽出できるようにするとともに、
簡単なチャート表示もできるように改良した。

 

そして、ver3.0 になる頃には、きれいな一覧表示ができるようになって、
各移動平均線のクロス状況(上抜け、下抜け等)も表示させて、
「銘柄選定用」として実用的なツールになったと実感できるようになった。

 

この後は、移動平均線の数を増やしたり、前後9日間の損益経過を表示させたり、
随時、自分が欲しい機能をどんどん付けていった。
ver4.0の時に、PPP や 逆PPP の全体割合を示して、それを意識するようになった。

 

一覧機能は、ほぼ実用的になってきたので、その後はチャート画面の改善を加えていった。
そうして、ほぼ最終バージョンになったのが、
この「銘柄選定用 移動平均線サマリー ver5.7」 である。

一覧から検索・抽出して使う形式のツールは、ほぼ出来てきたので、
次に欲しくなったのは、「最初から お決まりの 抽出 がされた状態での表示」である。
それを固定ページ化したのが、
日経225+JPX400銘柄で、移動平均線が 月足・週足・日足で PPP(パンパカパン) の 銘柄一覧」サイトである。
https://kabu.hosono.jp/

 

これを作ったら次に、FXバージョンも欲しくなってしまったので、
株価指数+外国為替(FX)で、相場師朗先生のチャート分析を行うための相場情報」サイトを作った。
https://fx.hosono.jp/

実は、これらを作ってきた過程で、チャートを見たり分析する機会も増えたので、相乗効果はあったと思う。

私の自作ツールが、他の人に役立つかどうかは全く分からないけれども、
「ツール作り」が目的ではないので、自分だけに役立つわがままツールとして、
遠慮なく機能を盛り込むことができた。

まだまだ盛り込みたい機能はあるけれども、気が向いたら、手を付けようと思う。

完全解決! Google Chart で ローソク足+移動平均線チャート を表示すると、途中でズレと切れる!事象

以前、暫定的に解決していた、Google Chart でのローソク足チャートの表示不具合の件が、ようやく完全解決した。

その事象とは、ローソク足が10本、つまりグラフデータが10行以上になると、
途中で ズレ と 切れ、さらには、データの 抜け が発生して、表示が崩れてしまう、
という奇妙な事象だった。
Google Chart でローソク足と移動平均線

その後、いろいろと調べてみたけれども、WEBを検索しても同じ事例が見つからない。
Googleの公式ドキュメントを読んでも、そんな注意点は書かれていないので、原因が全く分からなかった。
結局、いろいろと試行錯誤しながらやってみたところ、
チャートの元データとなる、スプレッドシートの行に、
ダミーデータ行を一定間隔(8行ずつ)で2行挿入することで、暫定的に解決していた。

これだと、ローソク足10本以上でも、正常に表示させることに成功したが、
63行を超えると再び 抜け が発生してしまうので、まだまだ完全解決ではない。

今回、100本以上の長期チャートを表示されてみたくなったので、なんとか解決してみたくなって、いろいろなサンプル事例を使って、試してみた。
結局、データの行追加の方法を「google.visualization.DataTable」から「google.visualization.arrayToDataTable」へ変更してみたら、ダミー行無しで、正常に表示されるようになった。

これならば、ローソク足 300本でも正しく表示できる。
画面上で、表示スケールを調整できるようになれば、かなり実用的になる。

日足・週足・月足の同時連動チャートについても、今まで 60本までに制限していたのを、もっと増やすことができる。
できれば、日足は 120本、週足は 60本、月足は 30本 くらい を初期値にしたい。

私の自作チャートは、スマホ画面だと小さくて見づらいけれども、ピンチアウト操作で画面をズームアップして、安値と高値の数値を確認することができるので、それは意外と便利だと思う。

[サンプルソース Google Chart で ローソク足+移動平均線 の複合チャート]

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

// ライブラリのロード
// name:visualization(可視化),version:バージョン(1.1),packages:パッケージ(corechart)
google.load('visualization', '1', {'packages':['corechart']});

// グラフを描画する為のコールバック関数を指定
google.setOnLoadCallback(drawChart);

// グラフの描画
function drawChart() {

// メソッドからデータの生成
var data = new google.visualization.arrayToDataTable([
['2020/04/01',18784,18065,18686,17871,18689,18824,18822,18192,18704,21777,22454,21706],
['2020/04/02',18132,17818,17934,17707,18267,18655,18783,18301,18540,21680,22403,21700],
['2020/04/03',18059,17820,17951,17646,17901,18341,18537,18428,18365,21590,22349,21693],
['2020/04/06',18672,18576,17857,17802,18071,18239,18524,18597,18256,21506,22302,21688],
['2020/04/07',19162,18950,18878,18553,18449,18246,18461,18683,18219,21436,22258,21683],
['2020/04/08',19454,19353,19047,18730,18960,18503,18500,18664,18193,21362,22217,21680],
['2020/04/09',19406,19345,19376,19158,19216,18809,18561,18732,18189,21287,22178,21677],
['2020/04/10',19500,19498,19500,19235,19399,19144,18766,18743,18236,21212,22137,21673],
['2020/04/13',19355,19043,19312,19014,19295,19238,18941,18739,18317,21131,22095,21668],
['2020/04/14',19705,19638,19150,19093,19393,19375,19200,18811,18449,21059,22060,21666],
['2020/04/15',19660,19550,19589,19465,19410,19415,19340,18959,18576,20984,22022,21662],
['2020/04/16',19362,19290,19311,19154,19493,19404,19388,19106,18704,20904,21981,21657],
['2020/04/17',19922,19897,19575,19554,19579,19484,19466,19314,18871,20838,21947,21655],
['2020/04/20',19784,19669,19689,19611,19619,19609,19512,19423,19010,20766,21912,21652],
['2020/04/21',19529,19280,19479,19193,19615,19537,19481,19456,19070,20690,21875,21648],
['2020/04/22',19137,19137,19109,18858,19362,19455,19494,19435,19049,20612,21835,21642],
['2020/04/23',19429,19429,19313,19221,19282,19482,19465,19443,19087,20547,21796,21638],
['2020/04/24',19352,19262,19331,19175,19276,19355,19423,19420,19081,20481,21755,21633],
['2020/04/27',19819,19783,19410,19410,19491,19378,19494,19493,19116,20421,21718,21631],
['2020/04/28',19841,19771,19776,19638,19605,19476,19476,19507,19159,20368,21682,21627],
['2020/04/30',20365,20193,20105,20084,19916,19688,19551,19571,19265,20317,21651,21625],
['2020/05/01',20000,19619,19991,19551,19861,19726,19599,19604,19355,20262,21612,21621],
['2020/05/07',19720,19674,19468,19448,19829,19808,19676,19582,19448,20205,21575,21617],
['2020/05/08',20179,20179,19972,19894,19824,19887,19783,19633,19528,20152,21545,21615],
['2020/05/11',20534,20390,20333,20285,20081,20011,19944,19744,19600,20094,21516,21614],
['2020/05/12',20457,20366,20413,20293,20312,20046,20027,19867,19651,20037,21486,21614],
['2020/05/13',20329,20267,20140,20056,20341,20175,20098,19950,19697,19980,21455,21612],
['2020/05/14',20185,19914,20140,19902,20182,20223,20058,20016,19718,19914,21420,21608],
['2020/05/15',20198,20037,20149,19832,20073,20195,20118,20041,19767,19851,21386,21604],
['2020/05/18',20197,20133,20097,19999,20028,20143,20184,20077,19792,19792,21353,21602],
['2020/05/19',20659,20433,20469,20433,20201,20157,20220,20101,19836,19740,21317,21599],
['2020/05/20',20684,20595,20454,20454,20387,20222,20249,20199,19901,19697,21284,21596],
['2020/05/21',20734,20552,20692,20503,20527,20350,20276,20287,19934,19649,21249,21594],
['2020/05/22',20615,20388,20583,20334,20512,20420,20293,20308,19970,19598,21213,21590],
['2020/05/25',20741,20741,20653,20584,20560,20542,20411,20343,20043,19554,21182,21588],
['2020/05/26',21328,21271,20927,20918,20800,20709,20588,20433,20150,19531,21157,21587],
['2020/05/27',21475,21419,21249,21142,21144,20874,20771,20548,20249,19515,21133,21587],
['2020/05/28',21926,21916,21612,21580,21535,21147,20983,20748,20382,19514,21113,21588],
['2020/05/29',21955,21877,21807,21710,21737,21445,21166,20932,20487,19526,21094,21590],
['2020/06/01',22161,22062,21910,21898,21952,21709,21382,21125,20601,19538,21076,21591],
['2020/06/02',22401,22325,22175,22118,22088,21920,21659,21315,20708,19559,21061,21593],
['2020/06/03',22818,22613,22649,22462,22333,22159,21926,21516,20858,19584,21050,21596],
['2020/06/04',22907,22695,22885,22501,22544,22314,22130,21731,21009,19607,21045,21599],
['2020/06/05',22865,22863,22613,22563,22724,22512,22336,21978,21143,19642,21038,21604],
['2020/06/08',23178,23178,23121,23028,22912,22735,22516,22222,21282,19700,21038,21611],
['2020/06/09',23185,23091,23135,22933,23044,22888,22690,22404,21418,19754,21031,21618],
['2020/06/10',23175,23124,22939,22900,23131,22990,22841,22574,21561,19816,21024,21623],
['2020/06/11',22939,22472,22848,22466,22896,22946,22862,22630,21689,19881,21009,21627],
['2020/06/12',22350,22305,22082,21786,22634,22834,22818,22673,21803,19962,20992,21631],
['2020/06/15',22251,21530,22135,21529,22102,22504,22652,22620,21872,20038,20968,21631],
['2020/06/16',22624,22582,21912,21899,22139,22403,22612,22645,21980,20131,20954,21634],
['2020/06/17',22536,22455,22517,22318,22189,22269,22508,22630,22073,20226,20938,21637],
['2020/06/18',22432,22355,22363,22125,22464,22245,22403,22596,22163,20323,20922,21640],
['2020/06/19',22523,22478,22515,22352,22429,22280,22311,22557,22268,20416,20907,21642],
['2020/06/22',22575,22437,22353,22311,22423,22461,22306,22483,22352,20488,20893,21647],
['2020/06/23',22693,22549,22636,22257,22488,22455,22341,22429,22416,20538,20881,21651],
['2020/06/24',22663,22534,22541,22479,22507,22471,22484,22370,22472,20603,20872,21655],
['2020/06/25',22423,22259,22287,22165,22447,22451,22438,22348,22489,20651,20863,21659],
['2020/06/26',22589,22512,22424,22408,22435,22458,22446,22369,22521,20708,20854,21663],
['2020/06/29',22281,21995,22255,21969,22255,22370,22395,22416,22518,20759,20844,21665],
['2020/06/30',22448,22288,22335,22273,22265,22318,22368,22386,22516,20830,20835,21668],
['2020/07/01',22360,22121,22338,22039,22135,22235,22323,22353,22491,20901,20827,21669],
['2020/07/02',22267,22145,22182,22072,22185,22212,22265,22332,22464,20973,20817,21670],
['2020/07/03',22312,22306,22266,22154,22191,22171,22232,22315,22436,21036,20807,21672],
['2020/07/06',22734,22714,22341,22325,22388,22315,22297,22342,22413,21098,20796,21675],
['2020/07/07',22742,22614,22649,22540,22545,22380,22312,22349,22389,21153,20783,21678],
['2020/07/08',22667,22438,22481,22438,22589,22443,22375,22339,22354,21204,20771,21680],
['2020/07/09',22679,22529,22442,22434,22527,22520,22410,22366,22357,21255,20758,21683],
['2020/07/10',22563,22290,22534,22285,22419,22517,22434,22344,22357,21309,20742,21684],
['2020/07/13',22784,22784,22591,22561,22534,22531,22525,22423,22419,21361,20733,21687],
['2020/07/14',22677,22587,22631,22538,22554,22526,22565,22453,22420,21412,20724,21688],
['2020/07/15',22965,22945,22817,22800,22772,22627,22598,22535,22444,21473,20721,21690],
['2020/07/16',22925,22770,22907,22739,22767,22675,22620,22598,22465,21521,20715,21692],
['2020/07/17',22857,22696,22807,22643,22804,22756,22657,22637,22476,21571,20707,21694],
['2020/07/20',22788,22717,22772,22580,22728,22743,22684,22637,22490,21628,20701,21696],
['2020/07/21',22925,22884,22789,22780,22766,22802,22769,22664,22506,21691,20703,21698],
['2020/07/22',22855,22751,22791,22732,22784,22764,22764,22695,22517,21746,20707,21699],
['2020/07/27',22741,22715,22495,22429,22783,22753,22783,22714,22540,21804,20714,21701],
['2020/07/28',22842,22657,22735,22646,22708,22745,22741,22751,22547,21852,20729,21702],
['2020/07/29',22584,22397,22543,22366,22590,22681,22688,22712,22567,21895,20740,21704],
['2020/07/30',22506,22339,22489,22334,22464,22572,22637,22687,22570,21931,20753,21706],
['2020/07/31',22295,21710,22267,21710,22149,22364,22493,22564,22549,21966,20759,21707],
['2020/08/03',22214,22195,21947,21919,22081,22260,22395,22506,22552,22008,20767,21710],
['2020/08/04',22603,22573,22379,22379,22159,22243,22369,22494,22565,22048,20786,21715],
['2020/08/05',22554,22514,22479,22356,22427,22266,22341,22474,22555,22083,20814,21719],
['2020/08/06',22587,22418,22471,22362,22502,22282,22307,22427,22545,22118,20839,21724],
['2020/08/07',22436,22329,22433,22204,22420,22406,22297,22385,22540,22152,20868,21728],
['2020/08/11',22760,22750,22505,22497,22499,22517,22356,22388,22551,22199,20910,21733],
['2020/08/12',22874,22843,22747,22670,22641,22571,22517,22407,22579,22246,20964,21738],
['2020/08/13',23316,23249,23123,23111,22947,22718,22668,22492,22602,22298,21027,21745],
['2020/08/14',23338,23289,23323,23222,23127,22892,22770,22587,22637,22346,21090,21751],
['2020/08/17',23248,23096,23189,23068,23211,23045,22853,22726,22645,22387,21153,21758],
['2020/08/18',23128,23051,23097,22948,23145,23106,22944,22811,22659,22429,21218,21764],
['2020/08/19',23149,23110,22997,22953,23086,23159,23055,22865,22679,22474,21281,21771],
['2020/08/20',23078,22880,23003,22851,23014,23085,23074,22902,22687,22510,21328,21776],
['2020/08/21',23135,22920,23022,22920,22970,23011,23085,22952,22689,22537,21362,21782],
['2020/08/24',23012,22985,22913,22862,22928,22989,23047,23017,22701,22563,21405,21789],
['2020/08/25',23431,23296,23242,23225,23067,23038,23048,23072,22730,22586,21444,21798],
['2020/08/26',23348,23290,23257,23203,23190,23074,23076,23117,22762,22610,21487,21808],
['2020/08/27',23323,23208,23311,23177,23265,23140,23098,23112,22802,22629,21529,21817],
['2020/08/28',23376,22882,23232,22594,23127,23132,23066,23072,22829,22638,21578,21824],
['2020/08/31',23342,23139,23147,23102,23076,23163,23103,23076,22901,22647,21631,21832],
['2020/09/01',23206,23138,23089,23047,23053,23131,23134,23085,22948,22655,21684,21840],
['2020/09/02',23287,23247,23261,23170,23175,23123,23171,23098,22982,22661,21731,21847],
['2020/09/03',23580,23465,23524,23426,23283,23174,23196,23157,23029,22666,21776,21854],
['2020/09/04',23257,23205,23130,23098,23306,23239,23183,23185,23069,22668,21814,21861],
['2020/09/07',23218,23089,23145,23086,23253,23229,23166,23196,23107,22667,21852,21868],
['2020/09/08',23277,23274,23188,23129,23189,23256,23222,23194,23133,22680,21890,21875],
['2020/09/09',23059,23032,22966,22878,23132,23213,23207,23168,23142,22692,21929,21881],
['2020/09/10',23250,23235,23193,23134,23180,23167,23221,23171,23142,22721,21965,21889],
['2020/09/11',23412,23406,23114,23114,23224,23207,23244,23223,23147,22735,22004,21896],
['2020/09/14',23582,23559,23431,23429,23400,23301,23257,23265,23171,22753,22047,21903],
['2020/09/15',23477,23454,23438,23351,23473,23337,23293,23297,23191,22771,22082,21910],
['2020/09/16',23506,23475,23425,23397,23496,23426,23348,23319,23209,22788,22120,21917],
['2020/09/17',23446,23319,23416,23272,23416,23443,23354,23305,23231,22803,22161,21925],
['2020/09/18',23398,23360,23321,23290,23385,23433,23401,23320,23253,22816,22203,21932],
['2020/09/23',23370,23346,23245,23154,23342,23391,23417,23346,23271,22830,22242,21939],
['2020/09/24',23234,23087,23215,23039,23264,23317,23371,23327,23261,22844,22280,21945],
['2020/09/25',23272,23204,23217,23154,23212,23263,23321,23344,23256,22855,22315,21950],
['2020/09/28',23516,23511,23391,23303,23267,23302,23329,23372,23271,22880,22352,21956],
['2020/09/29',23622,23539,23410,23347,23418,23337,23338,23385,23304,22901,22385,21962],
['2020/09/30',23522,23185,23478,23170,23412,23305,23319,23348,23306,22919,22421,21967],
['2020/10/02',23365,23029,23294,22951,23251,23294,23272,23306,23301,22934,22455,21971],
['2020/10/05',23377,23312,23254,23252,23175,23315,23267,23289,23304,22950,22486,21977],
['2020/10/06',23441,23433,23420,23331,23258,23300,23316,23301,23303,22962,22516,21983],
['2020/10/07',23432,23422,23272,23272,23389,23276,23347,23307,23314,22976,22547,21990],
['2020/10/08',23701,23647,23506,23477,23501,23369,23367,23337,23341,22996,22581,21996],
['2020/10/09',23725,23619,23713,23552,23563,23487,23378,23390,23359,23014,22618,22003],
['2020/10/12',23597,23558,23588,23501,23608,23536,23431,23426,23385,23035,22653,22010],
['2020/10/13',23667,23601,23667,23490,23593,23569,23513,23435,23403,23049,22688,22017],
['2020/10/14',23656,23626,23545,23518,23595,23610,23558,23443,23414,23066,22720,22025],
['2020/10/15',23581,23507,23548,23458,23578,23582,23569,23475,23412,23076,22749,22032],
['2020/10/16',23538,23410,23478,23382,23514,23540,23567,23514,23410,23086,22777,22039],
['2020/10/19',23707,23671,23543,23543,23529,23563,23570,23549,23419,23103,22810,22046],
['2020/10/20',23674,23567,23587,23518,23549,23556,23563,23563,23432,23117,22838,22052],
['2020/10/21',23702,23639,23615,23611,23626,23559,23574,23585,23446,23129,22862,22058],
// データの順 安値,終値,始値,高値
// ※Excelだと始値,高値,安値,終値の順番です。ややこしいです:-)
], true);

// オプションの設定
var options = {
chartArea:{left:80,top:30,right:0,bottom:0},
legend: { position: 'none'},
backgroundColor: 'white',
colors: ['black'],
title: '日足 (2020/10/21 水) 1001 日経平均',
hAxis: {
format: 'yyyy/MM/dd',
direction: +1,
viewWindowMode: 'maximized',
},
vAxis: {
viewWindow: { min:20714 }
},
bar: {
groupWidth: '90%'
},
candlestick: {
fallingColor: { strokeWidth: 1, fill: '#ffffff' }, // black
risingColor: { strokeWidth: 1, fill: '#000000' } // white
},
width: 1200,
height: 600,
lineWidth: 1,
//チャートのタイプとして、ローソク足を指定
seriesType: "candlesticks",
//ローソク足だでなく、線グラフも表示することを記述
series: {

1:{
type: "line",
color: 'pink',
lineWidth: 2,
},
2:{
type: "line",
color: 'red',
lineWidth: 3,
},
3:{
type: "line",
color: 'black',
lineWidth: 2,
},
4:{
type: "line",
color: 'yellowgreen',
lineWidth: 2,
},
5:{
type: "line",
color: 'green',
lineWidth: 3,
},
6:{
type: "line",
color: 'blue',
lineWidth: 3,
},
7:{
type: "line",
color: 'purple',
lineWidth: 3,
},
8:{
type: "line",
color: 'orange',
lineWidth: 3,
},

}
}
// 指定されたIDの要素にローソク足を作成
var chart = new google.visualization.ComboChart(document.getElementById('chart'));

// グラフの描画
chart.draw(data, options);
}

</script>
</head>
<body>

<!-- グラフの描画エリア -->
<div id="chart"></div>

</body>
</html>

	

過去の 表計算ソフト(スプレッドシート) の思い出

表計算ソフト(スプレッドシート)といえば、マイクロソフトの EXCEL がほぼ一択だった時代がある。
2020年現在、他にも、Googleスプレッドシートや、Appleの Numbers、OpenOffice、LibreOffice等、いくつか選択肢がある。
スプレッドシートの機能は、ほぼ成熟しているので、どれを使っても、それほど機能に違いがあるわけではない。

ここからは思い出話しになる。
PCの黎明期には、かつて、いろいろな表計算ソフトが登場し、消えていった。
思い出してみると、なつかしい。

PCの歴史からすれば、

・ソード(SORD)の「ピップス(PIPS)」
・Appleの「ビジカルク(VisiCalc)」
・マイクロソフトの「マルチプラン(Multiplan)」

等が出てくるけれども、残念ながら私は使ったことがない。

私が使ったことがあるものを時系列に並べてみたいと思う。

■書院カルク

1988年、私が大学に入学した頃に使っていたワープロ専用機「SHARP 書院 WD-650」に付属のソフト。
私にとって、これが初めての 表計算ソフト だった。
それ以前は、PC-8801mkII の N88-BASICで、表計算のようなものを作ったことはあった。
プログラムを作らなくても、項目を入力するだけで合計額を都度計算し直してくれるのを見て感動した記憶がある。
あまり大きな表は作れなかったけど、基本的な関数は使えて、学習用として非常に役に立った。
いろんなものを入力して計算して遊んで、楽しんだ。

■Lotus 1-2-3

1991年頃、既に社会人になっていた姉が PC-9801NS を買って、そこにソフトを入れて使っていた。
姉が「一太郎 と Lotus 1-2-3 が要る」と言っていたので、「一太郎dash」は買ったけど、「Lotus 1-2-3」は 98,000円くらいしたので躊躇して 9,800円の「アシストカルク」を勧められたような記憶がある。
当時、秋葉原のソフマップで、疑似レンタル方式(買って次の日に9割で売り戻す)で借りてきて、コピーして使っていた記憶がある。
業務用で使うわけではなく、あくまでも体験してみるだけなので、勘弁してもらおう。

その後、私が社会人になってから、Lotus 1-2-3 はすぐに活用することができた。

■エポカルク(EPOCALC)

富士通の独自OS「APCS」で動作する表計算ソフト。
私が新入社員の時、最初に使ったPCは、富士通の FMR-50Λ(ラムダ)シリーズだった。
これは、MS-DOSが動作する FMR-50 の機能と、富士通の独自OS「APCS」が動作する F9450シリーズの機能が両方入っている、非常に高価なPCだった。

その会社では当時、MS-DOSが使える人は少なくて、ほとんど「APCS」モードで使っていたので、表計算ソフトといえば「EPOCALC」だった。
Lotus 1-2-3 を使ったことがある私にとっては、とても貧弱で使いづらいソフトだったが、これしか知らない人には十分すぎる機能だったと思う。
グラフ作成のような機能はなく、あまり大きな表は作成できなかったと思う。

「EPOCALC」で最も困ったことは、四則演算の優先度 が他のソフトと違うこと、だった。
四則演算は、かけ算 と 割り算 が優先されるはずなのに「EPOCALC」は違っていた。
たしか、左から出てくる順に計算されていたような気がする。

せっかく括弧を使って、足し算 や 引き算 を優先に計算させようとしても、左から順番に計算されているようで、どうしても計算が合わなかった。

だから、Lotus 1-2-3 であらかじめ作成した表を、EPOCALCに移植すると、そのままの計算式だと計算結果が違ってしまうのである。

これを回避するためなのか、「EPOCALC」ユーザーが作成した表は、表の欄外に、計算途中の中間値を入れるセルがいくつか設けていることが多かった。
気をつけないと、欄外に数字が、ゴミみたいに印刷される。

■Quattro Pro(ボーランド製)

1993年、私が始めて Windows PC を買った時に、選んだ表計算ソフト。価格は 98,000円(税抜)。
当時、マイクロソフトの Excel はバージョン4で、同じ価格で機能がかなり見劣りしていて、迷ったあげくに「Quattro Pro」を選んだ。
Excelは、バージョン5の時に、現在と同じような機能が完成したが、そのほとんどが、当時の「Quattro Pro」で既に実現していたものだった。
右クリックで表示されるメニューや、複数のタブをグループ化したり切り替えたりできる機能は、この頃に完成したものだった。
Quattro Proは、その後、ボーランド社とともにPCの表舞台から姿を消し、今ではその名を知る人も少ない。

■三四郎 (ジャストシステム製)

一太郎ユーザーは格安で買えたので、試しに買って、いじってみただけ。
後に、商標の問題からか「ジャスト三四六」という名に変わった。
このソフトの存在を知っている人は、もともと、あまりいないと思う。

 

 

青ザリガニ(フロリダハマー)が2匹、我が家にやってきた。

ザリガニが2匹、新たに家族の一員になった。

数日前、息子がザリガニを持ち帰ってきたのが始まりだった。
本当に飼うつもりだったようなので、水槽を用意したのだが、
水槽に移す前に、残念ながら、亡くなってしまっていた。

きちんと埋葬して、彼はとても悲しんだけど、
せっかく水槽を用意したので、
代わりのザリガニを迎えようということで意見が一致した。

ところが、ザリガニを売っている店は、なかなか見つからない。

ちょっと大きめの、海老名の「かねだい」というお店で、
店員さんに「ザリガニはありますか?」と訊いてみたら、

「どのザリガニですか?」と返ってきた。
ザリガニにもいろいろ種類があるらしい。

「何のザリガニがあるんですか?」と訊いたら、

「アメリカザリガニは今いないです。そこになければ・・・・、あっ、いますよ」
と言われて、珍しい名前がついているザリガニが、いくつか売っていた。

結局、「フロリダハマー。ペアで 3,980円」という青いザリガニを買った。

店員さんが「ブラシで磨いてあげれば、きれいになりますよ」と言ってくれたけど、
そこまでする趣味はない。そういうマニアがいるのかもしれない。

ザリガニは臭い! という先入観があったけど、
熱帯魚と同じような水槽環境にすれば、べつに臭くはないらしい。

用意した水槽は、「テトラ ラクラクお手入れ金魚セット S」で、
小型水槽(幅29.0×奥行き16.0×高さ25.1cm。約10L)で、
外掛けフィルター(テトラ オートワンタッチフィルター AT-mini)が付いていた。

これに、底面フィルター(水作 ボトムフィルター S)を加えて、
金魚用の砂利を追加で入れたので、環境は、まずまずだろうと思う。

我が家の水槽は、グッピー水槽、金魚水槽、そしてこの ザリガニ水槽 で計3個になった。

青ザリガニ(フロリダハマー)

「はいからさんが通る」という少女漫画を一気読みした

dアニメストア(月額のアニメ見放題サイト) で、
「はいからさんが通る 劇場版」というのを偶然見つけて、ふと思い出した。

これは、小学校の頃に、姉が見ていたTVアニメだったと思う。
私も途中から見ていたけれども、最終回で話が中途半端に終わっていて、
気持ちの悪い終わり方に納得しないまま、数十年も忘れていた・・・のだった。

2~3年前に、そのアニメが40年ぶりに劇場版になっていた
ということは知っていたけれども、私は少女漫画の趣味は一切ないので
特に気にならなかった。

でもなぜか、今回、気になったのは、
「はいからさんが通る」は、たしか大正時代のお話だったので、
ちょうど100年前の スペイン風邪の話があったような気がしたからだ。

さっそく調べてみると、当時のアニメ版は、モスクワオリンピックの放送枠の関係で、
急きょ打ち切りになったために、あんなに 納得のいかない終わり方になってしまった らしい。

今回、2年前の 劇場版(後半)で初めて、その省略されていたストーリー部分の
アニメ化が実現したとのことなので、今さらながら、気になり始めた。

無料なので、劇場版アニメの前半と後半をひととり見て、ようやく納得した。
テレビシリーズ42話もひととおり見て、
原作の漫画8巻も、Kindleで一気読みして、
南野陽子の実写版(1987年)も Amazon Prime Videoで見た。

結果、スペイン風邪の話は、原作の漫画にも 劇場版にも出てこなくて、
TV版アニメの第37話だけに登場する、おまけの部分だった。

スペイン風邪のおかげで、出席できない女学生が多すぎたという事情で、
今年だけ特別に、出席日数が足りない生徒も卒業が認められることになり、
ヒロインの紅緒はすでに中退してたのに、親友のはからいで、
みんなで卒業式に出席することができた、というエピソードである。

それにしても、現在(2020年)は、
月額の動画見放題サービス や Kindleの電子書籍 のおかげで、
思いついたときに、一機に、まるごと観たり読んだりできるのが、嬉しい。

この「はいからさんが通る」という漫画は、あれほどのストーリーが
実質たったの7巻半、つまり、1日かからずに読み切ってしまえる分量で
ストーリーが完結しているのが驚きだった。

私は、アニメファンでもなんでもないけれども、
子供の頃に気になって忘れていたことの一つが解決したので、嬉しかった。

これも、コロナ禍騒動があったおかげで実現できたこと、なのだろうと思う。

解決! Google Chart でローソク足を表示すると、途中でズレと切れる!事象

WEB画面上に、ローソク足と移動平均線の複合チャートを表示するために、
「Google Chart」を使ってみたら、実に簡単に、実現することができたが、
うまく動作しなかった。

ローソク足が10本、つまりグラフデータが10行以上になると、
途中で ズレ と 切れ、さらには、データの 抜け が発生して、
表示が崩れてしまうのである。

その後、「Google Chart」以外にも、良さそうなツールはあったけど、
相場師朗先生が使用している移動平均線の色パターン
(相場師朗 「相場の赤本」(宝島社)の p93、p139 に記載)
で表示させようとすると、なかなか難しかった。

そこで、1つずつ試行錯誤しながら調べてみたところ、
ローソク足10本以上で、正常に表示させることに成功した。

例)日経平均株価 2020年4月28日の日足チャート 50本

もしかすると、オプションのパラメータをどこかいじれば
解決するのかもしれないけれども、結局、

チャートの元データとなる、スプレッドシートの表データに、
一定間隔で(8行ずつ?)、ダミーデータ行を挿入することで、解決した。

 

それでも、ローソク足が80本くらいを過ぎると、
この8行ずつの法則ではうまくいかず、法則が変わってしまうので、
またどこかに、ダミーデータ行を、追加する必要があり、
まだまだ100点満点の解決策ではない。

今回のグラフは、ローソク足と移動平均線を組み合わせた
複合グラフ(ComboChart)なので、何かもっと、
特別な設定が必要なのかもしれないけれども、それはまだ分からない。

ローソク足80本以上の表示が必要になった時に、
あらためて、解決しようと思う。

相場師朗先生の 株トレード技術 と 有料「株塾」との出会について

私が、相場師朗先生のことを知ったのは、2019年3月9日開催の、
パンローリング社イベント「投資戦略フェア2019」のことだった。

「一生モノの株のトリセツ」という本が、
ブルベア大賞2018 の「大賞」だったので、
それが、興味をもつきっかけになったことになる。

さっそくその日の朝、行きの電車の中で、Kindleアプリで
「マンガでわかる1億円株塾」という本を買ってすぐに読んでみたら、
とても分かりやすくて、内容も おもしろかった。

「投資戦略フェア2019」フェアの会場の書籍販売コーナーでは
相場師朗先生の本は一冊も販売されていなかったので、
帰りに、秋葉原の書泉ブックタワーに寄って買うことにした。

「株は技術だ!」だけが売り切れていたので、
それ以外を全部まとめて購入して、読み始めていた。

最初、ひととおり読んてみた感想は、内容はおもしろいいけど、
私が既に「知っていること」以上のノウハウは見つからず、
古典的ノウハウ(ダウ理論、グランビルの法則 等)を
いかにもオリジナル手法のように見せかけただけの商売臭さ を感じた。

インターネット上でも悪い評判がたくさん出ていているし、
怪しいので、あまり深入りしない方がよいのかな? くらいに思っていた。

ところが、2019年6月になって、「株は技術だ!」を入手して読んでみると、
評価が一変することになった。

直前に読んだ「株チャート図鑑」に書かれているような、
目を引きそうな おもしろい名前の「技」のことは一切載っていなくて、
今の 有料「株塾」の勉強会でやっているような
深いレベルの解説が盛り込まれていたことに気づいた。

特に、「建玉の操作」について書かれているところが新鮮だった。

私は、デイトレードやシステムトレードを経験してきているので、
両建てを容認している考え方は、新鮮だった。

そんなことを思っていた頃、
毎日しつこく出てくる迷惑ポップアップ広告の中に、たまたま

「2019/07/17 相場師朗のうねり取り株セミナー 今なら 3,000円が無料」

と出てきたので、ちょうど都合がよかった日なので、参加してみることにした。

セミナーは3時間程度だったけど、その大半は、
高額教材(SHIRO トレーダー養成基礎講座」)と 有料「株塾」の宣伝
に時間が割かれていたことは当然だけど、それが かえって よかった。

有料「株塾」や、直前の大練習会? の抜粋映像ばかりを紹介してくれたおかげで、
相場師朗先生のノウハウが、表面的な「決め技」を教えるレベルではなく、
もっともっと本質的(原因的、核心的)な 低レイヤー部分に位置する
プロのノウハウであることが理解できたので、無限の奥深さを感じたのである。

さっそくその場で、高額教材(SHIRO トレーダー養成基礎講座」)を購入し、
有料「株塾」に自動入会することになって、
そこからが私にとっての再スタートとなった。

さて、
相場師朗先生の書籍に書かれているような「技」や「手法」は、
あまりにも基本中の基本の「相場のイロハ」部分のものなので、
古典的ノウハウ(ダウ理論、グランビルの法則 等)と重なる部分も多く、
「門外不出の秘密ノウハウ」という要素 は 皆無 である。

難解な理論として語られることの多い、相場(そうば)の法則を、
初心者でも理解しやすく、実践で活用できそうな
ユニークな名前(下半身、9の法則 他)をつけて、
共通ルール(色や記号) を設けて、再現性のある「技術」として、
分かりやすく解説してくれているところに特長があると思う。

だから、相場師朗先生のノウハウを そのままパクって転用して
高額教材にして販売しているような 二番煎じ、三番煎じの 偽物くん が
氾濫してしまうのは、ある意味、宿命なのかもしれない。

かといって、
「この手法は相場師朗先生のオリジナル手法だから、権利侵害だぞ!」
と、いちいち主張していくのも限界があると思う。

偽物くん たちは、どんどん現れて どんどん消えていき、
どんどん現れて どんどん消えるような客 ばかりを引き寄せ続ける。

「最も 基本セオリーに忠実で、長い年月 信念を貫き通せた手法」こそが
最終的に生き残る、という法則は、株式トレードの世界も同じだと思う。

真贋を見分ける目」を持つことこそが、
株トレードにしても、人生にしても、根本的に重要なことだと思う。

相場師朗先生のノウハウの 神髄 は、

「知っていることを できることにする」、つまり、
「トレード技術の知識を使って、利益を出し続けられるようにする」

ということに尽きると思う。

今日は、相場師朗先生の新刊
「37年連戦連勝 伝説の株職人が教える 株の技術大全」の発売日。

有料「株塾」で 教えてくれている 秘伝ノウハウ を
もったいぶらずに 書籍でオープンにしてくれているので、
「真贋を見分ける目」を育みつつ、そのご厚意を十分に享受したいと思う。

知識を修得するフェーズまでは、
「書籍」や「無料動画」等で制限なしに学ぶことができるけど、
有料「株塾」は、そこから先のフェーズ(「できることにする」)
があるので、知識だけで終わらせたくない人にとって、
とてもよい選択肢 が用意されているのは幸いだと思う。

相場師朗先生のノウハウと、有料「株塾」については、
公式サイトから、どうぞ。

相場師朗 公式サイト
https://aibashiro.jp/

 

Google Chart でローソク足を表示すると、途中でズレと切れる!

WEB画面上に、ローソク足と移動平均線の複合チャートを表示したい!

過去のチャートだったら、画面ハードコピーでもいいけれども、
それをリアルタイムに表示させようと思えば、それなりのツールが必要になる。

幸い、現在は、無料で高機能なチャートを表示できるツールが溢れていて、
サンプルのコードをコピーしながら作れば、何となく作れてしまうので、
それほど難しい技術は必要としない。

ということで、メジャーで、利用者も多く、ノウハウ情報も多く見つかる
「Google Chart」を使ってみたら、実に簡単に、実現することができた。

ところが、試しに、
日経平均株価の直近100日分のチャートを表示させてみたところ、
途中で ズレ と 切れ が発生して、表示が崩れてしまう。
オプションのパラメータをいろいろといじってみたが、分からない。

Google Chart でローソク足と移動平均線

しかも、その切れた部分に該当する日のデータは、
飛んでいたり順番も違っていたりして、やっぱりおかしい。

結局、ローソク足が9本以内だったら、この影響は受けず、
10本以上になると、何かがおかしくなる。

「Google Chart」以外にも、ローソク足が表示できるツールは
まだまだ他にもいくつかあるので、解決が難しければ、
他のツールを試してみようと思う。

この画面のチャートのソースコードは、次のとおり。
一体、何が、ダメなのだろう?


<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=Shift_JIS”>
<title>Chart</title>
</head>
<body>

<!— ローソク足及び移動平均線グラフを配置 —>
<div id=’chart’></div>

<!— ここでGoogle Chartの読み込み —>
<script type=”text/javascript” src=”https://www.gstatic.com/charts/loader.js”>
</script>

<script type=”text/javascript”>

google.charts.load(‘current’, {‘packages’:[‘corechart’]});
google.charts.setOnLoadCallback(drawChart);

function drawChart(){
//チャートに描画するためのデータを入れる
var chartData = new google.visualization.DataTable();

//日付用のString型を一つ、四本値と5本MA用の数値型を計9個作成
chartData.addColumn(‘string’);
for(var x = 0;x < 9; x++){
chartData.addColumn(‘number’);
}
//行数
var length = 100;
//描画用のデータを一時的に入れる
var insertingData = new Array(length);

//[安値,終値,始値,高値,5MA,20MA,60MA,100MA,300MA]
insertingData[000] = [‘2019/08/19’,20502,20563,20590,20633,20499,21061,21176,21361,21770]
insertingData[001] = [‘2019/08/20’,20582,20677,20605,20684,20544,21024,21169,21352,21764]
insertingData[002] = [‘2019/08/21’,20482,20618,20489,20626,20536,20974,21159,21342,21758]
insertingData[003] = [‘2019/08/22’,20584,20628,20706,20731,20581,20920,21149,21339,21753]
insertingData[004] = [‘2019/08/23’,20579,20710,20579,20719,20639,20868,21144,21331,21748]
insertingData[005] = [‘2019/08/26’,20173,20261,20325,20329,20579,20798,21133,21320,21742]
insertingData[006] = [‘2019/08/27’,20439,20456,20467,20529,20535,20740,21130,21314,21735]
insertingData[007] = [‘2019/08/28’,20433,20479,20474,20511,20507,20679,21131,21307,21728]
insertingData[008] = [‘2019/08/29’,20361,20460,20500,20520,20473,20626,21132,21297,21721]
insertingData[009] = [‘2019/08/30’,20633,20704,20641,20748,20472,20584,21131,21289,21714]
insertingData[010] = [‘2019/09/02’,20614,20620,20625,20667,20544,20560,21128,21278,21707]
insertingData[011] = [‘2019/09/03’,20578,20625,20581,20662,20578,20556,21124,21267,21700]
insertingData[012] = [‘2019/09/04’,20554,20649,20578,20694,20612,20559,21116,21255,21692]
insertingData[013] = [‘2019/09/05’,20787,21085,20800,21164,20737,20587,21114,21248,21686]
insertingData[014] = [‘2019/09/06’,21145,21199,21201,21241,20836,20618,21115,21242,21681]
insertingData[015] = [‘2019/09/09’,21182,21318,21214,21333,20975,20649,21120,21239,21676]
insertingData[016] = [‘2019/09/10’,21350,21392,21363,21438,21129,20696,21125,21236,21672]
insertingData[017] = [‘2019/09/11’,21437,21597,21466,21619,21318,20743,21133,21233,21669]
insertingData[018] = [‘2019/09/12’,21743,21759,21761,21825,21453,20811,21146,21229,21667]
insertingData[019] = [‘2019/09/13’,21820,21988,21907,22019,21611,20889,21157,21226,21664]
insertingData[020] = [‘2019/09/17’,21878,22001,21947,22041,21747,20961,21166,21224,21663]
insertingData[021] = [‘2019/09/18’,21942,21960,22014,22027,21861,21025,21177,21222,21661]
insertingData[022] = [‘2019/09/19’,22003,22044,22064,22255,21950,21097,21190,21221,21660]
insertingData[023] = [‘2019/09/20’,22047,22079,22130,22204,22014,21169,21205,21219,21660]
insertingData[024] = [‘2019/09/24’,22077,22098,22095,22168,22036,21239,21222,21218,21659]
insertingData[025] = [‘2019/09/25’,21906,22020,21961,22036,22040,21327,21233,21216,21658]
insertingData[026] = [‘2019/09/26’,21986,22048,22160,22184,22058,21406,21246,21213,21659]
insertingData[027] = [‘2019/09/27’,21733,21878,21934,21955,22025,21476,21248,21210,21659]
insertingData[028] = [‘2019/09/30’,21666,21755,21793,21811,21960,21541,21248,21208,21660]
insertingData[029] = [‘2019/10/01’,21811,21885,21831,21938,21917,21600,21252,21211,21661]
insertingData[030] = [‘2019/10/02’,21725,21778,21744,21795,21869,21658,21254,21214,21661]
insertingData[031] = [‘2019/10/03’,21277,21341,21422,21437,21727,21694,21247,21214,21658]
insertingData[032] = [‘2019/10/04’,21276,21410,21316,21410,21634,21732,21245,21217,21656]
insertingData[033] = [‘2019/10/07’,21328,21375,21445,21475,21558,21746,21242,21220,21654]
insertingData[034] = [‘2019/10/08’,21483,21587,21494,21629,21498,21766,21243,21224,21652]
insertingData[035] = [‘2019/10/09’,21359,21456,21359,21467,21434,21773,21239,21228,21648]
insertingData[036] = [‘2019/10/10’,21308,21551,21456,21601,21476,21780,21237,21231,21644]
insertingData[037] = [‘2019/10/11’,21658,21798,21749,21820,21553,21791,21242,21236,21641]
insertingData[038] = [‘2019/10/15’,22049,22207,22063,22219,21720,21813,21254,21245,21639]
insertingData[039] = [‘2019/10/16’,22434,22472,22479,22615,21897,21837,21278,21257,21638]
insertingData[040] = [‘2019/10/17’,22424,22451,22451,22522,22096,21860,21294,21270,21638]
insertingData[041] = [‘2019/10/18’,22466,22492,22528,22649,22284,21886,21312,21284,21638]
insertingData[042] = [‘2019/10/21’,22515,22548,22541,22581,22434,21911,21327,21297,21638]
insertingData[043] = [‘2019/10/23’,22457,22625,22619,22648,22518,21939,21343,21311,21638]
insertingData[044] = [‘2019/10/24’,22704,22750,22725,22780,22573,21971,21359,21328,21638]
insertingData[045] = [‘2019/10/25’,22715,22799,22753,22819,22643,22010,21378,21347,21639]
insertingData[046] = [‘2019/10/28’,22830,22867,22854,22896,22718,22051,21399,21370,21640]
insertingData[047] = [‘2019/10/29’,22935,22974,22950,23008,22803,22106,21420,21395,21641]
insertingData[048] = [‘2019/10/30’,22827,22843,22953,22961,22847,22160,21442,21420,21642]
insertingData[049] = [‘2019/10/31’,22875,22927,22910,22988,22882,22213,21465,21441,21643]
insertingData[050] = [‘2019/11/01’,22705,22850,22730,22852,22892,22266,21495,21462,21645]
insertingData[051] = [‘2019/11/05’,23090,23251,23118,23328,22969,22362,21537,21486,21647]
insertingData[052] = [‘2019/11/06’,23246,23303,23343,23352,23035,22456,21582,21507,21649]
insertingData[053] = [‘2019/11/07’,23253,23330,23283,23336,23132,22554,21629,21529,21651]
insertingData[054] = [‘2019/11/08’,23313,23391,23550,23591,23225,22644,21676,21551,21655]
insertingData[055] = [‘2019/11/11’,23323,23331,23422,23471,23321,22738,21720,21574,21660]
insertingData[056] = [‘2019/11/12’,23312,23520,23336,23545,23375,22836,21771,21598,21664]
insertingData[057] = [‘2019/11/13’,23270,23319,23439,23452,23378,22912,21815,21620,21667]
insertingData[058] = [‘2019/11/14’,23062,23141,23325,23360,23340,22959,21861,21642,21671]
insertingData[059] = [‘2019/11/15’,23121,23303,23160,23340,23323,23001,21909,21662,21674]
insertingData[060] = [‘2019/11/18’,23271,23416,23304,23420,23340,23049,21957,21681,21678]
insertingData[061] = [‘2019/11/19’,23244,23292,23366,23389,23294,23089,22000,21701,21682]
insertingData[062] = [‘2019/11/20’,23086,23148,23176,23303,23260,23119,22042,21720,21684]
insertingData[063] = [‘2019/11/21’,22726,23038,23071,23108,23239,23140,22083,21738,21686]
insertingData[064] = [‘2019/11/22’,23030,23112,23030,23219,23201,23158,22123,21759,21688]
insertingData[065] = [‘2019/11/25’,23255,23292,23292,23347,23176,23182,22173,21778,21690]
insertingData[066] = [‘2019/11/26’,23350,23373,23451,23608,23193,23208,22222,21799,21692]
insertingData[067] = [‘2019/11/27’,23418,23437,23452,23507,23250,23231,22271,21816,21693]
insertingData[068] = [‘2019/11/28’,23367,23409,23458,23482,23325,23259,22320,21833,21695]
insertingData[069] = [‘2019/11/29’,23273,23293,23497,23498,23361,23277,22363,21849,21697]
insertingData[070] = [‘2019/12/02’,23378,23529,23388,23562,23408,23311,22412,21868,21699]
insertingData[071] = [‘2019/12/03’,23186,23379,23231,23388,23409,23318,22458,21884,21702]
insertingData[072] = [‘2019/12/04’,23044,23135,23186,23203,23349,23309,22499,21900,21704]
insertingData[073] = [‘2019/12/05’,23259,23300,23292,23363,23327,23308,22536,21917,21706]
insertingData[074] = [‘2019/12/06’,23338,23354,23347,23412,23339,23306,22572,21936,21710]
insertingData[075] = [‘2019/12/09’,23360,23430,23544,23544,23320,23311,22607,21953,21713]
insertingData[076] = [‘2019/12/10’,23336,23410,23372,23449,23326,23306,22641,21971,21716]
insertingData[077] = [‘2019/12/11’,23333,23391,23421,23438,23377,23309,22671,21989,21718]
insertingData[078] = [‘2019/12/12’,23360,23424,23449,23468,23402,23323,22698,22009,21720]
insertingData[079] = [‘2019/12/13’,23775,24023,23810,24050,23536,23359,22732,22039,21724]
insertingData[080] = [‘2019/12/16’,23950,23952,23955,24036,23640,23386,22765,22063,21725]
insertingData[081] = [‘2019/12/17’,23996,24066,24091,24091,23771,23425,22800,22090,21727]
insertingData[082] = [‘2019/12/18’,23919,23934,24023,24046,23880,23464,22831,22113,21727]
insertingData[083] = [‘2019/12/19’,23835,23864,23911,23945,23968,23505,22861,22135,21727]
insertingData[084] = [‘2019/12/20’,23746,23816,23893,23908,23926,23541,22890,22155,21727]
insertingData[085] = [‘2019/12/23’,23810,23821,23921,23923,23900,23567,22920,22177,21726]
insertingData[086] = [‘2019/12/24’,23796,23830,23839,23853,23853,23590,22950,22199,21726]
insertingData[087] = [‘2019/12/25’,23782,23782,23813,23824,23823,23607,22981,22220,21725]
insertingData[088] = [‘2019/12/26’,23775,23924,23787,23931,23835,23633,23017,22244,21724]
insertingData[089] = [‘2019/12/27’,23837,23837,23953,23967,23839,23660,23050,22267,21723]
insertingData[090] = [‘2019/12/30’,23656,23656,23770,23782,23806,23666,23081,22292,21721]
insertingData[091] = [‘2020/01/06’,23148,23204,23319,23365,23681,23658,23112,22317,21719]
insertingData[092] = [‘2020/01/07’,23299,23575,23320,23577,23639,23680,23148,22347,21718]
insertingData[093] = [‘2020/01/08’,22951,23204,23217,23303,23495,23675,23179,22374,21717]
insertingData[094] = [‘2020/01/09’,23506,23739,23530,23767,23476,23694,23215,22406,21718]
insertingData[095] = [‘2020/01/10’,23761,23850,23813,23903,23514,23715,23255,22437,21722]
insertingData[096] = [‘2020/01/14’,23951,24025,23969,24059,23679,23746,23296,22473,21727]
insertingData[097] = [‘2020/01/15’,23875,23916,23923,23997,23747,23772,23331,22505,21732]
insertingData[098] = [‘2020/01/16’,23905,23933,23960,23975,23893,23798,23360,22541,21737]
insertingData[099] = [‘2020/01/17’,24013,24041,24103,24115,23953,23798,23386,22577,21741]

//チャート描画用の配列の中に、insertingDataの値を入れ込む
for (var i = length; i > 0; i–){
chartData.addRow(insertingData[i]);
}
//チャートの見た目に関する記述、詳細は公式ドキュメントをご覧になってください
var options = {
chartArea:{left:80,top:0,right:0,bottom:0},
legend: { position: ‘none’},
backgroundColor: ‘white’,
colors: [‘black’],
hAxis: {
format: ‘yyyy/MM/dd’,
direction: -1,
viewWindowMode: ‘maximized’,
},
bar: {
groupWidth: ‘90%’
},
width: 1920,
height: 1920,
lineWidth: 2,
//チャートのタイプとして、ローソク足を指定
seriesType: “candlesticks”,
//ローソク足だでなく、線グラフも表示することを記述
series: {
1:{
type: “line”,
color: ‘red’,
},
2:{
type: “line”,
color: ‘green’,
},
3:{
type: “line”,
color: ‘blue’,
},
4:{
type: “line”,
color: ‘purple’,
},
5:{
type: “line”,
color: ‘orange’,
},
}
};
//描画の処理
var chart = new google.visualization.ComboChart(document.getElementById(‘chart’));
chart.draw(chartData, options);
}

</script>

</body>
</html>

ペイント練習用の「チャート隠し」ツール ver3

先日(昨年)作った「ペイント練習用のチャート隠しツール ver2」

ペイント練習用の「チャート隠し」ツール ver2

を使って、自分のペイント練習で使おうとしたら、
いくつか不便を感じたので、少し改良してみることにした。

・対象ファイル名を 選択できるようにしたい!
・マウス(あるいはタップ)だけで、一時停止と再開をしたい!
(タブレットPCだと、カーソルキーが使えないので。)

こういうことも、「enchant.js」や「phina.js」を使うと、簡単に実現可能である。

そして、暫定的にできあがったのが、このページ。

< ペイント練習用の、チャート隠しツール ver3 >
https://shunichi.hosono.com/chart-mask3.html

 

残念ながら、ブラウザソフト側のセキュリティの関係で、
選択したファイルの「パス名」を取得することができない。

したがって、対象となるペイント練習画像ファイルがすべて、
このツールと同じフォルダ内に存在していることが利用条件となる。

設置方法は、ver2 と同じで、
次の3ファイルを、右クリックで ダウンロード選択して、
ペイント練習画像を溜めているのと同じフォルダへ入れておき、
chart-mask3.html をブラウザで起動すればよい。

・ダウンロードするページ 3種類

< ペイント練習用の、チャート隠しツール ver3 >
https://shunichi.hosono.com/chart-mask3.html

< enchant.js >
https://shunichi.hosono.com/enchant.js

< ブランク画像 >
https://shunichi.hosono.com/mask.png

 

多少の html または javascript の知識がある人は、
テキストエディタでカスタマイズすることも可能だし、
「enchant.js」や、他の開発技術を持っている人は、
これをきっかけ&ヒントに、もっともっと高機能な
練習支援ツールを開発してくれることをぜひ期待したい。

< chart-mask3.htmlのソース > ※未完成の箇所あり

<!DOCTYPE html>
<html>
<head>
<meta charset="Shift_JIS">
<title>Chart mask ver3</title>
<style>
body { margin: 0; }
</style>
<script src="enchant.js"></script>
</head>
<body>

<input type="file" id="targetfile" size="50" accept="image/*" onchange="chartmask()"><br>
<a href="#" onclick="chartmask()">start</a>

<script>
function chartmask(){

// ファイル名を取得
var imgFileName0 = document.getElementById("targetfile").value;
var array = imgFileName0.split(/\\|\\/);
var imgFileName = array[ array.length - 1];

// ライブラリの初期化
enchant();

// 変数の定義
var startX = 150; // スライド表示を開始する左位置
var maskspeed = 1; // スライド表示する速度
var maskadd = maskspeed; //
var isTouch = true; // タッチフラグ(タッチ中のみ true にする)
var isLeft = false; // タッチフラグ(右フリックで true にする)
var isRight = false; // タッチフラグ(左フリックで true にする)
var currentX = null; // 現在のX座標
var currentY = null; // 現在のY座標
var touchX = null; // タッチX座標
var touchY = null; // タッチY座標

// 1920×1080ピクセルサイズの画面(Canvas)を作成
var game = new Game(1920, 1080);

// フレームレートの設定。30fpsに設定
game.fps = 30;

// 画像データをあらかじめ読み込ませる
game.preload( imgFileName, 'mask.png' );

// データの読み込みが完了したら処理
game.onload = function(){

// チャート画像 を設定
var chart = new Sprite(1920, 1080);
// chart.image = game.assets['screenshot.png'];
chart.image = game.assets[ imgFileName ];
game.rootScene.addChild(chart);

// マスク画像 を設定
var mask = new Sprite(1920, 1080);
mask.image = game.assets["mask.png"];
game.rootScene.addChild(mask);
mask.x = startX;

// 説明文を表示します。
var Label1 = new Label("");
Label1.text = "マウスのクリック:一時停止と再開<br>" +
"左キー:少し戻る<br>" +
"右キー:少し加速<br>" +
"上キー:最初に戻る<br>" +
"下キー:一時停止";
Label1.font = "16px monospace";
Label1.color = "red";
Label1.x = startX; // X座標
Label1.y = 100; // Y座標
game.rootScene.addChild(Label1);

// シーンに「毎フレーム実行イベント」を追加します。
game.rootScene.addEventListener(Event.ENTER_FRAME, function(e) {
if( isTouch == true ) {
mask.x += maskadd;
}
});

// タッチイベントを登録
this.rootScene.addEventListener("touchstart", function(e) {
// タッチ開始
if( isTouch == true ) {
isTouch = false;
} else if( isTouch == false ) {
isTouch = true;
}

// 現在のマウス位置の取得
currentX = e.localX;
currentY = e.localY;

});

// フリック操作を監視
this.rootScene.addEventListener("touchmove", function(e) {
// 移動後のマウス位置の取得
touchX = e.localX;
touchY = e.localY;

if( touchX < currentX ) {
// 左フリック
isLeft = true;
} else if( touchX > currentX ) {
// 右フリック
isRight = true;
}

});

// フリック操作の判定
this.addEventListener("touchend", function(e) {
// タッチ位置をセット

if( isLeft == true ) {
// 左フリック
this.x -= (maskspeed + 1);
} else if( isRight == true ) {
// 右フリック
this.x += maskspeed;
}

});

// キー操作時に処理
mask.addEventListener('enterframe', function(){
if (game.input.left) this.x -= (maskspeed + 1);
if (game.input.right) this.x += maskspeed;
if (game.input.up) this.x = startX;
if (game.input.down) isTouch = false;
});

}

// 処理開始
game.start();

}
</script>

</body>
</html>

ペイント練習用の「チャート隠し」ツール ver2

先月作った「ペイント練習用のチャート隠しツール」と、
https://shunichi.hosono.com/?p=369

と、「チャートの自動めくり動画」を公開したところ、
https://shunichi.hosono.com/?p=443

数名の方から、ご意見・ご要望をいただいた。

・Chromeブラウザで利用できるようにしてほしい!
・いちいちキーを押さなくても自動でめくってほしい!
・自動再生を途中で一時停止したい!
・自動再生を、少し戻したい!

等々。

それほど難しい要望ではないけれども、
Windowsの「メモ帳」でカスタマイズできるくらいの
簡単なツールで実現しようとすると、それなりに難しい。

自動再生されているものを、一時停止したり戻したりするには、
アニメーションの停止やフレーム操作をすればいいかな? と思って
animation-play-state等、いくつかの方法を調べて試してみたが、
実際には、動かない。(transition で動かしたアニメは対象外?)

そこで思いついたのは、

ゲームを作るツールを使えば、てっとり早く実現するのでは?

ということだった。

実際、その通りで、以前に学んだ「enchant.js」を使えば
今回のようなものは、簡単に作ることができた。

「phina.js」等のような、さらに高速・高機能な
同種のツールが登場してきているようだけど、
「enchant.js」の書籍がたまたま手元にあって、
思い出したらすぐに使えるようになったので、
とりあえず、これを使うことにした。

ということで、暫定的にできあがったのが、このページ。

< ペイント練習用の、チャート隠しツール ver2 >
https://shunichi.hosono.com/chart-mask2.html

今度は、Chromeブラウザでも使えて、
自動再生 も 一時停止 も 少し戻り も可能である。

操作方法は、次のとおり。

白い部分をクリック:再生開始。
左キー:少し戻る
右キー:少し早く
上キー:最初に戻る
下キー:一時停止

このツールは、「メモ帳」で編集可能な 普通の html ファイルなので、
ソースをコピーするか、右クリックでファイルに保存すれば
カスタマイズして、使用可能である。

次の3ファイルをダウンロードして、
同じフォルダへ保存しておく必要がある。

・ダウンロードするページ 3種類

< ペイント練習用の、チャート隠しツール ver2 >
https://shunichi.hosono.com/chart-mask2.html

< enchant.js >
https://shunichi.hosono.com/enchant.js

< ブランク画像 >
https://shunichi.hosono.com/mask.png

対象の 画像ファイル(ペイント対象のチャート画面)は、
「screenshot.png」が初期値だが、
変更する場合は、「メモ帳」等で編集可能。

当然のことながら、カスタマイズするには、
多少の html または javascript の知識が必要となる。

< chart-mask2.htmlのソース >

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Chart mask ver2</title>
<style>
body { margin: 0; }
</style>
<script src="enchant.js"></script>
</head>
<body>

<script>
// ライブラリの初期化
enchant();
window.onload = function(){

// 変数の定義
var startx = 150
var maskadd = 2;

// 1920×1080ピクセルサイズの画面(Canvas)を作成
var game = new Game(1920, 1080);

// フレームレートの設定。
game.fps = 16;

// 画像データをあらかじめ読み込ませる
game.preload('screenshot.png',
'mask.png' );

// データの読み込みが完了したら処理
game.onload = function(){

// チャート画像 を設定
var chart = new Sprite(1920, 1080);
chart.image = game.assets["screenshot.png"];
game.rootScene.addChild(chart);

// マスク画像 を設定
var mask = new Sprite(1920, 1080);
mask.image = game.assets["mask.png"];
game.rootScene.addChild(mask);
mask.x = startx;

// キー操作時に呼ばれる
mask.addEventListener('enterframe', function(){
if (game.input.left) this.x -= (maskadd + 1);
if (game.input.right) this.x += maskadd;
if (game.input.up) this.x = startx;
if (game.input.down) this.x -= maskadd;
});

// タッチ開始時に呼ばれる
mask.addEventListener(Event.TOUCH_START, function(){

// シーンに「毎フレーム実行イベント」を追加します。
game.rootScene.addEventListener(Event.ENTER_FRAME, function() {
mask.x += maskadd;
});

});
}

// 処理開始
game.start();
}
</script>

</body>
</html>

ペイント練習用のハードコピー画像を、左から徐々に表示するツール

相場師朗先生の「株塾」で学んだ、
チャートギャラリーの画面ハードコピーに
コメントを書き込んでいく練習を行う際に、

同じ画面を、「動くチャート」で見てみると、
全く違った白熱感で、流れを見る ことができる。

移動平均線が横這ったり、クロスしたり、集中した後に、
ローソク足のトレンドがどのように変化するのか? は、
動きを見ながら練習すると、新たな発見がある。

これは、例えば、
白熱した会議が終わった後の ホワイトボードを見た時と同じで、
会議に参加して、それが書かれた経過を見ていたのと、
会議に参加せずに、書かれた結果だけを見たのでは、
伝わる質・量に違いがあるのと、同じことだと思う。

移動平均線が一斉に上昇して、PPP(パンパカパン)になる様子は、
動くチャートで見ると、その迫力が、より伝わってくる。
勢いのある PPP(パンパカパン)で空売りを入れるのは恐い!
というのが、実感として体験しやすいと思う。

で、その「動くチャート」の実現法だけど、
チャートギャラリーを自動でめくる方法もいいけれども、
今まさにペイント練習を行おうとしている、
その画像を、直接動かした方が、臨場感がある。

右端が見えない状態で右から左へスライドさせる、
という方法もあるけど、今回のターゲットはあくまでも
ペイント練習の 予習 と 復習」なので、
それと同じように、左から右へ徐々に見えていくのがよいと思う。

準備作業

  • PCのデスクトップ画面に「ペイント練習」というフォルダを作成する

  • ツール(paint-slideview.html)をダウンロードし、「ペイント練習」フォルダへ保存する。

paint-slideview.html
>> 右クリックで「ファイル名を指定して保存」を選択

都度の作業

  • ペイント対象のハードコピー画像を「screenshot.png」という名前で「ペイント練習」フォルダへ保存する。
  • paint-slideview.html をダブルクリックして、起動。

  

カスタマイズ方法( htmlの知識が、多少必要です )

  • paint-slideview.html を、「メモ帳」等で開き、表示スピードとファイル名を変更できます。

ペイント練習用の「チャート隠し」ツール (カーソルキー版)、もどうぞ。
https://shunichi.hosono.com/?p=369

日経平均株価のチャートを1秒ずつ自動的にめくっていく動画を作成

日経平均株価のチャートを1秒ずつ自動的にめくりながら、
目で確認できる動画を作ってみた。

既製品でも、このような機能を持つチャートソフトはあるけれど、
私の場合、現在 学んでいる 相場師朗先生の株塾 で使用している
相場(あいば)式の移動平均線 を使って実現してみたかったので、
自分で作ってみることにした。

「チャートギャラリー」ソフトの画面ハードコピー画像を
1つのフォルダに 時系列に名付けて、それを
Windows標準の「フォト」で動画を作成するだけだ。

エクスプローラから、ファイルを一括選択した状態で
右クリックして、「新しいビデオの作成」を選択すると、
Windows標準の「フォト」のビデオ作成画面が起動する。

こんな動画を何に使うのかというと、
トレード練習のトレーニング用 である。

ビデオは、1秒ごとにローソク足1本ずつめくっていくので、
そのまま眺めるか、あるいは早い速度で再生して眺めれば、

ローソク足 と 移動平均線(aiba式)の動き を目に焼き付ける

というトレーニングができる。

先の展開を予測しながら真剣に眺めるトレーニングを
何十回も繰り返して見れば、値動きのカンを養うのに役立つと思う。
月足だと、約22年分を約4分半、
週足だと、約30年分を約26分
で、見ることができるので、通勤電車で立っていても、気軽に見ることができる。

動画を見ながら、頭の中で「ペイント練習」や「チャートの感動リーディング」を行う。

そして、慣れてきたら、日足を使って、
再生速度を遅くしてみて、1本ずつ、建玉を記入していけば、
瞬発力を養うのに役立つトレーニングになると思う。

次の1手のトレード判断(エントリー、追加、手仕舞い)を
たった1秒で判断を下す特訓は、デイトレードでは必要になる。

 

日経平均株価(月足)チャートの自動再生 1997年1月~2019年11月

日経平均株価(週足)チャートの自動再生 1990年5月11日~2019年11月29日

日経平均株価(日足)チャートの自動再生 1988年9月20日~1999年12月30日

日経平均株価(日足)チャートの自動再生 2000年1月4日~2009年12月30日

日経平均株価(日足)チャートの自動再生 2010年1月4日~2019年12月6日

チャートギャラリーで、1日1画面ずつのハードコピー画像を、自動で一括保存する方法

パンローリング社の「チャートギャラリー」は、
過去の場面に戻って、先の展開(右側)が見えない状態で、
1日ずつめくりながら、トレード練習を行うことができる。

でも、そこで、画面に書き込みを行うことができたら最高だ。
先生のコメントと、自分のコメントを切り替えて、反省に役立てたり、
別のトレーディング日誌 や ブログへ貼り付けて二次加工したり、
いろいろとやりたいことがでてくる。

別のチャートソフトを使うか、作るのもいいけれども、
トレード練習は、自分が実際に本番で使うチャートを使いたいので、
やっぱり「チャートギャラリー」で、できた方が理想だ。

それならば、全部、画像ファイルに吐き出してしまえば、すべて解決する。
日足で、過去30年分だと 7,000~8,000日分になる。

これをいちいち、手作業で、1日ずつめくりながら
ハードコピーを取らなければならないと想像してしまう人には、
「それは無理だぁ」という考えになるかもしれない。
1枚あたり3秒かかるとしても、21,000秒~24,000秒、つまり6~7時間かかる。
これを根性でやり遂げた人がいたら、もちろん、称賛に値する 。

でも私の場合は、「ユースウェア」という技術があるので、
チャートギャラリーを1日ずつめくって7,000~8,000枚の画像を保存するのは、
「そんなの簡単だ」と、すぐに考えることができる。
私は根性はないので、手作業でやれと命令されたら「無理でぇ~す」になるけど、
自分なりのやり方でやってよければ、実現できる方法を探して、さっさと実現する。

そこで本題だけど、
チャートギャラリーを1日ずつめくって、1枚ずつハードコピー画像を保存するには、
「自動化」するソフト(ツール)を使えばよい。
今、はやりの言葉「RPA (obotic Process Automation)」も、ほぼ同じだ。

手作業でいちいち手間をかけて行っている作業は、
それを自動化することができれば、
その作業にかける時間を、
ほかのもっと重要なことに充てることができる。

たとえば、チャートギャラリーのハードコピー画面を、
大量に1枚ずつ保存しているのだったら、それを
トレード練習の時間に充てることができれば、その方がいい。

私はそんな思いで、今朝、とりあえず、
日経225先物 の 1990年から2017年までの画像を出力してみた。

 

使った道具は、uwsc という自動化ツールで、
次のようなスクリプトファイルを用意する。

// チャートギャラリーのウィンドウを選択
GETID("Chart Gallery")

// 真ん中付近で左クリック
BTN(LEFT,DOWN,533,23,0)

// [HOME] ボタンをクリック
KBD(VK_HOME , CLICK)

// 指定回数分繰り返し(数字は要調整)
FOR I = 1 TO 8000

// チャートギャラリーのウィンドウを選択
GETID("Chart Gallery")

// 右カーソルキーを押下
KBD(VK_RIGHT , CLICK)

// 0.5秒待つ
SLEEP(0.5)

// [Windowsキー]を押しながら[PrintScreen]キーを押下
KBD(VK_START , DOWN)
KBD(VK_SNAPSHOT , CLICK)
KBD(VK_START , UP)

// 0.5秒待つ
SLEEP(0.5)

NEXT

チャートギャラリーの画面を開いた状態で、これを実行すれば、
「右カーソルキーで1日めくって、ハードコピーを出力する」
という作業を、8,000回数分、繰り替えし自動実行してくれる。

すると、ピクチャ - スクリーンショット というフォルダに、
大量の画像が溜まってくるので、

これを一括で名前変更(rename)をするバッチファイルを作成して実行すれば、できあがり。

画像が溜まった後の、バッチファイルでの手順は、次のとおり。

 

(1)まず、チャートギャラリーで、チャートの数値データを、ファイル名をつけて(例 nik225f_D.txt)、テキスト出力しておく。
チャート画面で、 「表示」メニュー から 「表形式」を選択して、数値データの表示画面へ切り替える。

チャートギャラリーでデータ表示

チャートギャラリーでテキスト出力

 

(2)同じフォルダ内に、ファイル一覧をテキスト出力するためのバッチファイル「dir.bat」を作成し、実行する。

ファイル一覧を出力するためのバッチファイル

(3)自動出力された「ren.bat」を開き、一括リネーム処理を行うためのバッチファイルへと加工し、実行する。
縦方向のブロックコピー&貼り付け 等のテクニックも使うことになるので、
高機能なエディタソフト(秀丸エディタ 等)を使いこなしていないと、やや難易度が高いかもしれない。

一括リネーム用バッチファイル
加工前
一括リネーム用バッチファイル
加工後

 

以上のような操作は、大昔(MS-DOSの時代)からPCを使ってきた人が持っているスキルなので、新たに学ぶ機会は多くない。

最近の Windows PC でも、 昔のコマンドが発展しながら存続しているし、
PowerShell 等も使えるので、さらにいろいろな自動化ができるようになっているけど、
一部のシステム管理者を除いて、あまり利用する人はいない。

こういう、自動化の技があることを知っていると、ちょっと調べるだけで、
「やりたいこと」 が 「できること」 に変えることができるので、
自由度が高まって、時間をもっと有意義に使うことができるようになる。

「くりっく株365」の四本値をCSV形式で整形する方法

「くりっく株365」の四本値は、
無料でダウンロードすることは可能だけれども、
システムトレード用に、表形式にするには、
少しだけ加工する必要がある。

日経平均株価や現物株と違って、
「くりっく株365」はマイナーなので、
きれいな時系列の四本値データの入手は難しい。

そこで、EXCELを使ったデータ加工をしてみたので、
その方法を、紹介しておきたいと思う。
私は一応、「ユースウェア技師」という、幻の資格(?)
というか技能を持っているので、こういうのは得意である。

(1)価格データをCSV形式でダウンロードする

東京金融取引所の「くりっく株365:ヒストリカルデータベース」
https://www.tfx.co.jp/historical/cfd/
のページから、1年ずつ期間指定して、CSV形式でダウンロードする。

 

クリック株365のダウンドード画面

 

ファイル名を指定して、保存する。

クリック株365のCSVファイルの保存

以上の操作を、年数分、繰り返す。

 

(2)年単位にダウンロードしたファイルを、1つのCSVファイルにまとめる

ダウンロードしたファイルを、作業用ファイルにすべて移動させる。
この例では、 D:¥kabu365 というフォルダを作っている。

 

年単位に分かれたファイルを、1つの CSVファイルにまとめる。
メモ帳などのエディタを使って、1ファイルずつコピー&ペーストして作っても構わないけど、
面倒くさがり屋の人は、次のようなバッチファイルを作って、一発でやってしまう方が、楽になる。

 

合体されたファイル「cfd_result.csv」ファイルが出来上がる。

合体ファイル

(3)合体済みのCSVファイルをEXCELで開く

合体されたファイル「cfd_result.csv」をEXCELで開き、余分な箇所を削除する。
まず先に、主要な 四本値部分 を選択して、並び替えを行う。

合体済ファイルのEXCEL表示

 

次に、左の2列を削除する。

 

シートの一番下の方に、タイトル行他があるので、
タイトル行を1行だけ残して、それより下の行をすべて削除する。

 

タイトル行を選択して、切り取り、
先頭行に移動して、挿入する。

最後に、取引日で、並び替えを行う。

 

これで、クリック株365の四本値データが完成したので、
必要に応じてさらに加工し、CSV形式で保存すれば、できあがり。

 

ちなみに、この四本値を パンローリング社のチャートギャラリーで利用する場合は、
チャートギャラリー側であらかじめ、銘柄を新規登録(例えば 0365 「株365」)して、
指定のテキストファイルで取り込めばよい。

昨日分(2019/11/27)までのデータは、次のとおり。
これをチャートギャラリーで取り込めば、表示できると思う。

↓↓↓↓↓
株365のチャートギャラリー取込み用テキストデータ(kabu365_20101122-20191128.txt)

 

詳しい解説は、こちらへ。

https://www.hosono.org/2019/11/chartgallery-kabu365.html?m=1

日経平均株価の週足チャートと移動平均線 約17年間分(2003年~2019年)

日経平均株価の約17年間分(2003年~2019年)の動きを
週足チャートと移動平均線で俯瞰して見てみると、
現在(2019年11月)は、ちょうど、
上昇トレンド継続か?、それとも三番天井を打つか?
の転換点になっていることが分かる。

今までは、このような長期の俯瞰チャートを
ポイント・アンド・フィギュア または ローソク足だけ で
見ていたけれども、これに移動平均線を加えてみると、
今まで見えなかったものが、よく見えてくる。

前回高値(24,000円台)に到達して、上抜けたとしても、
その直後に すぐに下げてしまうようならば、
移動平均線の順番が入れ替わらないので、
失速してしまうリスクがある。

25,000円を上抜くほど、大きく上昇するか、あるいは、
24,000台で もみ合いながらも高値圏を維持できれば、
上昇時の「移動平均線パターン」になってくる。

上昇する時や、下落する時は、いつでも、
「移動平均線パターン」は、必ず 同じ経過を辿る。

だから、移動平均線は、
物理の諸法則と同じくらい、重要な意味を持つ。

ペイント練習用の「チャート隠し」ツール (カーソルキー版)

相場師朗先生の「株塾」で学んだ練習法の一つに、
チャート画面のハードコピー画像に、
売り買いのポイントや考察を書きこんで、
相場の流れをつかむ、という方法がある。

これを、野球やテニスなどの「素振り」練習のごとく、
毎日たくさん、習慣的にやることが推奨されている。

最初は、値動きの結果が見えている状態で、
つまり、カンニングしている状態で書き込んでいく。

ところがこのペイント練習は、
数をやっていくと、だんだんとマンネリ化して、
単純作業のように、手を抜いて行うようになりがちで、
これで脱落してしまう人も多い と想定される。

なので、ある程度分かってきたら、こんどは、
カンニングしなかった と仮定した想定で、
右の部分を一時的に隠して、本気で悩んで考えながら
こじつけて練習する、という練習を併用しながら、

だんだんとステップアップして実力をつけていくのが、
堅実なやりかただと思う。

ということで、
右の部分を一時的に隠して練習するのに、
私は、ちょっとしたツールを自作して使っている。

チャートギャラリーで建玉練習をする時のように、
キーボードの [右] カーソルキー で進めていきたい、
という こだわりがあるから、である。

ペイント練習用の「チャート隠し」ツール
ペイント練習用の「チャート隠し」ツール

以下のリンクをクリックすると、
ブラウザで1ページ開かれるので、
ペイント画面より前にこれを出して、
[右] カーソルキー でめくっていけばよい。

< ペイント練習用の、チャート隠しツール >
https://shunichi.hosono.com/chart-mask.html

このページは、普通の html ファイルなので、
ソースをコピーするか、ファイルに保存すれば
そのまま複製して、PCのハードディスクからでも起動できるし、
自分のPC環境に合わせて、内容を書き換えてもよい。

html の中に、以下の部分を貼り付ければ、動くと思う。
(Internet Explore か Edge で確認済み)

<script type="text/javascript">
<!--

window.focus();

Xsize = screen.width - 200
Ysize = screen.height

window.resizeTo( Xsize, Ysize ); // (左右 , 上下)
window.moveTo( 200, 0 ); // (左右 , 上下)

addEventListener("keydown", keydownfunc, false);

function keydownfunc( event ) {
var key_code = event.keyCode;

if( key_code === 37){ // 左に移動
window.moveBy( -5, 0); // (左右 , 上下)
window.resizeBy(+5, 0); // (左右 , 上下)
}
else if( key_code === 39){ // 右に移動
window.moveBy( 5, 0); // (左右 , 上下)
window.resizeBy(-5, 0); // (左右 , 上下)
}
}
// -->
</script>

チャートギャラリーの株価データを EXCELからピンポイントで参照する方法

パンローリング社の「チャートギャラリー」 というソフトは、
全銘柄の株価を過去30年分持っていて、そのデータを、
ActiveXコントロール で、VB や EXCEL等で利用することができる。

ところが、この機能については、
ソフトのヘルプ画面には記載されているが、
それ以外の情報があまりなく、
活用している人は多くないと思う。

パンローリング社のサイトで、
無料のサンプルプログラムが、
https://www.panrolling.com/etc/users/sakurai/
のサイトで公開されているけど、

株価を一括で読み出す方法は参考になるけれども、
ピンポイントで、たとえば

・「9101 日本郵船」の 「2019年7月17日」の「終値」を参照したい

というような場面で、どう使えばよいのか、分かりづらい。

メタトレーダー等、他のソフトとは違って、
「チャートギャラリー」は、プログラミングの専門家でなくても

EXCELから気軽に株価データをピンポイントで参照することができる

というのが特長であってほしい と思う。

先週、私がちょっと作ってみたので、
ノウハウを共有しておこうと思う。

「EXCELの関数」を作っておけば気軽に使える、

ので、独自関数として定義しておけばよい、ということになる。

次のような準備の後に、

・EXCELの「開発」タブの「Visual Basic」を選択

Visual Basic 設定

 

・マクロのセキュリティを押して、セキュリティセンターを表示

マクロのセキュリティ

 

・ActiveX の設定を確認

ActiveXの設定

 

・マクロの設定を確認

マクロの設定

 

・VBAの開発画面で、標準モジュールに追加して、プログラムを描き込む。

 

その後に、以下の関数を貼り付ければよい。
急いで作ったので、本格的に使うには、アレンジは必要かと思う。

関数の一覧

機能 関数名 引数 記述例
当日の始値を求める yori (銘柄コード, 取引日) =yori(1001, DATEVALUE(“2019/7/16”))
当日の高値を求める taka (銘柄コード, 取引日) =taka(1001, DATEVALUE(“2019/7/16”))
当日の安値を求める yasu (銘柄コード, 取引日) =yasu(1001, DATEVALUE(“2019/7/16”))
当日の終値を求める hike (銘柄コード, 取引日) =hike(1001, DATEVALUE(“2019/7/16”))
翌営業日の始値を求める yokuyori (銘柄コード, 取引日) =yokuyori(1001, DATEVALUE(“2019/7/16”))
翌営業日の終値を求める yokuhike (銘柄コード, 取引日) =yokuhike(1001, DATEVALUE(“2019/7/16”))
N営業日後を求める kdate (銘柄コード, 取引日, 加算日数N ) =kdate(1001, DATEVALUE(“2019/7/16”), 1)
銘柄名を求める kname (銘柄コード) =kname(1001)

 


'当日始値
Public Function yori(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1)
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    yori = Prices.Open(DatePos)

End Function

'当日高値
Public Function taka(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1)
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    taka = Prices.High(DatePos)

End Function

'当日安値
Public Function yasu(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1)
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    yasu = Prices.Low(DatePos)

End Function

'当日終値
Public Function hike(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1)
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    hike = Prices.Close(DatePos)

End Function

'翌営業日の始値
Public Function yokuyori(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1) + 1
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    yokuyori = Prices.Open(DatePos)

End Function

'翌営業日の終値
Public Function yokuhike(kcode As String, kdate As Date) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(kdate, 1) + 1
    
    Prices.AdjustExRights = True
    Prices.Read kcode
       
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    yokuhike = Prices.Close(DatePos)

End Function

'取引日
Public Function kdate(kcode As String, startdate As Date, addcount As Integer) As Long

    Dim Calendar As New ActiveMarket.Calendar
    Dim Prices As New ActiveMarket.Prices
    Dim DatePos As Long
    
    DatePos = Calendar.DatePosition(startdate, 1) + addcount
    
    Prices.AdjustExRights = True
    Prices.Read kcode
    
    '翌日が休場日ならば、
    If Prices.IsClosed(DatePos) Then
       DatePos = DatePos + 1
       
       '2日後が休場日ならば、
       If Prices.IsClosed(DatePos) Then
          DatePos = DatePos + 1
                
          '3日後が休場日ならば、
          If Prices.IsClosed(DatePos) Then
             DatePos = DatePos + 1
          
          End If
       End If
    End If
    
    kdate = Calendar.Date(DatePos)

End Function

'銘柄名
Public Function kname(kcode As String) As String

    Dim Names As New ActiveMarket.Names
    Dim C() As String, N() As String
    
    Names.AllNames AM_KINDFLAG_SPOTS, C, N
    
    mpos = Application.Match(kcode, C, False)
    
    If IsError(mpos) Then
       kname = mpos
    Else
       kname = N(mpos)
    End If
    
End Function

 

フォートラン プログラム用紙

家の中を整理していたら、
こんなものが発掘された。
「フォートラン プログラム用紙」

私は、これを使ったことはないけど、
その昔、コンピューターのプログラムは、
このような用紙に手書きで記入してから
入力専任者が入力する、というものだったらしい。

なぜそんな無駄なことを?? と思ったら、
昔は、今のようなエディタ等がないので、
入力した文字を都度訂正することができないので、
事前に完璧に清書しておく必要があったから? なのだろうか。

ワープロでさえも、最初の頃は、
事前に手書きで清書したものを入力する機械
として使われていたそうだ。

今はさすがにそんなことをしなくなったかもしれないけど、
事前に「人間が仕上げた 結果 」を入力して処理させる、
という発想は、あまり変わっていないのかもしれない。

便利になることと、効率的になることは、必ずしも一致しないのだろう。

細野俊一のトレーディング日記 再開

約16年前に、日経平均先物取引に初チャレンジした時の
「細野俊一のトレーディング日記」というホームページが、
自分のPCの中から発掘された。

その後、FXや株365等にチャレンジするも、
試行錯誤ばかりやっていて、利益が伴わなかったが、

今年になって相場師朗さんの書籍を見つけて、
「株塾」に入塾することになったのをきっかけに
利益を出す努力をしてみようと思い立った。

「株塾」3ヶ月目の節目なので、
トレーニングの過程を記録に残して、
自分の励みにしようと考えて、
次のブログを開始することにした。

「細野俊一のトレーディング日記」
https://usemanage.blogspot.com/

トレーディング関連の話は適時、
この新しいブログの方に更新していこうと思う。

ポイントアンドフィギュアによる、日経平均株価の値動き動画

日経平均株価の値動きを、一般的なチャートではなく、
ポイントアンドフィギュアという形のチャートで見ると、
「上下に」どのように動いてきたか? がよく見えてくる。

特に、レンジ相場から、支持線または抵抗線を突き破って
上下にブレイクアウトした時の、
値動きが跳んでいく様子が、よく見えてくる。

ポイントアンドフィギュアは、
時間の流れが一定速度ではないので、
途中経過が分かりづらい。

途中経過の歩みを見えるように改良したのが、
細野式ポイントアンドフィギュア である。

https://www.usemanage.jp/pfmonitor.asp

「ポイント&フィギュア」の基本に戻る

私はなぜ、「ポイント&フィギュア」にこだわるのか?

平成最期の日の今日、その答えが、とうとう分かった。
なぜ、こんな単純なことに気づかなかったのだろう。
今まで、遠回りしすぎていて、本質をすっかり見失っていた。

「ポイント&フィギュア」に独自の改良を加えて、
その欠点を補おうと、いろいろ工夫してみたが、
そんな必要も なかったかもしれない。

「ポイント&フィギュア」の極意は、
「価格の動きだけをシンプルに見せること」
なので、その基本に帰ったら、見るべきものが見えてきた。

「ポイント&フィギュア」だからこそ実現できる売買手法が、すごいのだった。

令和元年、「細野式トレーディング」が本格始動します。

https://www.usemanage.jp/pandf/

 

3DプリンタのSDカード内のファイル数は少なくしておこう

3Dプリンタ「ANYCUBIC I3 MEGA」を使っていたけど、ここ最近、

「印刷開始直後に、すぐに終了して、何も動かない」
「印刷途中なのに、終了してしまう」

という、おかしな事象が起きるようになった。

機械の調子が悪いわけでもなく、ファイルの中身も問題なさそうだし、
この事象が発生するファイルと発生しないファイルがあって、
一体何が原因なのか分からないので、気持ちが悪かった。

いろいろ調べてみたら、SDカードからプリントする場合、
ファイル数が増えてきたり、
日本語のファイル名が存在すると調子が悪くなる、
という事象があるらしい。

いつも使っているSDカードを調べてみたら、
日本語名のフォルダが1つあって、
ファイルが60個以上あった。

これらのファイルを、下のフォルダへ移動させたら、
おかしな事象はすべて解決した。

「SDカード内のファイル数」が原因だったというのは意外だったけど、
安価な3Dプリンタでは、まだまだ このレベルのトラブルは
覚悟しておく必要がありそうだ。

Y!mobileは取り止めて、楽天モバイルの「スーパーホーダイ」へ、のりかえた。

先週、2台のスマホのうち、1台を MINEO にのりかえて、これは成功だった。
けど もう1台の ワイモバイルへの のりかえは、失敗した。

MNPを複数かけていたのが悪かったのかどうか分からないが、
ワイモバイルから、審査結果がきて、
「ご契約を見合わせて頂くことになりました。」

そこで急遽、別のサービスをさがしてみたところ、
「楽天ダイヤモンド会員向け特典」というのが目に止まって、
楽天モバイル(R-Mobile)の「スーパーホーダイ」が
かなり良さそうなので、それに決めた。

これは、一番安いプランで、
規定の通信容量2Gを超えた場合に、
スピードが1Mbps (混雑時は 300kbps)までしか落ちない
というもので、私の場合は、これで十分だった。

スピードが 128kbps とか 200kbps まで落ちてしまうと
明らかに、使い勝手が 大幅に落ちるけど、
300kbps だと、かなり違うことが分かっている。
(以前使っていた POINTY が 300kbpsだった)

格安SIM は、安いけど遅い のを覚悟して使うものなので、
規定の通信容量を使い切った後の速度を
とっても重要視した方がよいと思う。

アプリ更新、ダウンロード等 を「手動」にして
動画閲覧等も 必ず Wifi環境で行うようにすれば、
通信容量は それほど消費しないと思う。

MINEO と Y!mobile へ、のりかえた。

今月は、格安SIMへの変更を2台分やった。

au解約済の iPhone6S と
au契約中の iPhoneX である。

iPhone6Sの方は、SIMロック解除をしていなくて、
auを解約してから100日を超えると、
もう SIMロック解除は できないとのこと。

auのSIMロック状態のまま使えるのは
「MINEO」(VoLTE非対応版)だけらしいので、
それしか選択肢がなかった。

さて、iPhoneX の方は、
昨年、4年縛りで機種変更してしまったので、
2年目には絶対に解約しようと決めていたが、

1年経つと、各種キャンペーンの割引が終了して
月額料金が高くなることに気づいたので、
1年経たないのに、すぐに解約することにした。

残金は残り3年で払い続けるけど、
違約金とかを考慮しても、
前倒しで解約した方が、結局安くなる。

iPhoneXは My au のWEB画面から
SIMロック解除ができたので、
のりかえ先は、ワイモバイルにした。

ワイモバイルのオンラインショップで、
「Android One S1」が 100円のタイムセールで付いていて、
家族割りで 500円引きで、
「Yahooプレミアム」(月額約500円相当)が含まれていて、
ソフトバンクの WiFi スポットも使えて、
回線の品質も良さそうなので、これにした。

使えるエリアは auに比べれば狭くなるかもしれないけど、
どうせ docomoも一緒に持ち歩いているので、
あまり気にしなくてもいいだろう。

格安SIMに買えても、1年縛りとか2年縛りとか、
期間限定の割引(333キャンペーン、ワンキュッパ割 等)
が付いてきたので、またその頃に再検討しようと思う。

3大キャリア(ドコモ、au、ソフトバンク)と
MVNO(格安SIM提供会社)のどちらを選ぶか?について、
私の基準は、

・新発売のiPhoneに機種変更する時は 3大キャリア が有利
・手持ちの機器を使用する場合は、格安SIM が有利

だったけど、
その垣根がなくなりつつある。

やがては、個人ユーザーは全てMVNOを使うようになって、
3大キャリアは 法人向け(卸売)または セレブ向けの
上級ブランドに格上げされるのでは? と予測したい。

現時点では、高額なスマホ代を払い続けるのは、もったいないと思う。

NINTENDO LABO のリモコンカーを 3Dプリンターで作成してみた

NINTENDO LABO は、ダンボールだから壊れやすいと思っていたが、やっぱり壊れた。
そこで、3Dプリンターで、これと同じものを作れないだろうか? と考えた。

3Dデータのダウンロードサイト「Thingiverse」で、「NINTENDO LABO」と検索すると、いくつかヒットした。
https://www.thingiverse.com/

さっそく、リモコンカーを 3Dプリンターで作成してみた。

形はたしかにそれらしいものが出来上がるけれども、ジョイコンを挿入するレールの部分が、微妙にサイズずれしているので、まっすぐに挿入できなかった。

これは私の3Dプリンターの調整が不十分だったから、かもしれないけど、
数時間かけて再プリントするのは、もったいない。

3Dプリントの動作が記述されている、GCODEファイルの仕様を理解すれば、
特定の部位のところだけ、造形の密度、印字速度、重なり 等のパラメータを変えて、
より精密に印刷することが可能だと思う。

GCODEファイルの実体は、プレーン・テキストファイルで、
座標軸データのほか、プリントの指示が記述されている。

一応、ドキュメントはあるが、
https://reprap.org/wiki/G-code

3Dプリンターが一般に普及していないので、
これを分かりやすく記述した解説書などは、まだない。

今回作ったリモコンカーは、飾っておくだけのものになったけど、
3Dプリントのノウハウをもっと身に付けて、
これを正しく造形できるようにしたいと思う。

ロカボーイの、次に使う 交換ろ材 を、上に重ねて置く。

アクアリウムをやってみて、最初に疑問になるのが、
水槽の投げ込み式フィルターの、ろ材の交換方法である。

以前の水槽の時も、ジェックスの「ロカボーイ」シリーズを使っていた。
当時は知識がなかったので、交換時期が来ると、新しい ろ材 と交換していた。
これは、いけない方法である、ということは知っていた。
でも、他に ろ材と同じような素材のマットを敷いていて、バクテリアが全滅することはないだろうという判断である。
小さなベタ一匹だけだったので、それで十分だったと思う。

でも今回は、50cm水槽で、たくさんのタニシ、グッピー、コリドラス、カージナルテトラ等が泳いでいるので、以前の方法では良くない。

この水槽では、ジェックスの「サイレントフロー パワー」というフィルターが付属していたので、それを使っている。
このフィルターは、バクテリアをなるべく温存させるための工夫として、内部にもう1枚別のスポンジが入っていて、ろ材をまるごと交換しても大丈夫、とのことである。

でも、1か月経ってみて、念には念を入れようと思って、今日「ロカボーイM」を入れてみた。
これも、ろ材をまるごと交換すれば、バクテリアがいなくなってしまうそうなので、いろいろと調べていたら、

「次に使用する 新しいろ材を、ロカボーイの上に重ねて置くとよい」

という情報を見つけたので、それが一番よい方法だと思った。
あらかじめバクテリアがいる状態の交換ろ材を使えば、たしかに確実だ。

難点は、見栄えが悪くなることであるが、魚の健康の方を優先に考えたいので、今日の時点では妥協しようと思う。
今は、こんな感じである。

「サイレントフロー パワー」の前面をふさぐ形で「ロカボーイM」を置き、その上に、次回使う交換ろ材を置いて、さらにその上に、重りとして「土管ミニ」を 建てて置いてみた。

実はこれ、グッピーの稚魚が「サイレントフロー パワー」の前面の吸い込み口に近づかないようにするための障害物 という役目も果たしている。

しばらく、ダブルフィルターの状態で、続けてみようと思う。


My Company Links

合資会社ユースマネージメント
ドメインサービス
インターネット活用の入り口

My Website Links

細野俊一のトレーディング日記
日経225+JPX400銘柄の PPP(パンパカパン) 一覧
株価指数+外国為替(FX)の PPP(パンパカパン) 状態
「生命の科学」学習メモ
大安心と大冒険を求めて

Facebook Pages

ポイント&フィギュア活用研究会
合資会社ユースマネージメント
アダムスキー「生命の科学」活用研究会
細野俊一 (宇宙哲学研究家)