1か月ほどいろんなサイト、書籍でチマチマと知識を入れてきた結果、今の段階でシストレで参入することは不可能、という結論に達した。
シストレは、取引回数をなるべく多くして期待値に近づける必要があるという性格上、スイングトレードのスタイルをとることが多い。トレード回数は、1日1回〜数回程度になるだろう。ところが資金が少ない現状では、単元株に届かないために変えない銘柄が多数あり、そもそも取引不能である。
単元未満株を買うことはできる。しかし手数料が高い。片道0.5%、往復1%かかる。通常売買の手数料が0.05%〜0.1%なので、約10倍もかかる。これは資金が少ないうちは痛い。さらに、リアルタイムの売買もできない。午前または午後の始値のみの取り引きであるので指値も使えない。したがって、現状可能なのは、単元未満株によるバリュー投資しかないだろう。もちろん単元株に達していればそれで取引するべきだが。今後原資が溜まるまで数年間は、バリュー投資に関する知識を蓄える必要がある。
月別: 2015年2月
Enrico Pieranunzi Trio & Ada Montellanico – Ma L’amore No (1997)
Wes Montgomery – Full House(1962)
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)
Johannes Brahms, Claudio Abbado(cond,), Vienna Philharmonic Orchestra(orch.) – 21 Ungarische Tanze (Hungarian Dances) (111 Years of Deutsche Grammophon CD1)
★★★★☆
20世紀のピアニストたち、と並行して聞いていこうと思うボックスセット Amazon.co.jp: 111 Years of Deutsche Grammophon: 音楽。今日は1枚目の、ハンガリー舞曲集。マイナー調全開で、泣きの舞曲。何となく演歌に通じるところもある。とても美しい。しかし、美しいんだが感動できない。どことなく淡泊じゃない?と思った。ジャケットはすごくいい!
ローソク図試作品
仕事が多すぎて日曜日までずれ込んだ。まだ動かしていないけど、今日はここまで。
/// <reference path="scripts/typings/easeljs/easeljs.d.ts" /> module SHChart { export class CandleStick implements GraphElement { //ローソク本体 private body: createjs.Shape; //上ヒゲ private uShadow: createjs.Shape; //下ヒゲ private lShadow: createjs.Shape; //陽線か? private isYang: boolean; constructor(public date: Date, public open: number, public high: number, public low: number, public close: number) { this.isYang = open < close; } public getMax(): number { return this.high; } public getMin(): number { return this.low; } public paint(stage: createjs.Stage, min: number, max: number, x: number, width: number, xmin: number, xmax: number, ymin: number, ymax: number): void { //座標決定 //ToDo:0.8でいいのか? var bodyWidth = width * 0.8; var bodyXmin = x - width / 2; var bodyXmax = x + width / 2; var bodyYmin = ymin + (ymax - ymin) * ((max - (this.isYang ? this.close : this.open)) / (max - min)); var bodyYmax = ymin + (ymax - ymin) * ((max - (this.isYang ? this.open : this.close)) / (max - min)); var uShadowYmin = ymin + (ymax - ymin) * ((max - this.high) / (max - min)); var lShadowYmax = ymin + (ymax - ymin) * ((max - this.low) / (max - min)); //本体描画 var g: createjs.Graphics = new createjs.Graphics(); //ToDo:色の変更 g.beginStroke("#000000"); if (!this.isYang) g.beginFill("#000000"); g.drawEllipse(bodyXmin, bodyYmin, bodyXmax - bodyXmin, bodyYmax - bodyYmin); this.body = new createjs.Shape(g); stage.addChild(this.body); //ヒゲの描画 if (uShadowYmin < bodyYmin) { g = new createjs.Graphics(); //ToDo:色の変更 g.beginStroke("#000000") .moveTo(x, bodyYmin) .lineTo(x, uShadowYmin) .closePath(); this.uShadow = new createjs.Shape(g); stage.addChild(this.uShadow); } if (lShadowYmax > bodyYmax) { g = new createjs.Graphics(); //ToDo:色の変更 g.beginStroke("#000000") .moveTo(x, bodyYmax) .lineTo(x, lShadowYmax) .closePath(); this.lShadow = new createjs.Shape(g); stage.addChild(this.lShadow); } } public drop(stage: createjs.Stage) { if(this.body) stage.removeChild(this.body); if(this.uShadow) stage.removeChild(this.uShadow); if(this.lShadow) stage.removeChild(this.lShadow); } } }
クラス図としては
Chart(canvas1枚に対応) ← ChartHandler(UI担当)
1 |
n |
Graph(グラフ1本に対応)-固定要素、xy軸情報、マウスカーソルに対応する情報など
1 |
n |
GraphElement(グラフの値1日分に対応) 派生:CandleStick, Bar, Line
という感じか?まだまだ、完成しそうにない。来週中には、UIは度外視してグラフくらいは描けるようになるかもしれない。
時間がかかっても自作にこだわる理由。他人が作ったグラフや指標、シグナルを使うのってなんか悔しいじゃない。自分に都合がいいように改良できなくてもどかしいし、他人と同じことをやってるんじゃだめでしょ?
Slayer – Reign in Blood(1986)
75 Jahre Donaueschinger Musiktage 1921-1996 (CD1) Paul Hindemith, Igor Stravinsky, Ernst Krenek, Kurt Weill, Hans Haass
★★★★★_(┐「ε:)_ズコー
電子音楽に幻滅してきたことと、現代音楽成分が足りないことから、このボックスをセレクトした。
Donaueschinger Musiktag(ドナウエッシンゲン音楽祭)は、ドイツの小さな町ドナウエッシンゲンで開催される、初演作品のみの現代音楽祭。アクの強い曲を期待して聞いたら、やっぱりびっくりするような曲がある。
1枚目のトラックリストは次の通り。
1.
Quartet for Strings [no 3] in C major, Op. 16 by Paul Hindemith
Orchestra/Ensemble: Buchberger String Quartet
Period: 20th Century
Written: 1920; Germany
2.
Sonata for Piano in F sharp minor by Igor Stravinsky
Performer: Maria Bergmann (Piano)
Period: 20th Century
Written: 1903-1904; Russia
3.
Lustige Marsche (3), Op. 34 by Ernst Krenek
Conductor: Erich Schmid
Orchestra/Ensemble: Southwest German Radio Symphony Orchestra
Period: 20th Century
4.
Der Lindberghflug by Kurt Weill
Performer: Betty Mergler (Spoken Vocals)
Conductor: Hermann Scherchen
Orchestra/Ensemble: Berlin Radio Symphony Orchestra, Berlin Radio Chorus
Period: 20th Century
Written: 1929; Berlin, Germany
5.
Capriccio, Fugue and Intermezzo for player piano by Hans Haass
注目すべきは1と5。1曲目、ヒンデミットの弦楽四重奏は演奏が超高レベルで、意味不明すれすれの、まだ調性がわずかだけ残っているドキドキカルテット。この崩壊と調和のエッジを歩くような曲は大好きです。弦楽四重奏って宇宙だよな。Youtubeにありました。
5曲目は、自動ピアノのための曲。当時は1929年、パソコンのなかった時代の自動ピアノは、演奏データをパンチ穴で記録していたと思われる。パンチ穴だけでこんな複雑な曲を演奏させようなんて。。一体どんな苦労をしてパンチ穴の大群を空けたというのか。想像すると込み上げるものがある。っていうか馬鹿じゃねーの!!!!その馬鹿をあえてやってのけた Hans Haassさんすごい!Youtubeにありました。あまり有名な人ではないので、他の音源が全然残ってない。残念。現代なら、PCの力を借りてもっと高音質な音源が作れそうな気がする。が、楽譜が残っているとは思えないし、この曲の耳コピは無理か。
CDレビュー: Yes – Yes(1969)
★★★★★
プログレバンド、イエスの1stアルバム。イエスのアルバムは今まで5枚目のClose To The Edgeしか聞いたことがない。しかしこのファーストアルバム、方向性が見えにくいとはいえ、しょっぱなからレベルの高い作品を完成させている。何がすごいってドラムスです。ドラムなのに歌っている。右に左に揺れ動くドラムス。ジャズでもなかなかないです。ただの16分連打が迫ってくる様子を想像できますか?ヴォーカルも非常に抒情的で澄んだ声ですよね。2曲目I see you、5曲目Halord Land、ラストSurvival、この3つが◎。ちなみにセールスは鳴かず飛ばずだったそうな。
プログレッシブロックの他のCDレビューはこちらです。rokujo.hatenadiary.com