{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "aac579d6", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import datetime\n", "import numpy as np\n", "\n", "import CoreTraidMath \n", "import CoreDraw\n", "from tqdm import tqdm\n", "\n", "from indicators import *" ] }, { "cell_type": "code", "execution_count": 2, "id": "1d9b7d08", "metadata": {}, "outputs": [ { "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", "
dateopenclosehighlow
02020-09-01 03:00:00+03:001.193701.193881.193911.19368
12020-09-01 03:00:05+03:001.193871.193881.193911.19383
22020-09-01 03:00:10+03:001.193871.193841.193891.19382
32020-09-01 03:00:15+03:001.193841.193841.193861.19382
42020-09-01 03:00:20+03:001.193871.193901.193911.19383
..................
999952020-09-06 21:52:55+03:001.183821.183821.183931.18371
999962020-09-06 21:53:00+03:001.183821.183821.183931.18371
999972020-09-06 21:53:05+03:001.183821.183821.183931.18371
999982020-09-06 21:53:10+03:001.183821.183821.183931.18371
999992020-09-06 21:53:15+03:001.183821.183821.183931.18371
\n", "

100000 rows × 5 columns

\n", "
" ], "text/plain": [ " date open close high low\n", "0 2020-09-01 03:00:00+03:00 1.19370 1.19388 1.19391 1.19368\n", "1 2020-09-01 03:00:05+03:00 1.19387 1.19388 1.19391 1.19383\n", "2 2020-09-01 03:00:10+03:00 1.19387 1.19384 1.19389 1.19382\n", "3 2020-09-01 03:00:15+03:00 1.19384 1.19384 1.19386 1.19382\n", "4 2020-09-01 03:00:20+03:00 1.19387 1.19390 1.19391 1.19383\n", "... ... ... ... ... ...\n", "99995 2020-09-06 21:52:55+03:00 1.18382 1.18382 1.18393 1.18371\n", "99996 2020-09-06 21:53:00+03:00 1.18382 1.18382 1.18393 1.18371\n", "99997 2020-09-06 21:53:05+03:00 1.18382 1.18382 1.18393 1.18371\n", "99998 2020-09-06 21:53:10+03:00 1.18382 1.18382 1.18393 1.18371\n", "99999 2020-09-06 21:53:15+03:00 1.18382 1.18382 1.18393 1.18371\n", "\n", "[100000 rows x 5 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_candle = pd.read_csv(\"../data/EURUSD_price_candlestick.csv\")\n", "df_candle.rename(columns={'timestamp': 'date'}, inplace=True)\n", "df_candle" ] }, { "cell_type": "code", "execution_count": 3, "id": "eb2d0c89", "metadata": {}, "outputs": [], "source": [ "class coreSignalTrande():\n", " def __init__(self,\n", " data=pd.DataFrame(),\n", " dataType='candel',\n", " mode='online',\n", " batchSize=None,\n", " indParams=None,\n", " signalParams=None,\n", " #needFig=False,\n", " #showOnlyIndex=False,\n", " #drawFig=False,\n", " #equalityGap=0\n", " ):\n", " \n", " self.data=data.reset_index(drop=True)\n", " self.onlineData=data.reset_index(drop=True)\n", " self.dataType=dataType\n", " self.mode=mode\n", " self.ans=None\n", " self.softAnalizList=np.asarray([])\n", " self.hardAnalizList=np.asarray([])\n", " self.analizMetrics={}\n", " self.indParams=indParams\n", " self.signalParams=signalParams\n", " self.batchSize=batchSize\n", " #self.needFig=needFig\n", " #self.showOnlyIndex=showOnlyIndex\n", " #self.drawFig=drawFig\n", " #self.equalityGap=equalityGap\n", " #Роутер получения ответа\n", " def getAns(self,data):\n", " #ans='Error: unknown Mode!'\n", " ans=None\n", " print(\"Start processing...\")\n", " if self.mode == 'online':\n", " ans=self.getOnlineAns(data.reset_index(drop=True))\n", " elif self.mode == 'retro':\n", " ans=self.getRetroAns(data)\n", " elif self.mode == 'retroFast':\n", " ans=self.getRetroFastAns(data)\n", " print(\"Processing DONE!\")\n", " return ans\n", " #Ретро режим, где расширяется окно добавлением новых элементов\n", " def getRetroAns(self,data):\n", " ans=np.asarray([])\n", " for i in tqdm(range(self.batchSize,len(data)-1)):\n", " #self.onlineData=self.data[0:i]\n", " window_data = data[0:i]\n", " window_data.reset_index(drop=True)\n", " ans=np.append(ans,(self.getOnlineAns(window_data)))\n", " self.ans=ans\n", " self.getAnaliz()\n", " self.getMetrix()\n", " return ans\n", " #Ретро режим, где двигается окно\n", " def getRetroFastAns(self,data):\n", " #print('d - ',data)\n", " ans=np.asarray([])\n", " for i in tqdm(range(len(data)-1-self.batchSize)):\n", " #self.onlineData=self.data[i:i+self.batchSize]\n", " window_data = data[i:i+self.batchSize]\n", " #print('win - ',window_data)\n", " window_data.reset_index(drop=True)\n", " #print('win - ',window_data)\n", " ans=np.append(ans,(self.getOnlineAns(window_data)))\n", " self.ans=ans\n", " self.getAnaliz()\n", " self.getMetrix()\n", " return ans\n", " #Метод, который будет переопределять каждый дочерний класс\n", " def getOnlineAns(self):\n", " return 'Error'\n", " def getAnaliz(self):\n", " print(\"Start analiz...\")\n", " for i in (range(len(self.ans))):\n", " sourceValue=self.data[self.signalParams['source']][i+self.batchSize]\n", " targetValue=self.data[self.signalParams['target']][i+self.batchSize + 1]\n", " if (targetValue)>sourceValue:\n", " if self.ans[i]==1:\n", " self.softAnalizList=np.append(self.softAnalizList,1)\n", " self.hardAnalizList=np.append(self.hardAnalizList,1)\n", " elif self.ans[i]==-1:\n", " self.softAnalizList=np.append(self.softAnalizList,-1)\n", " self.hardAnalizList=np.append(self.hardAnalizList,-1)\n", " else:\n", " self.softAnalizList=np.append(self.softAnalizList,0)\n", " self.hardAnalizList=np.append(self.hardAnalizList,-1)\n", " \n", " elif (targetValue)self.BB.ans['pSTD'][-1]:\n", " ans=-1\n", " elif lastValue, 'indParams': {'MeanType': 'SMA', 'window': 15, 'valueType': 'close', 'kDev': 2.5}, 'signalParams': {'source': 'close', 'target': 'close'}, 'batchSize': 15}, {'className': , 'indParams': {'MeanType': 'SMA', 'window': 15, 'valueType': 'close', 'kDev': 2.5}, 'signalParams': {'source': 'close', 'target': 'close'}, 'batchSize': 20}])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reqSig.values()" ] }, { "cell_type": "code", "execution_count": 12, "id": "b30ecea9", "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'signalAgrigator' object has no attribute 'mode'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[12], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m testh\u001b[38;5;241m=\u001b[39m\u001b[43msignalAgrigator\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf_candle\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m99999\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43mreqSig\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43monline\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mohcl\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m)\u001b[49m\n", "Cell \u001b[0;32mIn[9], line 20\u001b[0m, in \u001b[0;36msignalAgrigator.__init__\u001b[0;34m(self, data, dictAgrigSignal, mode, dataType, batchSize)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 14\u001b[0m data\u001b[38;5;241m=\u001b[39mpd\u001b[38;5;241m.\u001b[39mDataFrame(),\n\u001b[1;32m 15\u001b[0m dictAgrigSignal\u001b[38;5;241m=\u001b[39m{},\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 18\u001b[0m batchSize\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 19\u001b[0m ):\n\u001b[0;32m---> 20\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreateSingnalInstances\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 21\u001b[0m \u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 22\u001b[0m \u001b[43m \u001b[49m\u001b[43mdictAgrigSignal\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 23\u001b[0m \u001b[43m \u001b[49m\u001b[43mdataType\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 24\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatchSize\u001b[49m\n\u001b[1;32m 25\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmode\u001b[38;5;241m=\u001b[39mmode\n", "Cell \u001b[0;32mIn[9], line 47\u001b[0m, in \u001b[0;36msignalAgrigator.createSingnalInstances\u001b[0;34m(self, data, dictAgrigSignal, dataType, batchSize)\u001b[0m\n\u001b[1;32m 38\u001b[0m ans\u001b[38;5;241m=\u001b[39m{}\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m dictAgrigSignal:\n\u001b[1;32m 41\u001b[0m ans[i]\u001b[38;5;241m=\u001b[39mdictAgrigSignal[i][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mclassName\u001b[39m\u001b[38;5;124m'\u001b[39m](\n\u001b[1;32m 42\u001b[0m data\u001b[38;5;241m=\u001b[39mdata,\n\u001b[1;32m 43\u001b[0m dataType\u001b[38;5;241m=\u001b[39mdataType,\n\u001b[1;32m 44\u001b[0m batchSize\u001b[38;5;241m=\u001b[39mbatchSize,\n\u001b[1;32m 45\u001b[0m indParams\u001b[38;5;241m=\u001b[39mdictAgrigSignal[i][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindParams\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 46\u001b[0m signalParams\u001b[38;5;241m=\u001b[39mdictAgrigSignal[i][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msignalParams\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[0;32m---> 47\u001b[0m mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\n\u001b[1;32m 48\u001b[0m )\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msignalsInstances \u001b[38;5;241m=\u001b[39m ans\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ans\n", "\u001b[0;31mAttributeError\u001b[0m: 'signalAgrigator' object has no attribute 'mode'" ] } ], "source": [ "testh=signalAgrigator(df_candle[:99999],reqSig,'online','ohcl',30)" ] }, { "cell_type": "code", "execution_count": 13, "id": "f4e6dc8b", "metadata": { "scrolled": true }, "outputs": [ { "ename": "NameError", "evalue": "name 'testh' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtesth\u001b[49m\u001b[38;5;241m.\u001b[39msignalsInstances[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBB1\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\n", "\u001b[0;31mNameError\u001b[0m: name 'testh' is not defined" ] } ], "source": [ "testh.signalsInstances['BB1'].__dict__" ] }, { "cell_type": "code", "execution_count": null, "id": "e53e2364", "metadata": {}, "outputs": [], "source": [ "testh.getAns(df_candle[:100])" ] }, { "cell_type": "code", "execution_count": null, "id": "3810de22", "metadata": { "scrolled": true }, "outputs": [], "source": [ "testh.signalsInstances['BB1'].__dict__\n" ] }, { "cell_type": "code", "execution_count": null, "id": "aa0c678c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5a3cf047", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" } }, "nbformat": 4, "nbformat_minor": 5 }