投機に関する考え方のまとめ①
年末にぶらぶらツイッターを見ていたら興味深い書籍を発見した。
「 マネーの公理〜スイス銀行家に学ぶ儲けのルール〜 」マックス・ギュンター
内容としてはブラック・スワンや敗者のゲームに通じるものがあるけれど、
新しいと思ったのが、利確に対する考え方。
プロスペクト理論に従うと、人は損切りは遅く利確は早くなる傾向を示唆していて
理屈的には利確のタイミングについては早すぎることに注意すべきと認識していたけれど、
本書は利確は早くすべしと説いている。
内容的には行動経済学の書籍の主張に近いんだけれども利確に対する考え方は対立しているのが興味深い。
今年の自分の資産運用に関する失敗は、3969の利確タイミングを逃したことで、
ただいま利確に関するタイミング設定を感覚ではなく機械的にやる方法を探っている。
技術屋の悪い癖が物事を複雑に解決しようとすることで、
ついついラズパイを使用してseleniumでスクレイピングでウンタラカンタラと思っていたけれど、
シンプルにブログに直感で書けばいいやんけと閃いたので活用する。
なんか、ボールペンのジョークを思い出す…。
Junkyard Review
あと、投資をばっさりと投機でくくっていることに好感。
利確目標設定
・3696 → ¥1928±30。買値の1.25倍と気持ちの余裕。ただし10%以上急騰/dayした場合はすぐに売却。
・2372 → すぐに売却。会社の業績が不安あり。そのまま持ってたら価値が下がりそう。
・2124 → 配当が良いので新高値圏に到達するまでガチホ。ただし10%以上急騰/dayした場合はすぐに売却。
・2978 → ¥2000±30。ただし10%以上急騰/dayした場合はすぐに売却。
そのほかのルールとしては、
・資産の約半分は現金で持つ。
・損切りは購入後最高値からの-10〜15%を超えた時。価値の低いままだらだら保有することを恐れる。
・オリンピック期間中に利確目標を見直し。
注目する指標としては、
・米国金利の変化
・営業キャッシュフロー
・売上・営業利益の成長率
・理論株価
Raspberry PiとVPSを使用した株データの解析
Raspberry Piを使って何かお金が儲かる方法ないかなーと思い、ラズパイで株式データと企業のPLやBSやキャッシュフローといった財務データを日々収集し、VPS上に理論株価を計算してくれるウェブアプリをつくってみた。
実は2年ほど運用してて、一昨年は結構もうかったんだけれども、去年はさっぱりで、結局市況しだいという事が判明してしまった・・・。
理論株価に関しては下記のサイトを参考に自己流にアレンジした計算方法を使用している。
media.rakuten-sec.net
キーワードを入力するとそれに対応した企業の株価と理論株価が表示されて、スマホからでもアクセスできるし作った当初は浮かれていたが、いまいち信用できないし、どうしたら精度をよくできるのか悩んでみたけど答え出ず。
チャート分析なんかと組み合わせると良いのかなーとか思いつつアイディアが出ない。
どんどんやったことを忘れてしまうし、せっかくなのでメモがてら日々の分析やコードを記録していこうと思い久々にブログ作成。
(もやはものづくりではない・・・)
USBマイクの音量をリアルタイムプロットする on raspberry pi 2 B
1秒間の入力データをダウンサンプリングしてRMS値を算出しコンソールに出力。
これを100秒繰り返し、その配列データをMatplotにて出力した。
Matplotの上のグラフが100秒間の音量に相当し、下のグラフが最後の1秒入力のダウンサンプリングした配列のグラフ。
RMSでの音量算出は、相対的に高い音は音量が低く、低い音は音量が高く出るような気がした。
周波数に依存するのかな?この辺りを突き詰めてみると面白いかもしれない。
実は、イビキ検知判定システムを作ろうとしているのです。
なんかイビキの周波数とかでなんかありそうやないっすか。
import numpy as np import threading import pyaudio import threading import matplotlib.pyplot as plt class plotSound: def __init__(self): self.chunk = 1024 self.FORMAT = pyaudio.paInt16 self.CHANNELS = 1 #サンプリングレート、マイク性能に依存 self.RATE = 16000 self.RECORD_SECONDS = 1 #pyaudio self.audio = pyaudio.PyAudio() #plot time self.plottime = 100 self.loopcounter = 0 self.data_rms = [] while True: #マイクからデータ取得 self.stream = self.audio.open( format = self.FORMAT, channels = self.CHANNELS, rate = self.RATE, input = True, frames_per_buffer = self.chunk) self.all = [] for i in range(0, self.RATE / self.chunk * self.RECORD_SECONDS): self.data = self.stream.read(self.chunk) self.all.append(self.data) self.data = ''.join(self.all) self.data=np.frombuffer(self.data, dtype="int16") #converting numpy-type-array self.np_data=np.array(self.data, dtype = np.float64) #downsampling self.overhang = len(self.np_data) % 100 self.down_data=self.np_data[:-self.overhang] self.down_data=np.reshape(self.down_data, (len(self.down_data)/100,100)) self.down_data=np.average(self.down_data, 1) #RMS calculation self.rms=np.sqrt(np.mean(np.square(self.down_data))) print self.rms self.data_rms.append(self.rms) self.stream.close() self.loopcounter = self.loopcounter + 1 if self.loopcounter == self.plottime : break plt.subplot(2,1,1) plt.plot(self.data_rms) plt.subplot(2,1,2) plt.plot(self.down_data) plt.show() if __name__ == '__main__': plot=plotSound()
・pythonリアルタイムプロット
音声データをMatplotでグラフ表示する on raspberry pi 2 B
raspberry pi 2 B へのmatplotのインストール
sudo apt-get install python-matplotlib
sudo apt-get install python-pip
sudo pip install drawnow
pythonを使用してプロットテスト↓
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-3, 3, 0.1)
y=np.sin(x)
plt.plot(x,y)
plt.show()
分割してRAWデータとローパスフィルタをかけたデータをプロット
# This program can plot sound data as graphs on matplot
import pyaudio
import sys
import time
import wave
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import os
if __name__ == '__main__':
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
#サンプリングレート、マイク性能に依存
RATE = 16000
#録音時間
RECORD_SECONDS = input('Please input recoding time>>>')
#マイク0番を設定
input_device_index = 0
#マイクからデータ取得
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
all =
for i in range(0, RATE / chunk * RECORD_SECONDS):
data = stream.read(chunk)
all.append(data)
stream.close()
data = ''.join(all)
data=frombuffer(data, dtype="int16")/32768.0
print data
#Lowpass filter
tap = 100
aftlowpass_data =
i = 0
j = 0
for i in range(0, len(data)-tap):
sum_data = 0
for j in range(0, 99):
sum_data = sum_data + data[i + j]
aftlowpass_data.append(sum_data / tap)
#converting numpy-type-array
np_data=np.array(data, dtype = np.float64)
np_aftlowpass_data=np.array(aftlowpass_data, dtype = np.float64)
#data plot
plt.subplot(2,1,1)
plt.plot(np_data)
plt.subplot(2,1,2)
plt.plot(np_aftlowpass_data)
plt.show()
p.terminate()
参考
・スレッドによるタイマー
一定時間毎の繰り返し
・numpy配列の作成・型変換
標準python、numpy、pandasを行ったり来たりするために① - Qiita
・matlibのインストール
Install numpy, matplotlib and drawnow for Python 2 - YouTube
・matplotの使い方
raspberry piを用いたリアルタイム音声処理の準備
忘備録としてraspberry piを使用した音声のリアルタイム処理に関するサイトを記しておく。
・VNC経由でidleが起動できない場合の対処法
python - tkinter through VNC without physical display - Stack Overflow
Write these few lines to etc/sudoers
*:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults env_keep += "DISPLAY"
Defaults env_keep += "XAUTHORITY"
And these few lines to ~/.bashrc
:
if [ -z "$XAUTHORITY" ]; then
if [ -e $HOME/.Xauthority ]; then
export XAUTHORITY=$HOME/.Xauthority;
fi;
fi
・USBマイクを使用した音声処理の環境構築
オーディオモジュールの優先順位の変更
raspberryPi と pyaudioで録音、音声波形処理 | 半端工作
録音用ファイルのサンプリング数を16000Hzとする。
・PyAudioによる音声リアルタイム処理
pyqtgraph+PyAudioによるリアルタイムで音声プロット - たけし備忘録
ArduinoによるPWM制御およびアナログ信号のシリアル通信による受信
win32apiってすごいですよね。
2001年に販売された本をまだ現役で使っています。
いつまでサポートされるんだろう?
今はwindows 8を使用していますが、自分が趣味で使用する範囲ではバリバリ動く。
新しいAPIを覚えるのはめんどくさいからなくならないでほしいな。
さて、そんなwin32apiを使用して、データのArduinoへ送信しPWM制御とアナログ信号の受信を行いました。 スレッドを使って、ボタン入力からデータの受信と送信を行います。
↑コンソール側制御GUI
//コンソール側のプログラムの一部
//MainClass内のデータ制御用スレッドの作成
DWORD WINAPI ThreadFunc(LPVOID vdParam)
{
MSG ThredFuncMsg;
bool Flag = TRUE;//無限ループを抜けるためのフラグ
ArduinoDrawing *deg2 = new ArduinoDrawing();//Arduino制御用クラスのインスタンス
HDC hdc = GetDC((HWND)vdParam);
while (Flag)
{
PeekMessage(&ThredFuncMsg, NULL, 0, 0, PM_REMOVE);//メッセージ確認およびキューからの削除
switch (ThredFuncMsg.message) {
case WM_SURE_TEST1://■ボタンが押されたらループから抜ける
{
Flag = FALSE;
break;
}
case WM_SURE_TEST2://speedupボタンが押されたら1を送信
{
deg2->SendingControl(1); //()内は送信用データ
PostThreadMessage(dwID, WM_SURE_TEST4, 0, 0);
break;
}
case WM_SURE_TEST3://speeddownボタンが押されたら2を送信
{
deg2->SendingControl(2); //()内は送信用データ
PostThreadMessage(dwID, WM_SURE_TEST4, 0, 0);
break;
}
case WM_SURE_TEST4://アナログデータの受信
{
deg2->TxMain((HWND)vdParam, hdc);
PostThreadMessage(dwID, WM_SURE_TEST4, 0, 0);
break;
}
default://三角ボタンが押されたらアナログデータの受信を開始。
{
deg2->TxMain((HWND)vdParam, hdc);
break;
}
}
}
ReleaseDC((HWND)vdParam, hdc);
//delete deg2; // <- ここでdeleteするとヒープ破壊のエラーが生じてしまう。どしよ・・・。
ExitThread(0);
}
Arduinoプログラム
/*
This code is used for rover program to control arduino
2015/10/21
*/
const int LED = 11;
int incomingByte = 0; // for incoming serial data
int roverSpeed = 128;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(LED,OUTPUT);
digitalWrite(LED,LOW);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.print(sensorValue);
Serial.print('\0');
if (Serial.available() > 0) {
incomingByte = Serial.read();
if(incomingByte == 1){
roverSpeed = roverSpeed + 16;
if(roverSpeed > 255) roverSpeed = 255;
analogWrite(LED,roverSpeed);
}
if(incomingByte == 2){
roverSpeed = roverSpeed - 16;
if(roverSpeed < 0) roverSpeed = 0;
analogWrite(LED,roverSpeed);
}
}
delay(100); // delay in between reads for stability
}
コンソールから1が入力された場合、16/256スピードアップ
コンソールから2が入力された場合、16/256スピードダウン
実験結果が下の写真になります。
DCモーターの代わりにLEDを使用し、ADC入力は圧力センサを接続しています。
コンソールGUIに表示されている内容が、ADC出力です。
SPEED UPボタンを押す度に光量が大きくなっていることがわかります。
あとはこれをモーターに変えれば良いハズ・・・。
~参考~
・web
http://monitorgazer.blogspot.jp/2013/06/carduinoled.html
http://www.japanese-makers.com/archives/157
・書籍