2017-01-21 2 views
-1

のリストは以下の機能は、基本的なクリーナーは、各セキュリティに

def PVGOscreen(): 
     PVGO = PV - EPS/r 
     ratio = PVGO/PV 
    print (ratio) 
    if (ratio < 0.6) : 
     print("stable security") 
    else: 
     print("volatile security") 
    if (K < 0.2) and (K > D) : 
     print ("Technical Buy") 
    elif (K > 0.8) and (K < D) : 
     print ("Technical Sell") 
    else: 
     print ("Not Actionable") 

print (PVGOscreen(Securities)) 
を評価する方法を定義
Securities = [ 'AAPL' , 'TSLA' , 'AMZN' ] 
for 'AAPL': 
    PV = 120 
    EPS = 8.31 
    r = 0.0519 
    K=.86 
    D=.88 
for 'TSLA': 
    PV = 244.73 
    EPS = -5 
    r = 0.2 
    K=.83 
    D=.90 
for 'AMZN': 
    PV = 808.33 
    EPS = 4.46 
    r = 0.087 
    K=.86 
    D=.90 

PVGO画面の下で評価される有価証券を定義します

私が得ている出力は以下の通りで、AAPLの期待される出力です。異なる証券の変数の値を変更しようとすると、以下の

​​

TSLAとAMZNの出力を取得するにはどうすればよいですか。証券のリストの各証券の変動価値をどのように変更し、AAPLのみを取得するのではなく、これらの証券のそれぞれについてPVGOscreenの出力をどのように変更するのですか?

+1

' 'のためにAAPL ': 'は有効なPythonではありません。他の言語ですか? –

+0

'for 'AAPL':'はSyntaxErrorなので、実際にコードとして実行しようとしていますか? 'for'文は* loop *です。あなたは正確に何をしようとしていますか?なぜ*関数に引数として値を渡さないのですか? –

+1

'def PVGOscreen()'は引数をとりませんが、 'Securities'を渡しています。これは意味をなさない。 「証券」はリストです。 –

答えて

1

最初に、コメントに数人の人が挙げたように、構文for 'AAPL':は有効なPython構文ではありません。

第2に、上記のデータを追跡するためのPythonの方がはるかに優れています。

securities = ['AAPL', 'TSLA' , 'AMZN'] 

# Initialize "empty" nested `dict`s to better store financial data 
securities_data = {sec: {} for sec in securities} 

for sec in securities_data: 
    if sec == 'AAPL': 
     PV = 120 
     EPS = 8.31 
     r = 0.0519 
     K=.86 
     D=.88 
    elif sec == 'TSLA': 
     PV = 244.73 
     EPS = -5 
     r = 0.2 
     K=.83 
     D=.90 
    elif sec == 'AMZN': 
     PV = 808.33 
     EPS = 4.46 
     r = 0.087 
     K=.86 
     D=.90 
    else: 
     PV = None 
     EPS = None 
     r = None 
     K = None 
     D = None 

    # Nested dictionary to better keep track of each security's data 
    securities_data[sec]['PV'] = PV 
    securities_data[sec]['EPS'] = EPS 
    securities_data[sec]['r'] = r  
    securities_data[sec]['K'] = K 
    securities_data[sec]['D'] = D   

はこの仕事をしているのより良い方法がありますが、私は、この例では、あなたのコードは、あなたの人生を少し楽にするために適合させることができる方法を簡単に示し願っています:ビルトイン使ってPython、ネストされたdictオブジェクトがうまく動作しますプログラマの視点から考えると、

pandasは、このタイプの問題に非常に適しているが、ベースのPythonには含まれていない別のパッケージです。

第3に、PVGOscreen関数にティッカーの名前を渡すと、上記のネストされた辞書を使用して各チケットの異なる値を動的に参照できるため、コードの柔軟性が向上します。 PVEPS

今、あなたの機能をテスト
def PVGOscreen(sec): 
    PV = securities_data[sec]['PV'] 
    EPS = securities_data[sec]['EPS'] 
    r = securities_data[sec]['r'] 

    PVGO = PV - EPS/r 
    ratio = PVGO/PV 

    print(ratio) 

    if ratio < 0.6: 
     print("stable security") 
    else: 
     print("volatile security") 

    if K < 0.2 and K > D: 
     print("Technical Buy") 
    elif K > 0.8 and K < D: 
     print("Technical Sell") 
    else: 
     print("Not Actionable") 

>>> PVGOscreen('AAPL') 
-0.33429672447013487 
stable security 
Technical Sell 

をそして、あなたはあなたのティッカーのそれぞれの出力をしたい場合、あなたはこれを試すことができます。

>>> for s in securities: 
...  print(s) 
...  PVGOscreen(s) 
... 
AAPL 
-0.33429672447013487 
stable security 
Technical Sell 
TSLA 
1.1021533935357333 
volatile security 
Technical Sell 
AMZN 
0.9365799020003068 
volatile security 
Technical Sell 
+0

ありがとう! –

+1

それはまさに私がやろうとしていたものでした。私は完全にコーディングし、私の職業に関連したままにしようとしているので、私たちの初心者を案内するための専門家にそんなにあなたに専門家に感謝 –

関連する問題