53歳限界プログラマの憂鬱

SU/CAR-ST-APplication-cellsから派生したプログラマのブログ

来訪ありがとうございます
シストレツールを自作してました
自分用の記事が多いのであまり役には立たないブログでした

f:id:sucar:20150414193802p:plain

自作システム詳細目次

◎~◎/迷走中・・・・

このところ2が月も更新なしのこのブログ・・・・

この先どうしたものか 思案いや迷走中・・・

2016年は新システム稼働して、これで新しいストラテジーをホイホイ開発する予定が、なかなかうまくいかず・・・

一時期は捨てる予定だった旧システムの方がなんかうまく行きそうな感じで、旧システムに手を入れようかと悩んでいる最中

多分、旧システムにテコ入れするかも

ちょっと強引なSelenium IDE の活用法

発注業務を半自動で実行できる支援システムをSelenium IDE 使ってテスト的運用中ですが、結構使えますねこれ

まあ、ちょっと強引なやり方でやってまして、、、

Seleniumググる

と言ったプログラム言語と組み合わせて制御する方式があることがわかる

が、実はどれもちょっと勉強しないと使えない自分w

ということでとりあえずSelenium IDEで簡単に済ませようというのですが、ちょっと強引にawkとm4を使ってやろうと、、、、、

Selenium IDEでのテストケースは単なるhtmlなので、最初に記録させたテストケースをテンプレートにして、外部プログラムで強引に変数やらループ構造を展開させたhtmlを出力させ、それをselenium IDEで実行させればよい、との発想

テストケースのhtmlには変数を持たせられるし、javascriptの埋め込みもできるらしく、またループ構造も工夫すればできるようですが、そういうプログラム的な要素は一切廃止して、単にデータとして扱うことに徹する方針(その方が現時点の習熟度では楽なので)

以下どんな感じか簡単に説明

f:id:sucar:20160507202133p:plain

こんな発注データを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=&quot;submit&quot;]</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日移動平均乖離率分布を示す〇〇を見る

逆張りにおいて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")
}

単純なので説明は省略

実際にグラフ化したのが本家の記事

supercar.hatenablog.com

プログラム的には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

まあいいか