テクニカル分析の確実性

いろんな情報を仕入れていると、テクニカル分析に果たして意味があるのか日々疑わしくなってきました。
この本を読んで判断すべきでしょうけどね。→Amazon.co.jp: A Random Walk Down Wall Street: The Time-Tested Strategy for Successful Investing: Burton G. Malkiel: 洋書まだ数か月後になるだろうなぁ。本当に役に立つのかどうかは自分で証明するべきなので、解析用ソフトウェアの開発は続けます。
情報を仕入れはじめて1か月しか経っていませんが、上の書籍で進められているインデックスファンド運用は、日本では通用しないでしょうね。だってアメリカのダウはリーマンショックをあっという間に超えて伸び続けているけど、日経平均は危ういアベノミクスに支えられてすらバブル時代の半額です。っていうかダウに2倍レバレッジかけるだけで大儲けなんだぜーずるいよアメリカ。大体インデックスファンドって手数料取るんでしょ?なんか悔しくない?他人に仕事投げて手数料取られるのって。


The Rough Guide to Reggae (1997)


★★★★☆
レゲエはジャマイカ発祥のポピュラー音楽。ロックの影響をかなり受けているように感じました。暑くて気怠い感じを混ぜて、なんとなくこなれてない英語をラップのように混ぜる。このアルバムには洋楽的なポピュラー寄りの曲から、スカっぽい古臭い曲、ヒップホップに非常に近いCockney Translation(これが一番好きです)のような曲まで非常に幅広く収録されています。初代beatmaniaで最も簡単な曲だったのがJam Jam Reggaeというレゲエだったので、やや感慨深いですが、あのような陽気な曲は数曲しかありませんでした。フラメンコのときと同じで、先入観を持って聞くといい意味で裏切られます。


トレダビ

株取引シミュレーションサイト、トレダビというものが存在することを知り、一か月ほど前に登録しました。
kickzone さんのマイページ | 株初心者でも学べるバーチャル株投資ゲームならトレダビ
もちろん企業分析などロクにできていないので、買った銘柄はどれも直観です。安値なのかどうか判断する知識はないし、高値で掴んだ可能性も高いでしょう。今は好景気に沸いてるので勝ってますが、ここ1か月の状況なら10人が投資して10人が勝てるでしょう。ITバブルもすでに遠く、日本中あまりにもイケイケすぎるので、いずれ大幅な調整、下手すると暴落が来るはずです。いま本物のお金で参入したら天井を超えたときに絶対に痛い目を見ます。原資も10万ちょいしかないので、好景気の上澄みを掬うことしかできず、仕方がありません。ここで数年間修行してから、参入することになるでしょう。
まずは基本的なことから。目を付けた企業の決算書を少しずつ読んでいます。面白い!


n日移動平均

意外と簡単だった。

/**
n日移動平均を求める
*/
public static CalcSMA(hiashiArr: Array<Hiashi>, days: number): Array<DateVal> {
var retArr: Array<DateVal> = [];
var currentSum: number = 0;
for (var i in hiashiArr) {
var hiashi: Hiashi = hiashiArr[i];
var dv: DateVal = new DateVal;
dv.date = new Date(hiashi.ymd);
currentSum += Number(hiashi.close);
if (i >= days) {
var nPrevHiashi = hiashiArr[i - days];
currentSum -= Number(nPrevHiashi.close);
dv.val = currentSum / days;
} else {
dv.val = currentSum / (i + 1);
}
retArr[i] = dv;
}
return retArr;
}


緑:25日平均、青:75日平均
今日はここまで。


日足グラフが書けた + VS2013とGitHubの連携

kickzone/SHChart · GitHub
Visual Studio 2013 GitHubの使い方 : Exceedone Technical Knowledgeを参考に、VS2013とGitHubを連携することができた。これでソース管理も楽々だ。
小田急電鉄2014年後半の日足グラフ

次は折れ線グラフと移動平均線を試しに書いてみて、それができたら縦軸・横軸を追加し、さらにマウス連携の画面表示とスクロール・倍率操作を実装して、見栄えをよくした後最後にインターフェースを整えたら一通り終了だ。ここまで来たら、あとはすぐ実装できるだろう。


当面、シストレ・スイングトレードで参入することは不可能

