2012-09-17 76 views
-6

我有一個問題,我需要在一定數量的收件人之間分割多個(數千個)數量,以便每個數量必須分成整數並使用相同的比例。 我需要找到一個代碼實現這個可靠和高效(不,我們都?:-))分割數量算法(證券交易所訂單)

這是爲了解決在金融市場(證券交易所訂單)的問題,其中一個訂單可能會得到成千上萬的「填充」並且在一天結束時必須分配給少數客戶,同時維持訂單的平均價格。這裏有一個例子:

累計訂貨量爲37300個

數量聯交所

執行1. 16700股在填充價格75.84

執行2. 5400股以填補價75.85

填寫

執行3. 4900股價格填補75.86

執行4. 10300股股票價格填補È75.87

總計37300股填充在平均價格=(16700 * 75.84 + 5400 * 75.85 + 4900 * 75.86 + 10300 * 75.87)/ 37300 = 75.85235925

假設我需要3個客戶之間分配這些量即:

客戶端1:15000股

客戶機2:10000股

Client3:12300股

EA CH執行必須單獨分開(我不能只取每個客戶售價爲均價請求的數量)

我首先想到的是按比例分割每個:

客戶端1獲取37300分之15000= 0.402144772

客戶端2得到37300分之10000= 0.268096515

客戶端3獲取三萬七千三百分之一萬二千三百= 0.329758713

,這將導致

客戶端1 - 15000客戶端2 - 10000 Client3 - 12300 比:0.402144772比:0.268096515比:0.329758713

拆分(很抱歉的格式 - 這是我能在帖子編輯器做的最好的)

+-------------+-------------+-------------+ 
| Client 1 | Client 2 | Client 3 | 
+-------------+-------------+-------------+ 
| 6715.817694 | 4477.211796 | 5506.970509 | 
| 2171.581769 | 1447.72118 | 1780.697051 | 
| 1970.509383 | 1313.672922 | 1615.817694 | 
| 4142.091153 | 2761.394102 | 3396.514745 | 
+-------------+-------------+-------------+ 
| Totals:  |    |    | 
|  15000 |  10000 |  12300 | 
+-------------+-------------+-------------+ 

這個問題是,我不能分配數量給客戶端,所以我需要一個智能算法來調整數量,使得這些分割的小數部分爲0.我明白,在許多情況下這可能是不可能的,所以這個要求可以放鬆一點,這樣某個客戶可以獲得更多(或更少)的收益。

是否有人知道我可以用作此問題的起點的算法?

+3

這個問題似乎有點太大的範圍爲stackoverflow。解決整個問題真的有點太多了。如果您在處理這個問題時遇到了更具體的問題,那麼這個問題更適合本網站。 – Servy

+1

@Servy,太大?我認爲如果它的措辭是「如何在7等分中拆分41,所以每個都得到整數6,6,6,6,6,6,5?」它不會得到這麼多downvotes ... –

+0

是的,這就是你張貼太多的信息:-) –

回答

1

除了最後一個數字(可能最小)之外,您可以舍入所有數字(ratio [n] * totalQuantity)最後一個必須是totalQuantity - 其他數字的總和。這將爲您提供整數數量,同時具有與您選擇的比率接近的正確總數。

+0

夠簡單。謝謝。我仍然很好奇舍入誤差是否會達到平均價格不再一致的程度 –

0

試着從另一個角度來看待它。你已經知道每個客戶有多少份額。你想計算每個公司必須支付的公平總額,並且在沒有舍入錯誤的情況下執行此操作。

因此,您希望總計美元金額沒有舍入問題,即精確到0.01。

然後可以使用美元金額計算價格並顯示爲所需的精度。

相反(計算價格,然後派生金額)將始終產生與美元金額四捨五入的問題。

假設價格爲每100個單位,這裏是實現這一點的一種方法:

  1. 計算爲訂單(合計$ 16,700名* 75.84/100 + 5400 * 75.85/100 + 4900 * 75.86/100 + 10300 * 75.87/100)= $ 28,292.93

  2. 分配所有客戶端除1,基於所述比率的數量有序/填充量:

客戶端2 = $ 28,292.93/37300 *萬= $ 7,585,24 價格= 7,585,24/10,000 * 100 = 75.8524。

客戶端3 = $ 28,292.93/37300 * 12300 = $ 9,329.84 價格= $ 9,329.84/12300 * 100 = 75.85235772

  1. 計算最後一個客戶端的剩餘$$$:

$ 28,292.93 - ( 7,585,24美元+ 9,329.84美元)= 11,377.85美元。 Price = $ 11,377.85/15,000 * 100 = 75.85233333

這裏我隨意挑選了客戶1,其中最大數量的客戶是剩餘計算的對象。