前提・実現したいこと
初めまして、FXの自動売買をしてみたいと思い最近プログラミングを始めた者です。
(pythonの文法も調べながらでまだ定着していないめちゃくちゃな状態です・・・)
「実現したいこと」・・・・リスト名に変数(リスト_n)を入れて任意のリストを呼べる方法を教えて頂きたいです。
for文の中で
num_0,num_1,......,num_n
pred_list_1,pred_list_2,.......pred_list_n
とリストがあり、for文の途中で2つのリストを取り出して(num_0とpred_list_0)
その要素を新しいリストに入れたいと考えております。
#how_periodはfor文の中で変化する数字です。
#for文の中に以下のようなfor文があります
for pre , num in zip('pred_list_{}'.format(how_period),"num_{}".format(how_period)):
new = (pre,num)
two_append = 'list_{}.append(new)'.format(how_period)
exec(two_append)
発生している問題・エラーメッセージ
for ~~~ in zip(ここに入れるリストがstr型になって困っています)
list_2 = [('p', 'n'), ('r', 'u'), ('e', 'm'), ('d', '_'), ('_', '2')] このようにリスト内の要素ではなく、str(リスト名)を追加してしまいます。
該当のソースコード
python
1#区間内での頻度の高い価格を見つける 2 3how_period = 0 #何回目の区間かを数える 4 5num_8h = 0 #(分足なので)480個=8h分 と数える為のもの 6min_val = 0 7max_val = 0 8 9low_8h , low_time_8h = 0 , 0 #最安値とその時の日時を入れる変数 10high_8h , high_time_8h = 0 , 0 #最高値とその時の日時を入れる変数 11 12 13for i , data in enumerate(df.itertuples()): 14 15 code = 'num_{} = []'.format(how_period) #リストを作成する(後々、各区間内で頻度の高い数値を探したいので価格を追加していくリスト) 16 append_code = 'num_{}.append({})'.format(how_period,data[7]) #作成したリストに追加していく 17 num_8h += 1 18 19##########1回目の動作###################### 20 if num_8h == 1 : #はじめの値をとりあえず最高値、最安値にしとく 21 exec(code) 22 exec(append_code) 23 24 low_8h = data[6] 25 high_8h = data[5] 26 27 low_time_8h = str(data[2])+str(data[3]) #日にち+時間 28 high_time_8h = str(data[2])+str(data[3]) 29 30 31 32###########2回目以降の動作############ 33 if num_8h > 1: # 前回までの最安値最高値と比較していく 34 append_code = 'num_{}.append({})'.format(how_period,data[7]) 35 exec(append_code) 36 37 if data[6] < low_8h : 38 low_8h = data[6] 39 low_time_8h = str(data[2])+str(data[3]) 40 41 if high_8h < data[5] : 42 high_8h = data[5] 43 high_time_8h = str(data[2])+str(data[3]) 44 45 if num_8h == 480 : #8hの区間が終わった時の処理 46 47 48 49######## K-means でクラスタリング?していく########## 50 51 array_code = 'array_{}=np.array(num_{})'.format(how_period,how_period) 52 exec(array_code) #numpy化 53 54 # 行列を転置 55 change_code = 'array_{}=array_{}.reshape(-1,1)'.format(how_period,how_period) 56 exec(change_code) 57 58 # クラスタ分析を実行 (クラスタ数=4) 59 pred_code = 'pred=KMeans(n_clusters=4).fit_predict(array_{})'.format(how_period) 60 exec(pred_code) 61 62 list_code='pred_list_{}=pred.tolist()'.format(how_period) 63 exec(list_code) 64 65#二次元のリストにする 66 make_list = 'list_{}=[]'.format(how_period) #価格とそれがどのクラスに入るかを一対一対応させるリストを作成 67 exec(make_list) 68 print('list_',str(how_period),' まで作ったよ') #リストをどこまで作ったか確認 69 70★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★↓ここです↓★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 71 72 for pre , num in zip('pred_list_{}'.format(how_period),"num_{}".format(how_period)): 73 new = (pre,num) 74 75 two_append = 'list_{}.append(new)'.format(how_period) 76 exec(two_append) 77 78############################################### 79 num_8h = 0 #8h数えるのはリセット 80 how_period += 1 #何回目の区間かを表す 81 82 code = 'num_{} = []'.format(how_period) 83 exec(code) #リストを作成 84 85 86 if low_time_8h < high_time_8h : #安値の時間のが早いから上昇トレンド 87 print('上昇トレンドです!'+' 最安値:'+low_8h+' 最高値:'+high_8h+' 時間'+high_time_8h) 88 else : 89 print('下降トレンドです!'+' 最安値:'+low_8h+' 最高値:'+high_8h+' 時間'+str(low_time_8h)) 90 91print('リストはnum_0から、num_'+str(how_period)+' まで作りました') 92 93 94 95 96
試したこと
①
Pre='pred_list_{}'.format(how_period)
Num="num_{}".format(how_period)
と別の変数?に代入して for ~~~ in zip (Pre,Num) としてみました
②
内包表記とexec()でできないかやってみました。
two_dimensions='list_{}=[(pre,num) for pre,num in zip(pred_list_{},num_{})]'.format(how_period,how_period,how_period)
exec(two_dimensions)
③ググってみましたが、検索の仕方が悪いのか似た質問に辿り着けませんでした。
補足情報(FW/ツールのバージョンなど)
python3 , mac ,jupyterLab を使用しております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/27 03:01