トップ 最新 追記

kaztomo日記


2017/06/01

_ kimono サービス

書籍実践 Webスクレイピング&クローリング を読んで、kimono というサービスの存在を知った。(^o^)/

  • webサイトの画面を見ながら、スクレイピングしたい部分をマウスでなぞって指定

  • 指定箇所に対するスクレイピング動作を API化してくれる

  • 自作プログラムで簡単スクレイピング実現!

なんて便利なんだ \(^o^)/

と思って、色々とググってみたら、2016年 2月にサービス終了してた orz

本が出版された時期では有益なサービスだったんだろうけど、 書籍情報であるがゆえの問題点である「情報の陳腐化」には 逆らえない。

やはり Scrapy を勉強するしかないか ┐(´д`)┌ヤレヤレ


2017/06/05

_ [FreeBSD][Python]FreeBSD-10.3R 上で Jupyter notebook (Python3.5) が動いているのはいいけど

俺がやりたいのはグラフ描画なので、numpy, pandas が使えないと 話しにならないんだが、FreeBSD の ports では、distから取ってくる fortran や numeric のソースファイルが Python2 用なんで簡単にはビルドできね~ (>_<)


2017/06/06

_ [Python]Tensorflow環境を整える

すでに導入している Anaconda が 4.3.0のために Tensorflow で使えない Python3.6環境だったり、 Quadra を使いこなすために Tensorflow-gpu を導入しようとして失敗していたり、

ImportError: No module named '_pywrap_tensorflow_internal'

なんてエラーが出ていたり、他にも問題があったりしたけど、ようやっと環境を整えた。

Jupyter Notebook からも使えている感じ。\(^o^)/

結局のところ、公式ドキュメント をちゃんと読もうという結果だった (^^;;

私の仕事場での Python環境:

  • Windows7 pro 64bit / Core i7-6700K
  • ELSA Quadro2000M
  • CUDA v8.0
  • cuDNN v5.1

最終的に行った手順は以下の通り

  1. NVIDIA CUDA 8.0 Toolkitをインストールする。(なんと 1.3GB!!)
  2. cuDNN Downloadサイトから、cuDNN v5.1 をダウンロードする。
    • NVIDIA Developer Membership に登録しないとダウンロードできないので、未登録な場合は新規登録する。
    • リストの先頭にある最新版 v6.0 を間違ってダウンロードしないこと。
    • →こっち。Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0
    • ダウンロードした圧縮ファイルを、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 へまるごと展開
  3. tensorflow パッケージを導入する
C:> pip install --upgrade tensorflow
C:> pip install --upgrade tensorflow-gpu
  1. Anaconda3 にて tensorflow 用の仮想環境を作成する
C:> conda info -e
# conda environments:
#
root    * C:\Anaconda3
C:> conda create -n tensorflow
C:> activate tensorflow
(tensorflow)C:>
(tensorflow)C:> pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.1.0-cp35-cp35m-win_amd64.whl
(tensorflow)C:> pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-win_amd64.whl
  1. Pythonを起動してインストールできているか確認する
(tensorflow) C:>python
Python 3.5.3 |Continuum Analytics, Inc. (snip)
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2017-06-06 HH:MM:SS W c:\tf_jenkins ... library wasn't compiled to use SSE instructions,..
2017-06-06 HH:MM:SS W c:\tf_jenkins ... library wasn't compiled to use SSE2 instructions,...
(snip)
2017-06-06 HH:MM:SS W c:\tf_jenkins ... library wasn't compiled to use FMA instructions,...

2017-06-06 HH:MM:SS I c:\tf_jenkins ... Found device 0 with properties: name: Quadro M2000 ...
pciBusID 0000:01:00.0
Total memory: 4.00GiB
Free memory: 3.87GiB
2017-06-06 HH:MM:SS I c:\tf_jenkins ... DMA: 0
2017-06-06 HH:MM:SS I c:\tf_jenkins ... 0: Y
2017-06-06 HH:MM:SS I c:\tf_jenkins ... Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro M2000, pci bus id: 0000:01:00.0)
>>>
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

参考にさせて頂いたサイト:


2017/06/08 為替データを PostgreSQL に取り込む

_ [Python][SQL]自前で為替データの検証をするために DBに取り込みたい

Python での読み取りだけでなく、他のプログラムからも保存データにアクセスしたい という思いもあり、お手軽な sqlite3 ではなくポスグレ(PostgreSQL) にしようと思う。

昔使ってたこともあるし、先日から JSONB といった新機能を使ってみたり、など、 個人的にはより使いこなしたいツールでもあるのよね。(^o^)/

為替データは GMOクリック証券のヒストリカルデータを使う。 サイトにログインしてから、ツール > ヒストリカルデータ へと進み、 2017年1月から今月までの月ごとの zipped データを取得して展開し、1つに結合して 2017.csvとして保存しておく。

というわけで、早速ポスグレへの取込方法をググって(I googled arround) とりあえず取り込んで見た。

% createdb forex
% pgsql forex
forex=# create table hdata (
forex-# id SERIAL primary key,
forex-# Date Date,
forex-# Time Time,
forex-# Open double precision,
forex-# High double precision,
forex-# Low double precision,
forex-# Close double precision,
forex-# Volume bigint
forex-# );
CREATE TABLE
forex=# COPY hdata (Date, Time, Open, High, Low, Close)
forex-# FROM '/path_to_csv/2017.csv' DELIMITER ',' CSV;
COPY 160500
forex=# select * from hdata where date = '2017-01-10' limit 10;
  id  |    date    |   time   |  open   |  high   |   low   |  close  | volume
------+------------+----------+---------+---------+---------+---------+--------
 6781 | 2017-01-10 | 00:00:00 | 116.415 | 116.465 | 116.406 | 116.459 |
 6782 | 2017-01-10 | 00:01:00 | 116.459 | 116.499 | 116.455 | 116.471 |
 6783 | 2017-01-10 | 00:02:00 | 116.471 | 116.485 | 116.406 | 116.415 |
 6784 | 2017-01-10 | 00:03:00 | 116.415 | 116.433 | 116.379 | 116.405 |
 6785 | 2017-01-10 | 00:04:00 | 116.405 | 116.413 | 116.362 | 116.364 |
 6786 | 2017-01-10 | 00:05:00 | 116.364 | 116.375 | 116.306 | 116.333 |
 6787 | 2017-01-10 | 00:06:00 | 116.333 | 116.346 | 116.296 | 116.305 |
 6788 | 2017-01-10 | 00:07:00 | 116.305 | 116.312 | 116.257 | 116.276 |
 6789 | 2017-01-10 | 00:08:00 | 116.276 | 116.301 | 116.246 | 116.266 |
 6790 | 2017-01-10 | 00:09:00 | 116.266 | 116.291 | 116.258 | 116.274 |
(10 行)

forex=#

個人的には、volume 情報も欲しいところだけど、GMOクリック証券のヒストリカルデータには 含まれておらず、この点は我慢するしか無い (-_-;;

これで、今回の小さな目的は達成したけど、このアクセス性を活かした活用方法の アイデアがショボイことに今更ながら気づいた ┐(´д`)┌ヤレヤレ


