2016-04-22 6 views
-1

私はPythonの初心者ですが、プログラミングには興味がありません。私は、Pythonで次のように処理する方がはるかにスマートな方法があると思う。私はパフォーマンスのために両方を変更しても構いませんが、パフォーマンスを求めています。必ずしも簡潔さやスタイルの変更が必要ではありません。PythonのdataTable/dict/list操作のパフォーマンスをどのように改善できますか?

for asset in securities: 
    if asset not in open_orders: 
     currentPrice = data.current(asset,'price') 
     if asset in assetOwnedHighPrice: 
      if assetOwnedHighPrice[asset] < currentPrice: 
       assetOwnedHighPrice[asset] = currentPrice 
     if asset in assetOwnedLowPrice and currentPrice > 0: 
      if assetOwnedLowPrice[asset] > currentPrice: 
       assetOwnedLowPrice[asset] = currentPrice 

私は、x = y.mean()のようなセット演算子(メソッド)をわずかに認識しています。 2つのリスト(assetOwnedHighPriceassetOwnedLowPrice)で終わりたいものは、すべてのアセットの最高値と最低値です。 2つのリストはすべてのアセットについて0で事前に構成され、その後定期的に更新されます。

これが実行されるプラットフォームは、すべての価格を含むパンダデータテーブルの構築を可能にします。だから私は言うことができる

currentPrices = data.history(securities,'price',1,'1m') 

currentPricesは、列と価格の行として証券を持つデータテーブルになります。

+5

私たちの生活を楽にするために、サンプルデータと期待される出力を教えてください。あなたはいつも 'min、max'組み込み関数を使うことができます – Bahrom

+0

' [option1、option2] [x> 0] 'トリックを使って条件分岐の必要性を取り除く以外はほとんど最適化されていませんが、何が達成される必要があるかに関する情報。 –

+0

追加するオリジナル信号を編集これが実行されるプラットフォームは、その中のすべての価格を含むパンダデータテーブルの構築を可能にします。したがって、私は言うことができました currentPrices = data.history(有価証券、 '価格'、1、 '1m') currentPricesは、有価証券を列と価格の1行として持つデータテーブルになります。 –

答えて

0

バックテストを行うと述べたので、すべての過去の価格設定があります。

以下の設定プロキシとしよう:

import pandas as pd 
from StringIO import StringIO 

text = """Date,200001,200230,200247,200291,200597 
2016-03-31,593.6399,41.830002,11.800001,25.100007,151.45 
2016-04-01,598.5,42.190003,11.57,25.350007,152.52001 
2016-04-04,593.18995,42.320008,11.36,26.0,152.07001 
2016-04-05,586.1399,42.039994,11.07,25.380005,150.0 
2016-04-06,602.08008,43.050004,11.08,25.940003,150.02001 
2016-04-07,591.42994,42.610001,10.86,25.820008,148.25 
2016-04-08,594.6001,42.369996,10.960001,26.339997,149.35001 
2016-04-11,595.92994,42.479996,11.020001,26.080002,149.25 
2016-04-12,603.16993,42.820008,11.16,26.130005,149.63001 
2016-04-13,614.82007,43.350007,11.23,27.470002,151.23""" 

price_df = pd.read_csv(StringIO(text), index_col=0, parse_dates=[0]) 

その後、あなたは歴史的な高価格などのような歴史的な低価格を生成することができます:

hi_df = price_df.cummax() 

lo_df = price_df.cummin() 

price_df

   200001  200230  200247  200291  200597 
Date                
2016-03-31 593.63990 41.830002 11.800001 25.100007 151.45000 
2016-04-01 598.50000 42.190003 11.570000 25.350007 152.52001 
2016-04-04 593.18995 42.320008 11.360000 26.000000 152.07001 
2016-04-05 586.13990 42.039994 11.070000 25.380005 150.00000 
2016-04-06 602.08008 43.050004 11.080000 25.940003 150.02001 
2016-04-07 591.42994 42.610001 10.860000 25.820008 148.25000 
2016-04-08 594.60010 42.369996 10.960001 26.339997 149.35001 
2016-04-11 595.92994 42.479996 11.020001 26.080002 149.25000 
2016-04-12 603.16993 42.820008 11.160000 26.130005 149.63001 
2016-04-13 614.82007 43.350007 11.230000 27.470002 151.23000 
のように見えます

hi_dfおよびlo_df loこれらのようにそれぞれOKです

print hi_df 

       200001  200230  200247  200291  200597 
Date                
2016-03-31 593.63990 41.830002 11.800001 25.100007 151.45000 
2016-04-01 598.50000 42.190003 11.800001 25.350007 152.52001 
2016-04-04 598.50000 42.320008 11.800001 26.000000 152.52001 
2016-04-05 598.50000 42.320008 11.800001 26.000000 152.52001 
2016-04-06 602.08008 43.050004 11.800001 26.000000 152.52001 
2016-04-07 602.08008 43.050004 11.800001 26.000000 152.52001 
2016-04-08 602.08008 43.050004 11.800001 26.339997 152.52001 
2016-04-11 602.08008 43.050004 11.800001 26.339997 152.52001 
2016-04-12 603.16993 43.050004 11.800001 26.339997 152.52001 
2016-04-13 614.82007 43.350007 11.800001 27.470002 152.52001 

print lo_df 

       200001  200230  200247  200291 200597 
Date               
2016-03-31 593.63990 41.830002 11.800001 25.100007 151.45 
2016-04-01 593.63990 41.830002 11.570000 25.100007 151.45 
2016-04-04 593.18995 41.830002 11.360000 25.100007 151.45 
2016-04-05 586.13990 41.830002 11.070000 25.100007 150.00 
2016-04-06 586.13990 41.830002 11.070000 25.100007 150.00 
2016-04-07 586.13990 41.830002 10.860000 25.100007 148.25 
2016-04-08 586.13990 41.830002 10.860000 25.100007 148.25 
2016-04-11 586.13990 41.830002 10.860000 25.100007 148.25 
2016-04-12 586.13990 41.830002 10.860000 25.100007 148.25 
2016-04-13 586.13990 41.830002 10.860000 25.100007 148.25 
関連する問題