last modified 2022.10.21
今回で21回目です
最近、冷える。
pythonでトレードスクリプト作るときになんとも面倒なことがありました。
それは変数型です。
pythonには変数型は明示されないけれど、変数型はあります。
自動変換されて計算されるので、あまり意識しなくてよいだけの話です。
例えば
dd='20221021110515'
というデータがあります。これ年月日時分秒の日時データのストリングです。
これを
print( float( dd))
とすると
20221021110515.0
と表示される。'.0'ってのが追加されてしまう。
print( int( dd))
とすると
20221021110515
ちなみに
print( int( '123456.123'))
とすると、エラーがでます。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '123456.123'
print( int( float( '123456.123')))
これだと
123456
こうなる
だから何だよって話ですが、pythonで時間計算するときのデータ型の変換でバグったりします。'.0'がついていたり、ついていなかったり。
トレードボットで使う変数を考えてみるとこんな感じでしょうか
date,openPrice,highPrice,lowPrice,closePrice,tradingVolume,5ma,15ma
date: 日時
openPrice: 始値
highPrice: 高値
lowPrice: 安値
closePrice: 終値
tradingVolume: 売買高
5ma: 5日移動平均
15ma: 15日移動平均
こんな感じでしょうか
日時はfloatでもintでもstrでもいいと思いますが、バグが出やすいのでstr型でいいのかな
日時の比較の時はint型に変換する。
始値、高値、安値、終値はintでもいいかもしれませんが、株価で546.3円とか小数点が付くものがあります。たしか、topix100銘柄は小数点が付く、なのでfloat型で持つのがいいと思います。
出来高は小数点がでないのでintでもfloatでもいいと思いますが、ほかの数値を合わせてfloat型にしとく
5maや15maはどんなテクニカル分析するかで変わってくるでしょうが、ボリンジャーバンドでもストキャスティクスでも少数点が出てきます。つまりfloat型
ファイルにデータを読み書きするときはこれを意識するといいのかも