Files
Place-Order-Trading-Bot/retracementLevel.ipynb
T

1736 lines
46 KiB
Plaintext
Raw Normal View History

2025-05-27 13:23:26 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Import Libaries"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import mplfinance as mpf\n",
"import keyring as kr\n",
"import MetaTrader5 as mt\n",
"import requests\n",
"import re\n",
"from time import sleep\n",
"import sqlite3 as db\n",
"import matplotlib.pyplot as plt\n",
"import pandas_ta as ta\n",
"\n",
"from scipy.signal import savgol_filter\n",
"from scipy.signal import find_peaks\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Login"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# login to your Trading Account - sign up in the description\n",
"mt.initialize()\n",
" \n",
"login = 10800246\n",
"server = 'VantageInternational-Demo'\n",
"password = kr.get_password(server, str(login))\n",
"\n",
"\n",
"mt.login(login, password, server)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"project = \"trading-\" + server[-4::1]\n",
"project = project.lower()\n",
"project"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Set symbol and volume"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pause_trading = 0\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"symbols = ['XAUUSD']\n",
"\n",
"#'BTCUSD', 'ETHUSD', \n",
" #'XRPUSD', , 'EURNZD', 'EURUSD'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"volume_dict = {\n",
" 'BTCUSD' : 0.1,\n",
" 'BTCUSD_short' : 0.1,\n",
"\n",
" 'ETHUSD' : 1.0,\n",
" 'ETHUSD_short' : 1.0,\n",
" \n",
" 'XRPUSD': 0.1,\n",
" 'XRPUSD_short': 0.1,\n",
"\n",
" 'XAUUSD': 0.1,\n",
" 'XAUUSD_short': 0.1,\n",
"\n",
" 'EURUSD': 0.1,\n",
" 'EURUSD_short': 0.1,\n",
"\n",
" 'EURNZD': 0.1,\n",
" 'EURNZD_short': 0.1,\n",
"\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"periods_dict = {\n",
" 'BTCUSD' : ['h1', 'm30', 'm15', 'm5', 'm1'],\n",
" \n",
" 'ETHUSD' : ['h1', 'm30', 'm15', 'm5', 'm1'],\n",
"\n",
" \n",
" 'XRPUSD': ['h1', 'm30', 'm15', 'm5', 'm1'],\n",
" \n",
" 'XAUUSD': [ 'm15'],\n",
"\n",
" \n",
" 'EURUSD': ['h1', 'm30', 'm15', 'm5', 'm1'],\n",
"\n",
"\n",
" 'EURNZD': ['m5', 'm2', 'm1'],\n",
"\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_symbol():\n",
" global symbols, pause_trading, periods_dict\n",
" pricemovement = {}\n",
"\n",
" for s in symbols:\n",
" items = mt.symbol_info(s)\n",
" pricemovement[s] = round(items.price_change,2)\n",
" #print(s, round(items.price_change,2))\n",
"\n",
" #percentage = pricemovement[max(pricemovement, key=pricemovement.get)]\n",
" #symbol = max(pricemovement, key=pricemovement.get)\n",
" #volume = volume_dict[symbol]\n",
"\n",
" sorted_pricemovement = sorted(pricemovement.items(), key=lambda x:x[1], reverse=True)\n",
" converted_dict = dict(sorted_pricemovement)\n",
"\n",
" print(converted_dict)\n",
"\n",
" percentage = converted_dict[max(converted_dict, key=converted_dict.get)]\n",
" symbol = max(converted_dict, key=converted_dict.get)\n",
" volume = volume_dict[symbol]\n",
"\n",
"\n",
" print(symbol, percentage, volume)\n",
" # if percentage > 0: # and percentage < 0.8:\n",
" # periods_dict[symbol] = ['m15', 'm5', 'm2', 'm1']\n",
" # elif percentage > 0.8:\n",
" # periods_dict[symbol] = ['h1', 'm30', 'm15', 'm5', 'm1']\n",
"\n",
" #\n",
"\n",
" #print(periods_dict)\n",
"\n",
" # if percentage > 0 and mt.positions_total() == 0:\n",
" # pause_trading = 0 #0 no puase\n",
" # return symbol, percentage, volume, periods_dict\n",
" # elif percentage < 0.1 and mt.positions_total() == 0:\n",
" # print(\"aktuell kein neues Symbol, pause Trading\")\n",
" # pause_trading = 1 #1 pause\n",
" # return None\n",
"\n",
" return symbol, percentage, volume, periods_dict"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_symbol()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def set_symbol():\n",
" global symbol, volume, volume_dict\n",
" symb = get_symbol()\n",
" if symb != None:\n",
" symbol = symb[0]\n",
" volume = volume_dict[symb[0]]\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## set volume manuell"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_symbol()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"set_symbol()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pause_trading = 0\n",
"symbol, volume, pause_trading"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"symbol = 'XAUUSD'\n",
"volume = 0.1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Functions to place Orders on Market"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pos = mt.positions_get()\n",
"for i in pos:\n",
" #if i.comment == 'Retracement Bot':\n",
" # print(i.ticket)\n",
"\n",
" if bool(re.search('^BuyStop[0-9]{2}', i.comment)):\n",
" print(i.ticket)\n",
"\n",
"mt.positions_total()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"strategy_name = 'Retracement Bot'\n",
"pos = mt.positions_get()\n",
"for p in pos:\n",
" if p.comment == strategy_name:\n",
" print(p.comment)\n",
"print(pos)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"buypos = ['True', 'False', 'False']\n",
"'True' not in buypos\n",
"\n",
"buypos.count('True')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Market Order Function"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#market_order(symbol, volume_dict[symbol], 'buy')\n",
"request = {\n",
" \"action\": mt.TRADE_ACTION_DEAL,\n",
" \"symbol\": symbol,\n",
" \"volume\": volume, # FLOAT\n",
" \"type\": mt.ORDER_TYPE_BUY,\n",
" \"price\": mt.symbol_info_tick(symbol).ask,\n",
" \"sl\": 0.0, # FLOAT\n",
" \"tp\": 0.0, # FLOAT\n",
" \"deviation\": 20, # INTERGER\n",
" \"magic\": 30, # INTERGER\n",
" \"comment\": 'Retracement Bot',\n",
" \"type_time\": mt.ORDER_TIME_GTC,\n",
" \"type_filling\": mt.ORDER_FILLING_IOC, # mt.ORDER_FILLING_FOK if IOC does not work\n",
" }\n",
"\n",
"order_result = mt.order_send(request)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def market_order(symbol, volume, order_type, deviation=20, magic=30, stoploss=0.0, take_profit=0.0,\n",
" strategy_name='Retracement Bot'):\n",
"\n",
" global project, pause_trading\n",
"\n",
" project_id_dict = {\n",
" 'trading-demo': 'a3f3ae',\n",
" 'trading-live': '747543'\n",
" }\n",
"\n",
" order_type_dict = {\n",
" 'buy': mt.ORDER_TYPE_BUY,\n",
" 'sell': mt.ORDER_TYPE_SELL\n",
" }\n",
"\n",
" price_dict = {\n",
" 'buy': mt.symbol_info_tick(symbol).ask,\n",
" 'sell': mt.symbol_info_tick(symbol).bid\n",
" }\n",
"\n",
" buypos = []\n",
"\n",
" pos = mt.positions_get()\n",
" for p in pos:\n",
" if p.comment == strategy_name:\n",
" buypos.append('true')\n",
" \n",
" activepos = buypos.count('true')\n",
"\n",
" if order_type == 'buy' and activepos == 0 and pause_trading == 0: # and mt.positions_total() == 0:\n",
" \n",
" request = {\n",
" \"action\": mt.TRADE_ACTION_DEAL,\n",
" \"symbol\": symbol,\n",
" \"volume\": volume, # FLOAT\n",
" \"type\": order_type_dict[order_type],\n",
" \"price\": price_dict[order_type],\n",
" \"sl\": stoploss, # FLOAT\n",
" \"tp\": take_profit, # FLOAT\n",
" \"deviation\": deviation, # INTERGER\n",
" \"magic\": magic, # INTERGER\n",
" \"comment\": strategy_name,\n",
" \"type_time\": mt.ORDER_TIME_GTC,\n",
" \"type_filling\": mt.ORDER_FILLING_IOC, # mt.ORDER_FILLING_FOK if IOC does not work\n",
" }\n",
"\n",
" requests.post('https://api.mynotifier.app', {\n",
" \"apiKey\": 'beafb52e-3cb6-477a-92ef-2f10bff50e20',\n",
" \"message\": \"Es wrude ein Handel eröffnet!\",\n",
" \"description\": \"Bitte kontrolliere die Position\",\n",
" \"type\": \"info\",#\"info\", # info, error, warning or success\n",
" \"project\": project_id_dict[project]\n",
" })\n",
"\n",
" order_result = mt.order_send(request)\n",
" #return (order_result)\n",
" \n",
" elif order_type == 'sell' and mt.positions_total() > 0:\n",
" pos = mt.positions_get()\n",
" for p in pos:\n",
" if p.comment == strategy_name:\n",
" # while schleife ?\n",
" positions = mt.positions_get()\n",
" ticket = p.ticket\n",
" request = {\n",
" \"action\": mt.TRADE_ACTION_DEAL,\n",
" \"symbol\": symbol,\n",
" \"volume\": volume, # FLOAT\n",
" \"type\": order_type_dict[order_type],\n",
" \"price\": price_dict[order_type],\n",
" \"position\": ticket,\n",
" \"sl\": stoploss, # FLOAT\n",
" \"tp\": take_profit, # FLOAT\n",
" \"deviation\": deviation, # INTERGER\n",
" \"magic\": magic, # INTERGER\n",
" \"comment\": strategy_name,\n",
" \"type_time\": mt.ORDER_TIME_GTC,\n",
" \"type_filling\": mt.ORDER_FILLING_IOC, # mt.ORDER_FILLING_FOK if IOC does not work\n",
" }\n",
"\n",
" requests.post('https://api.mynotifier.app', {\n",
" \"apiKey\": 'beafb52e-3cb6-477a-92ef-2f10bff50e20',\n",
" \"message\": \"Es wrude ein Handel geschlossen!\",\n",
" \"description\": \"Bitte prüfe die Position\",\n",
" \"type\": \"info\",#\"info\", # info, error, warning or success\n",
" \"project\": project_id_dict[project]\n",
" })\n",
"\n",
" order_result = mt.order_send(request)\n",
" #return (order_result)\n",
"\n",
"\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Retracement - SL TP Function"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_sltp():\n",
" ohlc = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_M5, 0, 50)\n",
" df = pd.DataFrame(ohlc)\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
"\n",
" support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
" resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
" df['resistance'] = resistance\n",
" df['support'] = support\n",
" df.support.fillna(0, inplace=True)\n",
" df.resistance.fillna(0, inplace=True)\n",
" df = df[(df.support != 0) | (df.resistance != 0)]\n",
"\n",
" tp = df.resistance.loc[df['resistance'] != 0]\n",
" tp = round(tp.mean(), 2)\n",
"\n",
" sl = df.support.loc[df['support'] != 0]\n",
" sl = round (sl.mean(), 2)\n",
"\n",
" return tp, sl\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Manuell TPSL"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tpsl = get_sltp()\n",
"tpsl[0] - tpsl[1] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Support Resistance Buy Sell Function"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_supres_signal(period: str):\n",
"\n",
"\n",
" ohlc = mt.copy_rates_from_pos(symbol, timeframes_dict[period], 0, 50)\n",
" df = pd.DataFrame(ohlc)\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
"\n",
" support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
" resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
" df['ma3'] = df['close'].rolling(3).mean()\n",
" df['resistance'] = resistance\n",
" df['support'] = support\n",
" df.support.fillna(0, inplace=True)\n",
" df.resistance.fillna(0, inplace=True)\n",
" df = df[(df.support != 0) | (df.resistance != 0)]\n",
"\n",
" if df.resistance.iloc[-1] != 0:\n",
" signal = 'sell'\n",
" print(f'sell at: {df.resistance.iloc[-1]}')\n",
" elif df.support.iloc[-1] !=0:\n",
" signal = 'buy'\n",
" print(f'buy at: {df.support.iloc[-1]}')\n",
"\n",
" return signal\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_supres_signal('m30')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get SMA Buy Sell Function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Versions 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_sma_signal():\n",
" sma = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_M5, 0, 120)\n",
" df = pd.DataFrame(sma)\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
" df['ma5'] = df['close'].rolling(3).mean()\n",
" df['ma10'] = df['close'].rolling(15).mean()\n",
" df['diff5'] = df['ma5'].diff()\n",
"\n",
" support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
" resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
" df['resistance'] = resistance\n",
" df['support'] = support\n",
" df.support.fillna(0, inplace=True)\n",
" df.resistance.fillna(0, inplace=True)\n",
" df.dropna()\n",
" df = df[['time','open', 'close', 'low', 'ma5', 'ma10', 'diff5', 'resistance', 'support']]\n",
"\n",
" buy = []\n",
" sell = []\n",
"\n",
" for i in range (len(df)):\n",
" if df.ma5.iloc[i] > df.ma10.iloc[i]: #and df.ma5[i-1] < df.ma10.iloc[i-1]:\n",
" buy.append(i)\n",
" elif df.ma5.iloc[i] < df.ma10.iloc[i]: #and df.ma5[i-1] > df.ma10.iloc[i-1]:\n",
" sell.append(i)\n",
"\n",
" buy, sell\n",
"\n",
" df['buy'] = 0\n",
" df['sell'] = 0\n",
"\n",
" for b in buy:\n",
" df.at[b,'buy'] = 1\n",
"\n",
" for s in sell:\n",
" df.at[s,'sell'] = 1\n",
"\n",
" # if df.buy.iloc[-1] == 1:\n",
" # signal = 'buy'\n",
" \n",
" # elif df.sell.iloc[-1] == 1:\n",
" # signal = 'sell'\n",
" # else:\n",
" # signal = 'none'\n",
"\n",
" if df.diff5.tail(12).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" #print('buy', df.diff5.tail(12).sum())\n",
" signal = 'buy'\n",
" else:\n",
" #print('sell')\n",
" signal = 'sell'\n",
" if df.diff5.tail(5).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" #print('buy', df.diff5.tail(5).sum())\n",
" signal = 'buy'\n",
" else:\n",
" #print('sell')\n",
" signal = 'sell'\n",
" if df.diff5.tail(3).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" #print('buy', df.diff5.tail(3).sum())\n",
" signal = 'buy'\n",
" else:\n",
" #print('sell')\n",
" signal = 'sell'\n",
" if df.diff5.tail(2).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" #print('buy', df.diff5.tail(2).sum())\n",
" signal = 'buy'\n",
" else:\n",
" print('sell')\n",
" signal = 'sell'\n",
"\n",
" return signal\n",
"\n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### get SMA manuell"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"signal = get_sma_signal()\n",
"signal"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot SMA Function"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def sma_plot():\n",
" plt.figure(figsize=(12,5))\n",
" plt.plot(df['close'], label='Asset Price', c='blue', alpha=0.5)\n",
" plt.plot(df['ma5'], label='MA5', c='r', alpha=0.9)\n",
" plt.plot(df['ma10'], label='MA10', c='y', alpha=0.9)\n",
" plt.scatter(df[df.buy == 1].index, df[df.buy == 1]['close'], marker='^', color='g', s=100)\n",
" plt.scatter(df[df.sell == 1].index, df[df.sell == 1]['close'], marker='v', color='r', s=100)\n",
" plt.legend()\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sma_plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Version 2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sma = mt.copy_rates_from_pos(symbol,mt.TIMEFRAME_M1, 0, 60)\n",
"df = pd.DataFrame(sma)\n",
"#df = df[:-1]\n",
"# Identify rows with out of bounds datetime values using errors='coerce'\n",
"#nvalid_dates = df[pd.to_datetime(df['time'], errors='coerce')]\n",
"# print(invalid_dates)\n",
"df['time'] = pd.to_datetime(df['time'], unit='s')\n",
"#df = df.head(58)\n",
"#df['time']=pd.to_datetime(df['time'], unit='s')\n",
"df.tail()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_sma(period: str):\n",
"\n",
" global timeframes_dict\n",
" sma = mt.copy_rates_from_pos(symbol,timeframes_dict[period] , 0, 120)\n",
" df = pd.DataFrame(sma)\n",
" #df = df[:-1]\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
" df['ma5'] = df['close'].rolling(3).mean()\n",
" df['ma10'] = df['close'].rolling(15).mean()\n",
" df['diff5'] = df['ma5'].diff()\n",
" df['diff10'] = df['ma10'].diff()\n",
" df['ema'] = df['close'].ewm(span=14, adjust=False).mean()\n",
"\n",
"\n",
" # support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
" # resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
" # df['resistance'] = resistance\n",
" # df['support'] = support\n",
" # df.support.fillna(0, inplace=True)\n",
" # df.resistance.fillna(0, inplace=True)\n",
" # df.dropna()\n",
" df = df[['time','open', 'close', 'low', 'ma5', 'ma10', 'ema','diff5', 'diff10']]\n",
" # 'resistance', 'support'\n",
"\n",
" buy = []\n",
" sell = []\n",
"\n",
" for i in range (len(df)):\n",
" if df.ma5.iloc[i] > df.ema.iloc[i]: #and df.ma5[i-1] < df.ema.iloc[i-1]:\n",
" buy.append(i)\n",
" elif df.ma5.iloc[i] < df.ema.iloc[i]: #and df.ma5[i-1] > df.ma10.iloc[i-1]:\n",
" sell.append(i)\n",
"\n",
" buy, sell\n",
"\n",
" df['buy'] = 0\n",
" df['sell'] = 0\n",
"\n",
" for b in buy:\n",
" df.at[b,'buy'] = 1\n",
"\n",
" for s in sell:\n",
" df.at[s,'sell'] = 1\n",
"\n",
"\n",
" #df = df.head(26)\n",
" return df\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_sma('m15')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Daily Movement"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_daily = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_D1, 0, 30)\n",
"df_days = pd.DataFrame(df_daily)\n",
"df_days['time'] = pd.to_datetime(df_days['time'], unit='s')\n",
"round(df_days.close.iloc[-1] / df_days.open.iloc[-1],2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"periods_dict[symbol]\n",
"get_sma('m15')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Decide Order Function"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"periods_dict[symbol]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def decide_order():\n",
"\n",
" global symbol, volume_dict, periods_dict\n",
" \n",
"\n",
" ## SMA Version 2\n",
" tsignals = periods_dict[symbol]\n",
" signals = []\n",
"\n",
" for ts in tsignals:\n",
" sma_signals = get_sma(ts)\n",
"\n",
" supress_signal = get_supres_signal(ts)\n",
" print(f\"surpress Signal: {supress_signal}\")\n",
" signals.append(supress_signal)\n",
" \n",
" if sma_signals.buy.iloc[-1] == 1: #sma_signals.diff5.tail(2).sum() > 0: \n",
" print(ts, 'buy', sma_signals.diff5.tail(2).sum(), sma_signals.diff10.tail(2).sum())\n",
" signals.append('buy')\n",
" else:\n",
" print(ts, 'sell', sma_signals.diff5.tail(2).sum(), sma_signals.diff10.tail(2).sum())\n",
" signals.append('sell')\n",
"\n",
" \n",
"\n",
" cbuy = signals.count('buy')\n",
" csell = signals.count('sell')\n",
" print(f\"Buy: {cbuy} | Sell: {csell}\")\n",
"\n",
" if cbuy > csell:\n",
" signal = 'buy'\n",
" print(signal)\n",
" else:\n",
" signal = 'sell'\n",
" print(signal)\n",
"\n",
"\n",
"\n",
" if signal == 'buy':\n",
" market_order(symbol, volume_dict[symbol], \"buy\") #, stoploss=sl, take_profit=tp)\n",
" #print(\"buy at {} am {} \".format(df.support.iloc[-1], df.time.iloc[-1]))\n",
" elif signal == 'sell':\n",
" market_order(symbol, volume_dict[symbol], \"sell\")\n",
" # print(\"sell at {} am {}\".format(df.resistance.iloc[-1], df.time.iloc[-1]))\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"symbol"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"market_order(symbol, 0.1, \"buy\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Manuelle Ausführung"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"decide_order()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#if df['support'].iloc[-1] != 0:\n",
"#market_order(symbol, volume, \"buy\")\n",
"# print(\"buy at {} am {} \".format(df['support'].iloc[-1], df['time'].iloc[-1]))\n",
"# elif df['resistance'].iloc[-1] != 0:\n",
"#market_order(symbol, volume, \"sell\")\n",
"# print(\"sell at {} am {}\".format(df['resistance'].iloc[-1], df['time'].iloc[-1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pause Trading"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pause_trading"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pause_trading = 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Trend Detection"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"trend_dict = {\n",
" 'm5': '',\n",
" 'm15': '',\n",
" #'m30': '',\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"timeframes_dict = {\n",
" 'm1': mt.TIMEFRAME_M1,\n",
" 'm2': mt.TIMEFRAME_M2,\n",
" 'm3': mt.TIMEFRAME_M3,\n",
" 'm5': mt.TIMEFRAME_M5,\n",
" 'm15': mt.TIMEFRAME_M15,\n",
" 'm20': mt.TIMEFRAME_M20,\n",
" 'm30': mt.TIMEFRAME_M30,\n",
" 'h1': mt.TIMEFRAME_H1,\n",
"}\n",
"\n",
"\n",
"# timeframes = {\n",
"# 'm1': mt.TIMEFRAME_M1,\n",
"# 'm2': mt.TIMEFRAME_M2,\n",
"# 'm3': mt.TIMEFRAME_M3,\n",
"# 'm5': mt.TIMEFRAME_M5,\n",
"# 'm15': mt.TIMEFRAME_M15,\n",
"# 'm20': mt.TIMEFRAME_M20,\n",
"# 'm30': mt.TIMEFRAME_M30,\n",
"# 'h1': mt.TIMEFRAME_H1,\n",
"# }"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(trend_dict)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_rates(periode):\n",
"\n",
" global symbol\n",
"\n",
" ohlc = mt.copy_rates_from_pos(symbol, timeframes_dict[periode], 0, 200)\n",
" df = pd.DataFrame(ohlc)\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
"\n",
" #df = df[[\"time\",\"open\",\"high\",\"low\",\"close\"]]\n",
"\n",
" df[\"open\"] = df.open.astype(float)\n",
" df[\"high\"] = df.high.astype(float)\n",
" df[\"low\"] = df.low.astype(float)\n",
" df[\"close\"] = df.close.astype(float)\n",
"\n",
" ## Take the rolling atr so the yaxis doesn't shake too much \n",
" df[\"atr\"] = ta.atr(high=df.high, low=df.low, close=df.close)\n",
" df[\"atr\"] = df.atr.rolling(window=30).mean()\n",
"\n",
"\n",
" df.set_index(\"time\", inplace = True)\n",
"\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_trend(period):\n",
"\n",
" global trend_dict, periods_dict, symbol\n",
"\n",
" #current_periods = periods_dict[symbol][0]\n",
"\n",
" df2 = get_rates(period)\n",
"\n",
" df2[\"close_smooth\"] = savgol_filter(df2.close, 49, 5)\n",
"\n",
" fig, ax = plt.subplots()\n",
" plt.xticks(rotation=-30)\n",
" price, = ax.plot(df2.index, df2.close, c='grey', lw=2, alpha=0.5, zorder=5)\n",
" price_smooth, = ax.plot(df2.index, df2.close_smooth, c='b', lw=2, zorder=5)\n",
"\n",
" atr = df2.atr.iloc[-1] # all the first atrs are NaN\n",
"\n",
" peaks_idx, _ = find_peaks(df2.close_smooth, distance = 15, \n",
" width = 3, prominence=atr)\n",
"\n",
" troughs_idx, _ = find_peaks(-1*df2.close_smooth, distance = 15, \n",
" width = 3, prominence=atr)\n",
"\n",
" peaks, = ax.plot(df2.index[peaks_idx], df2.close_smooth.iloc[peaks_idx], \\\n",
" c=\"r\", linestyle='None', markersize = 10.0, marker = \"o\", zorder=10)\n",
"\n",
" troughs, = ax.plot(df2.index[troughs_idx], df2.close_smooth.iloc[troughs_idx], \\\n",
" c=\"g\", linestyle='None', markersize = 10.0, marker = \"o\", zorder=10)\n",
"\n",
" plt.show()\n",
"\n",
" #print(peaks_idx[-1], troughs_idx[-1])\n",
"\n",
" if peaks_idx[-1] > troughs_idx[-1]:\n",
" print(\"downtrend\")\n",
"\n",
" trend_dict[period] = 'downtrend'\n",
" else:\n",
" print(\"uptrend\")\n",
"\n",
" trend_dict[period] = 'uptrend'\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def set_trend():\n",
"\n",
" global pause_trading, periods_dict, trend_dict\n",
"\n",
" for k,v in trend_dict.items():\n",
" get_trend(k) \n",
" print(k)\n",
" \n",
" for k,v in reversed(trend_dict.items()):\n",
"\n",
" if v == 'uptrend':\n",
" print(k,v)\n",
" periods_dict[symbol] = [k]\n",
" pause_trading = 0\n",
" break\n",
" elif v == 'downtrend':\n",
" periods_dict[symbol] = [k] #['m15']\n",
" pause_trading = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set Trend manually"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pause_trading, trend_dict, periods_dict"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"set_trend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"trend_dict"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"periods_dict[symbol], pause_trading"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Job-Scheduler\n",
"\n",
"[Doku Appscheduler Cronjob](https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html#id0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from apscheduler.schedulers.background import BackgroundScheduler\n",
"import time\n",
"\n",
"\n",
"scheduler = BackgroundScheduler()\n",
"#scheduler.add_job(main, 'date', run_date='2025-03-07 14:29:50')\n",
"\n",
"#scheduler.add_job(decide_order, 'interval', minutes=1) #intervall\n",
"scheduler.add_job(set_symbol, 'interval', minutes=30)\n",
"scheduler.add_job(set_trend, 'interval', minutes=1)\n",
"\n",
"scheduler.add_job(decide_order, 'cron', year=\"*\", month=\"*\", day_of_week=\"mon, tue, wed, thu, fri\", hour='0-23', minute='*') #cron\n",
"\n",
"#scheduler.add_job(export_marketview, 'cron', year=\"*\", month='*', day_of_week='mon, tue, wed; thu, fri', hour='8-22', minute=00)\n",
"\n",
"#scheduler.add_job(pause_trading, 'cron', year=\"*\", month=\"*\", day_of_week=\"mon, tue, wed, thu, fri\", hour=22, minute=00) #cron\n",
"scheduler.start()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Get Jobs"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scheduler.get_jobs()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Remove all Jobs"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scheduler.remove_all_jobs()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Shutdown AppScheduler"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scheduler.shutdown()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Development Stuff"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SMA 5 and 10"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_sma_dev(period: str):\n",
"\n",
" timeframes = {\n",
" 'm1': mt.TIMEFRAME_M1,\n",
" 'm2': mt.TIMEFRAME_M2,\n",
" 'm3': mt.TIMEFRAME_M3,\n",
" 'm5': mt.TIMEFRAME_M5,\n",
" 'm15': mt.TIMEFRAME_M15,\n",
" 'm20': mt.TIMEFRAME_M20,\n",
" 'm30': mt.TIMEFRAME_M30\n",
" }\n",
"\n",
"\n",
" sma = mt.copy_rates_from_pos(symbol,timeframes[period] , 0, 120)\n",
" df = pd.DataFrame(sma)\n",
" df['time']=pd.to_datetime(df['time'], unit='s')\n",
" df['ma5'] = df['close'].rolling(3).mean()\n",
" df['ma10'] = df['close'].rolling(15).mean()\n",
" df['diffclose'] = df['close'].diff()\n",
" df['diff5'] = df['ma5'].diff()\n",
" df['diff10'] = df['ma10'].diff()\n",
" df['ema'] = df['close'].ewm(span=14, adjust=False).mean()\n",
"\n",
"\n",
" support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
" resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
" df['resistance'] = resistance\n",
" df['support'] = support\n",
" df.support.fillna(0, inplace=True)\n",
" df.resistance.fillna(0, inplace=True)\n",
" df.dropna()\n",
" df = df[['time','open', 'close', 'low', 'ma5', 'ma10', 'diffclose','diff5', 'diff10', 'ema', 'resistance', 'support']]\n",
"\n",
" buy = []\n",
" sell = []\n",
"\n",
" for i in range (len(df)):\n",
" if df.ma5.iloc[i] > df.ema.iloc[i]: #and df.ma5[i-1] < df.ma10.iloc[i-1]:\n",
" buy.append(i)\n",
" elif df.ma5.iloc[i] < df.ema.iloc[i]: #and df.ma5[i-1] > df.ma10.iloc[i-1]:\n",
" sell.append(i)\n",
"\n",
" buy, sell\n",
"\n",
" df['buy'] = 0\n",
" df['sell'] = 0\n",
"\n",
" for b in buy:\n",
" df.at[b,'buy'] = 1\n",
"\n",
" for s in sell:\n",
" df.at[s,'sell'] = 1\n",
"\n",
"\n",
" #df = df.head(26)\n",
" return df\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sma = get_sma_dev('m15')\n",
"sma.tail(50)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"periods_dict['XAUUSD']\n",
"sma.close.tail(10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tsignals = ['m30', 'm15', 'm5', 'm1']\n",
"signals = []\n",
"\n",
"for ts in tsignals:\n",
" sma_signals = get_sma(ts)\n",
" if sma_signals.diff5.tail(2).sum() > 0: # and sma_signals.buy.iloc[-1] == 1:\n",
" print(ts, 'buy', sma_signals.diff5.tail(2).sum(), sma_signals.diff10.tail(2).sum())\n",
" signals.append('buy')\n",
" else:\n",
" print(ts, 'sell', sma_signals.diff5.tail(2).sum(), sma_signals.diff10.tail(2).sum())\n",
" signals.append('sell')\n",
"\n",
"cbuy = signals.count('buy')\n",
"csell = signals.count('sell')\n",
"\n",
"if cbuy > csell:\n",
" signal = 'buy'\n",
" print(cbuy)\n",
"\n",
"else:\n",
" signal = 'sell'\n",
" print(csell)\n",
"\n",
"\n",
"signal\n",
"# sma_signals = get_sma('m15')\n",
"# df = sma_signals"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if df.diff5.tail(12).sum() > 0 and df.diff10.tail(12).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" print('buy', df.diff5.tail(12).sum(), df.diff10.tail(12).sum())\n",
"else:\n",
" print('sell', df.diff5.tail(12).sum(), df.diff10.tail(12).sum())\n",
"if df.diff5.tail(6).sum() > 0 and df.diff10.tail(6).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" print('buy', df.diff5.tail(6).sum(), df.diff10.tail(6).sum())\n",
"else:\n",
" print('sell', df.diff5.tail(6).sum(), df.diff10.tail(6).sum())\n",
"if df.diff5.tail(3).sum() > 0 and df.diff10.tail(3).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" print('buy', df.diff5.tail(3).sum(), df.diff10.tail(3).sum())\n",
"else:\n",
" print('sell', df.diff5.tail(3).sum(), df.diff10.tail(3).sum())\n",
"if df.diff5.tail(2).sum() > 0 and df.diff10.tail(2).sum() > 0 and df.buy.iloc[-1] == 1:\n",
" print('buy', df.diff5.tail(2).sum(), df.diff10.tail(2).sum())\n",
"else:\n",
" print('sell', df.diff5.tail(2).sum(), df.diff10.tail(2).sum())\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df = sma\n",
"plt.figure(figsize=(12,5))\n",
"plt.plot(df['close'], label='Asset Price', c='blue', alpha=0.5)\n",
"plt.plot(df['ma5'], label='MA5', c='r', alpha=0.9)\n",
"plt.plot(df['ma10'], label='MA10', c='y', alpha=0.9)\n",
"plt.plot(df['ema'], label='EMA', c='green', alpha=0.9)\n",
"plt.scatter(df[df.buy == 1].index, df[df.buy == 1]['close'], marker='^', color='g', s=100)\n",
"plt.scatter(df[df.sell == 1].index, df[df.sell == 1]['close'], marker='v', color='r', s=100)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"close_diff = df.close.loc[df['close'] != 0]\n",
"close_diff.diff().max(), close_diff.diff().min()\n",
"close_diff.diff()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### get Signal from SMA"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if df.buy.iloc[-1] == 1:\n",
" signal = 'buy'\n",
"elif df.sell.iloc[-1] == 1:\n",
" signal = 'sell'\n",
"else:\n",
" signal = 'none'\n",
"\n",
"signal"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Support Resistance Timeframe"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ohlc = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_M15, 0, 120)\n",
"df = pd.DataFrame(ohlc)\n",
"df['time']=pd.to_datetime(df['time'], unit='s')\n",
"\n",
"support = df[df.low == df.low.rolling(5, center=True).min()].low\n",
"resistance = df[df.high == df.high.rolling(5, center=True).max()].high\n",
"df['ma3'] = df['close'].rolling(3).mean()\n",
"df['resistance'] = resistance\n",
"df['support'] = support\n",
"df.support.fillna(0, inplace=True)\n",
"df.resistance.fillna(0, inplace=True)\n",
"df = df[(df.support != 0) | (df.resistance != 0)]\n",
"df\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if df.resistance.iloc[-1] != 0:\n",
" signal = 'sell'\n",
" print(f'sell at: {df.resistance.iloc[-1]}')\n",
"elif df.support.iloc[-1] !=0:\n",
" signal = 'buy'\n",
" print(f'buy at: {df.support.iloc[-1]}')\n",
"else:\n",
" signal = 'none'\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### plot resistance"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(12,5))\n",
"plt.plot(df['close'], label='Asset Price', c='blue', alpha=0.5)\n",
"plt.plot(df['ma3'], label='MA3', c='r', alpha=0.9)\n",
"#plt.plot(df['ma10'], label='MA10', c='y', alpha=0.9)\n",
"plt.scatter(df[df.support != 0].index, df[df.support != 0]['close'], marker='^', color='g', s=100)\n",
"plt.scatter(df[df.resistance != 0].index, df[df.resistance != 0]['close'], marker='v', color='r', s=100)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tp = df.resistance.loc[df['resistance'] != 0]\n",
"tp = tp.mean()\n",
"\n",
"sl = df.support.loc[df['support'] != 0]\n",
"sl = sl.mean()\n",
"\n",
"round(tp), (sl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get Trend from resistance"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# trend\n",
"r = df.resistance.loc[df['resistance'] != 0]\n",
"rlen = len(list(r)) -1\n",
"rlast_value = list(r)[rlen]\n",
"rfirst_value = list(r)[0]\n",
"\n",
"s = df.support.loc[df['support'] != 0]\n",
"slen = len(list(s)) -1\n",
"slast_value = list(s)[slen]\n",
"sfirst_value = list(s)[0]\n",
"\n",
"\n",
"if rfirst_value > rlast_value and sfirst_value > slast_value:\n",
" print('Down Trend')\n",
" trend = 'down'\n",
"else:\n",
" print('Up Trend')\n",
" trend = 'up'\n",
"\n",
"abs(rfirst_value - rlast_value)\n",
"abs(sfirst_value - slast_value)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#take profit\n",
"\n",
"levels = pd.concat([support, resistance])\n",
"lmax = levels.diff().max()\n",
"lmin = levels.diff().min()\n",
"tp = round((lmax + lmin)/ 2,2)\n",
"if tp < 1:\n",
" tp = 1\n",
"\n",
"sl = tp\n",
"\n",
"tp, sl"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"levels = pd.concat([support, resistance])\n",
"lmax = levels.diff().max()\n",
"lmin = levels.diff().min()\n",
"tp = round((lmax + lmin)/ 2,2)\n",
"sl = tp\n",
"\n",
"tp, sl"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"lv_max = resistance\n",
"lv_max.diff()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"diff_r = df.resistance.loc[df['resistance'] != 0]\n",
"diff_r.diff().mean()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"last_resistance = df.resistance.loc[df['resistance'] != 0]\n",
"llr = len(list(last_resistance)) - 1\n",
"llr_value = list(last_resistance)[llr]\n",
"\n",
"last_support = df.support.loc[df['support'] != 0]\n",
"lls = len(list(last_support)) - 1\n",
"lls_value = list(last_support)[lls]\n",
"\n",
"tp = round(llr_value - lls_value)\n",
"tp"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if df.support.iloc[-1] != 0:\n",
" print(df.support.iloc[-1], \"Buy\")\n",
"elif df.resistance.iloc[-1] != 0:\n",
" print(df.resistance.iloc[-1], \"Sell\")\n",
" # Minuszahen sollen sich alle auf die letzte Nummer -1 beziehen, das ist nur ein Beispiel, abhängig vom Datensatz\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"support = df.loc[df['support'] != 0]\n",
"resistance = df.loc[df['resistance'] != 0]\n",
"levels = pd.concat([support, resistance])\n",
"#lv_max = levels.diff().max()\n",
"#lv_min = abs(levels.diff().min())\n",
"levels.diff()\n",
"#levels = levels[abs(levels.diff()) > 4]\n",
"#levels\n",
"#print(lv_max - lv_min)\n",
"#levels"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mpf.plot(df, type='candle', style='charles')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.close.plot()\n",
"df.high.plot()\n",
"df.low.plot()\n",
"plt.hlines(df, xmin=df.support, xmax=df.resistance,\n",
" colors='red')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}