1か月ほどいろんなサイト、書籍でチマチマと知識を入れてきた結果、今の段階でシストレで参入することは不可能、という結論に達した。
シストレは、取引回数をなるべく多くして期待値に近づける必要があるという性格上、スイングトレードのスタイルをとることが多い。トレード回数は、1日1回〜数回程度になるだろう。ところが資金が少ない現状では、単元株に届かないために変えない銘柄が多数あり、そもそも取引不能である。
単元未満株を買うことはできる。しかし手数料が高い。片道0.5%、往復1%かかる。通常売買の手数料が0.05%〜0.1%なので、約10倍もかかる。これは資金が少ないうちは痛い。さらに、リアルタイムの売買もできない。午前または午後の始値のみの取り引きであるので指値も使えない。したがって、現状可能なのは、単元未満株によるバリュー投資しかないだろう。もちろん単元株に達していればそれで取引するべきだが。今後原資が溜まるまで数年間は、バリュー投資に関する知識を蓄える必要がある。


Enrico Pieranunzi Trio & Ada Montellanico – Ma L’amore No (1997)


★★★★☆
The Complete Remastered Recordings on Black Saint & Soul Note のピエラヌンツィさんのシリーズも最後の1枚になった。これはAda Montellanicoさんというヴォーカリストをフューチャーした歌ものアルバム。トリオの演奏は言うことなし。素晴らしいです。たまに現れるEnrico Ravaさんのフリューゲル・ホルンも全く隙が無くまーーっすぐな音を出す。すげぇ。しかし肝心のヴォーカルが私にはあまり届きませんでした。悪くはないけれど、ふつーで、訴えてくるものが少なかったです。


Wes Montgomery – Full House(1962)


★★★★☆
Wes Montgomeryは1950-60年代に活躍したジャズギター奏者。ライブ版で、緊張感があるというよりは、とてもリラックスした演奏を聴くことができた。今のジャズギター奏者のお手本となるスタイルを作り上げた偉いお人だそうです。4曲目04 Blue ‘n’ Boogie-West Coast Bluesが一番好き。10分前後のサックスソロかっちょいいい。全体的に少し軽くないか?


PHP, jQuery + ajax 連携練習

最寄駅の時刻表を見て、いちいちNaviTimeやらを使って新宿駅に到着する時間を調べるのが面倒。
そんなニーズに応えるため、この時刻表(最寄駅は変えてあります)のページに細工をして、マウスカーソルを合わせると新宿駅到着時刻が出てくるようにした。
クライアント側ではページロード後に、時刻表から発時刻をサーバーにajaxで送って、新宿駅到着時間を返してもらう。サーバー側では、発駅発時刻を入力すると新宿駅までの経路を判定して文字列を返すPHPスクリプトを書く(実はこっちの方が面倒)。TrainNaviで作ったデータベースをそのまんま使用した。
さて、すべての時間を一気にajaxで問い合わせると、リクエストが200はあるから貧弱な自宅PCが悲鳴を上げそうだ。しかし、asyncをやめて順次問い合わせにすると、ページが表示されるまでとても時間がかかってしまう。というわけで、asyncにしつつ、1つ処理が終わったら次の処理を実行するようなチェーンの仕組みが必要だ。
概念図

処理開始→ajax処理   →ajax処理 →ajax処理・・・
↓       ↑ ↓      ↑
処理終了→↑処理終了→↑
↓           ↓
コールバック コールバック

出来上がったコード(開始駅を変えてあります)

