ベストアンサー
さまざまなタイプの移動平均とPythonでのそれらの関数のコーディングを紹介するMediumに関する記事を書きました(フルフォーマットが難しいため、コードへのリンク: Pythonでさまざまなタイプの移動平均をコーディングする方法。 スパン>)。記事は次のとおりです。
トレーディングソフトウェアには、さまざまなタイプの移動平均がプリインストールされており、チャートを作成する準備ができています。ただし、これらの移動平均を計算して、潜在的な戦略をバックテストするときに使用できるようにする方法を理解することは興味深い場合があります。
日曜大工の方法が必要な場合は、以下はきっとあなたの興味を引くでしょう。必要なのは、SPYDERなどのPythonインタープリターだけです。さまざまな「既知の」移動平均のタイプは次のとおりです。
- 単純移動平均。
- 指数移動平均。
- スムーズな移動平均。
- 線形加重移動平均。
それぞれを調べ、定義し、コーディングし、グラフ化します。
GBPUSD日次グラフ。黒、200日移動平均、深紅色、200日移動平均、黄色200日平滑化移動平均、ピンク色、200日線形加重移動平均。
単純移動平均
名前が示すように、これは統計や基本的に私たちの生活の他の部分のあらゆる場所で使用される単純な単純平均です。これは、単に観測値の合計値を観測値の数で割ったものです。
数学的に言えば、次のように書き留めることができます。
pythonでは、移動平均を計算する関数を次のように定義できます。
[Pythonコードはここにあります。コードの貼り付けには時間がかかるため、上記の元の記事のリンクを参照してください]
この関数は、データ<で表されるデータ構造を取得します/ span>変数、期間変数で表される移動平均期間(20、60、200など)、何に適用しますか( OHLCデータ構造では、 onwhat 変数と where variableは、移動平均列を表示する場所です。これを機能させるには、4列を超える配列が必要であることに注意してください。これは、新しい列が自動的に作成されるのではなく、単にデータが入力されるためです。
EURUSD200日間の単純移動平均を使用した1日の期間。
指数移動平均
すべての観測値に等しい重みを与える単純な移動平均とは対照的に、指数移動平均は、より最近の観測値により多くの重みを与えます。最近の動きに関しては、単純な移動平均よりも反応します。
数学的に言えば、次のように書き留めることができます。
平滑化係数は多くの場合2です。平滑化係数(アルファとも呼ばれます)を増やすと、最近の観測値の重みが大きくなることに注意してください。
python言語の場合、EMAを計算する関数を次のように定義できます。
[Pythonコードはここにあります。コードの貼り付けについては、上記の元の記事のリンクを参照してください。時間がかかります]
この関数は、上記のEMA関数を再現するだけなので、一目瞭然です。
EURUSD200日間の指数移動平均による毎日の期間。
平滑化された移動平均
この移動平均は全体像を考慮しており、最近の動きによる影響は少ないです。これは私のお気に入りのトレンドフォロー指標です。数学的に言えば、EMA関数のDays変数に2を掛け、1を引くだけで見つけることができます。つまり、指数移動平均を平滑化された平均に変換するには、Python言語でこの方程式に従い、指数移動を変換します。平滑化されたものへの平均:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD200日間の平滑化移動平均を使用した1日の期間。
線形加重移動平均
最近のデータを重視する単純な移動平均。最新の観測値の重みが最も大きく、それ以前の観測値の重みは徐々に減少します。直感的には、他の移動平均よりもラグが少ないですが、使用頻度が最も低いため、ラグの削減で得られるものは人気が失われます。
数学的に言えば、次のように書き留めることができます。
python言語では、移動平均を計算する関数を次のように定義できます。
[Pythonコードはここにあります。コードの貼り付けには時間がかかるため、上記の元の記事のリンクを参照してください]
EURUSD200日加重移動平均を使用した毎日の期間。
基本的に、2つの数値[1、2]とで構成されるデータセットがある場合線形加重平均を計算したい場合は、次のようにします。
- (2 x 2)+(1 x 1)= 5
- 5/3 = 1.66
これは、番号2の時系列が最新の観測値であると想定しています。
結論スパン>
では、どちらを選択しますか?その質問は、トレーダーのリスクプロファイルと移動平均に対する彼女の精通度に任されています。単純な単純移動平均を好む人もいれば、指数移動平均と平滑化移動平均の組み合わせを使用してより深く掘り下げようとする人もいます。あなたの好きなものを見つけるのはあなた次第です。 アドバイスはありますか?長期的な移動平均を検討してください。
回答
パンダについてまだ誰も言及していないのはなぜですか? Pythonデータ分析ライブラリ
import pandas as pd, numpy as np
np.random.seed(1)
random\_walk = pd.Series(
np.random.randn(100)
).cumsum() # dummy data
random\_walk.ewm(span=10).mean() # ema
random\_walk.rolling(20).mean() # simple moving average
random\_walk.expanding().mean() # expanding average
index = pd.bdate\_range("2012","2013",freq="1h") # time series
series = pd.Series(
np.random.randn(index.shape[0]),index
)
series.rolling("100h").mean() # 100 hours, time based window
series.rolling(pd.Timedelta(hours=30)).mean() # You may use any offset compatible with index
series.rolling(10, win\_type="triang").mean() # triangle weights
series.rolling(10,center=True).mean() # value in the middle of window