前提・実現したいこと
「平均足」という指標の計算をしたい。
(最初(厳密には2番め)のデータと、それ以降のデータとで、計算式が異なる場合の計算を、どのように行うか)
困っていること、及び該当のソースコード
以下のようなデータがあった場合、
Python
1# date open high low close 2#0 2020-01-14 1810 1849 1785 1807 3#1 2020-01-15 1800 1832 1776 1805 4#2 2020-01-16 1830 1857 1805 1833 5#3 2020-01-17 1864 1943 1813 1915
求めたい値を
・平均足の終値(HA_close)
・平均足の始値(HA_open)
とすると、求めたい計算式は以下のようになります。
平均足の終値(HA_close) = (当日始値+当日高値+当日安値+当日安値) / 4
→ df['HA_close'] = (df['open'] + df['high'] + df['low'] + df['close']) / 4
平均足の始値(HA_open)
【1日目の場合】※上記ケースだと2020-01-15
= (前日始値+前日高値+前日安値+前日終値) / 4
→ df['HA_open'] = (df['open'].shift(1) + df['high'].shift(1) + df['low'].shift(1) + df['close'].shift(1)) / 4
【2日目以降の場合】
= (前日の平均足の始値+前日の平均足の終値) / 2
→ (df['HA_open'].shift(1) + df['HA_close'].shift(1)) / 2
平均足の終値(HA_close)の方は単純な計算なので問題ないのですが、
平均足の始値(HA_open)の方は、最初(厳密には2番め)のデータと、それ以降のデータとで、計算式が異なるので、どのようにコードを書くのがいいか頭を悩ませています。
Python
1# date open high low close HA_open HA_close 2#0 2020-01-14 1810 1849 1785 1807 1813 3#1 2020-01-15 1800 1832 1776 1805 1813 1803 4#2 2020-01-16 1830 1857 1805 1833 1808 1831 5#3 2020-01-17 1864 1943 1813 1915 1820 1884 6
最終的には、上記のような形で出力させたく、以下のような形で書いたものの、HA_openは表示されませんでした。
Python
1for n in range(0, len(df)): 2 if n == 0: 3 df['HA_open'].iloc[n,:] = 0 4 elif n == 1: 5 df['HA_open'].iloc[n,:] = (df['open'].shift(1) + df['high'].shift(1) + df['low'].shift(1) + df['close'].shift(1)) / 4 6 else: 7 df['HA_open'] = (df['HA_open'].shift(1) + df['HA_close'].shift(1)) / 2
まだ知識が浅く、理解が間違っていたり、不足していたり、応用が効かない状態のため、質問の仕方自体もままならず、うまく伝わっていないかもしれませんが、アドバイスいただけると助かります。お手数おかけしますが、よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/20 17:20