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

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

ただいまの
回答率

90.53%

  • Python

    7884questions

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

PYTHON 関数の作成方法 IMPORTの宣言箇所について

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 269

terak31

score 6

お世話になります。python初心者です。

MAIN処理

exchange = [
hogebit({
'apiKey': 'hoge',
'secret': 'hoge',
}),
hogebank({
'apiKey': 'hoge',
'secret': 'hoge',
})
]

def order_process():
    limit_ordered_info = exchange[0].create_order( >>>>>>>>>>>>>>>>>>>>>>>>>[0]を追加したい。
    return limit_ordered_info
order_process()

自分で作成したdf関数の中にexchange[0]を追加したいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • terak31

    2018/05/14 21:36

    失礼しました。

    キャンセル

  • terak31

    2018/05/14 21:37 編集

    -

    キャンセル

  • 退会済みユーザー

    2018/05/15 10:19

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

+2

現在はこのようにexchangeを定義しているかと思いますが、このままだとexchangeの0番目がhogebitで・・・と覚えておかなくては行けません。

exchange = [
    hogebit({ 'apiKey': 'hoge', 'secret': 'hoge',}),
    hogeif({  'apiKey': 'hoge', 'secret': 'hoge',}),
    hogebank({'apiKey': 'hoge', 'secret': 'hoge',})
    ]

そのかわりに、dictを使うことをオススメします。

exchange = {
    'hogebit': hogebit({'apiKey': 'hoge', 'secret': 'hoge',}),
    'hogeif': hogeif({'apiKey': 'hoge', 'secret': 'hoge',}),
    'hogebank': hogebank({'apiKey': 'hoge', 'secret': 'hoge',})
    }


こうしておくことによって、exchange['hogebit'].create_order(...)と呼び出せます。


最後のやりたいことは、indexを渡すよりは、exchangeを渡せばいいと思いますよ。

def order_process(exchange, 
                  arbitrage_decision, best_ask_price,
                  set_ask_volume, target_currency):
    limit_ordered_info = exchange.create_order(
                            symbol=target_currency,
                            type='limit',
                            side='buy',
                            amount=set_ask_volume,
                            price=best_ask_price
                         )
    print(json.dumps(limit_ordered_info, indent=True))
    return limit_ordered_info

order_process(exchange[0],
              arbitrage_decision, best_ask_price,
              set_ask_volume, target_currency)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 21:17 編集

    -

    キャンセル

  • 2018/05/14 21:19

    追記ありがとうございます。少々お待ち下さい。

    キャンセル

  • 2018/05/14 21:19

    いつも丁寧にありがとうございます。

    キャンセル

  • 2018/05/14 21:21 編集

    -

    キャンセル

  • 2018/05/14 21:25 編集

    キャンセル

  • 2018/05/14 21:26

    return limit_ordered_info を実施してみます。

    キャンセル

  • 2018/05/14 21:28

    defの中ではない場所でlimit_ordered_info = exchange.create_order(...)が正しく呼び出せるなら、ですが。

    キャンセル

  • 2018/05/14 21:30

    return limit_ordered_info を追記しましたが、
    AttributeError: 'list' object has no attribute 'create_order' というエラーが出ています。

    キャンセル

  • 2018/05/14 21:33

    具体的に画像を追加させていただきました。

    キャンセル

  • 2018/05/14 21:34

    377行目 limit_ordered_info = exchange.create_order( にて
    AttributeError: 'list' object has no attribute 'create_order' のエラーが出ている状況です。

    キャンセル

  • 2018/05/14 21:37

    参考にしているサイトを見る限り、
    bf = ccxt.bitflyer({
    'apiKey': '<APIキー>',
    'secret': '<APIシークレット>'
    })
    としてbfのインスタンスを作って、それに対してbf.exchange(...)を呼び出しているようですね。

    キャンセル

  • 2018/05/14 21:39

    はい。画像修正しました。

    キャンセル

  • 2018/05/14 21:39

    すいませんexchangeじゃない、bf.create_order(...)等です。

    キャンセル

  • 2018/05/14 21:41 編集

    -

    キャンセル

  • 2018/05/14 21:44

    exchange = ...というexchangeへの代入をどこかで行っているはずなのですが、その部分も追記してもらえませんでしょうか。

    キャンセル

  • 2018/05/14 21:46 編集

    キャンセル

  • 2018/05/14 21:46

    みたいな感じで取引所が3つあります。

    キャンセル

  • 2018/05/14 21:48

    exchange.create_order(
    の  exchange. を df の中に 持ってこれていないのでしょうか?
    メイン関数の中では上記のようにexchangeを宣言しています。

    キャンセル

  • 2018/05/14 21:49

    ひとまず一番外側の`[ ]`のカッコを外して実行してみてください。そのコードではexchangeがリストになってしまい、おそらく意図した通りに動かなくなってしまいます。

    キャンセル

  • 2018/05/14 21:53 編集

    キャンセル

  • 2018/05/14 22:00 編集

    -

    キャンセル

  • 2018/05/14 22:00

    複数のexchange objectが入っているわけですね。そうすると

    キャンセル

  • 2018/05/14 22:01

    exchange[0].create_order(...)なら通るんじゃないですかね。

    キャンセル

  • 2018/05/14 22:05

    おーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

    キャンセル

  • 2018/05/14 22:06

    通りました。す、すごすぎる。

    キャンセル

  • 2018/05/14 22:06

    ありがとうございます。exchangeの引継ぎが出来ない状況です。

    キャンセル

  • 2018/05/14 22:06

    整理をして本文に記載します。

    キャンセル

  • 2018/05/14 22:09

    追記しました。

    キャンセル

  • 2018/05/14 22:16

    defの中でexchangeを作るのをやめれば関数の内外で共通の変数にアクセスできます。念のためdefの中でglobal exchangeとしておくといいかもしれません。

    キャンセル

  • 2018/05/14 22:18

    おおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお

    キャンセル

  • 2018/05/14 22:20

    defの中のexchangeを全て削除してもエラーは出ませんでした。つまり tachikoma さんがおっしゃられたexchange[0].create_order(...)なら通るんじゃないですかね。 の [0]が原因でした。エンジニアはコミュニケーション能力が著しく低い一方で、遠隔でこのスピードでこの拙い私の内容で答えにたどり着かせるあなたの能力は天下一品、天才だと思います。ありがとうございます。

    キャンセル

  • 2018/05/14 22:21

    で、今exchange[0]. の[0].を引数にトライしています。

    キャンセル

  • 2018/05/14 22:29

    exchangeの要素を一つ、引数で渡せばいいんじゃないですかね。

    キャンセル

  • 2018/05/14 22:33

    なるほどなるほど。辞書が3つあって、その中に不変のタプルがあって、その中に辞書でkeypassですね?

    キャンセル

  • 2018/05/14 22:36

    うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
    order_process(exchange[0],

    ちょとやってみます。

    キャンセル

  • 2018/05/14 22:36

    「不変のタプル」ってどこから出てきた・・・?hogebit({'apiKey': 'hoge', 'secret': 'hoge',})の返り値ですかね。keyは文字列ですが、valueの型は私は分かりません(ためしてないので)

    キャンセル

  • 2018/05/14 23:08

    ()ってタプルなのかと思っていました。
    # タプル – (‘perl’, ‘python’, ‘php’, ‘ruby’) リストに近いが不変(イミュータブル)

    キャンセル

  • 2018/05/14 23:11

    ちなみにまだ格闘しています。

    キャンセル

  • 2018/05/14 23:13

    exchange = {
    hogexxt.hogeflyer({
    'apiKey': '',
    'secret': '',
    }),

    キャンセル

  • 2018/05/14 23:13

    で辞書型に変えました。

    キャンセル

  • 2018/05/14 23:14

    limit_ordered_info = order_process(exchange,arbitrage_decision,best_ask_price,set_ask_volume,target_currency)
    で呼び出しのエラーもなくなりました。

    キャンセル

  • 2018/05/14 23:14

    def order_process(exchange,arbitrage_decision,best_ask_price,set_ask_volume,target_currency):

    でdefのエラーもなくなりました。

    キャンセル

  • 2018/05/14 23:17

    ちょと他の処理にも影響しそうなので、一旦辞書は諦めます。

    キャンセル

  • 2018/05/14 23:21

    本当にいつもありがとうございます。

    キャンセル

  • 2018/05/14 23:21

    丁寧かつ迅速かつ的確で助かりました。ありがとうございました。

    キャンセル

  • 2018/05/14 23:25

    最初は思い通りにならないと思いすが、いろいろいじりながら体で覚えていってくださいな。

    キャンセル

  • 2018/05/14 23:26

    優しすぎます!

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Python

    7884questions

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