参考にさせて頂いたサイト:


2017/06/09 PostgreSQLを勉強する

_ [SQL]為替データを SQLで取り込むべく、SQLを勉強ちう

テーブル構造は、先日作成したものをそのまま作成。

前提条件:

他プログラムからは hdata テーブルを用いたクエリを行う。
一方で為替データがどんどん更新されていくとして、そちらは hdata_new テーブルを用いる。
一定時間経過すると hdata_new の内容を hdata に対して上書きする。

  • CSVファイルから hdata テーブルへ取り込む
COPY hdata (Date, Time, Open, High, Low, Close)
FROM '/PathToCsv/2017.csv' DELIMITER ',' CSV;
  • 取り込んだ行数を確認
SELECT COUNT(*) FROM hdata;
  • 同じテーブル構造を持つ hdata_new との比較
    • hdata にあって、hdata_new に無いデータ内容の確認
SELECT date,time,open,high,low,close,volume FROM hdata
EXCEPT
SELECT date,time,open,high,low,close,volume FROM hdata_new;
    • hdata_new にあって、hdata に無いデータ内容の確認
SELECT date,time,open,high,low,close,volume FROM hdata_new
EXCEPT
SELECT date,time,open,high,low,close,volume FROM hdata;
  • date, time が同一で、中身(為替データ)が異なるデータ数を確認
