我有訂單的表看起來像這樣:淨頭寸計算
Ticket Open Time Close Time Type Size
253199 2010-09-09 20:40:00 2010-09-09 20:41:00 sell 0.1
255406 2010-09-13 19:30:00 2010-09-14 04:30:00 buy 0.1
258089 2010-09-15 07:00:00 2010-09-15 09:15:00 sell 0.1
258197 2010-09-15 09:15:00 2010-09-15 14:50:00 buy 0.1
258203 2010-09-15 09:20:00 2010-09-15 14:50:00 buy 0.1
259659 2010-09-16 04:35:00 2010-09-16 18:35:00 sell 0.1
261065 2010-09-17 07:05:00 2010-09-20 00:02:00 buy 0.1
對於每一個我想獲得一個累計被同時打開(同Type
的)所有訂單的順序。換句話說,是在給定訂單之前打開並在給定訂單之後關閉的任何訂單的所有Size
的總和。
這裏是我的代碼:
DROP TABLE
IF EXISTS LongOrders;
CREATE TABLE LongOrders SELECT
B.Ticket AS Ticket,
SUM(B.`Size`)AS `Cumulative Long`
FROM
`orders`.eurusd_fx AS A
JOIN `orders`.eurusd_fx AS B ON(
B.`Close Time` >= A.`Open Time`
AND B.`Open Time` <= A.`Open Time`
AND A.Type = B.Type
AND A.Type = 'buy'
)
GROUP BY
A.`Open Time`
ORDER BY
A.`Open Time`;
DROP TABLE
IF EXISTS ShortOrders;
CREATE TABLE ShortOrders SELECT
B.Ticket AS Ticket,
SUM(B.`Size`)AS `Cumulative Short`
FROM
`orders`.eurusd_fx AS A
JOIN `orders`.eurusd_fx AS B ON(
B.`Close Time` >= A.`Open Time`
AND B.`Open Time` <= A.`Open Time`
AND A.Type = B.Type
AND A.Type = 'sell'
)
GROUP BY
A.`Open Time`
ORDER BY
A.`Open Time`;
DROP TABLE
IF EXISTS CumLong;
CREATE TABLE CumLong SELECT
A.*
FROM
LongOrders AS A
JOIN `orders`.eurusd_fx AS B USING(Ticket);
DROP TABLE
IF EXISTS CumShort;
CREATE TABLE CumShort SELECT
A.*
FROM
ShortOrders AS A
JOIN `orders`.eurusd_fx AS B USING(Ticket);
SELECT DISTINCT
A.*, CumLong.`Cumulative Long`,
CumShort.`Cumulative Short`
FROM
`orders`.eurusd_fx AS A
JOIN(CumShort, CumLong)ON(
A.Ticket = CumLong.Ticket
OR A.Ticket = CumShort.Ticket
) GROUP BY A.`Open Time`;
和輸出:
+--------+---------------------+------+------+--------+---------------------+------------+-----------------+------------------+
| Ticket | Open Time | Type | Size | Item | Close Time | Commission | Cumulative Long | Cumulative Short |
+--------+---------------------+------+------+--------+---------------------+------------+-----------------+------------------+
| 253199 | 2010-09-09 20:40:00 | sell | 0.1 | eurusd | 2010-09-09 20:41:00 | -0.89 | 0.10000 | 0.10000 |
| 255406 | 2010-09-13 19:30:00 | buy | 0.1 | eurusd | 2010-09-14 04:30:00 | -0.9 | 0.10000 | 0.10000 |
| 258089 | 2010-09-15 07:00:00 | sell | 0.1 | eurusd | 2010-09-15 09:15:00 | -0.91 | 0.10000 | 0.10000 |
| 258197 | 2010-09-15 09:15:00 | buy | 0.1 | eurusd | 2010-09-15 14:50:00 | -0.91 | 0.10000 | 0.10000 |
| 259659 | 2010-09-16 04:35:00 | sell | 0.1 | eurusd | 2010-09-16 18:35:00 | -0.91 | 0.10000 | 0.10000 |
| 261065 | 2010-09-17 07:05:00 | buy | 0.1 | eurusd | 2010-09-20 00:02:00 | -0.92 | 0.10000 | 0.10000 |
| 262121 | 2010-09-20 03:00:00 | sell | 0.1 | eurusd | 2010-09-20 05:55:00 | -0.91 | 0.10000 | 0.10000 |
| 262192 | 2010-09-20 05:50:00 | buy | 0.1 | eurusd | 2010-09-20 09:50:00 | -0.92 | 0.10000 | 0.10000 |
| 262739 | 2010-09-20 16:55:00 | sell | 0.1 | eurusd | 2010-09-20 18:45:00 | -0.91 | 0.10000 | 0.90000 |
| 262822 | 2010-09-20 18:40:00 | buy | 0.1 | eurusd | 2010-09-21 02:05:00 | -0.92 | 0.10000 | 0.10000 |
| 263801 | 2010-09-21 13:05:00 | buy | 0.1 | eurusd | 2010-09-21 21:25:00 | -0.92 | 0.40000 | 0.10000 |
它似乎並沒有正常工作。例如第一個sell
的累積長度應爲0.
我真的很感謝一些幫助!謝謝。
編輯:1個更多的問題:我怎麼能得到的價值ABS(
累計長-
累計短)
?我需要NET累積位置大小。
您需要某種解析函數:它們在MySQL中不可用,但可以模擬:請參閱http://onlamp.com/pub/a/mysql/2007/03/29/emulating-analytic-aka-ranking-functions-with-mysql.html或http://explainextended.com/2009/03/12/ analytic-functions-optimizing-lag-lead-first_value-last_value/ – davek