前提・実現したいこと
こんにちは。プログラミング初心者です。
FX用の各インジケーターがどれほど参考になるのかを調査したいと考えています。
具体的にはボリンジャーバンドの値によって陽線、陰線の出る値の比率を調べたいと考えています。
その際にリストの値をfor文で回すことができたら便利なのに...。と思いました。
しかし、参考記事の調べ方がわからず質問させていただいた次第です。
希望している回答としては、『このサイト読むと良いよ』
もしくは『こう書けばリストから値出してfor文で回せるよ』
等をいただけると嬉しいです。
★条件
カラムに★をつけてある値を計算に使います。
csvデータは与えています。
カラムは以下のとおりで入力しています。
| 始値 | 高値 | 安値 | ★終値 |
■連続した終値を与えその値に応じて現在の偏差、および次の足が陽線か陰線かを算出する。
カラムは以下のとおりで出力しました。
| 終値 | SMA | 標準偏差 | ★現在の偏差 | 前の足との比較 | 次の足との比較 | ★次の足が陽線か陰線か |
■nσの次の足(日足の場合1日後の足)で陽線 / 陰線の発生率を調べたい
nについては0.1刻みで-4.0 ~ +4.0 σの区間を調査したい
発生している問題
リストから値を抽出してfor文で回す方法がわからない
該当のソースコード
python
1# In[1] 2import numpy 3import pandas as pd 4import time 5import datetime 6import csv 7 8df = pd.read_csv('csvファイルのパス.csv') 9 10BBPeriod = 21#←ボリンジャーバンドの計算区間 11 12BB = pd.DataFrame() 13BB['CLOSE'] = df['CLOSE'] 14BB['SMA'] = df['CLOSE'].rolling(window=BBPeriod).mean()#SMA 15BB['StdDev'] = df['CLOSE'].rolling(window=BBPeriod).std()#標準偏差 16BB['NowDev'] = (df['CLOSE'] - BB['SMA']) / BB['StdDev'] 17BB['前足比'] = df['CLOSE'].diff(1) 18 19BB['次足比'] = BB['前足比'].shift(-1) 20 21BB.loc[BB['次足比'] < 0 , '次比のUpDn'] = 'DN' 22BB.loc[BB['次足比'] == 0 , '次比のUpDn'] = 'ZERO' 23BB.loc[BB['次足比'] > 0 , '次比のUpDn'] = 'UP' 24 25###############↑ここまではOK↑############### 26###↓以下をfor文でまとめて回す方法が知りたい↓### 27# In [2] 28 29a = 0.0 30b = 0.1 31 32BBU0001 = BB.query('@a <= NowDev < @b') 33 34PosU0001 = (BBU0001['次比のUpDn'] == 'UP').sum()#←終値が0.0~0.1σのときに次の足で陽線が出た数 35NegU0001 = (BBU0001['次比のUpDn'] == 'DN').sum()#←終値が0.0~0.1σのときに次の足で陰線が出た数 36ZerU0001 = (BBU0001['次比のUpDn'] == 'ZERO').sum()#←終値が0.0~0.1σのときに次の足で一切価格が変わらなかった足が出た数 37 38if len(BBU0001) > 0: 39 BBU0001PlusPer =100 * PosU0001 / (PosU0001 + NegU0001 +ZerU0001)#←終値が0.0~0.1σのときに次の足で陽線が出る割合(%) 40else: 41 BBU0001PlusPer = 0 42 43 ・ 44 ・ 45 ・ 46# In [83] 47 48a = 3.9 49b = 4.0 50 51BBL3940 = BB.query('@a <= NowDev < @b') 52 53PosL3940 = (BBU0001['次比のUpDn'] == 'UP').sum() 54NegL3940 = (BBU0001['次比のUpDn'] == 'DN').sum() 55ZerL3940 = (BBU0001['次比のUpDn'] == 'ZERO').sum() 56 57if len(BBU3940) > 0: 58 BBU3940PlusPer =100 * PosU3940 / (PosU3940 + NegU3940 +ZerU3940) 59else: 60 BBU3940PlusPer = 0 61 62#以下csvに出力用のコード 63values=[-4] 64for a in range(1,81): 65 b = round(0.1 * a - 4 , 1) 66 values += [b] 67#print(values) 68 69with open('csv出力するフォルダのパス.csv' , 'w' , newline='') as f: 70 writer = csv.writer(f) 71 #writer.writerow(['BB:',values]) 72 writer.writerow(values) 73 writer.writerow([BBL40morePlusPer,BBL3940PlusPer,BBL3839PlusPer,BBL3738PlusPer,BBL3637PlusPer,BBL3536PlusPer,BBL3435PlusPer,\ 74 BBL3334PlusPer,BBL3233PlusPer,BBL3132PlusPer,BBL3031PlusPer,BBL2930PlusPer,BBL2829PlusPer,BBL2728PlusPer,\ 75 BBL2627PlusPer,BBL2526PlusPer,BBL2425PlusPer,BBL2324PlusPer,BBL2223PlusPer,BBL2122PlusPer,BBL2021PlusPer,\ 76 BBL1920PlusPer,BBL1819PlusPer,BBL1718PlusPer,BBL1617PlusPer,BBL1516PlusPer,BBL1415PlusPer,BBL1314PlusPer,\ 77 BBL1213PlusPer,BBL1112PlusPer,BBL1011PlusPer,BBL0910PlusPer,BBL0809PlusPer,BBL0708PlusPer,BBL0607PlusPer,\ 78 BBL0506PlusPer,BBL0405PlusPer,BBL0304PlusPer,BBL0203PlusPer,BBL0102PlusPer,BBL0001PlusPer,\ 79 BBU0001PlusPer,BBU0102PlusPer,BBU0203PlusPer,BBU0304PlusPer,BBU0405PlusPer,BBU0506PlusPer,BBU0607PlusPer,\ 80 BBU0708PlusPer,BBU0809PlusPer,BBU0910PlusPer,BBU1011PlusPer,BBU1112PlusPer,BBU1213PlusPer,BBU1314PlusPer,\ 81 BBU1415PlusPer,BBU1516PlusPer,BBU1617PlusPer,BBU1718PlusPer,BBU1819PlusPer,BBU1920PlusPer,BBU2021PlusPer,\ 82 BBU2122PlusPer,BBU2223PlusPer,BBU2324PlusPer,BBU2425PlusPer,BBU2526PlusPer,BBU2627PlusPer,BBU2728PlusPer,\ 83 BBU2829PlusPer,BBU2930PlusPer,BBU3031PlusPer,BBU3132PlusPer,BBU3233PlusPer,BBU3334PlusPer,BBU3435PlusPer,\ 84 BBU3536PlusPer,BBU3637PlusPer,BBU3738PlusPer,BBU3839PlusPer,BBU3940PlusPer,BBU40morePlusPer]) 85 86
試したこと
①81区間をfor文を使用せずに書き、スマートでなかった点に反省。
②for文でリストの中の要素を抽出して.queryしたい!...がやり方、調べ方がわからなかった。
a = [] b = [] RangeArea = [] Pos = []#陽線発生回数 Neg = []#陰線発生回数 Zer = []#価格変動なし回数 for n in range (0,81): a.append(n * 0.1 - 4.0) b.append(n * 0.1 - 3.9) RangeArea.append(BB.query(@a <= NowDev < @b)
発生するエラーコード
RangeArea.append(BB.query(@a <= NowDev < @b) ^SyntaxError: invalid syntax
補足情報(FW/ツールのバージョンなど)
python3.9.1
jupyter notebook
以上、文章も頭の中も拙いですが、ご回答いただけると嬉しいです。
宜しくお願い致します。