SELECT count(*) FROM hdata, hdata_new
WHERE hdata.date = hdata_new.date
AND hdata.time = hdata_new.time
AND (not hdata.open = hdata_new.open OR not hdata.high = hdata_new.high...);
  • 該当するデータを hdata から削除
delete FROM hdata USING hdata_new
WHERE hdata.date = hdata_new.date
AND hdata.time = hdata_new.time AND not hdata.open = hdata_new.open;
  • hdata_new に有って、hdata に無いデータを追加
INSERT INTO hdata (date,time,open,high,low,close,volume)
SELECT date,time,open,high,low,close,volume FROM hdata_new
EXCEPT
SELECT date,time,open,high,low,close,volume from hdata;
  • 更新された結果を確認してみる
SELECT * FROM hdata ORDER BY date desc, time desc LIMIT 10;

2017/06/10 RDBMS の必要性

_ [SQL]為替データを他プログラムから参照するためだけなら

RDBMSじゃなくとも良いような気がするんだけど、 他に良い手段を思いつかない(=知識が乏しい)┐(´д`)┌ヤレヤレ


2017/06/11

_ [SQL]ダメだ。sqlite3 使いづらい (>_<)

個人的には sqlite3 も使い慣れたいと思いつつ、

  • コマンドラインで履歴を呼び出して編集しようとした場合、マルチラインなコマンドがまとまった状態でヒストリー呼び出しできずに、過去コマンドを活用しづらい。
  • delete で using が使えない?! ポスグレとの違いの壁 orz

挫折感だだ


2017/06/14 sqlite3 でも出来そう

_ [SQL]俄SQL使いでも、ググりながらなんとかデータ作成

ポスグレはたいそうだし、sqlite3のほうが軽い(と勝手に思っている)ので、 sqlite3 でも為替データ登録のための前準備処理が出来るか試してみた。

概要として、同じ日時であっても OHLC が異なる場合を想定し、 その場合は旧テーブルの行を削除しつつ、最新テーブルをコピーしてくる。

/* make hd, hd1 table. hd means Historical Data */
DROP TABLE IF EXISTS hd;
DROP TABLE IF EXISTS hd1;
DROP TABLE IF EXISTS hdtmp;

create table hd (
id INTEGER PRIMARY KEY AUTOINCREMENT,
Date TEXT not NULL,
Time TEXT not NULL,
Open REAL not NULL,
High REAL not NULL,
Low  REAL not NULL,
Close REAL not NULL
);

create temp table hdtmp (
Date TEXT not NULL,
Time TEXT not NULL,
Open REAL not NULL,
High REAL not NULL,
Low  REAL not NULL,
Close REAL not NULL
);

create temp table hd1 as select * from hd;

/* import csv to temp table */
.import /PathToFOREXhistorical/2017.csv hdtmp

/* insert values from hdtmp to hd with automated ID */
INSERT INTO hd (Date, Time, Open, High, Low, Close)
 SELECT * FROM hdtmp;

DROP TABLE hdtmp;

/* insert temp data to hd1 */
INSERT INTO hd1 VALUES(1, '2017/06/08', '05:58:00', 6,6,6,6);
INSERT INTO hd1 VALUES(2, '2017/06/08', '05:59:00', 7,7,7,7);
INSERT INTO hd1 VALUES(3, '2017/06/08', '06:00:00', 8,8,8,8);
INSERT INTO hd1 VALUES(4, '2017/06/08', '06:01:00', 9,9,9,9);

/* count items */
SELECT "hd:";
SELECT count(*) FROM hd;
SELECT * FROM hd ORDER BY date desc, time desc LIMIT 10;

SELECT "hd1:";
SELECT count(*) FROM hd1;
SELECT * FROM hd1 ORDER BY date desc, time desc LIMIT 10;

/* count comparable data (same date, same time, but wrong OHLC) */
SELECT "differ between hd and hd1";
SELECT count(*) FROM hd, hd1
 WHERE hd.date = hd1.date
 AND hd.time = hd1.time
 AND (NOT hd.open = hd1.open);
SELECT hd.date, hd.time FROM hd, hd1
 WHERE hd.date = hd1.date
 AND hd.time = hd1.time
 AND (NOT hd.open = hd1.open);

/* delete comparable data from hd */
SELECT "Deleting comparable data";
DELETE FROM hd WHERE (date,time) IN (
 SELECT hd.date,hd.time FROM hd, hd1
 WHERE hd.date = hd1.date
 AND hd.time = hd1.time
 AND (NOT hd.open = hd1.open)
);
SELECT count(*) FROM hd;
SELECT * FROM hd ORDER BY date desc, time desc LIMIT 5;

/* inserting values from hd1 to hd */
SELECT "Inserting...hd:";
INSERT INTO hd (Date,Time,Open,High,Low,Close)
 SELECT Date,time,Open,High,Low,Close FROM hd1;

SELECT count(*) FROM hd;
SELECT * FROM hd ORDER BY date desc, time desc LIMIT 5;

参考にさせて頂いたサイト:


2017/06/15

_ [Python][SQL]とりあえず1分足を sqlite3 へ登録してみる

  • OANDA REST API にて、Tickストリームを取得し、OHLC情報を更新
  • setitimer を使って 60秒ごとに OHLC情報を fix
  • fixした OHLC情報と、現在時刻 (ただし秒は "00"固定) を sqlite3 へ execute

作成してみたら、こんな感じになった (^o^)/

Pythonでの SQL文 (ポイントの抜粋):

cDate = dnow.strftime("%Y/%m/%d")   # 2017/06/15
cTime = dnow.strftime("%H:%M:00")   # 09:01:00

sqlstr = "delete from hd where date=? and time=?"
conns = c.execute(sqlstr, (cDate, cTime)).fetchall()

sqlstr = "insert into hd (date,time,open,high,low,close) values (?, ?, ?, ?, ?, ?)"
conns = c.execute(sqlstr, (cDate, cTime,
                     _usdjpy[1], _usdjpy[2], _usdjpy[3],
                     _usdjpy[4])).fetchall()

sqlstr = "select * from hd order by date desc, time desc limit 2"
conns = c.execute(sqlstr).fetchall()

結果:

% sqlite3 USDJPY1.db
sqlite> select * from hd;
6|2017/06/15|18:06:00|109.703|109.703|109.691|109.692
7|2017/06/15|18:07:00|109.693|109.713|109.692|109.7
8|2017/06/15|18:08:00|109.695|109.698|109.689|109.693
9|2017/06/15|18:09:00|109.692|109.695|109.692|109.695
10|2017/06/15|18:10:00|109.691|109.694|109.69|109.694
sqlite>

OHLC の正確な情報としては'秒'情報は "00" ではないけど、自分用だし気にしない (^^;;


参考にさせて頂いた情報:


2017/06/17

_ [Python]クラス設計能力の乏しさを痛感する

分足を作れるところまでは学んで力をつけることができたけど、 それより上位足を毎分更新するところで sqlite3 へのコネクションを 維持&SQL実行する部分がスパゲッティすぎて自分が嫌になる (+_+)

不用意なグローバル変数化している現状は、オブジェクト指向からは 程遠いんだろうなぁと思う。

勉強し直しせねば (*_*)


2017/06/18

_ 新しい iMac proは、eGPU なるものが…

ココ の情報によると、Thunderbolt3 を使って外部GPUを接続するんだとか。

コイツがサポートできるノートPCを買えば、後付で高性能な TensorFlow マシンを 仕立て上げられるんじゃない (?_?)

期待と夢が膨らむなぁ \(^o^)/


2017/06/19

_ [Python]とりあえず 分足を管理するクラスに入れ込んで

とりあえず1分足を管理するクラスに対して、sqlite3 DBへ insert 等を 行う実行ルーチンを入れ込んだことで、グローバル変数を介した処理は 無くなったけど、クラス設計的に正しい姿なのかは疑問だ。

次に上位足に展開したいんだけど、この1分足クラスをどうやって 広げていけばいいか力不足で困る。また勉強せねば (-_-;;


2017/06/20

_ [SQL]気分転換に sqlite3 で移動平均

  • 1分足を記録したファイルに対して SQLを行う。
  • 移動平均の計算方法は該当行から始めて 4つ前までの close 値を用い、5移動平均値を算出する。
  • 結果を新たなカラムとして表示する。
% sqlite3 USDJPYm1.db
sqlite> select date,time,close,
  ...> (select avg(close) from hd
  ...>   where rowid between t1.rowid-4 and t1.rowid)
  ...>   from hd as t1 limit 10;
Date|Time|Close|(select avg(close) from hd
 where rowid between t1.rowid-4 and t1.rowid)
2017/06/19|16:15:00|111.168|111.168
2017/06/19|16:16:00|111.175|111.1715
2017/06/19|16:17:00|111.161|111.168
2017/06/19|16:18:00|111.175|111.16975
2017/06/19|16:19:00|111.168|111.1694
2017/06/19|16:20:00|111.172|111.1702
2017/06/19|16:21:00|111.178|111.1708
2017/06/19|16:22:00|111.184|111.1754
2017/06/19|16:23:00|111.177|111.1758
2017/06/19|16:24:00|111.175|111.1772
sqlite>

どうやら、最初の 4行については 5行分のデータが存在しないので、個数を減らして平均値を出しているようだ。

※注意

  • rowid が非連続な場合は正しく計算できない。
  • ROWS BETWEEN A AND B を使いたかったけど、sqlite3 では出来ないようだ orz

2017/06/22

_ [SQL]移動平均線乖離率を取ってみる

単純移動平均ならば AVG() 関数で計算できるけど、加重移動平均とか難しいんだろうか。

まだまだ勉強不足なんで、まずはビューの使い方を勉強してみようと、 簡単に終値を使った 5MA とそれに対する乖離率(%) を計算して delta というカラム名として表示してみることにする。

% sqlite3 USDJPYm5.db
sqlite> CREATE VIEW ma5 as select id,
   ...> (select round(avg(close),3) from hd
   ...>  where rowid between t1.rowid-4 and t1.rowid
   ...>  ) as ma5
   ...> from hd as t1;
sqlite> .mode column
sqlite> .width 10 8 7 7
sqlite> select date,time,close,ma5,round(hd.close/ma5.ma5*100-100,2) as delta
   ...> from hd,ma5
   ...> where hd.rowid=ma5.id limit 10;
date        time      close    ma5      delta
----------  --------  -------  -------  ----------
2017/06/20  13:45:00  111.666  111.666  0.0
2017/06/20  14:00:00  111.66   111.663  0.0
2017/06/20  14:15:00  111.67   111.665  0.0
2017/06/20  14:30:00  111.691  111.672  0.02
2017/06/20  14:45:00  111.621  111.662  -0.04
2017/06/20  15:00:00  111.568  111.642  -0.07
2017/06/20  15:15:00  111.55   111.62   -0.06
2017/06/20  15:30:00  111.555  111.597  -0.04
2017/06/20  15:45:00  111.594  111.578  0.01
2017/06/20  16:00:00  111.647  111.583  0.06
sqlite>

2017/06/23

_ [Python]OpenCVも勉強してみたい

とある勉強会の場にいらっしゃった方が、OpenCV を使って動画顔認識を されておられたことから、俺も「動画物体認識したいっ!」と触発された。

OpenCV という名前は聞いたこと有ったけど使ったことはなかったので、 一度使ってみようとインストールから始めることに。まずは静止画で (^^;;

試した環境:

  1. 色々とググりながら、OpenCVのビルドが不要な 3.0.0バージョンを選択。
  2. OpenCV がインストールできたら、Jupyter notebook (on Anaconda2) にて、OpenCVを使った顔認識(Haar-like特徴分類器) の最後に載っているサンプルを実行。その際に若干の記述修正が必要。
ファイルパスが相対パスだったりするので、下記のような絶対パスにする
face_cascade = cv2.CascadeClassifier(r'C:\opencv\build\etc\haarcascades\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(r'C:\opencv\build\etc\haarcascades\haarcascade_eye.xml')

# イメージファイルの読み込み
img = cv2.imread(r'C:\opencv\sources\samples\data\lena.jpg')
# 必要ならリサイズしておく
#img = cv2.resize(img, (1280, 1024))

ホント簡単すぎる。\(^o^)/

他の顔写真を試してみたけど、顔が小さいと目鼻検出はムリだったり、 変な場所を顔と認識したりと、精度については別途チューニングが必要そうと感じた。 完璧すぎると自主的なチューニング取り組みする気が削がれるし、 機械学習ほかへの取り組みを促しているんだろうと思う。


参考にさせて頂いたサイト:

_ [SQL]2つの sqlite3 DB を串刺しして SELECTしてみる

OANDA REST API を使って、7つの通貨ペア (AUDUSD, EURUSD, GBPUSD, NZDUSD USDCAD, USDCHF, USDJPY)を取得して sqlite3 DB として保存しているけど、 通貨の関係を見るために複数の DBを串刺しにして表示したいと思った。

早速ググってみたところ、 sqlite3 は単一ファイルDBなので、大規模でない限り1つにしたほうが良いとか 書かれてるんだけど、やっぱりあるじゃん。そういう方法が (^o^)/

USDJPY の 5分足DB と GBPUSD 5分足DBとを合成して、GBPJPY を作ってみる。

% sqlite3 ForexDB/USDJPYm5.db
sqlite> attach database "ForexDB/GBPUSDm5.db" as gbpusd;
sqlite> .mode column
sqlite> .width 10 8 7 7
sqlite> select hd.date,hd.time,
   ...>  hd.close as USDJPY,
   ...>  gbp.close as GBPUSD,
   ...>  round(gbp.close*hd.close, 4) as calGBPJPY
   ...> from hd, gbpusd.hd as gbp
   ...> where hd.date=gbp.date and hd.time=gbp.time limit 10;
Date        Time      USDJPY   GBPUSD   calGBPJPY
----------  --------  -------  -------  ----------
2017/06/19  17:55:00  111.023  1.28066  142.1827
2017/06/19  18:00:00  111.026  1.28061  142.181
2017/06/19  18:05:00  110.972  1.28052  142.1019
2017/06/19  18:10:00  110.959  1.28053  142.0863
2017/06/19  18:15:00  111.003  1.28064  142.1549
2017/06/19  18:20:00  111.032  1.28089  142.2198
2017/06/19  18:25:00  111.024  1.28097  142.2184
2017/06/19  18:30:00  110.999  1.28085  142.1731
2017/06/19  18:35:00  110.95   1.28105  142.1325
2017/06/19  18:40:00  110.936  1.28054  142.058
sqlite>

参考にさせて頂いたサイト:

上記が引用された Yahoo知恵袋のリンク


2017/06/25

_ OpenCV 勉強しようとしても、単に例題をコピペするだけの俄

やっぱり目的意識が無いと、いっちょ噛みなやり方では、 「例題をコピペして動いて喜ぶ」程度のことしかできないよね。┐(´д`)┌


