23 lines
1.1 KiB
MySQL
23 lines
1.1 KiB
MySQL
|
-- this SQL statement expects 2 input parameters (start time, stop time)
|
||
|
-- NB: if this text is processed by StringFormat-ing, '%' symbols should be doubled
|
||
|
-- in MQL5 code to preserve them for SQL processing
|
||
|
SELECT
|
||
|
AVG(product) / STDDEV(product) AS objective,
|
||
|
SUM(estimate) AS backtest_profit,
|
||
|
SUM(CASE WHEN estimate >= 0 THEN estimate ELSE 0 END) / SUM(CASE WHEN estimate < 0 THEN -estimate ELSE 0 END) AS backtest_PF,
|
||
|
intraday, day
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
time,
|
||
|
TIME(time, 'unixepoch') AS intraday,
|
||
|
STRFTIME('%w', time, 'unixepoch') AS day,
|
||
|
(LAG(open,-1) OVER (ORDER BY time) - open) AS delta,
|
||
|
SIGN(open - LAG(open) OVER (ORDER BY time)) AS direction,
|
||
|
(LAG(open,-1) OVER (ORDER BY time) - open) * (open - LAG(open) OVER (ORDER BY time)) AS product,
|
||
|
(LAG(open,-1) OVER (ORDER BY time) - open) * SIGN(open - LAG(open) OVER (ORDER BY time)) AS estimate
|
||
|
FROM MqlRatesDB
|
||
|
WHERE (time >= ?1 AND time < ?2)
|
||
|
)
|
||
|
GROUP BY intraday, day
|
||
|
ORDER BY objective DESC
|