1

株を売る戦略をシミュレートするスクリプトを作成しようとしています。意図は、時間の経過とともに株価に関する仮定を考慮して、より高い価格でより多くの株式を売却することです。複数の売り注文が定期的に (毎週) 作成され、指値価格を上回る価格で約定されるまでオープンのままになります (指値価格とは、私が株式を売却できる価格です)。各売り注文には異なる指値価格が設定されているため、価格が高いほど、より多くの注文が約定され、より多くの在庫が売却されます。

私のアプローチは、リストを使用して毎週の価格の仮定を反映し、リストのリストを使用して毎週の注文を反映することでした。私の意図は、注文リストを毎週繰り返し、次の条件を満たす注文を「満たす」ことです。

  • 彼らはその週の価格想定を下回る指値価格を持っています
  • それらはまだ販売されていません

これは、スクリプトの簡略化されたバージョンです

orders = [] # initalize an empty list of orders.  Append orders to this list each week.
number_of_weeks = 4 # number of weeks to simulate

weekly_order_template = [[100, 5, "", ""],[150, 10, "", ""]] # these are the orders that will be added each week (2 in this example) and each order includes the number of shares, the limit price, the sale price (if sold), the sale week (if sold).

# create a list to store the weekly price assumptions
weekly_price = [] # init a list to store weekly prices
price = 4.90
price_increment = .05
for weeks in range(0,number_of_weeks):
    price = price + price_increment
    weekly_price.append(price)

# each week, add this week's orders to the orders list and then compare all orders in the list to see which should be sold.  Update the orders list elements to reflect sales.
for week in range(0,number_of_weeks):
    print "****This is WEEK ", week, "****"
    this_weeks_price = weekly_price[week]
    print "This week's price: ", this_weeks_price
    for order in weekly_order_template: # add this week's orders to the orders list
        orders.append(order)
    for order in orders: # iterate over the orders list and update orders that are sold
        if (order[2] == "") and (order[1] < this_weeks_price):
            order[2] = this_weeks_price
            order[3] = week
    print "All orders to date: ", orders

このスクリプトは機能していません。これらの注文が存在する前に、注文を「販売」しています。たとえば、これは 4 週目の出力です。

****This is WEEK  3 ****
This week's price:  5.1
All orders to date:  [[100, 5, 5.05, 2], [150, 10, '', ''], [100, 5, 5.05, 2], [150, 10,'', ''], [100, 5, 5.05, 2], [150, 10, '', ''], [100, 5, 5.05, 2], [150, 10, '', '']]

7 番目の要素 (第 3 週の最初の注文) が、当時の現在の価格である $5.10 ではなく、前の週の価格で「売られている」のはなぜですか? (注 - 「第 3 週」は第 0 週を第 1 週として使用しているため、第 4 週を指します)

4

2 に答える 2

1

Python は「参照セマンティクス」を使用します。つまり、明示的に指示しない限り、何かをコピーすることはありません。

問題は次の行にあります。

orders.append(order)

によって参照されるオブジェクトをorderリストに追加し、次の週にまったく同じオブジェクトを再度追加します。あなたがすべきことは、そのコピーを追加することです:

orders.append(list(order))
于 2012-08-05T18:33:12.187 に答える
0

行を変更する

orders.append(order)

orders.append(list(order))

問題は、単純に注文テンプレートを参照するのではなく、注文のコピーを作成する必要があることですweekly_order_template(これが原因です)。後で (ループ内で) 注文を変更すると、注文の個々のコピーが変更されます。注文テンプレート自体ではありません。list(order)for order in orders:

于 2012-08-05T18:33:45.640 に答える