私は初心者/中級のPythonプログラマーですが、アプリケーションは作成しておらず、スクリプトのみを作成しています。私は現在、オブジェクト指向のデザインをあまり使用していないので、このプロジェクトが私のOODスキルの構築に役立つことを望んでいます。問題は、デザインの観点からどこから始めればよいかわからないことです(オブジェクトなどを作成する方法を知っています)。その価値については、私も独学で、正式なCS教育は受けていません。
ポートフォリオの株式/オプションのポジションを追跡するプログラムを書いてみたいと思います。
何が良いオブジェクト候補(ポートフォリオ、ストック、オプションなど)とメソッド(購入、販売、更新データなど)になるかについて大まかな考えがあります。
ロングポジションは買いからオープン、売りからクローズになり、ショートポジションには売りからオープン、買いからクローズになります。
portfolio.PlaceOrder(type="BUY", symbol="ABC", date="01/02/2009", price=50.00, qty=100)
portfolio.PlaceOrder(type="SELL", symbol="ABC", date="12/31/2009", price=100.00, qty=25)
portfolio.PlaceOrder(type="SELLSHORT", symbol="XYZ", date="1/2/2009", price=30.00, qty=50)
portfolio.PlaceOrder(type="BUY", symbol="XYZ", date="2/1/2009", price=10.00, qty=50)
次に、このメソッドが呼び出されたら、どのように情報を保存しますか?最初は、Symbol、OpenDate、OpenPriceなどの属性を持つPositionオブジェクトがあると思いましたが、売りと売りが異なる時間と金額で発生するため、売り上げを考慮して位置を更新することを考えるのは難しいです。
- 100株を購入して、1回、1つの価格でオープンします。4つの異なる時間、4つの異なる価格を販売します。
- 100株を購入します。100日間、1日1株を売ります。
- 4つの異なる時間、4つの異なる価格を購入します。ポジション全体を一度に1つの価格で売ります。
考えられる解決策は、株式の各株のオブジェクトを作成することです。この方法では、各株の日付と価格が異なります。これはオーバーヘッドが大きすぎるでしょうか?ポートフォリオには、数千または数百万の小さな共有オブジェクトが含まれる可能性があります。ポジションの総市場価値を知りたい場合は、次のようなものが必要になります。
sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
位置オブジェクトがある場合、計算は簡単になります。
position.last * position.qty
助けてくれてありがとう。他の投稿を見ると、SOは「あなたのためにプログラムを書く」のではなく「助け」のためであることが明らかです。正しい道を指して、方向性が必要だと感じています。
反射に関する追加情報 目的 プログラムは、開いている状態と閉じている状態の両方のすべての位置を追跡します。詳細な損益を確認する機能を備えています。
私が見たい詳細なP&Lについて考えるとき...-すべてのオープン日(およびクローズ日)-開催時間-オープン価格(クローズ日)-オープン以来のP&L-1日あたりのP&L
@Senderle
おそらく、あなたは「オブジェクト」のメタファーを文字通りに解釈しすぎていると思います。そのため、プログラミングの意味で、ある意味で非常にオブジェクトに似ているように見える共有をオブジェクトにしようとしています。もしそうなら、それは間違いです、それは私が並置のポイントであると思うものです。
これは私の間違いです。「オブジェクト」について考えると、share
オブジェクトは当然の候補のようです。アイデアがおかしいと思われるのは、数百万人になるまでです。今週末は無料のコーディング時間を設けて、数量のあるオブジェクトを作成してみます。