◎~◎/迷走中・・・・
このところ2が月も更新なしのこのブログ・・・・
この先どうしたものか 思案いや迷走中・・・
2016年は新システム稼働して、これで新しいストラテジーをホイホイ開発する予定が、なかなかうまくいかず・・・
一時期は捨てる予定だった旧システムの方がなんかうまく行きそうな感じで、旧システムに手を入れようかと悩んでいる最中
多分、旧システムにテコ入れするかも
ちょっと強引なSelenium IDE の活用法
発注業務を半自動で実行できる支援システムをSelenium IDE 使ってテスト的運用中ですが、結構使えますねこれ
まあ、ちょっと強引なやり方でやってまして、、、
と言ったプログラム言語と組み合わせて制御する方式があることがわかる
が、実はどれもちょっと勉強しないと使えない自分w
ということでとりあえずSelenium IDEで簡単に済ませようというのですが、ちょっと強引にawkとm4を使ってやろうと、、、、、
Selenium IDEでのテストケースは単なるhtmlなので、最初に記録させたテストケースをテンプレートにして、外部プログラムで強引に変数やらループ構造を展開させたhtmlを出力させ、それをselenium IDEで実行させればよい、との発想
テストケースのhtmlには変数を持たせられるし、javascriptの埋め込みもできるらしく、またループ構造も工夫すればできるようですが、そういうプログラム的な要素は一切廃止して、単にデータとして扱うことに徹する方針(その方が現時点の習熟度では楽なので)
以下どんな感じか簡単に説明
こんな発注データをkabucom3a.csvとして準備
これを食わせると、m4マクロ定義ファイルを吐くawk script を作成
kabucom3a.awk
-------------------------------------
BEGIN { FS="," }
NR>1 {
close(out) # ファイルオープンの数に限りがあるので都度close
out = sprintf("./kabucom.m4/%s",$1)
printf("define(`_mmmm_',`%s')\n",$1) > out
printf("define(`_kb_',`%s')\n",$2) > out
printf("define(`_en_',`%s')\n",$3) > out
}
END{}
-------------------------------------
awkガナス(6) – 複数ファイルへの出力(リダイレクト機能) — SOUM/misc
(↑ここを参考にしました)
これにより例えば
define(`_mmmm_',`1757')
define(`_kb_',`3100')
define(`_en_',`2')
こんなやつができます
このマクロを使ってテストケースを作成するコマンドがこんな感じ
kabucom3a
-----------------------------------
rm ./kabucom.m4/*
rm ./kabucom/*
cat ./kabucom3a.csv | awk -f ./kabucom3a.awk
cat ./kabucom3a.html.head > ./kabucom/all.html
for var in `ls ./kabucom.m4`
do
cat ./kabucom.m4/$var kabucom3a.html > tmp.txt
m4 tmp.txt >./kabucom/$var.html
cat ./kabucom.m4/$var kabucom3a.html.tr > tmp.txt
m4 tmp.txt >>./kabucom/all.html
done
cat ./html.end >> ./kabucom/all.html
----------------------------------
で出力された./kabucom/all.html をselenium ide で実行すれば、発注作業が半自動で、、、
かなり便利
こういう方法でよければ、プログラム言語は何でもいいので、最終的にはシグナルを出しているR言語やC言語がselenium ide のテストケースを出力するというのも可能
今のところ発注前にいろいろ確認したいので、一度エクセルでいろいろやってからcsvファイルにしてるけど
ここまでの説明???な感じでしょうけどw
kabucom3a.html.trの中身が
----------------------------
<tr>
<td>waitForElementPresent</td>
<td>name=Keyword</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=Keyword</td>
<td>_mmmm_</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>css=input[type="submit"]</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_Quantity_Value</td>
<td>_kb_</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_WebOrderType_Value_PMSASHINE</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_TriggerPriceSign_Value</td>
<td>label=-</td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_PlusMinusSashine_TriggerPriceRelative</td>
<td>1</td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_UnderOrOver_Value</td>
<td>label=以下</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitFrontOrderType_Value</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitPriceSign_Value</td>
<td>label=-</td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitPriceRelative</td>
<td>_en_</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_DelivType_Value_Oazukari</td>
<td></td>
</tr>
----------------------------
こんななってるのだけど
赤字のところがm4で置き換えられる仕組み
これで、変数とかを使わず、csvの中身を展開したテストケースが作成できるw
やっぱりわかりにくいですかね?
selenium IDE
kabucom3 | ||
clickAndWait | link=買注文 | |
waitForElementPresent | name=Keyword | |
type | name=Keyword | 6961 |
clickAndWait | css=input[type="submit"] | |
type | id=InputBuyModel_Quantity_Value | 100 |
click | id=InputBuyModel_WebOrderType_Value_PMSASHINE | |
select | id=InputBuyModel_PlusMinusSashine_TriggerPriceSign_Value | label=- |
type | id=InputBuyModel_PlusMinusSashine_TriggerPriceRelative | 1 |
select | id=InputBuyModel_PlusMinusSashine_UnderOrOver_Value | label=以下 |
click | id=InputBuyModel_PlusMinusSashine_AfterHitFrontOrderType_Value | |
select | id=InputBuyModel_PlusMinusSashine_AfterHitPriceSign_Value | label=- |
type | id=InputBuyModel_PlusMinusSashine_AfterHitPriceRelative | 134 |
click | id=InputBuyModel_DelivType_Value_Oazukari |
selenium IDE なるものと firefox で webでの操作を記録できる
記録はhtml形式で↑のようなtableになっている
なので、発注内容を示すcsvファイルから↑のtableを含むhtmlを自動作成してこれをselenium IDEで読み込んで再生すると、一応自動操作で発注ができる
ちなみにawkとm4を使った
gr25(q,qt)で25日移動平均乖離率分布を示す〇〇を見る
しかし、何%となったらシグナルとなるのは結構難しい
そこで、移動平均乖離率の分布を見たいのだが、実際見たいのはその変動なので変動をグラフに表したい
で、こんな関数を作成(function_00.Rに入れた)
gr25 <-function(q,qt=0.1) {
q$h25<-hei25(q)
ans<-tapply(q$h25,q$j,quantile,qt)
plot(rev(ans),type="o")
}
単純なので説明は省略
実際にグラフ化したのが本家の記事
プログラム的にはtapplyの第4引数は第3引数で与える関数の第1引数になるという点がポイント
シストレ的には
- 結構変動が大きい
- ある程度パターンは読めそう
って感じで利用価値は高そう
どうすればいいか? まだわからないけどw
dnow()で現在パラメタ値データフレームを読む
su/car -r で
d()を実行すれば、最新データを読み込むが、読み込むのはストラテジー検証用データなので、結果の出てない現時点からn日分はデータが存在しない
ストラテジー検証用ではなくて、単に市場動向を見るために各パラメタ値だけをデータフレームにするためのデータも用意できたので、これを読み込む関数を作成する
-------------------
#nowdata読み込み
dnow <- function() {
cat("nd<-read.table(\"../output/nowdata.txt\",header=TRUE, sep=\"\\t\")\n")
source("./fn/read_now.R")
}
---------------------
これをsucar_base.Rに追加して
実体の./fn/read_now.Rの方は
nd<-read.table("../output/nowdata.txt",header=TRUE, sep="\t")
となっている
読み込むデータフレームobjectはsじゃなくてndとしたので注意
このデータをどう利用するかは次の記事にて
anaint07a.cのちょっとだけ改定とcar_now500
protraの株データを利用している新システムの方で、ちょっとC言語ソースを弄ったので、記録を残しておく(完全に自分用記事)
ストラテジーの検討用ではなく、市場動向を見るために各パラメータ値を現時点から過去に遡ってデータフレームにするための準備に当たる
株データ⇒データフレーム変換は anaint07a.cで行うが
通常はストラテジー検討用データを出力するため、結果の出てない現時点から数日前(現在は5日前までで使っている)の分は出力されない
-DNOW とNOWを定義してコンパイルすると、シグナル発生用のデータフレームを出力するようになるので、これを使えばいいのだが、シグナル発生はそんなに過去に遡らないので、現時点から10日前までの出力に制限していた
これを制限なしにしておく
anaint07a.c
---------------------
#ifdef NOW
//for (j=0;j<10;j++) { //now
for (j=0;j<DtMax;j++) { //now
#else
for (j=0;j<DtMax;j++) {
#endif
---------------------
まあ #ifdef~ ごと消せばいいけど、まあ改定の履歴を残す意味で、、、
これで引数で与えれば大きく過去に遡ってデータフレームに出力できる
これを使って
car_now500 コマンドを作成
car_now500
-------------------
echo cd `dirname $0`
cd `dirname $0`
./data1000
#読み込んで条件満たす銘柄を選定し、code/list00.cfgを更新
./bin/now07 0 500 0 3 > ./output/nowdata.txt
#./code/.new00があれば list00.cfgを更新
if test -e ./code/.new00; then
mv tt.txt ./code/list00.cfg
rm -f ./code/.new00
fi
----------------------
ちなみに./bin/now07は anaint07a.c を -DNOWでコンパイルしたもの
これで現時点から500日遡って各パラメタの値を./output/nowdata.txtに出力してくれる
これをR言語のシステムで利用する予定
株価データ変換プログラムの組み込み
株データDLサイトのリニューアルに伴うデータフォーマット変更に対処する変換プログラムをawkで作成したけど
5月から旧フォーマットでのDLができなくなるはずなので、GW期間中にちょっとお仕事
手作業で変換するのはめんどくさいのでcarbuyコマンドに組み込む
新フォーマットデータはstocksnewディレクトリに置いて、変換してstocksnew2oldに置くようするコマンドを作成
trsnew
--------------------
ls -r ~/stocksnew |head -1 > ./trnewdata.cfg
for var in `cat ./trnewdata.cfg`
do
cat ~/stocksnew/$var |awk -f ./awk/new2old.awk >~/stocksnew2old/${var}
done
./bin/trstocks1new2old.exe
--------------------
ちなみに最後の./bin/trstocks1new2old.exeはデータの前処理プログラム
これをシグナルを出すコマンドcarbuyの先頭に組み込んでおく
carbuy
--------------------
#!/bin/bash
echo cd `dirname $0`
cd `dirname $0`
# trsの実行 株データの前処理
echo ./bin/trsnew
./bin/trsnew
echo ./bin/trs
./bin/trs
以下略
-----------------
これで何とか新フォーマットへ移行できそう
自分のシステムはなかなか新システムへ移行できないのだけどw
まあいいか