//ajax処理をするメイン関数
function ktmain(start, end, time, service, cbObj, nextObj){
$.ajax({
async: true,
type: "POST",
url: "ktajax.php",
data: { start : start, end : end, time : time, service : service }
}).done(function( msg ) {
//コールバック(DOMの要素にmsgをセット)
cbObj.callback(msg);
//次なるktmainをコール あらかじめnextObjに引数などを保存してある
if(nextObj) nextObj.next();
});
}
//コールバック用オブジェクト
var KTCallBackObject = (function (){
function KTCallBackObject(dom) {
this.dom = dom;
};
KTCallBackObject.prototype.callback = function(msg){
//title属性をmsgに変更
this.dom.title = msg;
}
return KTCallBackObject;
})();
//メソッド実行用オブジェクト
var KTNextObject = (function (){
function KTNextObject(start, end, time, service, cbObj) {
this.start = start;
this.end = end;
this.time = time;
this.service = service;
this.cbObj = cbObj;
this.nextObj = null;
};
KTNextObject.prototype.next = function(){
//次の関数をコール
ktmain(this.start, this.end, this.time, this.service, this.cbObj, this.nextObj);
}
return KTNextObject;
})();
//メソッドチェーンを作成する
function MakeMethodChain(base, start, end, service){
var nextObjFirst, nextObjBefore;
for(var i=1; i<=21; i++){
var snum = ("0" + i).slice(-2);
var selector = "." + base + snum;
var root = $(selector);
if(root.size()){
//時刻
var hour = root.find(".diaHour").html();
var items = root.find("a");
for(var j=0; j<items.size(); j++){
//分
var minute = items[j].innerHTML.replace(/\s| /g,"").substr(0, 2);
var time = hour + ":" + minute;
//コールバック用オブジェクト
var cbObj = new KTCallBackObject(items[j]);
//次のメソッド実行用オブジェクト
var nextObj = new KTNextObject(start, end, time, service, cbObj);
//関連付けてチェーン作成
if(nextObjBefore) nextObjBefore.nextObj = nextObj;
if(!nextObjFirst) nextObjFirst = nextObj;
nextObjBefore = nextObj;
}
}
}
//先頭のメソッド実行用オブジェクトを返す
return nextObjFirst;
}
function DOMManupilation(){
var start = $("#station-name").find("a").html();
var end = (start == "足柄") ? "新宿" : "足柄";
//メソッドチェーンを作って、順次実行
//平日
var mcWeekday = MakeMethodChain("t1-time", start, end, 1);
//休日
var mcHoliday = MakeMethodChain("t3-time", start, end, 2);
//fire
//平日・休日 2列並列順次実行
mcWeekday.next();
mcHoliday.next();
}
$(document).ready(DOMManupilation);

これで、処理終了ごとにktmainがコールされることになり、しかもページの表示を妨げない。実行すると、4時台、5時台、・・・と処理が進んでいって、終電のtitle属性の表示が変わったのは30秒ほど後。やっぱりasyncなしじゃきついね。

サーバー側(開始駅を変えてあります)やっつけ

