From 6cafc42c3c1737636713d1519e3fb01880213daa Mon Sep 17 00:00:00 2001 From: Jakob Gamper <97gamjak@gmail.com> Date: Thu, 4 Apr 2024 00:31:30 +0200 Subject: [PATCH] decorator for strategyAnalysis still not working --- notebooks/strategy1.ipynb | 275 ++++++++++++++++-- .../technicalAnalysis/strategyAnalysis.py | 16 +- 2 files changed, 265 insertions(+), 26 deletions(-) diff --git a/notebooks/strategy1.ipynb b/notebooks/strategy1.ipynb index 9ae9793a..67fbfd67 100644 --- a/notebooks/strategy1.ipynb +++ b/notebooks/strategy1.ipynb @@ -52,31 +52,262 @@ "name": "stderr", "output_type": "stream", "text": [ - " 11%|█▏ | 58/505 [00:09<01:19, 5.64it/s]BF.B: No price data found, symbol may be delisted (1d 2021-04-05 -> 2024-04-03)\n", - " 14%|█▎ | 69/505 [00:10<01:05, 6.67it/s]BRK.B: No timezone found, symbol may be delisted\n", - "100%|██████████| 505/505 [01:21<00:00, 6.22it/s]\n" + " 11%|█▏ | 58/505 [00:10<01:28, 5.06it/s]BF.B: No price data found, symbol may be delisted (1d 2021-04-05 -> 2024-04-03)\n", + " 14%|█▎ | 69/505 [00:12<01:07, 6.47it/s]BRK.B: No timezone found, symbol may be delisted\n", + "100%|██████████| 505/505 [01:33<00:00, 5.40it/s]\n" ] }, { - "ename": "TypeError", - "evalue": " is not a callable object", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 50\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m warnings\u001b[38;5;241m.\u001b[39mcatch_warnings():\n\u001b[1;32m 48\u001b[0m \u001b[38;5;66;03m#ignore all FutureWarrning: pandas\u001b[39;00m\n\u001b[1;32m 49\u001b[0m warnings\u001b[38;5;241m.\u001b[39msimplefilter(action\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m'\u001b[39m, category\u001b[38;5;241m=\u001b[39m\u001b[38;5;167;01mFutureWarning\u001b[39;00m)\n\u001b[0;32m---> 50\u001b[0m \u001b[43mstrategy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscreen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtickers\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Trading/stockMarket/.venv/lib/python3.11/site-packages/decorator.py:232\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m 231\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcaller\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mextras\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/_common.py:10\u001b[0m, in \u001b[0;36mfinalize\u001b[0;34m(func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;129m@decorator\u001b[39m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfinalize\u001b[39m(func, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m---> 10\u001b[0m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 12\u001b[0m finalize_commands \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39matleast_1d(\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfinalize_commands) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfinalize_commands \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m command \u001b[38;5;129;01min\u001b[39;00m finalize_commands:\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/strategy.py:352\u001b[0m, in \u001b[0;36mStrategy.screen\u001b[0;34m(self, tickers)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_screen_single_ticker(ticker, pricing, pricing_daily)\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrades \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(\n\u001b[1;32m 346\u001b[0m [\n\u001b[1;32m 347\u001b[0m trade\u001b[38;5;241m.\u001b[39mtrade_dictionary\n\u001b[1;32m 348\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m trade \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrade_objects\n\u001b[1;32m 349\u001b[0m ]\n\u001b[1;32m 350\u001b[0m )\n\u001b[0;32m--> 352\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mxlsx_writer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_xlsx_file\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[43mStrategyAnalysis\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrades\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mearnings_calendar\u001b[49m\n\u001b[1;32m 355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 357\u001b[0m StrategyJSON\u001b[38;5;241m.\u001b[39mwrite_trades(\n\u001b[1;32m 358\u001b[0m trades\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrade_objects,\n\u001b[1;32m 359\u001b[0m dir_path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdir_path\n\u001b[1;32m 360\u001b[0m )\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/strategyXLSXWriter.py:43\u001b[0m, in \u001b[0;36mStrategyXLSXWriter.write_xlsx_file\u001b[0;34m(self, trade_analysis, earnings_calendar)\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start_date \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstart_date \u001b[38;5;129;01mand\u001b[39;00m end_date \u001b[38;5;241m>\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mend_date:\n\u001b[1;32m 41\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m---> 43\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_single_xlsx_file\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 44\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrade_analysis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtrade_analysis\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 45\u001b[0m \u001b[43m \u001b[49m\u001b[43mearnings_calendar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mearnings_calendar\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 46\u001b[0m \u001b[43m \u001b[49m\u001b[43mstart_date\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstart_date\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 47\u001b[0m \u001b[43m \u001b[49m\u001b[43mend_date\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mend_date\u001b[49m\n\u001b[1;32m 48\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 50\u001b[0m start_date \u001b[38;5;241m=\u001b[39m end_date\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start_date \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mend_date:\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/strategyXLSXWriter.py:92\u001b[0m, in \u001b[0;36mStrategyXLSXWriter.write_single_xlsx_file\u001b[0;34m(self, trade_analysis, earnings_calendar, start_date, end_date, filename)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite_trade_settings_to_xlsx(\n\u001b[1;32m 87\u001b[0m start_date,\n\u001b[1;32m 88\u001b[0m end_date\n\u001b[1;32m 89\u001b[0m )\n\u001b[1;32m 91\u001b[0m \u001b[38;5;66;03m# TODO: make this compatible with batch strategy\u001b[39;00m\n\u001b[0;32m---> 92\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_analysis_to_xlsx\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrade_analysis\u001b[49m\n\u001b[1;32m 94\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m filename \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 97\u001b[0m xlsx_filename \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mxlsx_filename\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m+\u001b[39m \\\n\u001b[1;32m 98\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m date_to_string(start_date) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/strategyXLSXWriter.py:346\u001b[0m, in \u001b[0;36mStrategyXLSXWriter.write_analysis_to_xlsx\u001b[0;34m(self, trade_analysis, start_date, end_date)\u001b[0m\n\u001b[1;32m 343\u001b[0m trade_analysis\u001b[38;5;241m.\u001b[39mend_date \u001b[38;5;241m=\u001b[39m end_date\n\u001b[1;32m 345\u001b[0m \u001b[38;5;66;03m#fmt: off\u001b[39;00m\n\u001b[0;32m--> 346\u001b[0m xlsx_sheet\u001b[38;5;241m.\u001b[39mcell(row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, column\u001b[38;5;241m=\u001b[39mcolumn_to_start \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m4\u001b[39m)\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m \u001b[43mtrade_analysis\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredicted_outcome\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msum()\n\u001b[1;32m 347\u001b[0m xlsx_sheet\u001b[38;5;241m.\u001b[39mcell(row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, column\u001b[38;5;241m=\u001b[39mcolumn_to_start \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m5\u001b[39m)\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m trade_analysis\u001b[38;5;241m.\u001b[39mpredicted_outcome()\u001b[38;5;241m.\u001b[39mmean()\n\u001b[1;32m 348\u001b[0m xlsx_sheet\u001b[38;5;241m.\u001b[39mcell(row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, column\u001b[38;5;241m=\u001b[39mcolumn_to_start \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m6\u001b[39m)\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m trade_analysis\u001b[38;5;241m.\u001b[39mpredicted_outcome()\u001b[38;5;241m.\u001b[39mmax()\n", - "File \u001b[0;32m~/Trading/stockMarket/stockMarket/technicalAnalysis/strategyAnalysis.py:94\u001b[0m, in \u001b[0;36mclass_decorator..\u001b[0;34m(method)\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m name\u001b[38;5;241m.\u001b[39mendswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 92\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[0;32m---> 94\u001b[0m \u001b[38;5;28msetattr\u001b[39m(\u001b[38;5;28mcls\u001b[39m, name, \u001b[38;5;28;01mlambda\u001b[39;00m method: \u001b[43mdecorate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselect_date_range\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwsyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m)\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mcls\u001b[39m\n", - "File \u001b[0;32m~/Trading/stockMarket/.venv/lib/python3.11/site-packages/decorator.py:216\u001b[0m, in \u001b[0;36mdecorate\u001b[0;34m(func, caller, extras, kwsyntax)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorate\u001b[39m(func, caller, extras\u001b[38;5;241m=\u001b[39m(), kwsyntax\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 209\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 210\u001b[0m \u001b[38;5;124;03m Decorates a function/generator/coroutine using a caller.\u001b[39;00m\n\u001b[1;32m 211\u001b[0m \u001b[38;5;124;03m If kwsyntax is True calling the decorated functions with keyword\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124;03m does. By default kwsyntax is False and the the arguments are untouched.\u001b[39;00m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m sig \u001b[38;5;241m=\u001b[39m \u001b[43minspect\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msignature\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m iscoroutinefunction(caller):\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfun\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n", - "File \u001b[0;32m/usr/lib/python3.11/inspect.py:3280\u001b[0m, in \u001b[0;36msignature\u001b[0;34m(obj, follow_wrapped, globals, locals, eval_str)\u001b[0m\n\u001b[1;32m 3278\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msignature\u001b[39m(obj, \u001b[38;5;241m*\u001b[39m, follow_wrapped\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, \u001b[38;5;28mglobals\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mlocals\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, eval_str\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 3279\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Get a signature object for the passed callable.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 3280\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mSignature\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_callable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfollow_wrapped\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfollow_wrapped\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3281\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mglobals\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mglobals\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mlocals\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mlocals\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43meval_str\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meval_str\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/lib/python3.11/inspect.py:3028\u001b[0m, in \u001b[0;36mSignature.from_callable\u001b[0;34m(cls, obj, follow_wrapped, globals, locals, eval_str)\u001b[0m\n\u001b[1;32m 3024\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[1;32m 3025\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfrom_callable\u001b[39m(\u001b[38;5;28mcls\u001b[39m, obj, \u001b[38;5;241m*\u001b[39m,\n\u001b[1;32m 3026\u001b[0m follow_wrapped\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, \u001b[38;5;28mglobals\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mlocals\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, eval_str\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 3027\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Constructs Signature for the given callable object.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 3028\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_signature_from_callable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msigcls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3029\u001b[0m \u001b[43m \u001b[49m\u001b[43mfollow_wrapper_chains\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfollow_wrapped\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3030\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mglobals\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mglobals\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mlocals\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mlocals\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43meval_str\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meval_str\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/lib/python3.11/inspect.py:2449\u001b[0m, in \u001b[0;36m_signature_from_callable\u001b[0;34m(obj, follow_wrapper_chains, skip_bound_arg, globals, locals, eval_str, sigcls)\u001b[0m\n\u001b[1;32m 2440\u001b[0m _get_signature_of \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mpartial(_signature_from_callable,\n\u001b[1;32m 2441\u001b[0m follow_wrapper_chains\u001b[38;5;241m=\u001b[39mfollow_wrapper_chains,\n\u001b[1;32m 2442\u001b[0m skip_bound_arg\u001b[38;5;241m=\u001b[39mskip_bound_arg,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2445\u001b[0m sigcls\u001b[38;5;241m=\u001b[39msigcls,\n\u001b[1;32m 2446\u001b[0m eval_str\u001b[38;5;241m=\u001b[39meval_str)\n\u001b[1;32m 2448\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(obj):\n\u001b[0;32m-> 2449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{!r}\u001b[39;00m\u001b[38;5;124m is not a callable object\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat(obj))\n\u001b[1;32m 2451\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, types\u001b[38;5;241m.\u001b[39mMethodType):\n\u001b[1;32m 2452\u001b[0m \u001b[38;5;66;03m# In this case we skip the first parameter of the underlying\u001b[39;00m\n\u001b[1;32m 2453\u001b[0m \u001b[38;5;66;03m# function (usually `self` or `cls`).\u001b[39;00m\n\u001b[1;32m 2454\u001b[0m sig \u001b[38;5;241m=\u001b[39m _get_signature_of(obj\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__func__\u001b[39m)\n", - "\u001b[0;31mTypeError\u001b[0m: is not a callable object" + "name": "stdout", + "output_type": "stream", + "text": [ + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "(, None, None)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n", + "{}\n", + "(,)\n", + "{}\n", + "(,)\n", + "{}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jag/bin/rclone/sync_stockMarket.sh: line 3: rclone: command not found\n" ] } ], diff --git a/stockMarket/technicalAnalysis/strategyAnalysis.py b/stockMarket/technicalAnalysis/strategyAnalysis.py index 63ea9b6d..3d0f543b 100644 --- a/stockMarket/technicalAnalysis/strategyAnalysis.py +++ b/stockMarket/technicalAnalysis/strategyAnalysis.py @@ -72,16 +72,25 @@ def select_end_date(func, *args, **kwargs): end_date = kwargs.get('end_date', None) kwargs['end_date'] = end_date if end_date is not None else self.end_date + print(args) + print(kwargs) + return func(*args, **kwargs) -def select_date_range(func): +def func_decorator(func): + return decorate(func, select_date_range, kwsyntax=True) + + +def select_date_range(func, *args, **kwargs): + print(kwargs) + @select_start_date(kwsyntax=True) @select_end_date(kwsyntax=True) def wrapper(*args, **kwargs): return func(*args, **kwargs) - return wrapper + return wrapper(*args, **kwargs) def class_decorator(cls): @@ -91,8 +100,7 @@ def class_decorator(cls): if name.startswith("__") or name.endswith("__"): continue - setattr(cls, name, lambda method: decorate( - method, select_date_range, kwsyntax=True)) + setattr(cls, name, func_decorator(method)) return cls