2017/06/26

_ [Python]為替や金融取引を対象として色々やりたいけど、どこから手を付けたらいいのか

などと、ふと気づいた時に(そしてそれが何度も)考えてしまう。

これは「問題点(目標)を正しく把握出来ていない」だけでなく 「課題分析・課題分割」も正しく捉えられていないんだと思う。

そんな日々が続く中、ネットサーフィンしている途中でふと目に止まった記事がある。

金融データのPythonでの扱い方 - 今日も窓辺でプログラム

オンライン講義みたいだけど、なにかやりたいんだけど、モヤモヤしている現状を打開するべく 勉強に励んでみたら、次に何をしたいかハッキリできるかも (^_^)


2017/06/27

_ [SQL]別の sqlite3 プロセスから last_insert_rowid() できない?!

自前で TICK データを取得して sqlite3 DB 化しているので、 別プロセスから sqlite3 を起動して最新の close 値を読み出したいと思った。

当初

sqlite3 USDJPYm1.db 'SELECT close FROM hd ORDER BY Date desc, Time desc limit 1'

としていたけど、極稀に

database is locked

というエラーが出てしまっていた (+_+)

どうやら TICKデータを扱うプロセスの方で DBを専有する時間に対して、上記の select 文が が長いためにロックエラーになっているんじゃないかと想像する。

