2016-04-14 4 views
0

私は非常に粗末な「株式取引」プログラムを作成しています。このプログラムは、株価に関するデータファイルにロードされ、1日単位で移動するデータに20日間の移動平均を作成します。プログラムは、価格に基づいて株式を売買するかどうかを決定する必要があります。私は私のプログラムが私が買った/売った株と私が残した金額を正しく把握することができません。私は私のプログラムの関連部分だけを含んでいます。複数のアキュムレータ変数を使用しようとしているPython

netWorth = 1000 
stocks = 0 

def moving_average(): 
    for day in range(1, len(closeColum)): 
     if day < 21: 
      continue 
     twenty_days = sum(closeColum[(day-20):day]) 
     running_avg = twenty_days/20 
     if closeColum[day] < running_avg: 
      buyFunction(day, closeColum) 
     if closeColum[day] > running_avg: 
      sellFunction(day, closeColum) 
     else: 
      continue 

     print(stocks) 

def buyFunction(day, closeColum): 
    netWorth1 = netWorth 
    stocks1 = stocks 
    while netWorth1 > 0: 
     netWorth1 = netWorth1 - closeColum[day] 
     stocks1 += 1 
    return(stocks1, netWorth1) 


def sellFunction(day, closeColum): 
    stocks2 = stocks 
    netWorth2 = netWorth 
    while stocks2 > 0: 
     netWorth2 = netWorth2 + closeColum[day] 
     stocks2 -= 1 
    return(stocks2, netWorth2) 
+0

こんにちは、あなたの身元を確認できますか? – lapinkoira

+0

あなたが何を求めているのかははっきりしていません。あなたは何をしようとしているのですか? – IanS

+0

私は購入した株式と私が持っている金額(「netWorth」)を、データがあるすべての「日」のループにわたって追跡しようとしています。 – corbrrrrr

答えて

0

あなたは別に住んでいるstocksのコピーを作っている

stocks2 = stocks 

言うとき。次に、それを変更するとき:

stocks2 -= 1 

これは変数stocksには影響しません。

return(stocks2, netWorth2) 

stocksには影響しない、とあなたはどこにでもmoving_averageでその戻り値を使用していないので、それは特に役に立たないのです。

あなたがする必要があるのは、実際のstocks変数の値を変更することです。

def buyFunction(day, closeColum): 
    global stocks 
    ... 

今、あなたは、このようなstocks += 1などのステートメントで直接グローバル変数を変更することができます:あなたは、特別にそのようにそうするように依頼しない限り、あなたは通常、関数内からグローバル変数を変更することはできませんので、おそらくこれは、エラーの原因となりました。同じことをnetWorthに対して行う必要があります。

また、クラス内でこれらの関数をラップすることもできます(グローバル変数を使用するよりも一般的には良い方法です)。しかし、あなたのスクリプトがシンプルで、まだPythonが苦労しているのであれば、それについては心配しないでください。

関連する問題