MENU

Pythonを使用したアルゴリズム取引戦略

Pythonによるアルゴリズム取引方法です。以下に詳細をまとめました。

#使用方法:このプログラムは、デュアル移動平均クロスオーバーを使用して、株式を売買するタイミングを決定します。APPLEの株を例に取り引きをおこないます
https://colab.research.google.com/ を使用します。
Yahooファイナンスよりデータをダウンロードします。(https://finance.yahoo.com/quote/AAPL/history/)
#ライブラリのインポートをします
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')

#データをロードします。
from google.colab import files
uploaded = files.upload()

#データを保存
AAPL = pd.read_csv('AAPL.csv')
#データを表示する
AAPL

#データを視覚化する
plt.figure(figsize=(12.5,4.5))
plt.plot(AAPL['Adj Close'], label = 'AAPL')
plt.title('Apple Adj. Close History')
plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011')
plt.ylabel('adj. Close Price USD ($)')
plt.legend(loc='upper left')
plt.show()

#30日間の窓で単純な移動平均を作成します
SMA30 = pd.DataFrame()
SMA30['Adj Close'] = AAPL['Adj Close'].rolling(window = 30).mean()
SMA30

#単純な移動平均(100日)を作成する
SMA100 = pd.DataFrame()
SMA100['Adj Close'] = AAPL['Adj Close'].rolling(window=100).mean()
SMA100

#データを視覚化する
plt.figure(figsize=(12.5,4.5))
plt.plot(AAPL['Adj Close'], label = 'AAPL')
plt.plot(SMA30['Adj Close'],label = 'SMA30')
plt.plot(SMA100['Adj Close'],label = 'SMA100')
plt.title('Apple Adj. Close History')
plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011')
plt.ylabel('adj. Close Price USD ($)')
plt.legend(loc='upper left')
plt.show()

#すべてのデータを格納する新しいデータフレームを作成します
data = pd.DataFrame()
data['AAPL'] = AAPL['Adj Close']
data['SMA30'] = SMA30['Adj Close']
data['SMA100'] = SMA100['Adj Close']
data

#資産/株を売買するタイミングを通知する関数を作成します
def buy_sell(data):
  sigPriceBuy = []
  sigPriceSell = []
  flag = -1

  for i in range(len(data)):
    if data['SMA30'][i] > data['SMA100'][i]:
      if flag != 1:
        sigPriceBuy.append(data['AAPL'][i])
        sigPriceSell.append(np.nan)
        flag = 1
      else:
        sigPriceBuy.append(np.nan)
        sigPriceSell.append(np.nan)
    elif data['SMA30'][i] < data['SMA100'][i]:
      if flag != 0:
        sigPriceBuy.append(np.nan)
        sigPriceSell.append(data['AAPL'][i])
        flag = 0
      else:
        sigPriceBuy.append(np.nan)
        sigPriceSell.append(np.nan)
    else:
        sigPriceBuy.append(np.nan)
        sigPriceSell.append(np.nan)


  return (sigPriceBuy, sigPriceSell)

#売買データを変数に格納します
buy_sell = buy_sell(data)
data['Buy_Signal_Price'] = buy_sell[0]
data['Sell_Signal_Price'] = buy_sell[1]

#データを表示する
data

#データを視覚化し、株を売るために購入する戦略を表示します
plt.figure(figsize=(12.6, 4.6))
plt.plot(data['AAPL'], label = 'AAPL', alpha = 0.35)
plt.plot(data['SMA30'], label = 'SMA30', alpha = 0.35)
plt.plot(data['SMA100'], label = 'SMA100', alpha = 0.35)
plt.scatter(data.index, data['Buy_Signal_Price'], label = 'Buy', marker = '^', color = 'green')
plt.scatter(data.index, data['Sell_Signal_Price'], label = 'Sell', marker = 'v', color = 'red')
plt.title('Apple Adj. Close Price History Buy & Sell Signals')
plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011')
plt.ylabel('Adj. Close Price USD ($)')
plt.legend(loc='upper left')
plt.show()</pre>
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次
閉じる