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

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

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

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

解決済

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

yuudai
yuudai

総合スコア0

Python 3.x

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

1回答

0評価

0クリップ

7閲覧

投稿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

from test2 import perfect_order_USDJPY def perfect_order_classifier(): perfect_order_USDJPY() #10分前がパーフェクトオーダーじゃない場合今がパーフェクトオーダーかどうか計算する 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] \ 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]: #下降トレンド 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]: print("Perfect Order Now") #上昇トレンド 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]: print("Perfect Order Now") #パーフェクトオーダーじゃない else: print("Not Perfect Order") else: print('Success') perfect_order_classifier()

test2

#import library import pandas as pd import numpy as np from oandapyV20 import API from oandapyV20.exceptions import V20Error from oandapyV20.endpoints.pricing import PricingStream import oandapyV20.endpoints.instruments as instruments accountID = "101-009-11131969-001" access_token = "cf9f9c77b65c27b549c6ad08a4865159-a8a8d0f1a562744a7bf27705e89996d0" def perfect_order_USDJPY(): api = API(access_token=access_token, environment="practice") #15分足2000個 params = { "count": 2000, "granularity": "M15" } #ドル円ローソク足データ取得 r = instruments.InstrumentsCandles(instrument="USD_JPY", params=params) api.request(r) # ストリーミングの最初の1件目のデータを確認 r.response['candles'][0] rate = pd.DataFrame.from_dict({r.response['candles'][i]['time']: r.response['candles'][i]['mid'] for i in range(0,len(r.response['candles'])) for j in r.response['candles'][i]['mid'].keys()}, orient='index', ) rate.index = pd.to_datetime(rate.index) #EMAを求める ema = pd.DataFrame() ema['ema_10'] = rate['c'].ewm(span=10).mean() ema['ema_20'] = rate['c'].ewm(span=20).mean() ema['ema_40'] = rate['c'].ewm(span=40).mean() ema['ema_80'] = rate['c'].ewm(span=80).mean() ema['ema_320'] = rate['c'].ewm(span=320).mean() #計算したデータはseries型なのでデータフレームにする。そうしないとエラーが出るから。 ema_10 = pd.DataFrame(ema['ema_10']).reset_index() ema_20 = pd.DataFrame(ema['ema_20']).reset_index() ema_40 = pd.DataFrame(ema['ema_40']).reset_index() ema_80 = pd.DataFrame(ema['ema_80']).reset_index() ema_320 = pd.DataFrame(ema['ema_320']).reset_index() 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/ツールのバージョンなど)

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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