質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1567閲覧

QuantXのエラー「Exception inputs are all NaN」について

gon_gon_tarou

総合スコア16

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/03 05:39

前提・実現したいこと

QuantXで金融危機時にだけ、エラーが出てしまって、バックテストができません。

QuantX環境でしか動かないと思います。

たぶん、talibのエラーだと思ってます。

https://factory.quantx.io/developer/0dff7264342c4f4188e231a6d26774cd

発生している問題・エラーメッセージ

ERROR14:33:54Exception inputs are all NaN ERROR14:33:54/opt/work/user.py in _MACD(data) 65 for (sym, val) in cp.items(): 66 ---> 67 bas[sym] = ta.EMA(cp[sym].values.astype(np.double), timeperiod=12) 68 rel[sym] = ta.EMA(cp[sym].values.astype(np.double), timeperiod=26) 69 MACD = bas - rel

該当のソースコード

python

1############################################################################ 2############################################################################ 3# macd 4import numpy as np 5import pandas as pd 6import talib as ta 7 8 9def initialize(ctx): 10 # 設定 11 ctx.logger.debug("initialize() called") 12 ctx.configure( 13 channels={ # 利用チャンネル 14 "jp.stock": { 15 "symbols": [ 16 "jp.stock.2914", # 17 "jp.stock.8766", # 18 "jp.stock.8031", # 19 "jp.stock.8411", # 20 "jp.stock.8316", # 21 "jp.stock.9437", # 22 "jp.stock.4502", # 23 "jp.stock.8058", # 24 "jp.stock.9432", # 25 "jp.stock.8306", # 26 "jp.stock.9433", # 27 "jp.stock.7267", # 28 "jp.stock.7974", # 29 "jp.stock.4503", # 30 "jp.stock.4063", # 31 "jp.stock.3382", # 32 "jp.stock.6981", # 33 "jp.stock.4452", # 34 "jp.stock.9020", # 35 "jp.stock.8802", # 36 "jp.stock.6098", # 37 "jp.stock.6758", # 38 "jp.stock.9022", # 39 "jp.stock.9984", # 40 "jp.stock.6501", # 41 "jp.stock.6752", # 42 "jp.stock.6861", # 43 "jp.stock.6954", # 44 "jp.stock.7203", # 45 "jp.stock.7751", # 46 ], 47 "columns": [ 48 #"open_price_adj", # 始値(株式分割調整後) 49 "high_price_adj", # 高値(株式分割調整後) 50 "low_price_adj", # 安値(株式分割調整後) 51 #"volume_adj", # 出来高 52 #"txn_volume", # 売買代金 53 "close_price", # 終値 54 "close_price_adj", # 終値(株式分割調整後) 55 ] 56 } 57 }) 58 59 def _MACD(data): 60 cp = data["close_price_adj"].fillna(method="ffill") 61 bas = pd.DataFrame(data=0, columns=[], index=cp.index) 62 rel = pd.DataFrame(data=0, columns=[], index=cp.index) 63 signal = pd.DataFrame(data=0, columns=[], index=cp.index) 64 65 for (sym, val) in cp.items(): 66 67 bas[sym] = ta.EMA(cp[sym].values.astype(np.double), timeperiod=12) 68 rel[sym] = ta.EMA(cp[sym].values.astype(np.double), timeperiod=26) 69 MACD = bas - rel 70 signal = MACD.fillna(method='ffill').rolling( 71 window=9, center=False).mean() 72 73 buy_sig = ((MACD > signal) & (MACD.shift(1) < signal.shift(1)) & 74 (MACD > 0)) 75 sell_sig = ((MACD < signal) & (MACD.shift(1) > signal.shift(1)) & 76 (MACD < 0)) 77 return { 78 "basic line": bas, 79 "relative line": rel, 80 "MACD:g2": MACD, 81 "signal:g2": signal, 82 "buy:sig": buy_sig, 83 "sell:sig": sell_sig, 84 } 85 86 # シグナル登録 87 ctx.regist_signal("_MACD", _MACD) 88 89 90def handle_signals(ctx, date, current): 91 92 buy = current["buy:sig"].dropna() 93 for (sym, val) in buy.items(): 94 95 sec = ctx.getSecurity(sym) 96 sec.order(sec.unit() * 1, comment="SIGNAL BUY") 97 ctx.logger.debug("BUY: %s, %f" % (sec.code(), val)) 98 pass 99 100 sell = current["sell:sig"].dropna() 101 for (sym, val) in sell.items(): 102 103 sec = ctx.getSecurity(sym) 104 sec.order(sec.unit() * -1, comment="SIGNAL SELL") 105 ctx.logger.debug("SELL: %s, %f" % (sec.code(), val)) 106 pass 107

試したこと

最近のバックテスト(過去3年、上昇相場など)だとうまくいきます。

古いデータの時だけうまくいきません。

データが空の時だけうまくいきません。

補足情報(FW/ツールのバージョンなど)

QuantX環境

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/03/03 05:52 編集

ある入力によって生じる問題であるので、動かせない以上、こちらではデバッグできません。 inputs are all NaN と出ている以上、0除算等がどこかで発生して、NaN が計算結果としてでてしまっているのではないでしょうか 1つずつ print 文を入れて計算結果を確認してください
gon_gon_tarou

2019/03/04 05:15

talibの途中で、0の数値が出てきて詰むってことですね。 そこの条件分岐変えてみます。 指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問