上述の SQL文の目的は「最新の close値を取得する」ことなので、色々とググって見たところ

sqlite3 USDJPYm1.db 'SELECT close FROM hd WHERE rowid=last_insert_rowid()'

とすることで、「最後に insertした行を取得する」ことが出来るらしい。

しかし、last_insert_rowid() の値は ゼロ しか返ってこない (>_<) どうやら、自プロセスが「最後に insert」するなら取得できるけど、 別プロセスからは「他プロセスが最後に insert」した rowid は見つけられないみたい (*_*)

更にググってみたら、下記 SQL文で目的を果たすことが出来た\(^o^)/

sqlite3 USDJPYm1.db 'SELECT close FROM hd WHERE id=(SELECT max(rowid) FROM hd)'

参考にさせて頂いたサイト:

_ [FreeBSD][Python]ただ何となく FreeBSD-10.3R に TensorFlow-1.2.0 を入れてみた。

ネットサーフィンしている途中で、たまたま見つけた サイトの情報 を元に Python2.7 をインストールしている FreeBSD-10.3R 向けに TensorFlow を入れてみた。

  • サイトの情報を元に、py27-backports.weakref-1.0.r1.txz と py27-tensorflow-1.2.0.txz をダウンロードしてくる。11.0R であれば Python3.6向けのパッケージもある。
  • pkg を使ってインストール。pkg install時に付随するパッケージも一緒にインストールする。
sudo pkg install py27-backports.weakref-1.0.r1.txz
sudo pkg install tensorflow-1.2.0.txz
  • Jupyter Notebook から使えるか試してみる
In [1]: import tensorflow as tf
        hello = tf.constant('Hello, TensorFlow!')
        sess = tf.Session()
        print(sess.run(hello))
Out[1]: Hello, TensorFlow!

\(^o^)/


2017/06/28

_ いつの間にか FXDD のヒストリカルデータの更新が復活している

3月後半くらいから FXDDサイトにあるヒストリカルデータの更新が止まってたけど、 久々にデータを取得してみたらデータが追加更新されていた。

MT4に取り込んでおくか。