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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

257閲覧

関数1で定義した変数を関数2で使いたい

yuudai

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/08 09:04

前提・実現したいこと

test2のperfect_order_USDJPY()の中の変数ema_10, ema_20, ema_40, ema_80, ema_320をperfect_order_classifier()でも使いたい

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

name 'ema_10' is not defined

該当のソースコード

test1

1from test2 import perfect_order_USDJPY 2def perfect_order_classifier(): 3 perfect_order_USDJPY() 4 #10分前がパーフェクトオーダーじゃない場合今がパーフェクトオーダーかどうか計算する 5 if not ema_10.iat[-2, -1] < ema_20.iat[-2, -1] < ema_40.iat[-2, -1] < ema_80.iat[-2, -1] < ema_320.iat[-2, -1] \ 6 and not ema_10.iat[-2, -1] > ema_20.iat[-2, -1] > ema_40.iat[-2, -1] > ema_80.iat[-2, -1] > ema_320.iat[-2, -1]: 7 8 #下降トレンド 9 if ema_10.iat[-1, -1] < ema_20.iat[-1, -1] < ema_40.iat[-1, -1] < ema_80.iat[-1, -1] < ema_320.iat[-1, -1]: 10 print("Perfect Order Now") 11 #上昇トレンド 12 elif ema_10.iat[-1, -1] > ema_20.iat[-1, -1] > ema_40.iat[-1, -1] > ema_80.iat[-1, -1] > ema_320.iat[-1, -1]: 13 print("Perfect Order Now") 14 #パーフェクトオーダーじゃない 15 else: 16 print("Not Perfect Order") 17 else: 18 print('Success') 19 20perfect_order_classifier()

test2

1#import library 2import pandas as pd 3import numpy as np 4from oandapyV20 import API 5from oandapyV20.exceptions import V20Error 6from oandapyV20.endpoints.pricing import PricingStream 7import oandapyV20.endpoints.instruments as instruments 8 9 10accountID = "101-009-11131969-001" 11access_token = "cf9f9c77b65c27b549c6ad08a4865159-a8a8d0f1a562744a7bf27705e89996d0" 12 13 14def perfect_order_USDJPY(): 15 api = API(access_token=access_token, environment="practice") 16 17 #15分足2000個 18 params = { 19 "count": 2000, 20 "granularity": "M15" 21 } 22 #ドル円ローソク足データ取得 23 r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params) 24 api.request(r) 25 # ストリーミングの最初の1件目のデータを確認 26 r.response['candles'][0] 27 28 rate = pd.DataFrame.from_dict({r.response['candles'][i]['time']: r.response['candles'][i]['mid'] 29 for i in range(0,len(r.response['candles'])) 30 for j in r.response['candles'][i]['mid'].keys()}, 31 orient='index', 32 ) 33 34 rate.index = pd.to_datetime(rate.index) 35 36 #EMAを求める 37 ema = pd.DataFrame() 38 ema['ema_10'] = rate['c'].ewm(span=10).mean() 39 ema['ema_20'] = rate['c'].ewm(span=20).mean() 40 ema['ema_40'] = rate['c'].ewm(span=40).mean() 41 ema['ema_80'] = rate['c'].ewm(span=80).mean() 42 ema['ema_320'] = rate['c'].ewm(span=320).mean() 43 44 #計算したデータはseries型なのでデータフレームにする。そうしないとエラーが出るから。 45 ema_10 = pd.DataFrame(ema['ema_10']).reset_index() 46 ema_20 = pd.DataFrame(ema['ema_20']).reset_index() 47 ema_40 = pd.DataFrame(ema['ema_40']).reset_index() 48 ema_80 = pd.DataFrame(ema['ema_80']).reset_index() 49 ema_320 = pd.DataFrame(ema['ema_320']).reset_index() 50 51 return ema_10, ema_20, ema_40, ema_80, ema_320

試したこと

関数の引数に関数を入れれば良いのかもしれないけど、調べてもピンときませんでした。
perfect_order_classifier(perfect_order_USDJPY)みたいな感じで一応試してみたものの
TypeError: perfect_order_classifier() missing 1 required positional argument: 'perfect_order_USDJPY'
となりました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

戻り値を受け取ればよいだけでは?

Python

1def perfect_order_classifier(): 2 ema_10, ema_20, ema_40, ema_80, ema_320 = perfect_order_USDJPY()

投稿2019/05/08 09:08

can110

総合スコア38258

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

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

yuudai

2019/05/08 10:22

解決しました。とても簡単なことでした。一度試した気になってました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問