前提・実現したいこと
現在,pythonである投資方法を基にして,その方法に沿ったパターンが過去に何回起こったか,またその勝率はどのくらいなのかを調べています.
その投資方法というのが,チャートを参考にしたものなのですが,全体の株価の5%~25%をボックス圏として揉み合い,そこから数ヶ月したら上振れするという投資方法で,この勝率を求めたいと思っています.
colaboratory を使っています.(各セルごとに1行ずつ開けてます)
5%の株価を(sup_line),25%の株価を(resi_line)としてます.
また揉み合う期間を記録する(renzoku_days),何日揉み合うかを決める変数(momidays)としてます.
今回分からないところが,
・リストの中でボックス圏を揉み合う連続した値(renzoku_days)のカウント
・勝った時のカウントの仕方=負けた時のカウント
・途中で条件に合わなかった時のリストを続きから読み込むやり方
です.
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-34-da09756d28d2> in <module>() 1 for p_today in kabu: ----> 2 if (sup_line <= p_today <= resi_line): 3 renzoku_days += 1 4 if (renzoku_days > momidays): #何日連続しているか 5 if (resi_line < p_today): #勝ち!! ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
該当のソースコード
from datetime import datetime from pandas_datareader import data import pandas as pd import numpy as np start = '2019-01-01' end ='2020-01-01' df = data.DataReader('GOOG', 'yahoo', start, end) df len(df) df['Adj Close'] df.values df.index k_ris = df.values d_ris = df.index k_ris print(type(k_ris)) df = df['Adj Close'] # 5%,25%を出す row = 5 high = 25 sup_line,resi_line=np.percentile(df,[row,high]) print(sup_line) print(resi_line) kabu = k_ris.tolist() print(kabu) len(kabu) momidays = 30 #揉み合う期間を決める renzoku_days = 0 #揉み合い期間の長さを記録する win = 0 lose = 0 #ここからエラーが出ているところです for p_today in kabu: if (sup_line <= p_today <= resi_line): renzoku_days += 1 if (renzoku_days > momidays): #何日連続しているか if (resi_line < p_today): #勝ち!! win += 1 print(renzoku_days,'日間揉み合った結果上振れ') renzoku_days = 0 elif (p_today < sup_line): #負けた,,, lose += 1 print(renzoku_days,'日間揉み合った結果下振れ') renzoku_days = 0 else: #揉み合ってない! renzoku_days = 0 renzoku_days = 0 #ここからエラーは出てません pattern = win + lose if (win ==0): win_rate = 0 else: win_rate = win / pattern * 100 print('計測開始 :', start) print('計測終了 :', end) print('揉み合う期間 :', momidays) print('実際に揉み合った期間:', renzoku_days) print('レジスタンスライン : ', row, '%,', sup_line) print('サポートライン :', high,'%,',resi_line) print('パターン数 :',pattern,'回') print('勝率 :',win_rate,'%')
追記のソースコード
from datetime import datetime from pandas_datareader import data import pandas as pd import numpy as np start = '2019-01-01' end ='2020-01-01' df = data.DataReader('GOOG', 'yahoo', start, end) lst = df['Adj Close'].values.tolist() print(lst) momi_days = 30 renzoku_days = 0 win = 0 lose = 0 # 5%,25%を出す row = 5 high = 25 sup_line,resi_line=np.percentile(lst,[row,high]) print(sup_line) print(resi_line) len(lst) for p_today in lst: if (sup_line <= p_today <= resi_line): renzoku_days += 1 if (renzoku_days > momi_days): #何日連続しているか if (resi_line < p_today): #勝ち!! win += 1 print(renzoku_days,'日間揉み合った結果上振れ') renzoku_days = 0 elif (p_today < sup_line): #負けた,,, lose += 1 print(renzoku_days,'日間揉み合った結果下振れ') renzoku_days = 0 else: #揉み合ってない! renzoku_days = 0 renzoku_days = 0
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
プログラミングは実践だというので自分なりに初めて作ってみました.
すごくごちゃごちゃしていてすいません...
よろしくお願いします.
あなたの回答
tips
プレビュー