2016-05-19 21 views
0

提案でコードを編集し、現在このエラーが表示されています。トレースバック(最新のコールが最後): ファイル「C:\ Users \ Jonathan.HollowayMainPc \ Documents \ Inchimoku Kinko Hyo.py」111行目、 ichimoku_chart() ichimoku_chart facecolor = 'green'、alpha = 0.2、interpolate = True)のファイル "C:\ Users \ Jonathan.HollowayMainPc \ Documents \ Inchimoku Kinko Hyo.py" 97行目 ファイル " interpolate = interpolate、** kwargs) ファイル "C:\ Python27 \ lib \ site-packages \ matplotlib \ axes_axes"にC:\ Python27 \ lib \ site-packages \ matplotlib \ pyplot.py " py "、行4345、fill_between内 raise ValueError("引数の次元は互換性がありません ") ValueError:引数の次元に互換性がありませんPythonグラフ属性エラー

私のコードは何が原因なのかよくわかりません。どんな助けもありがとう。

import urllib 
import string 
import sys 
import matplotlib 
import pandas as pd 
import matplotlib.pyplot as plt 
import pandas.io.data as web 
import datetime 
#from stooq_helper_functions import data_to_dataframe 
stocks = [] 
#^ list of for stocks 
#for stock in stocks: 
    #Everything gets tabbed here. 
stock = "ebay" 

data = {'Close': [], 'High': [], 'Low': [], 'Open': [], 'Date':[], 'Volume':[]} 
#^Above is done on each stock but only one for now to test. 
url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv' 
page = urllib.urlopen(url) 
for line in page: 
    new_string = string.split(line, ',') 
    if len(new_string) == 6: 
     if new_string[0].isdigit() == True: 
      #print new_string 
      data[stock]= new_string 
      todays_high = float(data[stock][2]) 
      todays_low = float(data[stock][3]) 
      todays_open = float(data[stock][4]) 
      todays_close = float(data[stock][1]) 
      todays_volume = data[stock][5] 
      todays_date = data[stock][0] 
      data['High'].append(todays_high) 
      data['Low'].append(todays_low) 
      data['Open'].append(todays_open) 
      data['Date'].append(todays_date) 
      data['Close'].append(todays_close) 
      data['Volume'].append(todays_volume) 

matplotlib.style.use('ggplot') 


def ichimoku_chart(): 
    global data, stock 
    # Prepare the data 
    #pos = len(data) - days 
    close_prices = pd.DataFrame(data['Close']) 
    high_prices = pd.DataFrame(data['High']) 
    low_prices = pd.DataFrame(data['Low']) 
    data['Date'] = pd.to_datetime(data['Date'], format='%Y%m%d') 
    # workaround, so matplotlib accepts date axis 
    #data['Date'].set_index('Date') 

    # Ichimoku chart components 

    # 1. Tenkan-sen (Conversion Line): (9-period high + 9-period low)/2)) 
    period9_high = pd.rolling_max(high_prices, window=9) 
    period9_low = pd.rolling_min(low_prices, window=9) 
    tenkan_sen = (period9_high + period9_low)/2 
    data['tenkan_sen'] = tenkan_sen 

    # 2. Kijun-sen (Base Line): (26-period high + 26-period low)/2)) 
    period26_high = pd.rolling_max(high_prices, window=26) 
    period26_low = pd.rolling_min(low_prices, window=26) 
    kijun_sen = (period26_high + period26_low)/2 
    data['kijun_sen'] = kijun_sen 

    # 3. Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2)) 
    # plotted 26 periods ahead 
    senkou_span_a = ((tenkan_sen + kijun_sen)/2).shift(26) 
    data['senkou_span_a'] = senkou_span_a 

    # 4. Senkou Span B (Leading Span B): (52-period high + 52-period low)/2)) 
    # plotted 22 periods ahead 
    period52_high = pd.rolling_max(high_prices, window=52) 
    period52_low = pd.rolling_min(low_prices, window=52) 
    senkou_span_b = ((period52_high + period52_low)/2).shift(22) 
    data['senkou_span_b'] = senkou_span_b 

    # 5. The most current closing price plotted 22 time periods behind 
    chikou_span = close_prices.shift(-22) 
    data['chikou_span'] = chikou_span 

    #data = data[pos:] 
    date_values = data['Date'].values 

    fig = plt.figure() 

    plt.plot_date(date_values, data['Close'], '-', linewidth=1.4, label='Close') 
    plt.plot_date(date_values, data['tenkan_sen'], '-', label='Tenkan Sen') 
    plt.plot_date(date_values, data['kijun_sen'], '-', label='Kijun Sen') 
    plt.plot_date(date_values, data['senkou_span_a'], '-', linewidth=0) 
    plt.plot_date(date_values, data['senkou_span_b'], '-', linewidth=0) 
    plt.plot_date(date_values, data['chikou_span'], '-', label='Chikou Span') 

    plt.fill_between(date_values, data['senkou_span_a'], data['senkou_span_b'], 
        where=data['senkou_span_a'] >= data['senkou_span_b'], 
        facecolor='green', alpha=0.2, interpolate=True) 
    plt.fill_between(date_values, data['senkou_span_a'], data['senkou_span_b'], 
        where=data['senkou_span_a'] < data['senkou_span_b'], 
        facecolor='red', alpha=0.2, interpolate=True) 

    fig.set_tight_layout(True) 
    plt.legend(loc='upper left') 
    plt.show() 


#if __name__ == '__main__': 
    #days = sys.argv[1] 
    #stock = sys.argv[2] 
    #ichimoku_chart(data_to_dataframe(stock + '.txt'), int(days)) 
ichimoku_chart() 

答えて

2

複数の問題が

  • url = url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1yr/csv'url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'、すなわちrange=1y代わりにrange=1yrする必要がありますがあります。それ以外の場合、データは返されません
  • high_pricesがリストですが、rolling_maxDataFramehttp://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.rolling_max.html)を想定しています。

    • todays_volume = data[stock][5]た:これら二つの問題に対処してもしてもデータがいくつかの小さな問題がdata['Close']

    に書き込まれませんので、close_prices = data['Close']は常に空になりますので、あなたのプロット関数plt.plot_date(date_values, data['Close'], '-', linewidth=1.4, label='Close') は失敗しますhigh_prices = pd.DataFrame(data['High'])

  • をお試しください改行文字\nが添付されています
  • data[stock]= new_stringは必要ありません。常に上書きされます。

更新編集したコードと新しいエラーメッセージの最後の読み取りラインでtten

ValueError: Argument dimensions are incompatible

あなたはの大きさを見れば、あなたのDataFramesあなたは、彼らが異なる形状を有していることがわかります。

>>> date_values.shape 
(252,) 
>>> data['senkou_span_a'].shape 
(252, 1) 

パラメータをdata['senkou_span_a'][0]に変更するとプロットされます。プロットが意味を持ち、正しいデータを示しているかどうかはわかりませんが、少なくともPythonの文は正式なものです。

+0

私は上記を修正してデータをデータにしました['閉じる']最後のエラーが1つありますAttributeError: 'リスト'オブジェクトに属性 'シフト'がありません –

+0

上記のコードを提案で編集しました。 –

+0

一般に、元のコードをそのまま残して、変更されたコードを新しい行に追加する方がよいと思います。それ以外の場合は、他の用途で元の問題を理解し、その問題にうまく適用することは困難です。 –

関連する問題