<?php
require_once 'funcs.php';
$start = $_POST["start"];
$end = $_POST["end"];
$service = $_POST["service"];
$time = $_POST["time"];
if(strlen($time) == 4) $time = "0" . $time;
if($start == "足柄"){
AshigaraShinjuku($service, $time);
}
function AshigaraShinjuku($service, $time){
$mysqli = OpenDb();
//足柄発の電車
$query = "SELECT * FROM tnroute WHERE linename = '小田急小田原線' AND startstation = '足柄' AND endstation='螢田' AND starttime='$time' AND service=$service";
$result = ExecQuery($mysqli, $query);
if($result->num_rows == 0) return;
$row = $result->fetch_assoc();
$trainname = $row['trainname'];
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$dest = $train[count($train)-1]['endstation'];
echo "$trainkind $dest"."\n";
echo "螢田 $time"."\n\n";
if($dest == "新松田" || $dest == "相模大野"){
//終点で乗り換える
$endtime = TimeTrim($train[count($train)-1]['endtime']);
echo "$dest $endtime"."\n\n";
$trainname = SearchNorikae($mysqli, $endtime, $dest, $service, true);
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$current = $dest;
$dest = $train[count($train)-1]['endstation'];
$loc = StartStation($train, $current);
$starttime = TimeTrim($train[$loc]['starttime']);
echo "$trainkind $dest"."\n";
echo "$current $starttime"."\n\n";
if(strpos($trainkind, "はこね") !== FALSE)
{
$endtime = TimeTrim($train[count($train)-1]['endtime']);
echo "$dest $endtime"."\n\n";
//ロマンスカーを使った場合は、もう一度検索
echo "(ロマンスカーを使わない場合)\n\n";
$trainname = SearchNorikae($mysqli, $starttime, $current, $service, true);
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$dest = $train[count($train)-1]['endstation'];
$loc = StartStation($train, $current);
$starttime = TimeTrim($train[$loc]['starttime']);
echo "$trainkind $dest"."\n";
echo "$current $starttime"."\n\n";
}
}
else if($dest == "町田"){
//相模大野で乗り換える
$loc = StartStation($train, "小田急相模原");
if($loc == -1) $loc = StartStation($train, "海老名");
$endtime = TimeTrim($train[$loc]['endtime']);
$new_trainname = SearchNorikae($mysqli, $endtime, "相模大野", $service, true);
if($new_trainname != $trainname)
{
echo "相模大野 $endtime"."\n\n";
$trainname = $new_trainname;
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$current = "相模大野";
$dest = $train[count($train)-1]['endstation'];
$loc = StartStation($train, $current);
$starttime = TimeTrim($train[$loc]['starttime']);
echo "$trainkind $dest"."\n";
echo "$current $starttime"."\n\n";
}
else
{
//乗り換えないでよかった
//$endtime = TimeTrim($train[count($train)-1]['endtime']);
//echo "$dest $endtime"."着\n\n";
}
}
else if(ExistStation($train, "新松田") && $dest != "成城学園前" && $time != "00:12"){
//新松田で乗り換える
$loc = StartStation($train, "新松田");
$endtime = TimeTrim($train[$loc]['starttime']);
echo "新松田 $endtime"."\n\n";
$trainname = SearchNorikae($mysqli, $endtime, "新松田", $service, true);
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$current = "新松田";
$dest = $train[count($train)-1]['endstation'];
$loc = StartStation($train, $current);
$starttime = TimeTrim($train[$loc]['starttime']);
echo "$trainkind $dest"."\n";
echo "$current $starttime"."\n\n";
}
$endtime = TimeTrim($train[count($train)-1]['endtime']);
echo "$dest $endtime"."\n\n";
if($dest == "経堂" || $dest == "成城学園前" || ($dest == "町田" && $time == "00:12")){
echo "新宿に着けません";
}
else if($dest != "新宿"){
//新宿につかなかったのでもう一本
$trainname = SearchNorikae($mysqli, $endtime, $dest, $service, true);
$trainkind = TrainKind($mysqli, $service, $trainname);
$train = Train($mysqli, $service, $trainname);
$current = $dest;
$dest = $train[count($train)-1]['endstation'];
$loc = StartStation($train, $current);
$starttime = TimeTrim($train[$loc]['starttime']);
echo "$trainkind $dest"."\n";
echo "$current $starttime"."\n\n";
$endtime = TimeTrim($train[count($train)-1]['endtime']);
echo "$dest $endtime"."\n\n";
}
}
function TrainKind($mysqli, $service, $trainname){
$query = "SELECT * FROM tntrain WHERE linename = '小田急小田原線' AND trainname = '$trainname' AND service=$service";
$result = ExecQuery($mysqli, $query);
$row = $result->fetch_assoc();
return $row['trainkind'];
}
function Train($mysqli, $service, $trainname){
$query = "SELECT * FROM tnroute WHERE linename = '小田急小田原線' AND trainname = '$trainname' AND service=$service";
$result = ExecQuery($mysqli, $query);
$train = array();
while($row = $result->fetch_assoc()){
$train[] = $row;
}
return $train;
}
function ExistStation($train, $station){
for($i=0; $i<count($train); $i++){
if($train[$i]['endstation'] == $station) return $i;
}
return false;
}
function StartStation($train, $station){
for($i=0; $i<count($train); $i++){
if($train[$i]['startstation'] == $station) return $i;
}
return -1;
}
function TimeTrim($time){
return substr($time, 0, 5);
}
function SearchNorikae($mysqli, $time, $station, $service, $up){
$query = "SELECT * FROM tnroute WHERE linename = '小田急小田原線' AND startstation = '$station' AND starttime>'$time' AND service=$service";
if($up){
if($station == "新松田"){
$query .= " AND (endstation = '渋沢' OR endstation = '本厚木')";
}else if($station == "相模大野"){
$query .= " AND endstation = '町田'";
}else if($station == "町田"){
$query .= " AND endstation = '新百合ヶ丘'";
}
}
$query .= " ORDER BY starttime ASC";
$result = ExecQuery($mysqli, $query);
$row = $result->fetch_assoc();
return $row['trainname'];
}
?>

Ludwig Van Beethoven, Amadeus Quartet – String Quartets Op. 59 No. 1, Op. 131 (111 Years of Deutsche Grammophon CD2)


★★★★★
ベートーヴェンのカルテットを2本。Op.59 の1〜4曲目がすごくいい!ベートーヴェンとしては独特な部類の曲に入ると思います。バロックっぽくないし、ダサさもない、誰の曲とも違う気持ちの良い曲です。少々音が古いけれど、演奏はとても上手で、雨上がりで快晴のときに見る山々のようにきらきらしてます。後半Op.131は素直で親しみやすく、最終曲では得意の泣きメロも見られます。おすすめ。