diff --git a/.ipynb_checkpoints/main-checkpoint.ipynb b/.ipynb_checkpoints/main-checkpoint.ipynb index df2260d..567e56d 100644 --- a/.ipynb_checkpoints/main-checkpoint.ipynb +++ b/.ipynb_checkpoints/main-checkpoint.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 21, + "execution_count": 10, "id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0", "metadata": { "tags": [] @@ -30,7 +30,7 @@ " o.order_price,\n", " o.side AS order_side\n", " FROM \n", - " {trade_data_1b} t\n", + " {trade_10m_v3} t\n", " LEFT JOIN \n", " order_10m o ON o.date_time BETWEEN t.date_time - INTERVAL '{spoofing_time_window_s}' SECOND \n", " AND t.date_time\n", @@ -76,7 +76,7 @@ " t.trader_id,\n", " t.trade_id,\n", " SUM(t.trade_volume) AS total_trade_volume\n", - " FROM {trade_data_1b} t\n", + " FROM {trade_10m_v3} t\n", " WHERE \n", " t.date_time BETWEEN t.date_time - INTERVAL '{trade_time_window_s}' SECOND\n", " AND t.date_time\n", @@ -107,11 +107,11 @@ " net_order_volume_all_cte a ON n.trade_id = a.trade_id\n", "WHERE \n", " n.net_order_volume > 0 -- Only consider positive net order volumes (potential spoofing);\n", - " limit 1000\n", + " limit 100\n", "\"\"\"\n", "\n", "class Scenario:\n", - " seq = SQLQueryInterface(schema=\"internal\")\n", + " seq = SQLQueryInterface(schema=\"trade_schema\")\n", "\n", " def logic(self, **params):\n", " spoofing_time_window = params.get('spoofing_time_window', 300000) # default to 300,000 ms (5 minutes)\n", @@ -130,7 +130,7 @@ "\n", " # Execute the query with the parameters passed from `params`\n", " row_list = self.seq.execute_raw(query.format(\n", - " trade_data_1b=\"trade_10m_v3\", # Replace with actual table name\n", + " trade_10m_v3=\"trade_10m_v3\", # Replace with actual table name\n", " spoofing_time_window_s=spoofing_time_window_s,\n", " trade_time_window_s=trade_time_window_s,\n", " spoofing_side=spoofing_side\n", @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "b5c4307f-bc35-47e2-b680-fd1df2168d6c", "metadata": { "tags": [] @@ -166,242 +166,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "Query start time : 2024-10-14 07:40:43.846637\n" + "Query start time: 2024-10-15 08:26:06.758480\n" ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
focal_IDtrade_time_windownet_volumeorder_counttotal_trade_volumeorder_trade_ratiovolume_percentageSegmentSAR_FLAGRisk
030977282072024-01-01 00:03:00-92.0192-1.00.0DefaultNLow Risk
132286453222024-01-01 00:06:00-689.01689-1.00.0DefaultNLow Risk
227018727272024-01-01 00:09:00-42.0142-1.00.0DefaultNLow Risk
316590566552024-01-01 00:11:00-167.01167-1.00.0DefaultNLow Risk
416612888872024-01-01 00:13:00-756.01756-1.00.0DefaultNLow Risk
.................................
9519457726822024-01-01 00:43:00-854.01854-1.00.0DefaultNLow Risk
9621374780412024-01-01 00:43:00-926.01926-1.00.0DefaultNLow Risk
9771383291642024-01-01 00:43:00-433.01433-1.00.0DefaultNLow Risk
9818670074412024-01-01 00:43:00-626.01626-1.00.0DefaultNLow Risk
9923479063492024-01-01 00:43:00-69.0169-1.00.0DefaultNLow Risk
\n", - "

100 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " focal_ID trade_time_window net_volume order_count \\\n", - "0 3097728207 2024-01-01 00:03:00 -92.0 1 \n", - "1 3228645322 2024-01-01 00:06:00 -689.0 1 \n", - "2 2701872727 2024-01-01 00:09:00 -42.0 1 \n", - "3 1659056655 2024-01-01 00:11:00 -167.0 1 \n", - "4 1661288887 2024-01-01 00:13:00 -756.0 1 \n", - ".. ... ... ... ... \n", - "95 1945772682 2024-01-01 00:43:00 -854.0 1 \n", - "96 2137478041 2024-01-01 00:43:00 -926.0 1 \n", - "97 7138329164 2024-01-01 00:43:00 -433.0 1 \n", - "98 1867007441 2024-01-01 00:43:00 -626.0 1 \n", - "99 2347906349 2024-01-01 00:43:00 -69.0 1 \n", - "\n", - " total_trade_volume order_trade_ratio volume_percentage Segment \\\n", - "0 92 -1.0 0.0 Default \n", - "1 689 -1.0 0.0 Default \n", - "2 42 -1.0 0.0 Default \n", - "3 167 -1.0 0.0 Default \n", - "4 756 -1.0 0.0 Default \n", - ".. ... ... ... ... \n", - "95 854 -1.0 0.0 Default \n", - "96 926 -1.0 0.0 Default \n", - "97 433 -1.0 0.0 Default \n", - "98 626 -1.0 0.0 Default \n", - "99 69 -1.0 0.0 Default \n", - "\n", - " SAR_FLAG Risk \n", - "0 N Low Risk \n", - "1 N Low Risk \n", - "2 N Low Risk \n", - "3 N Low Risk \n", - "4 N Low Risk \n", - ".. ... ... \n", - "95 N Low Risk \n", - "96 N Low Risk \n", - "97 N Low Risk \n", - "98 N Low Risk \n", - "99 N Low Risk \n", - "\n", - "[100 rows x 10 columns]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "scenario = Scenario()\n", - "scenario.logic(validation_window=300000)" + "scenario.logic(spoofing_time_window = 300000,\n", + " spoofing_side = 'buy',\n", + " use_volume_for_order_trade_ratio = True,\n", + " trade_time_window = 300000,\n", + " ignore_trade_after_spoofing = True,\n", + " ignore_price_improvement = True)" ] }, { diff --git a/main.ipynb b/main.ipynb index df2260d..4599fe8 100644 --- a/main.ipynb +++ b/main.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 21, + "execution_count": 12, "id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0", "metadata": { "tags": [] @@ -30,7 +30,7 @@ " o.order_price,\n", " o.side AS order_side\n", " FROM \n", - " {trade_data_1b} t\n", + " {trade_10m_v3} t\n", " LEFT JOIN \n", " order_10m o ON o.date_time BETWEEN t.date_time - INTERVAL '{spoofing_time_window_s}' SECOND \n", " AND t.date_time\n", @@ -76,7 +76,7 @@ " t.trader_id,\n", " t.trade_id,\n", " SUM(t.trade_volume) AS total_trade_volume\n", - " FROM {trade_data_1b} t\n", + " FROM {trade_10m_v3} t\n", " WHERE \n", " t.date_time BETWEEN t.date_time - INTERVAL '{trade_time_window_s}' SECOND\n", " AND t.date_time\n", @@ -107,11 +107,11 @@ " net_order_volume_all_cte a ON n.trade_id = a.trade_id\n", "WHERE \n", " n.net_order_volume > 0 -- Only consider positive net order volumes (potential spoofing);\n", - " limit 1000\n", + " limit 100\n", "\"\"\"\n", "\n", "class Scenario:\n", - " seq = SQLQueryInterface(schema=\"internal\")\n", + " seq = SQLQueryInterface(schema=\"trade_schema\")\n", "\n", " def logic(self, **params):\n", " spoofing_time_window = params.get('spoofing_time_window', 300000) # default to 300,000 ms (5 minutes)\n", @@ -130,7 +130,7 @@ "\n", " # Execute the query with the parameters passed from `params`\n", " row_list = self.seq.execute_raw(query.format(\n", - " trade_data_1b=\"trade_10m_v3\", # Replace with actual table name\n", + " trade_10m_v3=\"trade_10m_v3\", # Replace with actual table name\n", " spoofing_time_window_s=spoofing_time_window_s,\n", " trade_time_window_s=trade_time_window_s,\n", " spoofing_side=spoofing_side\n", @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "b5c4307f-bc35-47e2-b680-fd1df2168d6c", "metadata": { "tags": [] @@ -166,242 +166,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "Query start time : 2024-10-14 07:40:43.846637\n" + "Query start time: 2024-10-15 09:25:10.320161\n" ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
focal_IDtrade_time_windownet_volumeorder_counttotal_trade_volumeorder_trade_ratiovolume_percentageSegmentSAR_FLAGRisk
030977282072024-01-01 00:03:00-92.0192-1.00.0DefaultNLow Risk
132286453222024-01-01 00:06:00-689.01689-1.00.0DefaultNLow Risk
227018727272024-01-01 00:09:00-42.0142-1.00.0DefaultNLow Risk
316590566552024-01-01 00:11:00-167.01167-1.00.0DefaultNLow Risk
416612888872024-01-01 00:13:00-756.01756-1.00.0DefaultNLow Risk
.................................
9519457726822024-01-01 00:43:00-854.01854-1.00.0DefaultNLow Risk
9621374780412024-01-01 00:43:00-926.01926-1.00.0DefaultNLow Risk
9771383291642024-01-01 00:43:00-433.01433-1.00.0DefaultNLow Risk
9818670074412024-01-01 00:43:00-626.01626-1.00.0DefaultNLow Risk
9923479063492024-01-01 00:43:00-69.0169-1.00.0DefaultNLow Risk
\n", - "

100 rows × 10 columns

\n", - "
" - ], - "text/plain": [ - " focal_ID trade_time_window net_volume order_count \\\n", - "0 3097728207 2024-01-01 00:03:00 -92.0 1 \n", - "1 3228645322 2024-01-01 00:06:00 -689.0 1 \n", - "2 2701872727 2024-01-01 00:09:00 -42.0 1 \n", - "3 1659056655 2024-01-01 00:11:00 -167.0 1 \n", - "4 1661288887 2024-01-01 00:13:00 -756.0 1 \n", - ".. ... ... ... ... \n", - "95 1945772682 2024-01-01 00:43:00 -854.0 1 \n", - "96 2137478041 2024-01-01 00:43:00 -926.0 1 \n", - "97 7138329164 2024-01-01 00:43:00 -433.0 1 \n", - "98 1867007441 2024-01-01 00:43:00 -626.0 1 \n", - "99 2347906349 2024-01-01 00:43:00 -69.0 1 \n", - "\n", - " total_trade_volume order_trade_ratio volume_percentage Segment \\\n", - "0 92 -1.0 0.0 Default \n", - "1 689 -1.0 0.0 Default \n", - "2 42 -1.0 0.0 Default \n", - "3 167 -1.0 0.0 Default \n", - "4 756 -1.0 0.0 Default \n", - ".. ... ... ... ... \n", - "95 854 -1.0 0.0 Default \n", - "96 926 -1.0 0.0 Default \n", - "97 433 -1.0 0.0 Default \n", - "98 626 -1.0 0.0 Default \n", - "99 69 -1.0 0.0 Default \n", - "\n", - " SAR_FLAG Risk \n", - "0 N Low Risk \n", - "1 N Low Risk \n", - "2 N Low Risk \n", - "3 N Low Risk \n", - "4 N Low Risk \n", - ".. ... ... \n", - "95 N Low Risk \n", - "96 N Low Risk \n", - "97 N Low Risk \n", - "98 N Low Risk \n", - "99 N Low Risk \n", - "\n", - "[100 rows x 10 columns]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "scenario = Scenario()\n", - "scenario.logic(validation_window=300000)" + "scenario.logic(spoofing_time_window = 300000,\n", + " spoofing_side = 'buy',\n", + " use_volume_for_order_trade_ratio = True,\n", + " trade_time_window = 300000,\n", + " ignore_trade_after_spoofing = True,\n", + " ignore_price_improvement = True)" ] }, { diff --git a/main.py b/main.py index e41291c..dae2b77 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # coding: utf-8 -# In[21]: +# In[12]: from datetime import datetime @@ -25,7 +25,7 @@ trade_window AS ( o.order_price, o.side AS order_side FROM - {trade_data_1b} t + {trade_10m_v3} t LEFT JOIN order_10m o ON o.date_time BETWEEN t.date_time - INTERVAL '{spoofing_time_window_s}' SECOND AND t.date_time @@ -71,7 +71,7 @@ opposite_trade_volume_cte AS ( t.trader_id, t.trade_id, SUM(t.trade_volume) AS total_trade_volume - FROM {trade_data_1b} t + FROM {trade_10m_v3} t WHERE t.date_time BETWEEN t.date_time - INTERVAL '{trade_time_window_s}' SECOND AND t.date_time @@ -102,11 +102,11 @@ LEFT JOIN net_order_volume_all_cte a ON n.trade_id = a.trade_id WHERE n.net_order_volume > 0 -- Only consider positive net order volumes (potential spoofing); - limit 1000 + limit 100 """ class Scenario: - seq = SQLQueryInterface(schema="internal") + seq = SQLQueryInterface(schema="trade_schema") def logic(self, **params): spoofing_time_window = params.get('spoofing_time_window', 300000) # default to 300,000 ms (5 minutes) @@ -125,7 +125,7 @@ class Scenario: # Execute the query with the parameters passed from `params` row_list = self.seq.execute_raw(query.format( - trade_data_1b="trade_10m_v3", # Replace with actual table name + trade_10m_v3="trade_10m_v3", # Replace with actual table name spoofing_time_window_s=spoofing_time_window_s, trade_time_window_s=trade_time_window_s, spoofing_side=spoofing_side @@ -149,11 +149,16 @@ class Scenario: return final_scenario_df -# In[22]: +# In[ ]: scenario = Scenario() -scenario.logic(validation_window=300000) +scenario.logic(spoofing_time_window = 300000, + spoofing_side = 'buy', + use_volume_for_order_trade_ratio = True, + trade_time_window = 300000, + ignore_trade_after_spoofing = True, + ignore_price_improvement = True) # In[ ]: