public void testMetrics() { bar(1, 2, 10, 4); fill(A, 0, 2); fill(B, 0, 2); fill(C, 0, 2); fill(D, 0, 2); bar(2, 4, 6, 8); bar(0, 0, 0, 0); bar(3, 6, 9, 2); bar(2, 3, 4, 5); O.each(O.copy(system().allPositions()), p => system().systems_[p.symbol].placeOrder(p.exit("f-in a", market(), fillOrKill()))); fill(A, 0, 0); fill(B, 0, 0); fill(C, 0, 0); fill(D, 0, 0); bar(5, 7, 9, 11); bridge().statistics().writeSTOFiles(true); checkMetrics(A.name, "QNetProfit", -2); checkMetrics("ALL", "QNetProfit", -8); checkMetrics(A.name, "QMaxDrawdown", -3); checkMetrics("ALL", "QMaxDrawdown", -20); checkMetrics("P1", "QMaxDrawdown", -15); checkMetrics("P2", "QMaxDrawdown", -30); }
public void testSystem() { var rc = 0.0; O.each(symbols, symbol => system().richCheap[symbol].enterTestMode()); O.each(symbols, symbol => system().richCheap[symbol].add(time, rc++)); bridge().processBar(bars(time)); hasOrders(symbols[0], symbols[0].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[1], symbols[1].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[2], symbols[2].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[49], symbols[49].sell("enter short", market(), 1, oneBar())); hasOrders(symbols[48], symbols[48].sell("enter short", market(), 1, oneBar())); hasOrders(symbols[47], symbols[47].sell("enter short", market(), 1, oneBar())); var i = 1; system().richCheap[O.first(symbols)].add(time.AddDays(i++), 100); processBar(bars(time.AddDays(1))); hasOrders(symbols[3], symbols[3].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[1], symbols[1].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[2], symbols[2].buy("enter long", market(), 1, oneBar())); hasOrders(symbols[49], symbols[49].sell("enter short", market(), 1, oneBar())); hasOrders(symbols[48], symbols[48].sell("enter short", market(), 1, oneBar())); hasOrders(symbols[0], symbols[0].sell("enter short", market(), 1, oneBar())); O.each(orders(), order => fill(order, 0)); processBar(bars(time.AddDays(i++))); noOrders(); processBar(bars(time.AddDays(i++))); noOrders(); processBar(bars(time.AddDays(i++))); noOrders(); system().richCheap[O.first(symbols)].add(time.AddDays(i), 0); processBar(bars(time.AddDays(i++))); hasOrders(symbols[3], symbols[3].sell("exit long", market(), 1, oneBar())); hasOrders(symbols[47], symbols[47].sell("enter short", market(), 1, oneBar())); hasOrders(symbols[0], symbols[0].buy("enter long", market(), 1, oneBar()), symbols[0].buy("exit short", market(), 1, oneBar())); O.each(O.copy(orders()), order => fill(order, 0)); system().richCheap[O.first(symbols)].add(time.AddDays(i), 100); processBar(bars(time.AddDays(i))); noOrders(); // holding period }