video added
This commit is contained in:
parent
53f97752a4
commit
f13408a9df
6 changed files with 3445 additions and 79 deletions
707
cost_log.csv
Normal file
707
cost_log.csv
Normal file
|
@ -0,0 +1,707 @@
|
|||
timestamp,time_seconds,cumulative_costs,trading_fees,spread_costs,slippage_costs
|
||||
2025-06-20 20:17:23,5.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:24,6.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:25,7.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:26,8.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:27,9.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:28,10.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:29,11.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:30,12.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:31,13.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:32,14.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:33,15.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:34,16.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:35,17.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:36,18.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:37,19.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:38,20.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:39,21.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:40,22.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:41,23.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:42,24.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:43,25.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:44,26.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:45,27.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:46,28.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:47,29.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:48,30.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:49,31.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:50,32.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:51,33.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:52,34.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:53,35.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:54,36.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:55,37.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:56,38.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:57,39.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:58,40.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:17:59,41.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:18:00,42.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:18:01,43.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:18:02,44.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:18:03,45.0,0.0,0.0,0.0,0.0
|
||||
2025-06-20 20:18:04,46.0,1.36,0.8,0.4,0.16
|
||||
2025-06-20 20:18:05,47.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:06,48.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:07,49.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:08,50.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:09,51.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:10,52.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:11,53.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:12,54.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:13,55.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:14,56.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:15,57.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:16,58.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:17,59.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:18,60.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:19,61.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:20,62.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:21,63.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:22,64.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:23,65.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:24,66.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:25,67.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:26,68.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:27,69.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:28,70.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:29,71.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:30,72.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:31,73.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:32,74.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:33,75.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:34,76.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:35,77.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:36,78.0,1.36,0.0,0.0,0.0
|
||||
2025-06-20 20:18:37,79.0,2.72,0.8,0.4,0.16
|
||||
2025-06-20 20:18:38,80.0,2.72,0.0,0.0,0.0
|
||||
2025-06-20 20:18:39,81.0,2.72,0.0,0.0,0.0
|
||||
2025-06-20 20:18:40,82.0,4.352,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:18:41,83.0,5.984000000000001,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:18:42,84.0,5.984000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:43,85.0,7.616000000000001,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:18:44,86.0,7.616000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:45,87.0,9.248000000000001,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:18:46,88.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:47,89.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:48,90.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:49,91.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:50,92.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:51,93.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:52,94.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:53,95.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:54,96.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:55,97.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:56,98.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:57,99.0,9.248000000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:18:58,100.0,10.553600000000001,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:18:59,101.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:00,102.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:01,103.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:02,104.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:03,105.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:04,106.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:05,107.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:06,108.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:07,109.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:08,110.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:09,111.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:10,112.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:11,113.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:12,114.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:13,115.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:14,116.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:15,117.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:16,118.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:17,119.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:18,120.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:19,121.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:20,122.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:21,123.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:22,124.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:23,125.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:24,126.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:25,127.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:26,128.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:27,129.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:28,130.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:29,131.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:30,132.0,10.553600000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:31,133.0,11.859200000000001,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:19:32,134.0,11.859200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:33,135.0,11.859200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:34,136.0,11.859200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:35,137.0,11.859200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:36,138.0,11.859200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:37,139.0,13.491200000000001,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:19:38,140.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:39,141.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:40,142.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:41,143.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:42,144.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:43,145.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:44,146.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:45,147.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:46,148.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:47,149.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:48,150.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:49,151.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:50,152.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:51,153.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:52,154.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:53,155.0,13.491200000000001,0.0,0.0,0.0
|
||||
2025-06-20 20:19:54,156.0,15.1232,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:19:55,157.0,15.1232,0.0,0.0,0.0
|
||||
2025-06-20 20:19:56,158.0,16.755200000000002,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:19:57,159.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:19:58,160.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:19:59,161.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:00,162.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:01,163.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:02,164.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:03,165.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:04,166.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:05,167.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:06,168.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:07,169.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:08,170.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:09,171.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:10,172.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:11,173.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:12,174.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:13,175.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:14,176.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:15,177.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:16,178.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:17,179.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:18,180.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:19,181.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:20,182.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:21,183.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:22,184.0,16.755200000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:20:23,185.0,18.387200000000004,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:20:24,186.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:25,187.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:26,188.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:27,189.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:28,190.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:29,191.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:30,192.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:31,193.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:32,194.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:33,195.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:34,196.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:35,197.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:36,198.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:37,199.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:38,200.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:39,201.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:40,202.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:41,203.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:42,204.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:43,205.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:44,206.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:45,207.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:46,208.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:47,209.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:48,210.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:49,211.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:50,212.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:51,213.0,18.387200000000004,0.0,0.0,0.0
|
||||
2025-06-20 20:20:52,214.0,19.692800000000005,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:20:53,215.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:54,216.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:55,217.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:56,218.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:57,219.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:58,220.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:20:59,221.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:00,222.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:01,223.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:02,224.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:03,225.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:04,226.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:05,227.0,19.692800000000005,0.0,0.0,0.0
|
||||
2025-06-20 20:21:06,228.0,20.998400000000004,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:21:07,229.0,22.304000000000002,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:21:08,230.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:09,231.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:10,232.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:11,233.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:12,234.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:13,235.0,22.304000000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:21:14,236.0,23.6096,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:21:15,237.0,23.6096,0.0,0.0,0.0
|
||||
2025-06-20 20:21:16,238.0,24.9696,0.8,0.4,0.16
|
||||
2025-06-20 20:21:17,239.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:18,240.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:19,241.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:20,242.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:21,243.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:22,244.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:23,245.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:24,246.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:25,247.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:26,248.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:27,249.0,24.9696,0.0,0.0,0.0
|
||||
2025-06-20 20:21:28,250.0,26.3296,0.8,0.4,0.16
|
||||
2025-06-20 20:21:29,251.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:30,252.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:31,253.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:32,254.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:33,255.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:34,256.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:35,257.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:36,258.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:37,259.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:38,260.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:39,261.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:40,262.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:41,263.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:42,264.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:43,265.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:44,266.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:45,267.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:46,268.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:47,269.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:48,270.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:49,271.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:50,272.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:51,273.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:52,274.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:53,275.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:54,276.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:55,277.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:56,278.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:57,279.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:58,280.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:21:59,281.0,26.3296,0.0,0.0,0.0
|
||||
2025-06-20 20:22:00,282.0,27.9616,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:22:01,283.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:02,284.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:03,285.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:04,286.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:05,287.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:06,288.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:07,289.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:08,290.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:09,291.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:10,292.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:11,293.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:12,294.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:13,295.0,27.9616,0.0,0.0,0.0
|
||||
2025-06-20 20:22:14,296.0,29.593600000000002,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:22:15,297.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:16,298.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:17,299.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:18,300.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:19,301.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:20,302.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:21,303.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:22,304.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:23,305.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:24,306.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:25,307.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:26,308.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:27,309.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:28,310.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:29,311.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:30,312.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:31,313.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:32,314.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:33,315.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:34,316.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:35,317.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:36,318.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:37,319.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:38,320.0,29.593600000000002,0.0,0.0,0.0
|
||||
2025-06-20 20:22:39,321.0,30.8992,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:22:40,322.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:41,323.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:42,324.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:43,325.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:44,326.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:45,327.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:46,328.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:47,329.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:48,330.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:49,331.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:50,332.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:51,333.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:52,334.0,30.8992,0.0,0.0,0.0
|
||||
2025-06-20 20:22:53,335.0,32.2048,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:22:54,336.0,32.2048,0.0,0.0,0.0
|
||||
2025-06-20 20:22:55,337.0,32.2048,0.0,0.0,0.0
|
||||
2025-06-20 20:22:56,338.0,32.2048,0.0,0.0,0.0
|
||||
2025-06-20 20:22:57,339.0,32.2048,0.0,0.0,0.0
|
||||
2025-06-20 20:22:58,340.0,32.2048,0.0,0.0,0.0
|
||||
2025-06-20 20:22:59,341.0,33.5104,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:23:00,342.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:01,343.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:02,344.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:03,345.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:04,346.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:05,347.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:06,348.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:07,349.0,33.5104,0.0,0.0,0.0
|
||||
2025-06-20 20:23:08,350.0,34.815999999999995,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:23:09,351.0,34.815999999999995,0.0,0.0,0.0
|
||||
2025-06-20 20:23:10,352.0,36.44799999999999,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:23:11,353.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:12,354.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:13,355.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:14,356.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:15,357.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:16,358.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:17,359.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:18,360.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:19,361.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:20,362.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:21,363.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:22,364.0,36.44799999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:23,365.0,38.07999999999999,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:23:24,366.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:25,367.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:26,368.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:27,369.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:28,370.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:29,371.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:30,372.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:31,373.0,38.07999999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:32,374.0,39.38559999999999,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:23:33,375.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:34,376.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:35,377.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:36,378.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:37,379.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:38,380.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:39,381.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:40,382.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:41,383.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:42,384.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:43,385.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:44,386.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:45,387.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:46,388.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:47,389.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:48,390.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:49,391.0,39.38559999999999,0.0,0.0,0.0
|
||||
2025-06-20 20:23:50,392.0,40.69119999999999,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:23:51,393.0,42.323199999999986,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:23:52,394.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:53,395.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:54,396.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:55,397.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:56,398.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:57,399.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:58,400.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:23:59,401.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:24:00,402.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:24:01,403.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:24:02,404.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:24:03,405.0,42.323199999999986,0.0,0.0,0.0
|
||||
2025-06-20 20:24:04,406.0,43.955199999999984,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:24:05,407.0,45.58719999999998,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:24:06,408.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:07,409.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:08,410.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:09,411.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:10,412.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:11,413.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:12,414.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:13,415.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:14,416.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:15,417.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:16,418.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:17,419.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:18,420.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:19,421.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:20,422.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:21,423.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:22,424.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:23,425.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:24,426.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:25,427.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:26,428.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:27,429.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:28,430.0,45.58719999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:29,431.0,47.21919999999998,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:24:30,432.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:31,433.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:32,434.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:33,435.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:34,436.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:35,437.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:36,438.0,47.21919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:37,439.0,48.57919999999998,0.8,0.4,0.16
|
||||
2025-06-20 20:24:38,440.0,49.93919999999998,0.8,0.4,0.16
|
||||
2025-06-20 20:24:39,441.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:40,442.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:41,443.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:42,444.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:43,445.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:44,446.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:45,447.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:46,448.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:47,449.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:48,450.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:49,451.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:50,452.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:51,453.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:52,454.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:53,455.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:54,456.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:55,457.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:56,458.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:57,459.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:58,460.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:24:59,461.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:00,462.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:01,463.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:02,464.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:03,465.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:04,466.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:05,467.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:06,468.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:07,469.0,49.93919999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:25:08,470.0,51.571199999999976,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:25:09,471.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:10,472.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:11,473.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:12,474.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:13,475.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:14,476.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:15,477.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:16,478.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:17,479.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:18,480.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:19,481.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:20,482.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:21,483.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:22,484.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:23,485.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:24,486.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:25,487.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:26,488.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:27,489.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:28,490.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:29,491.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:30,492.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:31,493.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:32,494.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:33,495.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:34,496.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:35,497.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:36,498.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:37,499.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:38,500.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:39,501.0,51.571199999999976,0.0,0.0,0.0
|
||||
2025-06-20 20:25:40,502.0,53.203199999999974,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:25:41,503.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:42,504.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:43,505.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:44,506.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:45,507.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:46,508.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:47,509.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:48,510.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:49,511.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:50,512.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:51,513.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:52,514.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:53,515.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:54,516.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:55,517.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:56,518.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:57,519.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:58,520.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:25:59,521.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:00,522.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:01,523.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:02,524.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:03,525.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:04,526.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:05,527.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:06,528.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:07,529.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:08,530.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:09,531.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:10,532.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:11,533.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:12,534.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:13,535.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:14,536.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:15,537.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:16,538.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:17,539.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:18,540.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:19,541.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:20,542.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:21,543.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:22,544.0,53.203199999999974,0.0,0.0,0.0
|
||||
2025-06-20 20:26:23,545.0,54.50879999999997,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:26:24,546.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:25,547.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:26,548.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:27,549.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:28,550.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:29,551.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:30,552.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:31,553.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:32,554.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:33,555.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:34,556.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:35,557.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:36,558.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:37,559.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:38,560.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:39,561.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:40,562.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:41,563.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:42,564.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:43,565.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:44,566.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:45,567.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:46,568.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:47,569.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:48,570.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:49,571.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:50,572.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:51,573.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:52,574.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:53,575.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:54,576.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:55,577.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:56,578.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:57,579.0,54.50879999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:26:58,580.0,55.81439999999997,0.7680000000000001,0.38400000000000006,0.15360000000000004
|
||||
2025-06-20 20:26:59,581.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:00,582.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:01,583.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:02,584.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:03,585.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:04,586.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:05,587.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:06,588.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:07,589.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:08,590.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:09,591.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:10,592.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:11,593.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:12,594.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:13,595.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:14,596.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:15,597.0,55.81439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:16,598.0,57.17439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:27:17,599.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:18,600.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:19,601.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:20,602.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:21,603.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:22,604.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:23,605.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:24,606.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:25,607.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:26,608.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:27,609.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:28,610.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:29,611.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:30,612.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:31,613.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:32,614.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:33,615.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:34,616.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:35,617.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:36,618.0,57.17439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:37,619.0,58.53439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:27:38,620.0,58.53439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:39,621.0,58.53439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:40,622.0,58.53439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:41,623.0,58.53439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:42,624.0,59.89439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:27:43,625.0,59.89439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:44,626.0,59.89439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:45,627.0,59.89439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:46,628.0,59.89439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:47,629.0,61.25439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:27:48,630.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:49,631.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:50,632.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:51,633.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:52,634.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:53,635.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:54,636.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:55,637.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:56,638.0,61.25439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:57,639.0,62.61439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:27:58,640.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:27:59,641.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:00,642.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:01,643.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:02,644.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:03,645.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:04,646.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:05,647.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:06,648.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:07,649.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:08,650.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:09,651.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:10,652.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:11,653.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:12,654.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:13,655.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:14,656.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:15,657.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:16,658.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:17,659.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:18,660.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:19,661.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:20,662.0,62.61439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:21,663.0,63.97439999999997,0.8,0.4,0.16
|
||||
2025-06-20 20:28:22,664.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:23,665.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:24,666.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:25,667.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:26,668.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:27,669.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:28,670.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:29,671.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:30,672.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:31,673.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:32,674.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:33,675.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:34,676.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:35,677.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:36,678.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:37,679.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:38,680.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:39,681.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:40,682.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:41,683.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:42,684.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:43,685.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:44,686.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:45,687.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:46,688.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:47,689.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:48,690.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:49,691.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:50,692.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:51,693.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:52,694.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:53,695.0,63.97439999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:54,696.0,65.60639999999997,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:28:55,697.0,67.23839999999997,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:28:56,698.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:57,699.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:58,700.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:28:59,701.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:00,702.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:01,703.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:02,704.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:03,705.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:04,706.0,67.23839999999997,0.0,0.0,0.0
|
||||
2025-06-20 20:29:05,707.0,68.87039999999998,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:29:06,708.0,70.50239999999998,0.9600000000000002,0.4800000000000001,0.19200000000000003
|
||||
2025-06-20 20:29:07,709.0,70.50239999999998,0.0,0.0,0.0
|
||||
2025-06-20 20:29:08,710.0,70.50239999999998,0.0,0.0,0.0
|
|
1848
realtime_data.csv
Normal file
1848
realtime_data.csv
Normal file
File diff suppressed because it is too large
Load diff
119
trade_log.csv
119
trade_log.csv
|
@ -1,78 +1,41 @@
|
|||
timestamp,portfolio_value
|
||||
2025-06-20 13:11:17,100000.0
|
||||
2025-06-20 13:11:18,100000.0
|
||||
2025-06-20 13:11:19,100000.0
|
||||
2025-06-20 13:11:20,100000.0
|
||||
2025-06-20 13:11:21,99990.39999999106
|
||||
2025-06-20 13:11:22,100000.0
|
||||
2025-06-20 13:11:23,100000.0
|
||||
2025-06-20 13:11:24,99990.39999999106
|
||||
2025-06-20 13:11:25,99990.39999999106
|
||||
2025-06-20 13:11:26,100000.0
|
||||
2025-06-20 13:11:27,99990.39999999106
|
||||
2025-06-20 13:11:28,99990.39999999106
|
||||
2025-06-20 13:11:29,99990.39999999106
|
||||
2025-06-20 13:11:30,100000.0
|
||||
2025-06-20 13:11:31,99990.39999999106
|
||||
2025-06-20 13:11:32,99990.39999999106
|
||||
2025-06-20 13:11:33,99990.39999999106
|
||||
2025-06-20 13:11:34,100000.0
|
||||
2025-06-20 13:11:35,99990.39999999106
|
||||
2025-06-20 13:11:36,100000.0
|
||||
2025-06-20 13:11:37,100000.0
|
||||
2025-06-20 13:11:38,100000.0
|
||||
2025-06-20 13:11:39,100000.0
|
||||
2025-06-20 13:11:40,100000.0
|
||||
2025-06-20 13:11:41,100000.0
|
||||
2025-06-20 13:11:42,100000.0
|
||||
2025-06-20 13:11:43,100000.0
|
||||
2025-06-20 13:11:44,100000.0
|
||||
2025-06-20 13:11:45,100000.0
|
||||
2025-06-20 13:11:46,99990.39999999106
|
||||
2025-06-20 13:11:47,99990.39999999106
|
||||
2025-06-20 13:11:48,99990.39999999106
|
||||
2025-06-20 13:11:49,100000.0
|
||||
2025-06-20 13:11:50,100000.0
|
||||
2025-06-20 13:11:51,100000.0
|
||||
2025-06-20 13:11:52,100000.0
|
||||
2025-06-20 13:11:53,99990.39999999106
|
||||
2025-06-20 13:11:54,99990.39999999106
|
||||
2025-06-20 13:11:55,100000.0
|
||||
2025-06-20 13:11:56,100000.0
|
||||
2025-06-20 13:11:57,100000.0
|
||||
2025-06-20 13:11:58,99990.39999999106
|
||||
2025-06-20 13:11:59,100000.0
|
||||
2025-06-20 13:12:00,100000.0
|
||||
2025-06-20 13:12:01,99990.39999999106
|
||||
2025-06-20 13:12:02,100000.0
|
||||
2025-06-20 13:12:03,99990.39999999106
|
||||
2025-06-20 13:12:04,100000.0
|
||||
2025-06-20 13:12:05,99990.39999999106
|
||||
2025-06-20 13:12:08,99990.39999999106
|
||||
2025-06-20 13:12:09,100000.0
|
||||
2025-06-20 13:12:10,100000.0
|
||||
2025-06-20 13:12:11,99990.39999999106
|
||||
2025-06-20 13:12:45,99990.39999999106
|
||||
2025-06-20 13:12:46,99998.07999998704
|
||||
2025-06-20 13:12:47,99998.07999998704
|
||||
2025-06-20 13:12:48,99998.07999998704
|
||||
2025-06-20 13:12:49,99990.39999999106
|
||||
2025-06-20 13:12:50,99999.99999998603
|
||||
2025-06-20 13:12:51,99999.99999998603
|
||||
2025-06-20 13:12:52,99990.39999999106
|
||||
2025-06-20 13:12:53,99999.99999998603
|
||||
2025-06-20 13:12:54,99999.99999998603
|
||||
2025-06-20 13:12:55,99990.39999999106
|
||||
2025-06-20 13:12:56,99999.99999998603
|
||||
2025-06-20 13:12:57,99990.39999999106
|
||||
2025-06-20 13:12:58,99999.99999998603
|
||||
2025-06-20 13:12:59,99990.39999999106
|
||||
2025-06-20 13:13:00,99990.39999999106
|
||||
2025-06-20 13:13:01,99999.99999998603
|
||||
2025-06-20 13:13:02,99990.39999999106
|
||||
2025-06-20 13:13:03,99999.99999998603
|
||||
2025-06-20 13:13:04,99999.99999998603
|
||||
2025-06-20 13:13:05,99990.39999999106
|
||||
2025-06-20 13:13:06,99999.99999998603
|
||||
2025-06-20 13:13:07,99990.39999999106
|
||||
2025-06-20 13:13:08,98078.39999999152
|
||||
timestamp,time_seconds,portfolio_value
|
||||
2025-06-20 20:44:07,5.0,100000
|
||||
2025-06-20 20:44:08,6.0,100000
|
||||
2025-06-20 20:44:09,7.0,100000
|
||||
2025-06-20 20:44:10,8.0,100000
|
||||
2025-06-20 20:44:11,9.0,100000
|
||||
2025-06-20 20:44:12,10.0,100000
|
||||
2025-06-20 20:44:13,11.0,100000
|
||||
2025-06-20 20:44:14,12.0,100000
|
||||
2025-06-20 20:44:15,13.0,100000
|
||||
2025-06-20 20:44:16,14.0,100000
|
||||
2025-06-20 20:44:17,15.0,100000
|
||||
2025-06-20 20:44:18,16.0,100000
|
||||
2025-06-20 20:44:19,17.0,100000
|
||||
2025-06-20 20:44:20,18.0,100000
|
||||
2025-06-20 20:44:21,19.0,100000
|
||||
2025-06-20 20:44:22,20.0,100000
|
||||
2025-06-20 20:44:23,21.0,100000
|
||||
2025-06-20 20:44:24,22.0,100000
|
||||
2025-06-20 20:44:25,23.0,100000
|
||||
2025-06-20 20:44:26,24.0,100000
|
||||
2025-06-20 20:44:27,25.0,100000
|
||||
2025-06-20 20:44:28,26.0,100000
|
||||
2025-06-20 20:44:29,27.0,100000
|
||||
2025-06-20 20:44:30,28.0,100000
|
||||
2025-06-20 20:44:31,29.0,100000
|
||||
2025-06-20 20:44:32,30.0,100000
|
||||
2025-06-20 20:44:33,31.0,100000
|
||||
2025-06-20 20:44:34,32.0,100000
|
||||
2025-06-20 20:44:35,33.0,100000
|
||||
2025-06-20 20:44:36,34.0,100000
|
||||
2025-06-20 20:44:37,35.0,100000
|
||||
2025-06-20 20:44:38,36.0,100000
|
||||
2025-06-20 20:44:39,37.0,100000
|
||||
2025-06-20 20:44:40,38.0,100000
|
||||
2025-06-20 20:44:41,39.0,100000
|
||||
2025-06-20 20:44:42,40.0,100000
|
||||
2025-06-20 20:44:43,41.0,100000
|
||||
2025-06-20 20:44:44,42.0,100000
|
||||
2025-06-20 20:44:45,43.0,100000
|
||||
2025-06-20 20:44:46,44.0,100000
|
||||
|
|
|
208
trade_log.txt
208
trade_log.txt
|
@ -9,3 +9,211 @@
|
|||
2025-06-20 15:13:09,093 - Exit: Price=106130.3, Profit=-1911.999999999534, Portfolio=98078.39999999152
|
||||
2025-06-20 15:14:16,596 - tearing down on exception
|
||||
2025-06-20 15:14:22,379 - Websocket connected
|
||||
2025-06-20 15:37:18,900 - Websocket connected
|
||||
2025-06-20 16:08:06,267 - tearing down on exception
|
||||
2025-06-20 18:11:01,197 - Websocket connected
|
||||
2025-06-20 18:14:17,602 - Enter Long: Price=104117.82, Size=0.009600000000000001, Stop=104115.62340936829
|
||||
2025-06-20 18:14:17,616 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:14:17,616 - Exit: Price=104102.0, Profit=-12656.000000005588, Portfolio=87343.99999999441
|
||||
2025-06-20 18:14:50,079 - Enter Long: Price=104085.61, Size=0.009600000000000001, Stop=104083.92982898203
|
||||
2025-06-20 18:15:06,087 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:15:06,087 - Exit: Price=104079.35, Profit=-5007.999999995809, Portfolio=82335.9999999986
|
||||
2025-06-20 18:15:46,185 - Enter Long: Price=104079.3, Size=0.009600000000000001, Stop=104075.39925638687
|
||||
2025-06-20 18:15:56,066 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:15:56,066 - Exit: Price=104074.08, Profit=-4176.000000000931, Portfolio=78159.99999999767
|
||||
2025-06-20 18:16:59,092 - Enter Long: Price=103988.2, Size=0.009600000000000001, Stop=103983.01619582015
|
||||
2025-06-20 18:17:00,076 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:17:00,076 - Exit: Price=103980.0, Profit=-6559.999999997672, Portfolio=71600.0
|
||||
2025-06-20 18:22:30,937 - Websocket connected
|
||||
2025-06-20 18:22:52,811 - Websocket connected
|
||||
2025-06-20 18:23:15,068 - Enter Long: Price=104028.01, Size=0.009600000000000001, Stop=104023.51181549822
|
||||
2025-06-20 18:23:36,077 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:23:36,078 - Exit: Price=104036.01, Profit=6400.0, Portfolio=106400.0
|
||||
2025-06-20 18:24:07,067 - Enter Long: Price=104035.32, Size=0.008, Stop=104033.05569094083
|
||||
2025-06-20 18:24:14,079 - Adjust Position: New Size=0.009600000000000001
|
||||
2025-06-20 18:25:01,069 - Exit: Price=104199.0, Profit=157132.7999999933, Portfolio=263532.7999999933
|
||||
2025-06-20 18:25:08,068 - Enter Long: Price=104209.99, Size=0.009600000000000001, Stop=104201.02302122836
|
||||
2025-06-20 18:25:12,070 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:25:12,070 - Exit: Price=104201.99, Profit=-6400.0, Portfolio=257132.7999999933
|
||||
2025-06-20 18:25:43,069 - Enter Long: Price=104190.12, Size=0.009600000000000001, Stop=104177.36192954794
|
||||
2025-06-20 18:26:20,070 - Exit: Price=104259.3, Profit=66412.80000000726, Portfolio=323545.60000000056
|
||||
2025-06-20 18:27:30,081 - Enter Long: Price=104173.29, Size=0.008, Stop=104169.81691027315
|
||||
2025-06-20 18:27:34,182 - Adjust Position: New Size=0.009600000000000001
|
||||
2025-06-20 18:27:45,072 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:27:45,072 - Exit: Price=104182.14, Profit=7080.000000004657, Portfolio=330625.6000000052
|
||||
2025-06-20 18:28:59,267 - Websocket connected
|
||||
2025-06-20 18:31:19,841 - Websocket connected
|
||||
2025-06-20 18:31:42,051 - Enter Long: Price=104125.35, Size=0.008, Stop=104122.20203186448
|
||||
2025-06-20 18:31:50,057 - Adjust Position: New Size=0.009600000000000001
|
||||
2025-06-20 18:32:10,130 - Adjust Position: New Size=0.008
|
||||
2025-06-20 18:32:10,132 - Exit: Price=104151.96, Reason=Stop Loss, Profit=21288.000000000466, Portfolio=121288.00000000047
|
||||
2025-06-20 18:33:41,067 - Enter Long: Price=104137.71, Size=0.007680000000000001, Stop=104136.01582164752
|
||||
2025-06-20 18:33:42,076 - Adjust Position: New Size=0.009600000000000001
|
||||
2025-06-20 18:35:58,062 - Websocket connected
|
||||
2025-06-20 18:37:44,058 - BUY: Time=1.8min, Price=104070.81, Size=0.007680000000000001, Stop=104064.0843245101
|
||||
2025-06-20 18:37:45,059 - Adjust Position: New Size=0.009600000000000001
|
||||
2025-06-20 18:37:57,056 - SELL: Time=2.0min, Price=104083.16, Reason=Stop Loss, Profit=11856.000000005588, Portfolio=111856.00000000559
|
||||
2025-06-20 18:43:22,432 - Websocket connected
|
||||
2025-06-20 18:44:31,100 - BUY: Time=01:08, Price=103850.85, Investment=$768.00, BTC=0.007395
|
||||
2025-06-20 18:44:32,074 - Adjust Position: New Investment=$960.00
|
||||
2025-06-20 18:44:36,059 - Adjust Position: New Investment=$640.00
|
||||
2025-06-20 18:44:36,060 - SELL: Time=01:13, Price=103825.16, Reason=SMA Crossover, Profit=$-0.16
|
||||
2025-06-20 18:45:24,105 - BUY: Time=02:01, Price=103764.0, Investment=$800.00, BTC=0.007710
|
||||
2025-06-20 18:45:28,053 - Adjust Position: New Investment=$960.00
|
||||
2025-06-20 18:46:01,054 - Adjust Position: New Investment=$800.00
|
||||
2025-06-20 18:46:01,054 - SELL: Time=02:38, Price=103817.25, Reason=Stop Loss, Profit=$0.41
|
||||
2025-06-20 18:46:11,061 - BUY: Time=02:48, Price=103834.0, Investment=$960.00, BTC=0.009246
|
||||
2025-06-20 18:46:24,071 - Adjust Position: New Investment=$800.00
|
||||
2025-06-20 18:46:24,071 - SELL: Time=03:01, Price=103830.43, Reason=Stop Loss, Profit=$-0.03
|
||||
2025-06-20 18:47:18,050 - BUY: Time=03:55, Price=103750.05, Investment=$800.00, BTC=0.007711
|
||||
2025-06-20 18:53:18,295 - Websocket connected
|
||||
2025-06-20 18:53:44,052 - SHORT: Time=00:25, Price=103644.0, Size=$800.00, BTC=-0.007719
|
||||
2025-06-20 18:53:46,109 - EXIT: Time=00:27, Price=103643.99, Reason=SMA Crossover (Short → Exit), Profit=$0.00
|
||||
2025-06-20 18:54:59,051 - SHORT: Time=01:40, Price=103832.99, Size=$960.00, BTC=-0.009246
|
||||
2025-06-20 18:55:02,053 - EXIT: Time=01:43, Price=103846.01, Reason=Stop Loss (Short), Profit=$-0.10
|
||||
2025-06-20 18:55:04,054 - LONG: Time=01:45, Price=103859.99, Investment=$960.00, BTC=0.009243
|
||||
2025-06-20 18:55:05,070 - EXIT: Time=01:46, Price=103852.92, Reason=Stop Loss (Long), Profit=$-0.05
|
||||
2025-06-20 18:55:11,096 - SHORT: Time=01:52, Price=103841.4, Size=$800.00, BTC=-0.007704
|
||||
2025-06-20 18:55:24,073 - EXIT: Time=02:05, Price=103841.4, Reason=SMA Crossover (Short → Exit), Profit=$0.00
|
||||
2025-06-20 18:55:38,048 - SHORT: Time=02:19, Price=103860.01, Size=$800.00, BTC=-0.007703
|
||||
2025-06-20 18:55:52,055 - EXIT: Time=02:33, Price=103867.99, Reason=SMA Crossover (Short → Exit), Profit=$-0.06
|
||||
2025-06-20 18:56:03,055 - SHORT: Time=02:44, Price=103850.07, Size=$960.00, BTC=-0.009244
|
||||
2025-06-20 18:56:21,049 - EXIT: Time=03:02, Price=103842.48, Reason=SMA Crossover (Short → Exit), Profit=$0.07
|
||||
2025-06-20 18:56:51,064 - SHORT: Time=03:32, Price=103870.93, Size=$800.00, BTC=-0.007702
|
||||
2025-06-20 18:56:54,846 - Websocket connected
|
||||
2025-06-20 18:57:22,047 - SHORT: Time=00:27, Price=103848.28, Size=$40000.00, BTC=-0.385177
|
||||
2025-06-20 18:57:34,058 - EXIT: Time=00:39, Price=103848.29, Reason=SMA Crossover (Short → Exit), Profit=$-0.00
|
||||
2025-06-20 18:57:46,061 - SHORT: Time=00:51, Price=103837.32, Size=$48000.00, BTC=-0.462262
|
||||
2025-06-20 18:58:09,064 - EXIT: Time=01:14, Price=103801.05, Reason=Stop Loss (Short), Profit=$16.77
|
||||
2025-06-20 18:58:10,049 - LONG: Time=01:15, Price=103801.04, Investment=$40000.00, BTC=0.385353
|
||||
2025-06-20 18:58:20,094 - EXIT: Time=01:25, Price=103792.22, Reason=Stop Loss (Long), Profit=$-3.40
|
||||
2025-06-20 18:58:21,062 - SHORT: Time=01:26, Price=103792.22, Size=$48000.00, BTC=-0.462462
|
||||
2025-06-20 18:58:22,067 - EXIT: Time=01:27, Price=103819.85, Reason=SMA Crossover (Short → Exit), Profit=$-12.78
|
||||
2025-06-20 18:58:47,054 - LONG: Time=01:52, Price=103820.0, Investment=$48000.00, BTC=0.462339
|
||||
2025-06-20 18:58:52,155 - EXIT: Time=01:57, Price=103756.66, Reason=SMA Crossover (Long → Exit), Profit=$-29.28
|
||||
2025-06-20 18:59:14,090 - LONG: Time=02:19, Price=103729.38, Investment=$48000.00, BTC=0.462743
|
||||
2025-06-20 18:59:29,049 - EXIT: Time=02:34, Price=103737.23, Reason=Stop Loss (Long), Profit=$3.63
|
||||
2025-06-20 18:59:31,061 - SHORT: Time=02:36, Price=103720.0, Size=$48000.00, BTC=-0.462784
|
||||
2025-06-20 18:59:51,053 - EXIT: Time=02:56, Price=103640.01, Reason=Stop Loss (Short), Profit=$37.02
|
||||
2025-06-20 19:00:08,061 - SHORT: Time=03:13, Price=103651.99, Size=$48000.00, BTC=-0.463088
|
||||
2025-06-20 19:00:09,048 - EXIT: Time=03:14, Price=103658.74, Reason=Stop Loss (Short), Profit=$-3.13
|
||||
2025-06-20 19:00:16,062 - LONG: Time=03:21, Price=103663.33, Investment=$40000.00, BTC=0.385865
|
||||
2025-06-20 19:00:21,053 - EXIT: Time=03:26, Price=103661.03, Reason=Stop Loss (Long), Profit=$-0.89
|
||||
2025-06-20 19:00:24,049 - SHORT: Time=03:29, Price=103661.03, Size=$40000.00, BTC=-0.385873
|
||||
2025-06-20 19:00:29,155 - EXIT: Time=03:34, Price=103663.33, Reason=Stop Loss (Short), Profit=$-0.89
|
||||
2025-06-20 19:00:31,044 - LONG: Time=03:36, Price=103666.15, Investment=$48000.00, BTC=0.463025
|
||||
2025-06-20 19:00:36,055 - EXIT: Time=03:41, Price=103698.04, Reason=Stop Loss (Long), Profit=$14.77
|
||||
2025-06-20 19:00:47,048 - SHORT: Time=03:52, Price=103673.0, Size=$48000.00, BTC=-0.462994
|
||||
2025-06-20 19:00:51,052 - EXIT: Time=03:56, Price=103705.0, Reason=Stop Loss (Short), Profit=$-14.82
|
||||
2025-06-20 19:00:54,047 - LONG: Time=03:59, Price=103705.0, Investment=$40000.00, BTC=0.385709
|
||||
2025-06-20 19:01:04,045 - EXIT: Time=04:09, Price=103728.97, Reason=Stop Loss (Long), Profit=$9.25
|
||||
2025-06-20 19:01:22,052 - LONG: Time=04:27, Price=103737.25, Investment=$48000.00, BTC=0.462707
|
||||
2025-06-20 19:01:28,133 - EXIT: Time=04:33, Price=103736.26, Reason=Stop Loss (Long), Profit=$-0.46
|
||||
2025-06-20 19:01:32,048 - SHORT: Time=04:37, Price=103731.08, Size=$40000.00, BTC=-0.385612
|
||||
2025-06-20 19:01:48,050 - EXIT: Time=04:53, Price=103710.9, Reason=Stop Loss (Short), Profit=$7.78
|
||||
2025-06-20 19:01:53,100 - LONG: Time=04:58, Price=103740.98, Investment=$48000.00, BTC=0.462691
|
||||
2025-06-20 19:01:55,049 - EXIT: Time=05:00, Price=103737.78, Reason=Stop Loss (Long), Profit=$-1.48
|
||||
2025-06-20 19:02:00,044 - SHORT: Time=05:05, Price=103722.93, Size=$40000.00, BTC=-0.385643
|
||||
2025-06-20 19:02:14,054 - EXIT: Time=05:19, Price=103694.0, Reason=Stop Loss (Short), Profit=$11.16
|
||||
2025-06-20 19:02:51,059 - LONG: Time=05:56, Price=103740.98, Investment=$48000.00, BTC=0.462691
|
||||
2025-06-20 19:03:00,052 - EXIT: Time=06:05, Price=103740.96, Reason=SMA Crossover (Long → Exit), Profit=$-0.01
|
||||
2025-06-20 19:03:10,127 - LONG: Time=06:15, Price=103740.97, Investment=$48000.00, BTC=0.462691
|
||||
2025-06-20 19:03:13,098 - EXIT: Time=06:18, Price=103737.25, Reason=SMA Crossover (Long → Exit), Profit=$-1.72
|
||||
2025-06-20 19:03:51,092 - SHORT: Time=06:56, Price=103689.07, Size=$40000.00, BTC=-0.385769
|
||||
2025-06-20 19:03:52,081 - EXIT: Time=06:57, Price=103689.07, Reason=SMA Crossover (Short → Exit), Profit=$0.00
|
||||
2025-06-20 19:03:59,139 - SHORT: Time=07:04, Price=103681.94, Size=$38400.00, BTC=-0.370363
|
||||
2025-06-20 19:04:02,085 - EXIT: Time=07:07, Price=103680.0, Reason=Stop Loss (Short), Profit=$0.90
|
||||
2025-06-20 19:04:06,089 - LONG: Time=07:11, Price=103702.52, Investment=$48000.00, BTC=0.462862
|
||||
2025-06-20 19:04:07,094 - EXIT: Time=07:12, Price=103688.85, Reason=Stop Loss (Long), Profit=$-6.33
|
||||
2025-06-20 19:04:16,092 - SHORT: Time=07:21, Price=103688.85, Size=$40000.00, BTC=-0.385770
|
||||
2025-06-20 19:05:23,093 - EXIT: Time=08:28, Price=103595.27, Reason=Stop Loss (Short), Profit=$36.10
|
||||
2025-06-20 19:05:26,159 - LONG: Time=08:31, Price=103610.28, Investment=$40000.00, BTC=0.386062
|
||||
2025-06-20 19:05:32,089 - EXIT: Time=08:37, Price=103593.13, Reason=Stop Loss (Long), Profit=$-6.62
|
||||
2025-06-20 19:05:35,094 - SHORT: Time=08:40, Price=103588.01, Size=$48000.00, BTC=-0.463374
|
||||
2025-06-20 19:05:44,102 - EXIT: Time=08:49, Price=103581.14, Reason=Stop Loss (Short), Profit=$3.18
|
||||
2025-06-20 19:06:39,089 - LONG: Time=09:44, Price=103499.99, Investment=$48000.00, BTC=0.463768
|
||||
2025-06-20 19:06:54,093 - EXIT: Time=09:59, Price=103499.9, Reason=SMA Crossover (Long → Exit), Profit=$-0.04
|
||||
2025-06-20 19:07:08,041 - Websocket connected
|
||||
2025-06-20 19:07:49,215 - LONG: Time=00:41, Price=103559.11, Investment=$960.00, BTC=0.009270, Costs=$1.63
|
||||
2025-06-20 19:08:15,096 - EXIT: Time=01:07, Price=103594.98, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.33, NetProfit=$-1.30, Costs=$1.63
|
||||
2025-06-20 19:08:37,095 - LONG: Time=01:29, Price=103566.57, Investment=$800.00, BTC=0.007725, Costs=$1.36
|
||||
2025-06-20 19:08:42,105 - EXIT: Time=01:34, Price=103562.25, Reason=Stop Loss (Long), GrossProfit=$-0.03, NetProfit=$-1.39, Costs=$1.36
|
||||
2025-06-20 19:08:44,097 - SHORT: Time=01:36, Price=103562.26, Size=$960.00, BTC=-0.009270, Costs=$1.63
|
||||
2025-06-20 19:09:01,090 - EXIT: Time=01:53, Price=103580.51, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.17, NetProfit=$-1.80, Costs=$1.63
|
||||
2025-06-20 19:09:21,238 - SHORT: Time=02:12, Price=103651.25, Size=$800.00, BTC=-0.007718, Costs=$1.36
|
||||
2025-06-20 21:29:41,281 - [Errno 54] Connection reset by peer - goodbye
|
||||
2025-06-20 22:17:18,786 - Websocket connected
|
||||
2025-06-20 22:18:05,146 - SHORT: Time=00:46, Price=103806.43, Size=$800.00, BTC=-0.007707, Costs=$1.36
|
||||
2025-06-20 22:18:38,176 - EXIT: Time=01:19, Price=103566.67, Reason=SMA Crossover (Short → Exit), GrossProfit=$1.85, NetProfit=$0.49, Costs=$1.36
|
||||
2025-06-20 22:18:41,163 - SHORT: Time=01:22, Price=103566.67, Size=$960.00, BTC=-0.009269, Costs=$1.63
|
||||
2025-06-20 22:18:42,207 - EXIT: Time=01:23, Price=103566.67, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.00, NetProfit=$-1.63, Costs=$1.63
|
||||
2025-06-20 22:18:44,136 - SHORT: Time=01:25, Price=103566.67, Size=$960.00, BTC=-0.009269, Costs=$1.63
|
||||
2025-06-20 22:18:46,158 - EXIT: Time=01:27, Price=103583.99, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.16, NetProfit=$-1.79, Costs=$1.63
|
||||
2025-06-20 22:18:59,138 - SHORT: Time=01:40, Price=103563.64, Size=$768.00, BTC=-0.007416, Costs=$1.31
|
||||
2025-06-20 22:19:32,130 - EXIT: Time=02:13, Price=103525.78, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.28, NetProfit=$-1.02, Costs=$1.31
|
||||
2025-06-20 22:19:38,181 - SHORT: Time=02:19, Price=103519.22, Size=$960.00, BTC=-0.009274, Costs=$1.63
|
||||
2025-06-20 22:19:55,173 - EXIT: Time=02:36, Price=103519.22, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.00, NetProfit=$-1.63, Costs=$1.63
|
||||
2025-06-20 22:19:57,190 - SHORT: Time=02:38, Price=103519.21, Size=$960.00, BTC=-0.009274, Costs=$1.63
|
||||
2025-06-20 22:20:24,148 - EXIT: Time=03:05, Price=103511.18, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.07, NetProfit=$-1.56, Costs=$1.63
|
||||
2025-06-20 22:20:53,144 - LONG: Time=03:34, Price=103529.96, Investment=$768.00, BTC=0.007418, Costs=$1.31
|
||||
2025-06-20 22:21:07,233 - EXIT: Time=03:48, Price=103523.31, Reason=Stop Loss (Long), GrossProfit=$-0.05, NetProfit=$-1.35, Costs=$1.31
|
||||
2025-06-20 22:21:08,139 - SHORT: Time=03:49, Price=103508.5, Size=$768.00, BTC=-0.007420, Costs=$1.31
|
||||
2025-06-20 22:21:15,228 - EXIT: Time=03:56, Price=103521.09, Reason=Stop Loss (Short), GrossProfit=$-0.09, NetProfit=$-1.40, Costs=$1.31
|
||||
2025-06-20 22:21:17,163 - LONG: Time=03:58, Price=103521.1, Investment=$800.00, BTC=0.007728, Costs=$1.36
|
||||
2025-06-20 22:21:29,152 - EXIT: Time=04:10, Price=103521.1, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:22:01,191 - SHORT: Time=04:42, Price=103430.0, Size=$960.00, BTC=-0.009282, Costs=$1.63
|
||||
2025-06-20 22:22:15,176 - EXIT: Time=04:56, Price=103424.23, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.05, NetProfit=$-1.58, Costs=$1.63
|
||||
2025-06-20 22:22:40,123 - SHORT: Time=05:21, Price=103434.29, Size=$768.00, BTC=-0.007425, Costs=$1.31
|
||||
2025-06-20 22:22:54,129 - EXIT: Time=05:35, Price=103434.3, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.00, NetProfit=$-1.31, Costs=$1.31
|
||||
2025-06-20 22:23:00,138 - SHORT: Time=05:41, Price=103426.47, Size=$768.00, BTC=-0.007426, Costs=$1.31
|
||||
2025-06-20 22:23:09,141 - EXIT: Time=05:50, Price=103434.3, Reason=Stop Loss (Short), GrossProfit=$-0.06, NetProfit=$-1.36, Costs=$1.31
|
||||
2025-06-20 22:23:11,226 - LONG: Time=05:52, Price=103434.3, Investment=$960.00, BTC=0.009281, Costs=$1.63
|
||||
2025-06-20 22:23:24,147 - EXIT: Time=06:05, Price=103434.29, Reason=SMA Crossover (Long → Exit), GrossProfit=$-0.00, NetProfit=$-1.63, Costs=$1.63
|
||||
2025-06-20 22:23:33,140 - LONG: Time=06:14, Price=103445.98, Investment=$768.00, BTC=0.007424, Costs=$1.31
|
||||
2025-06-20 22:23:51,270 - EXIT: Time=06:32, Price=103445.98, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.00, NetProfit=$-1.31, Costs=$1.31
|
||||
2025-06-20 22:23:52,208 - LONG: Time=06:33, Price=103445.99, Investment=$960.00, BTC=0.009280, Costs=$1.63
|
||||
2025-06-20 22:24:05,132 - EXIT: Time=06:46, Price=103445.22, Reason=Stop Loss (Long), GrossProfit=$-0.01, NetProfit=$-1.64, Costs=$1.63
|
||||
2025-06-20 22:24:06,145 - SHORT: Time=06:47, Price=103445.23, Size=$960.00, BTC=-0.009280, Costs=$1.63
|
||||
2025-06-20 22:24:30,181 - EXIT: Time=07:11, Price=103444.0, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.01, NetProfit=$-1.62, Costs=$1.63
|
||||
2025-06-20 22:24:38,192 - SHORT: Time=07:19, Price=103444.0, Size=$800.00, BTC=-0.007734, Costs=$1.36
|
||||
2025-06-20 22:24:39,179 - EXIT: Time=07:20, Price=103444.0, Reason=SMA Crossover (Short → Exit), GrossProfit=$0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:25:09,200 - LONG: Time=07:50, Price=103452.42, Investment=$960.00, BTC=0.009280, Costs=$1.63
|
||||
2025-06-20 22:25:41,209 - EXIT: Time=08:22, Price=103482.02, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.27, NetProfit=$-1.36, Costs=$1.63
|
||||
2025-06-20 22:26:24,176 - LONG: Time=09:05, Price=103508.47, Investment=$768.00, BTC=0.007420, Costs=$1.31
|
||||
2025-06-20 22:26:59,210 - EXIT: Time=09:40, Price=103558.44, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.37, NetProfit=$-0.93, Costs=$1.31
|
||||
2025-06-20 22:27:17,216 - LONG: Time=09:58, Price=103552.49, Investment=$800.00, BTC=0.007726, Costs=$1.36
|
||||
2025-06-20 22:27:38,141 - EXIT: Time=10:19, Price=103552.6, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:27:43,125 - LONG: Time=10:24, Price=103552.61, Investment=$800.00, BTC=0.007726, Costs=$1.36
|
||||
2025-06-20 22:27:48,124 - EXIT: Time=10:29, Price=103552.6, Reason=SMA Crossover (Long → Exit), GrossProfit=$-0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:27:58,125 - LONG: Time=10:39, Price=103552.61, Investment=$800.00, BTC=0.007726, Costs=$1.36
|
||||
2025-06-20 22:28:22,135 - EXIT: Time=11:03, Price=103567.2, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.11, NetProfit=$-1.25, Costs=$1.36
|
||||
2025-06-20 22:28:55,126 - SHORT: Time=11:36, Price=103553.36, Size=$960.00, BTC=-0.009271, Costs=$1.63
|
||||
2025-06-20 22:28:56,213 - EXIT: Time=11:37, Price=103553.37, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.00, NetProfit=$-1.63, Costs=$1.63
|
||||
2025-06-20 22:29:06,150 - SHORT: Time=11:47, Price=103553.36, Size=$960.00, BTC=-0.009271, Costs=$1.63
|
||||
2025-06-20 22:29:07,160 - EXIT: Time=11:48, Price=103558.53, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.05, NetProfit=$-1.68, Costs=$1.63
|
||||
2025-06-20 22:29:15,765 - Websocket connected
|
||||
2025-06-20 22:29:31,139 - SHORT: Time=00:15, Price=103565.79, Size=$960.00, BTC=-0.009269, Costs=$1.63
|
||||
2025-06-20 22:29:34,137 - EXIT: Time=00:18, Price=103579.32, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.13, NetProfit=$-1.76, Costs=$1.63
|
||||
2025-06-20 22:30:02,125 - LONG: Time=00:46, Price=103591.09, Investment=$768.00, BTC=0.007414, Costs=$1.31
|
||||
2025-06-20 22:30:25,143 - EXIT: Time=01:09, Price=103620.0, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.21, NetProfit=$-1.09, Costs=$1.31
|
||||
2025-06-20 22:30:40,140 - SHORT: Time=01:24, Price=103626.39, Size=$800.00, BTC=-0.007720, Costs=$1.36
|
||||
2025-06-20 22:30:44,164 - EXIT: Time=01:28, Price=103626.4, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:30:53,167 - SHORT: Time=01:37, Price=103626.39, Size=$800.00, BTC=-0.007720, Costs=$1.36
|
||||
2025-06-20 22:30:58,148 - EXIT: Time=01:42, Price=103626.4, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.00, NetProfit=$-1.36, Costs=$1.36
|
||||
2025-06-20 22:31:02,130 - SHORT: Time=01:46, Price=103626.4, Size=$800.00, BTC=-0.007720, Costs=$1.36
|
||||
2025-06-20 22:31:05,127 - EXIT: Time=01:49, Price=103632.62, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.05, NetProfit=$-1.41, Costs=$1.36
|
||||
2025-06-20 22:31:30,243 - SHORT: Time=02:14, Price=103642.57, Size=$960.00, BTC=-0.009263, Costs=$1.63
|
||||
2025-06-20 22:31:42,221 - EXIT: Time=02:26, Price=103648.93, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.06, NetProfit=$-1.69, Costs=$1.63
|
||||
2025-06-20 22:31:50,152 - SHORT: Time=02:34, Price=103628.84, Size=$768.00, BTC=-0.007411, Costs=$1.31
|
||||
2025-06-20 22:32:04,220 - EXIT: Time=02:48, Price=103633.35, Reason=SMA Crossover (Short → Exit), GrossProfit=$-0.03, NetProfit=$-1.34, Costs=$1.31
|
||||
2025-06-20 22:32:39,139 - LONG: Time=03:23, Price=103648.93, Investment=$768.00, BTC=0.007410, Costs=$1.31
|
||||
2025-06-20 22:32:53,167 - EXIT: Time=03:37, Price=103648.93, Reason=SMA Crossover (Long → Exit), GrossProfit=$0.00, NetProfit=$-1.31, Costs=$1.31
|
||||
2025-06-20 22:32:57,285 - LONG: Time=03:41, Price=103648.93, Investment=$960.00, BTC=0.009262, Costs=$1.63
|
||||
2025-06-20 22:33:01,167 - EXIT: Time=03:45, Price=103648.92, Reason=SMA Crossover (Long → Exit), GrossProfit=$-0.00, NetProfit=$-1.63, Costs=$1.63
|
||||
2025-06-20 22:44:02,605 - Websocket connected
|
||||
2025-06-20 22:44:51,649 - Websocket connected
|
||||
2025-06-20 22:57:06,221 - Websocket connected
|
||||
2025-06-20 23:06:20,955 - Websocket connected
|
||||
2025-06-20 23:15:25,361 - Websocket connected
|
||||
2025-06-20 23:19:04,482 - Websocket connected
|
||||
2025-06-20 23:19:39,818 - Websocket connected
|
||||
|
|
640
trend_following_long_short_with_cost.py
Normal file
640
trend_following_long_short_with_cost.py
Normal file
|
@ -0,0 +1,640 @@
|
|||
import websocket
|
||||
import json
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from ta.trend import SMAIndicator
|
||||
from ta.momentum import RSIIndicator
|
||||
from ta.volatility import AverageTrueRange
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.animation import FuncAnimation
|
||||
import matplotlib.dates as mdates
|
||||
import logging
|
||||
import time
|
||||
from datetime import timedelta, datetime
|
||||
|
||||
# Setup logging
|
||||
logging.basicConfig(filename='trade_log.txt', level=logging.INFO, format='%(asctime)s - %(message)s')
|
||||
|
||||
# Strategy parameters
|
||||
initial_capital = 100000
|
||||
base_size = 0.01 # 1% of portfolio
|
||||
risk_per_trade = 0.01 # 1% risk
|
||||
simulation_duration = 600 # 10 minutes in seconds
|
||||
buffer_threshold = 0.1 # 10% buffer for position changes
|
||||
ticker = "BTC/USDT"
|
||||
|
||||
# TRADING COSTS - Realistic exchange fees
|
||||
maker_fee = 0.001 # 0.1% maker fee (limit orders)
|
||||
taker_fee = 0.001 # 0.1% taker fee (market orders)
|
||||
spread_cost = 0.0005 # 0.05% bid-ask spread cost
|
||||
slippage_cost = 0.0002 # 0.02% slippage on market orders
|
||||
|
||||
# Data storage
|
||||
data = []
|
||||
position_dollars = 0 # Position size in dollars (positive = long, negative = short)
|
||||
btc_units = 0 # Actual BTC units (positive = owned, negative = borrowed/short)
|
||||
entry_price = 0
|
||||
stop_loss = 0
|
||||
trailing_stop = 0
|
||||
highest_price = 0 # For long positions
|
||||
lowest_price = 0 # For short positions
|
||||
portfolio_value = initial_capital
|
||||
cumulative_costs = 0 # Track all trading costs
|
||||
trade_log = []
|
||||
cost_log = [] # Track costs over time
|
||||
entries = []
|
||||
exits = []
|
||||
df_global = pd.DataFrame()
|
||||
start_time = None # Will be set when first data arrives
|
||||
current_price_base = None # For price scaling
|
||||
|
||||
# Plot setup - WHITE BACKGROUND with 3 panels
|
||||
plt.style.use('default') # Use default (white) background
|
||||
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(16, 12), height_ratios=[2, 1, 1])
|
||||
fig.suptitle(f'Real-Time {ticker} Long/Short Strategy with Trading Costs', fontsize=16, fontweight='bold')
|
||||
|
||||
# Create right axis for real price
|
||||
ax1_right = ax1.twinx()
|
||||
|
||||
# Main plot (price and SMAs)
|
||||
price_line, = ax1.plot([], [], label='Price', color='blue', linewidth=2)
|
||||
sma5_line, = ax1.plot([], [], label='SMA5', color='orange', linewidth=1.5)
|
||||
sma15_line, = ax1.plot([], [], label='SMA15', color='green', linewidth=1.5)
|
||||
stop_loss_line, = ax1.plot([], [], label='Stop Loss', color='red', linestyle='--', alpha=0.8)
|
||||
trailing_stop_line, = ax1.plot([], [], label='Trailing Stop', color='purple', linestyle='--', alpha=0.8)
|
||||
|
||||
# Buy/Sell markers - larger and more visible
|
||||
buy_scatter = ax1.scatter([], [], color='lime', marker='^', label='BUY (Long)', s=200, edgecolor='darkgreen', linewidth=2, zorder=10)
|
||||
short_scatter = ax1.scatter([], [], color='orange', marker='v', label='SHORT', s=200, edgecolor='darkorange', linewidth=2, zorder=10)
|
||||
close_long_scatter = ax1.scatter([], [], color='red', marker='x', label='Close Long', s=200, edgecolor='darkred', linewidth=2, zorder=10)
|
||||
close_short_scatter = ax1.scatter([], [], color='cyan', marker='+', label='Close Short', s=200, edgecolor='darkcyan', linewidth=2, zorder=10)
|
||||
|
||||
ax1.set_ylabel('Price Change (%)', fontsize=12, fontweight='bold')
|
||||
ax1_right.set_ylabel('Real Price (USDT)', fontsize=12, fontweight='bold', color='gray')
|
||||
ax1.legend(loc='upper left', fontsize=10)
|
||||
ax1.grid(True, alpha=0.3)
|
||||
ax1.set_title('Price Chart with Long/Short Indicators', fontsize=12, fontweight='bold')
|
||||
|
||||
# Portfolio subplot
|
||||
portfolio_line, = ax2.plot([], [], label='Portfolio Value (After Costs)', color='darkblue', linewidth=2)
|
||||
portfolio_gross_line, = ax2.plot([], [], label='Portfolio Value (Before Costs)', color='lightblue', linewidth=1, linestyle='--', alpha=0.7)
|
||||
ax2.axhline(y=initial_capital, color='gray', linestyle='-', alpha=0.5, label='Initial Capital')
|
||||
ax2.axhline(y=initial_capital * 1.01, color='lightgreen', linestyle='--', alpha=0.7, label='+1%')
|
||||
ax2.axhline(y=initial_capital * 0.99, color='lightcoral', linestyle='--', alpha=0.7, label='-1%')
|
||||
|
||||
ax2.set_ylabel('Portfolio Value ($)', fontsize=12, fontweight='bold')
|
||||
ax2.legend(loc='upper left', fontsize=10)
|
||||
ax2.grid(True, alpha=0.3)
|
||||
ax2.set_title('Portfolio Performance (Net vs Gross)', fontsize=12, fontweight='bold')
|
||||
|
||||
# Costs subplot (NEW - 3rd panel)
|
||||
costs_line, = ax3.plot([], [], label='Cumulative Costs', color='red', linewidth=2)
|
||||
fees_line, = ax3.plot([], [], label='Trading Fees', color='orange', linewidth=1.5, alpha=0.8)
|
||||
spread_line, = ax3.plot([], [], label='Spread Costs', color='purple', linewidth=1.5, alpha=0.8)
|
||||
slippage_line, = ax3.plot([], [], label='Slippage Costs', color='brown', linewidth=1.5, alpha=0.8)
|
||||
|
||||
ax3.set_ylabel('Costs ($)', fontsize=12, fontweight='bold')
|
||||
ax3.set_xlabel('Time (MM:SS)', fontsize=12, fontweight='bold')
|
||||
ax3.legend(loc='upper left', fontsize=10)
|
||||
ax3.grid(True, alpha=0.3)
|
||||
ax3.set_title('Trading Costs Breakdown', fontsize=12, fontweight='bold')
|
||||
|
||||
def calculate_indicators(df):
|
||||
"""Calculate technical indicators with proper error handling"""
|
||||
try:
|
||||
if len(df) >= 5:
|
||||
df['sma5'] = SMAIndicator(df['close'], window=5).sma_indicator()
|
||||
else:
|
||||
df['sma5'] = df['close']
|
||||
|
||||
if len(df) >= 15:
|
||||
df['sma15'] = SMAIndicator(df['close'], window=15).sma_indicator()
|
||||
else:
|
||||
df['sma15'] = df['close']
|
||||
|
||||
if len(df) >= 7:
|
||||
df['rsi'] = RSIIndicator(df['close'], window=7).rsi()
|
||||
df['atr'] = AverageTrueRange(df['high'], df['low'], df['close'], window=7).average_true_range()
|
||||
else:
|
||||
df['rsi'] = pd.Series([50] * len(df), index=df.index)
|
||||
df['atr'] = pd.Series([1.0] * len(df), index=df.index)
|
||||
|
||||
if len(df) >= 10:
|
||||
df['roc'] = df['close'].pct_change(10) * 100
|
||||
else:
|
||||
df['roc'] = pd.Series([0.0] * len(df), index=df.index)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error calculating indicators: {e}")
|
||||
df['sma5'] = df['close']
|
||||
df['sma15'] = df['close']
|
||||
df['rsi'] = pd.Series([50] * len(df), index=df.index)
|
||||
df['atr'] = pd.Series([1.0] * len(df), index=df.index)
|
||||
df['roc'] = pd.Series([0.0] * len(df), index=df.index)
|
||||
|
||||
return df
|
||||
|
||||
def calculate_trading_costs(trade_value, trade_type="market"):
|
||||
"""Calculate all trading costs for a given trade"""
|
||||
# Base trading fee (maker or taker)
|
||||
fee_rate = maker_fee if trade_type == "limit" else taker_fee
|
||||
trading_fee = trade_value * fee_rate
|
||||
|
||||
# Spread cost (always applies)
|
||||
spread_cost_amount = trade_value * spread_cost
|
||||
|
||||
# Slippage (only for market orders)
|
||||
slippage_cost_amount = trade_value * slippage_cost if trade_type == "market" else 0
|
||||
|
||||
total_cost = trading_fee + spread_cost_amount + slippage_cost_amount
|
||||
|
||||
return {
|
||||
'total_cost': total_cost,
|
||||
'trading_fee': trading_fee,
|
||||
'spread_cost': spread_cost_amount,
|
||||
'slippage_cost': slippage_cost_amount
|
||||
}
|
||||
|
||||
def get_time_in_seconds(timestamp):
|
||||
"""Convert timestamp to seconds from start"""
|
||||
if start_time is None:
|
||||
return 0
|
||||
return (timestamp - start_time).total_seconds()
|
||||
|
||||
def format_time_axis(seconds):
|
||||
"""Format seconds as MM:SS"""
|
||||
minutes = int(seconds // 60)
|
||||
secs = int(seconds % 60)
|
||||
return f"{minutes:02d}:{secs:02d}"
|
||||
|
||||
def get_position_type():
|
||||
"""Return current position type"""
|
||||
if position_dollars > 0:
|
||||
return "LONG"
|
||||
elif position_dollars < 0:
|
||||
return "SHORT"
|
||||
else:
|
||||
return "FLAT"
|
||||
|
||||
# WebSocket callback functions
|
||||
def on_message(ws, message):
|
||||
global data, position_dollars, btc_units, entry_price, stop_loss, trailing_stop
|
||||
global highest_price, lowest_price, portfolio_value, cumulative_costs, df_global, start_time, current_price_base
|
||||
|
||||
try:
|
||||
msg = json.loads(message)
|
||||
if 'k' in msg:
|
||||
kline = msg['k']
|
||||
if kline['x']: # Closed candle
|
||||
timestamp = pd.to_datetime(kline['t'], unit='ms')
|
||||
close = float(kline['c'])
|
||||
high = float(kline['h'])
|
||||
low = float(kline['l'])
|
||||
|
||||
# Set start time on first data point
|
||||
if start_time is None:
|
||||
start_time = timestamp
|
||||
current_price_base = close
|
||||
print(f"🕐 Long/Short Strategy with Costs started at {start_time}")
|
||||
print(f"💰 Base price: ${current_price_base:.2f}")
|
||||
print(f"💸 Trading Costs: Maker {maker_fee*100:.1f}%, Taker {taker_fee*100:.1f}%, Spread {spread_cost*100:.2f}%, Slippage {slippage_cost*100:.2f}%")
|
||||
|
||||
# Calculate time in seconds from start
|
||||
time_seconds = get_time_in_seconds(timestamp)
|
||||
|
||||
data.append({
|
||||
'timestamp': timestamp,
|
||||
'time_seconds': time_seconds,
|
||||
'close': close,
|
||||
'high': high,
|
||||
'low': low
|
||||
})
|
||||
|
||||
# Keep only last 100 data points for efficiency
|
||||
data[:] = data[-100:] if len(data) > 100 else data
|
||||
|
||||
if len(data) > 5: # Minimum data needed
|
||||
df = pd.DataFrame(data)
|
||||
df = calculate_indicators(df)
|
||||
df_global = df.copy() # Store for plotting
|
||||
|
||||
current = df.iloc[-1]
|
||||
prev = df.iloc[-2] if len(df) > 1 else None
|
||||
|
||||
# Risk management factors
|
||||
if len(df) >= 5:
|
||||
atr_avg = df['atr'].rolling(5).mean().iloc[-1]
|
||||
vol_factor = 0.8 if current['atr'] > 2 * atr_avg else 1.0
|
||||
else:
|
||||
vol_factor = 1.0
|
||||
|
||||
signal_factor = 1.2 if abs(current['rsi'] - 50) > 20 else 1.0 # Strong RSI signal
|
||||
market_factor = 1.2 if abs(current['roc']) > 3 else (0.8 if abs(current['roc']) < 1 else 1.0)
|
||||
|
||||
# ENTRY LOGIC - Only when no position
|
||||
if position_dollars == 0 and prev is not None and len(df) >= 15:
|
||||
|
||||
# LONG ENTRY: SMA5 crosses above SMA15 AND RSI > 50
|
||||
if (current['sma5'] > current['sma15'] and prev['sma5'] <= prev['sma15'] and
|
||||
current['rsi'] > 50):
|
||||
# Calculate position size in dollars (positive = long)
|
||||
gross_position = (base_size * signal_factor * vol_factor * market_factor) * initial_capital
|
||||
|
||||
# Calculate trading costs
|
||||
costs = calculate_trading_costs(gross_position, "market") # Market order for entries
|
||||
cumulative_costs += costs['total_cost']
|
||||
|
||||
# Net position after costs
|
||||
position_dollars = gross_position
|
||||
entry_price = current['close']
|
||||
# Calculate actual BTC units (positive = owned)
|
||||
btc_units = position_dollars / entry_price
|
||||
stop_loss = entry_price - 1.5 * current['atr']
|
||||
highest_price = entry_price
|
||||
trailing_stop = stop_loss
|
||||
entries.append((time_seconds, entry_price, 'BUY'))
|
||||
|
||||
# Update portfolio with costs
|
||||
portfolio_value -= costs['total_cost']
|
||||
|
||||
print(f"🚀 LONG ENTRY: Time={format_time_axis(time_seconds)}, Price=${entry_price:.2f}")
|
||||
print(f" Investment: ${position_dollars:.2f}, BTC Units: {btc_units:.6f}, Stop: ${stop_loss:.2f}")
|
||||
print(f" 💸 Entry Costs: ${costs['total_cost']:.2f} (Fee: ${costs['trading_fee']:.2f}, Spread: ${costs['spread_cost']:.2f}, Slippage: ${costs['slippage_cost']:.2f})")
|
||||
logging.info(f"LONG: Time={format_time_axis(time_seconds)}, Price={entry_price}, Investment=${position_dollars:.2f}, BTC={btc_units:.6f}, Costs=${costs['total_cost']:.2f}")
|
||||
|
||||
# Log costs
|
||||
cost_log.append({
|
||||
'timestamp': timestamp,
|
||||
'time_seconds': time_seconds,
|
||||
'cumulative_costs': cumulative_costs,
|
||||
'trading_fees': costs['trading_fee'],
|
||||
'spread_costs': costs['spread_cost'],
|
||||
'slippage_costs': costs['slippage_cost']
|
||||
})
|
||||
|
||||
# SHORT ENTRY: SMA5 crosses below SMA15 AND RSI < 50
|
||||
elif (current['sma5'] < current['sma15'] and prev['sma5'] >= prev['sma15'] and
|
||||
current['rsi'] < 50):
|
||||
# Calculate position size in dollars (negative = short)
|
||||
gross_position = (base_size * signal_factor * vol_factor * market_factor) * initial_capital
|
||||
|
||||
# Calculate trading costs
|
||||
costs = calculate_trading_costs(gross_position, "market") # Market order for entries
|
||||
cumulative_costs += costs['total_cost']
|
||||
|
||||
# Net position after costs
|
||||
position_dollars = -gross_position # Negative for short
|
||||
entry_price = current['close']
|
||||
# Calculate actual BTC units (negative = borrowed/short)
|
||||
btc_units = position_dollars / entry_price # Will be negative
|
||||
stop_loss = entry_price + 1.5 * current['atr'] # Stop above entry for shorts
|
||||
lowest_price = entry_price
|
||||
trailing_stop = stop_loss
|
||||
entries.append((time_seconds, entry_price, 'SHORT'))
|
||||
|
||||
# Update portfolio with costs
|
||||
portfolio_value -= costs['total_cost']
|
||||
|
||||
print(f"🔻 SHORT ENTRY: Time={format_time_axis(time_seconds)}, Price=${entry_price:.2f}")
|
||||
print(f" Short Size: ${abs(position_dollars):.2f}, BTC Units: {btc_units:.6f}, Stop: ${stop_loss:.2f}")
|
||||
print(f" 💸 Entry Costs: ${costs['total_cost']:.2f} (Fee: ${costs['trading_fee']:.2f}, Spread: ${costs['spread_cost']:.2f}, Slippage: ${costs['slippage_cost']:.2f})")
|
||||
logging.info(f"SHORT: Time={format_time_axis(time_seconds)}, Price={entry_price}, Size=${abs(position_dollars):.2f}, BTC={btc_units:.6f}, Costs=${costs['total_cost']:.2f}")
|
||||
|
||||
# Log costs
|
||||
cost_log.append({
|
||||
'timestamp': timestamp,
|
||||
'time_seconds': time_seconds,
|
||||
'cumulative_costs': cumulative_costs,
|
||||
'trading_fees': costs['trading_fee'],
|
||||
'spread_costs': costs['spread_cost'],
|
||||
'slippage_costs': costs['slippage_cost']
|
||||
})
|
||||
|
||||
# EXIT LOGIC
|
||||
if position_dollars != 0 and len(df) >= 15:
|
||||
exit_reason = ""
|
||||
should_exit = False
|
||||
|
||||
if position_dollars > 0: # LONG EXIT
|
||||
if current['sma5'] < current['sma15']:
|
||||
exit_reason = "SMA Crossover (Long → Exit)"
|
||||
should_exit = True
|
||||
elif current['close'] < stop_loss:
|
||||
exit_reason = "Stop Loss (Long)"
|
||||
should_exit = True
|
||||
|
||||
else: # SHORT EXIT
|
||||
if current['sma5'] > current['sma15']:
|
||||
exit_reason = "SMA Crossover (Short → Exit)"
|
||||
should_exit = True
|
||||
elif current['close'] > stop_loss:
|
||||
exit_reason = "Stop Loss (Short)"
|
||||
should_exit = True
|
||||
|
||||
if should_exit:
|
||||
# Calculate exit costs
|
||||
trade_value = abs(position_dollars)
|
||||
costs = calculate_trading_costs(trade_value, "market") # Market order for exits
|
||||
cumulative_costs += costs['total_cost']
|
||||
|
||||
# Profit calculation (before costs):
|
||||
if position_dollars > 0: # Closing long
|
||||
gross_profit = (current['close'] - entry_price) * btc_units
|
||||
exits.append((time_seconds, current['close'], 'CLOSE_LONG'))
|
||||
print(f"🚪 CLOSE LONG: Time={format_time_axis(time_seconds)}, {exit_reason}, Price=${current['close']:.2f}")
|
||||
else: # Closing short
|
||||
gross_profit = (entry_price - current['close']) * abs(btc_units) # Profit when price drops
|
||||
exits.append((time_seconds, current['close'], 'CLOSE_SHORT'))
|
||||
print(f"🚪 CLOSE SHORT: Time={format_time_axis(time_seconds)}, {exit_reason}, Price=${current['close']:.2f}")
|
||||
|
||||
# Net profit after exit costs
|
||||
net_profit = gross_profit - costs['total_cost']
|
||||
portfolio_value += gross_profit - costs['total_cost'] # Add net profit
|
||||
|
||||
print(f" 💰 Gross P&L: ${gross_profit:+.2f}")
|
||||
print(f" 💸 Exit Costs: ${costs['total_cost']:.2f} (Fee: ${costs['trading_fee']:.2f}, Spread: ${costs['spread_cost']:.2f}, Slippage: ${costs['slippage_cost']:.2f})")
|
||||
print(f" 📊 Net P&L: ${net_profit:+.2f}, Portfolio: ${portfolio_value:,.2f}")
|
||||
|
||||
logging.info(f"EXIT: Time={format_time_axis(time_seconds)}, Price={current['close']}, Reason={exit_reason}, GrossProfit=${gross_profit:.2f}, NetProfit=${net_profit:.2f}, Costs=${costs['total_cost']:.2f}")
|
||||
|
||||
# Log costs
|
||||
cost_log.append({
|
||||
'timestamp': timestamp,
|
||||
'time_seconds': time_seconds,
|
||||
'cumulative_costs': cumulative_costs,
|
||||
'trading_fees': costs['trading_fee'],
|
||||
'spread_costs': costs['spread_cost'],
|
||||
'slippage_costs': costs['slippage_cost']
|
||||
})
|
||||
|
||||
# Reset position variables
|
||||
position_dollars = 0
|
||||
btc_units = 0
|
||||
entry_price = 0
|
||||
stop_loss = 0
|
||||
trailing_stop = 0
|
||||
highest_price = 0
|
||||
lowest_price = 0
|
||||
|
||||
# Update portfolio tracking
|
||||
if position_dollars != 0:
|
||||
if position_dollars > 0: # Long position
|
||||
current_btc_value = btc_units * current['close']
|
||||
unrealized_pnl = current_btc_value - position_dollars
|
||||
else: # Short position
|
||||
unrealized_pnl = (entry_price - current['close']) * abs(btc_units)
|
||||
|
||||
current_portfolio_value = portfolio_value + unrealized_pnl
|
||||
trade_log.append({'timestamp': timestamp, 'time_seconds': time_seconds, 'portfolio_value': current_portfolio_value})
|
||||
else:
|
||||
trade_log.append({'timestamp': timestamp, 'time_seconds': time_seconds, 'portfolio_value': portfolio_value})
|
||||
|
||||
# Always log current costs (even if no new trades)
|
||||
if not cost_log or cost_log[-1]['time_seconds'] != time_seconds:
|
||||
cost_log.append({
|
||||
'timestamp': timestamp,
|
||||
'time_seconds': time_seconds,
|
||||
'cumulative_costs': cumulative_costs,
|
||||
'trading_fees': 0, # No new fees
|
||||
'spread_costs': 0,
|
||||
'slippage_costs': 0
|
||||
})
|
||||
|
||||
# Print status every 10 seconds
|
||||
if len(data) % 10 == 0:
|
||||
pos_type = get_position_type()
|
||||
status_emoji = {"LONG": "📈", "SHORT": "📉", "FLAT": "⏸️"}[pos_type]
|
||||
price_change = ((current['close'] - current_price_base) / current_price_base) * 100
|
||||
portfolio_change = ((portfolio_value - initial_capital) / initial_capital) * 100
|
||||
cost_percentage = (cumulative_costs / initial_capital) * 100
|
||||
|
||||
if position_dollars != 0:
|
||||
if position_dollars > 0: # Long
|
||||
current_btc_value = btc_units * current['close']
|
||||
unrealized_pnl = current_btc_value - position_dollars
|
||||
print(f"{status_emoji} {pos_type} | Time: {format_time_axis(time_seconds)} | Price: ${current['close']:.2f} ({price_change:+.2f}%)")
|
||||
print(f" Investment: ${position_dollars:.2f} | Current Value: ${current_btc_value:.2f} | Unrealized P&L: ${unrealized_pnl:+.2f}")
|
||||
print(f" 💸 Total Costs: ${cumulative_costs:.2f} ({cost_percentage:.3f}% of capital)")
|
||||
else: # Short
|
||||
unrealized_pnl = (entry_price - current['close']) * abs(btc_units)
|
||||
print(f"{status_emoji} {pos_type} | Time: {format_time_axis(time_seconds)} | Price: ${current['close']:.2f} ({price_change:+.2f}%)")
|
||||
print(f" Short Size: ${abs(position_dollars):.2f} | Entry: ${entry_price:.2f} | Unrealized P&L: ${unrealized_pnl:+.2f}")
|
||||
print(f" 💸 Total Costs: ${cumulative_costs:.2f} ({cost_percentage:.3f}% of capital)")
|
||||
else:
|
||||
print(f"{status_emoji} {pos_type} | Time: {format_time_axis(time_seconds)} | Price: ${current['close']:.2f} ({price_change:+.2f}%) | Portfolio: ${portfolio_value:,.2f} ({portfolio_change:+.2f}%)")
|
||||
print(f" 💸 Total Costs: ${cumulative_costs:.2f} ({cost_percentage:.3f}% of capital)")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error in on_message: {e}")
|
||||
|
||||
def on_error(ws, error):
|
||||
print(f"❌ WebSocket Error: {error}")
|
||||
|
||||
def on_close(ws, close_status_code, close_msg):
|
||||
print("🔌 WebSocket closed")
|
||||
if trade_log:
|
||||
pd.DataFrame(trade_log).to_csv('trade_log.csv', index=False)
|
||||
print("💾 Trade log saved")
|
||||
if cost_log:
|
||||
pd.DataFrame(cost_log).to_csv('cost_log.csv', index=False)
|
||||
print("💾 Cost log saved")
|
||||
|
||||
def on_open(ws):
|
||||
print("🔗 WebSocket opened - Starting long/short trend following strategy with costs")
|
||||
|
||||
# Animation update function
|
||||
def update_plot(frame):
|
||||
global df_global, current_price_base
|
||||
|
||||
try:
|
||||
if df_global.empty or len(df_global) == 0 or current_price_base is None:
|
||||
return (price_line, sma5_line, sma15_line, stop_loss_line, trailing_stop_line,
|
||||
portfolio_line, portfolio_gross_line, costs_line, fees_line, spread_line, slippage_line,
|
||||
buy_scatter, short_scatter, close_long_scatter, close_short_scatter)
|
||||
|
||||
df = df_global.copy()
|
||||
|
||||
# Calculate price change percentage for left axis
|
||||
df['price_change_pct'] = ((df['close'] - current_price_base) / current_price_base) * 100
|
||||
df['sma5_change_pct'] = ((df['sma5'] - current_price_base) / current_price_base) * 100
|
||||
df['sma15_change_pct'] = ((df['sma15'] - current_price_base) / current_price_base) * 100
|
||||
|
||||
# Update main plot - price change percentage
|
||||
price_line.set_data(df['time_seconds'], df['price_change_pct'])
|
||||
|
||||
if 'sma5' in df.columns and not df['sma5'].isna().all():
|
||||
sma5_line.set_data(df['time_seconds'], df['sma5_change_pct'])
|
||||
else:
|
||||
sma5_line.set_data([], [])
|
||||
|
||||
if 'sma15' in df.columns and not df['sma15'].isna().all():
|
||||
sma15_line.set_data(df['time_seconds'], df['sma15_change_pct'])
|
||||
else:
|
||||
sma15_line.set_data([], [])
|
||||
|
||||
# Update markers - separate long and short entries/exits
|
||||
long_entries = [(t, p) for t, p, action in entries if action == 'BUY']
|
||||
short_entries = [(t, p) for t, p, action in entries if action == 'SHORT']
|
||||
long_exits = [(t, p) for t, p, action in exits if action == 'CLOSE_LONG']
|
||||
short_exits = [(t, p) for t, p, action in exits if action == 'CLOSE_SHORT']
|
||||
|
||||
if long_entries:
|
||||
buy_times, buy_prices = zip(*long_entries)
|
||||
buy_prices_pct = [((price - current_price_base) / current_price_base) * 100 for price in buy_prices]
|
||||
buy_scatter.set_offsets(np.c_[buy_times, buy_prices_pct])
|
||||
else:
|
||||
buy_scatter.set_offsets(np.array([]).reshape(0, 2))
|
||||
|
||||
if short_entries:
|
||||
short_times, short_prices = zip(*short_entries)
|
||||
short_prices_pct = [((price - current_price_base) / current_price_base) * 100 for price in short_prices]
|
||||
short_scatter.set_offsets(np.c_[short_times, short_prices_pct])
|
||||
else:
|
||||
short_scatter.set_offsets(np.array([]).reshape(0, 2))
|
||||
|
||||
if long_exits:
|
||||
close_long_times, close_long_prices = zip(*long_exits)
|
||||
close_long_prices_pct = [((price - current_price_base) / current_price_base) * 100 for price in close_long_prices]
|
||||
close_long_scatter.set_offsets(np.c_[close_long_times, close_long_prices_pct])
|
||||
else:
|
||||
close_long_scatter.set_offsets(np.array([]).reshape(0, 2))
|
||||
|
||||
if short_exits:
|
||||
close_short_times, close_short_prices = zip(*short_exits)
|
||||
close_short_prices_pct = [((price - current_price_base) / current_price_base) * 100 for price in close_short_prices]
|
||||
close_short_scatter.set_offsets(np.c_[close_short_times, close_short_prices_pct])
|
||||
else:
|
||||
close_short_scatter.set_offsets(np.array([]).reshape(0, 2))
|
||||
|
||||
# Handle trade_log for portfolio (net and gross)
|
||||
if trade_log:
|
||||
trade_df = pd.DataFrame(trade_log)
|
||||
portfolio_line.set_data(trade_df['time_seconds'], trade_df['portfolio_value'])
|
||||
|
||||
# Calculate gross portfolio (before costs)
|
||||
gross_portfolio = trade_df['portfolio_value'] + cumulative_costs
|
||||
portfolio_gross_line.set_data(trade_df['time_seconds'], gross_portfolio)
|
||||
|
||||
# Handle cost_log for costs breakdown
|
||||
if cost_log:
|
||||
cost_df = pd.DataFrame(cost_log)
|
||||
costs_line.set_data(cost_df['time_seconds'], cost_df['cumulative_costs'])
|
||||
|
||||
# Calculate cumulative costs by type
|
||||
cost_df['cum_fees'] = cost_df['trading_fees'].cumsum()
|
||||
cost_df['cum_spread'] = cost_df['spread_costs'].cumsum()
|
||||
cost_df['cum_slippage'] = cost_df['slippage_costs'].cumsum()
|
||||
|
||||
fees_line.set_data(cost_df['time_seconds'], cost_df['cum_fees'])
|
||||
spread_line.set_data(cost_df['time_seconds'], cost_df['cum_spread'])
|
||||
slippage_line.set_data(cost_df['time_seconds'], cost_df['cum_slippage'])
|
||||
|
||||
# Fixed time scale: 0 to 600 seconds (10 minutes)
|
||||
ax1.set_xlim(0, 600)
|
||||
ax2.set_xlim(0, 600)
|
||||
ax3.set_xlim(0, 600)
|
||||
|
||||
# Price scale: ±2%
|
||||
ax1.set_ylim(-2, 2)
|
||||
|
||||
# Right axis for real prices
|
||||
current_price = df['close'].iloc[-1]
|
||||
price_range = current_price * 0.02 # 2%
|
||||
ax1_right.set_ylim(current_price - price_range, current_price + price_range)
|
||||
|
||||
# Portfolio scale: initial capital ±1%
|
||||
capital_range = initial_capital * 0.01 # 1%
|
||||
ax2.set_ylim(initial_capital - capital_range, initial_capital + capital_range)
|
||||
|
||||
# Costs scale: 0 to max costs with some headroom
|
||||
if cumulative_costs > 0:
|
||||
ax3.set_ylim(0, cumulative_costs * 1.2)
|
||||
else:
|
||||
ax3.set_ylim(0, 100) # Default range
|
||||
|
||||
# Set tick marks for time (every minute = 60 seconds)
|
||||
time_ticks = range(0, 601, 60) # 0, 60, 120, ..., 600
|
||||
time_labels = [format_time_axis(t) for t in time_ticks]
|
||||
for ax in [ax1, ax2, ax3]:
|
||||
ax.set_xticks(time_ticks)
|
||||
ax.set_xticklabels(time_labels)
|
||||
|
||||
# Add grid lines for better readability
|
||||
ax1.grid(True, alpha=0.3)
|
||||
ax2.grid(True, alpha=0.3)
|
||||
ax3.grid(True, alpha=0.3)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Plot update error: {e}")
|
||||
|
||||
return (price_line, sma5_line, sma15_line, stop_loss_line, trailing_stop_line,
|
||||
portfolio_line, portfolio_gross_line, costs_line, fees_line, spread_line, slippage_line,
|
||||
buy_scatter, short_scatter, close_long_scatter, close_short_scatter)
|
||||
|
||||
# Run WebSocket and animation
|
||||
if __name__ == "__main__":
|
||||
print("🚀 Starting Enhanced Long/Short Strategy with Trading Costs")
|
||||
print("📈 LONG: SMA5 crosses above SMA15 + RSI > 50")
|
||||
print("📉 SHORT: SMA5 crosses below SMA15 + RSI < 50")
|
||||
print("💸 Trading Costs Included:")
|
||||
print(f" • Maker Fee: {maker_fee*100:.1f}%")
|
||||
print(f" • Taker Fee: {taker_fee*100:.1f}%")
|
||||
print(f" • Spread Cost: {spread_cost*100:.2f}%")
|
||||
print(f" • Slippage Cost: {slippage_cost*100:.2f}%")
|
||||
print("📊 3-Panel View: Price/SMAs, Portfolio (Net vs Gross), Trading Costs")
|
||||
print("⚡ Realistic trading with all costs included!")
|
||||
|
||||
ws_url = "wss://stream.binance.com:9443/ws/btcusdt@kline_1s"
|
||||
ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_error=on_error,
|
||||
on_close=on_close, on_open=on_open)
|
||||
|
||||
import threading
|
||||
ws_thread = threading.Thread(target=ws.run_forever)
|
||||
ws_thread.daemon = True
|
||||
ws_thread.start()
|
||||
|
||||
try:
|
||||
ani = FuncAnimation(fig, update_plot, interval=1000, blit=True, cache_frame_data=False)
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
time.sleep(simulation_duration)
|
||||
except KeyboardInterrupt:
|
||||
print("\n⚠️ Interrupted by user")
|
||||
except Exception as e:
|
||||
print(f"❌ Error: {e}")
|
||||
finally:
|
||||
print("🛑 Shutting down...")
|
||||
ws.close()
|
||||
|
||||
# Print final summary with costs analysis
|
||||
if entries or exits:
|
||||
print(f"\n📊 LONG/SHORT TRADING SUMMARY WITH COSTS:")
|
||||
long_entries_count = len([e for e in entries if e[2] == 'BUY'])
|
||||
short_entries_count = len([e for e in entries if e[2] == 'SHORT'])
|
||||
long_exits_count = len([e for e in exits if e[2] == 'CLOSE_LONG'])
|
||||
short_exits_count = len([e for e in exits if e[2] == 'CLOSE_SHORT'])
|
||||
|
||||
print(f" Long Entries: {long_entries_count}")
|
||||
print(f" Short Entries: {short_entries_count}")
|
||||
print(f" Long Exits: {long_exits_count}")
|
||||
print(f" Short Exits: {short_exits_count}")
|
||||
print(f" Total Trades: {long_entries_count + short_entries_count}")
|
||||
|
||||
# Cost analysis
|
||||
cost_percentage = (cumulative_costs / initial_capital) * 100
|
||||
print(f"\n💸 COST ANALYSIS:")
|
||||
print(f" Total Trading Costs: ${cumulative_costs:.2f}")
|
||||
print(f" Cost as % of Capital: {cost_percentage:.3f}%")
|
||||
print(f" Average Cost per Trade: ${cumulative_costs/(long_entries_count + short_entries_count):.2f}" if (long_entries_count + short_entries_count) > 0 else " No completed trades")
|
||||
|
||||
# Performance analysis
|
||||
gross_return = ((portfolio_value + cumulative_costs - initial_capital) / initial_capital) * 100
|
||||
net_return = ((portfolio_value - initial_capital) / initial_capital) * 100
|
||||
print(f"\n📈 PERFORMANCE ANALYSIS:")
|
||||
print(f" Gross Return (before costs): {gross_return:+.2f}%")
|
||||
print(f" Net Return (after costs): {net_return:+.2f}%")
|
||||
print(f" Cost Impact: {gross_return - net_return:.2f}%")
|
||||
print(f" Final Portfolio: ${portfolio_value:,.2f}")
|
||||
|
||||
print("✅ Long/Short Strategy with Costs completed!")
|
2
video.md
2
video.md
|
@ -17,7 +17,7 @@ Below are the private video links to each session of the **"Build Your Own Crypt
|
|||
---
|
||||
|
||||
### Session 3: Data Processing & Technical Analysis
|
||||
🔗 [Watch on YouTube](https://youtu.be/-K5X8LsMWM0)
|
||||
🔗 [Watch on YouTube](https://youtu.be/1pbYf7H6WEQ)
|
||||
|
||||
---
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue