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

2380 lines
73 KiB
Plaintext
Raw Normal View History

2025-04-25 15:27:30 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Setup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import Libaries"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 1,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import MetaTrader5 as mt\n",
"import time\n",
2025-05-27 13:23:26 +02:00
"import re\n",
"import keyring as kr"
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Login"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 2,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"False"
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
2025-04-25 15:27:30 +02:00
"source": [
"# login to your Trading Account - sign up in the description\n",
"mt.initialize()\n",
" \n",
"login = 10730196\n",
"server = 'VantageInternational-Demo'\n",
2025-05-27 13:23:26 +02:00
"password = kr.get_password(server, str(login))\n",
"\n",
2025-04-25 15:27:30 +02:00
"\n",
"mt.login(login, password, server)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set Symbol"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 3,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"symbol = 'XAUUSD'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get Alltimehigh "
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 6,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>time</th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>tick_volume</th>\n",
" <th>spread</th>\n",
" <th>real_volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2025-02-21</td>\n",
" <td>2938.70</td>\n",
" <td>2949.74</td>\n",
" <td>2916.75</td>\n",
" <td>2935.95</td>\n",
" <td>159274</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>1</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-02-24</td>\n",
" <td>2935.19</td>\n",
" <td>2956.22</td>\n",
" <td>2921.30</td>\n",
" <td>2952.46</td>\n",
" <td>171870</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>2</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-02-25</td>\n",
" <td>2952.42</td>\n",
" <td>2953.75</td>\n",
" <td>2888.18</td>\n",
" <td>2914.93</td>\n",
" <td>198402</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>3</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-02-26</td>\n",
" <td>2915.06</td>\n",
" <td>2930.16</td>\n",
" <td>2890.77</td>\n",
" <td>2916.36</td>\n",
" <td>158179</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>4</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-02-27</td>\n",
" <td>2916.73</td>\n",
" <td>2920.82</td>\n",
" <td>2867.77</td>\n",
" <td>2877.15</td>\n",
" <td>207221</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>5</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-02-28</td>\n",
" <td>2877.31</td>\n",
" <td>2885.07</td>\n",
" <td>2832.62</td>\n",
" <td>2859.03</td>\n",
" <td>224045</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>6</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-03</td>\n",
" <td>2856.18</td>\n",
" <td>2895.21</td>\n",
" <td>2855.57</td>\n",
" <td>2893.66</td>\n",
" <td>205740</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>7</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-04</td>\n",
" <td>2892.77</td>\n",
" <td>2927.81</td>\n",
" <td>2881.92</td>\n",
" <td>2917.65</td>\n",
" <td>214258</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>8</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-05</td>\n",
" <td>2917.84</td>\n",
" <td>2929.88</td>\n",
" <td>2894.34</td>\n",
" <td>2919.11</td>\n",
" <td>231043</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>9</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-06</td>\n",
" <td>2919.52</td>\n",
" <td>2926.51</td>\n",
" <td>2891.20</td>\n",
" <td>2911.01</td>\n",
" <td>219058</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>10</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-07</td>\n",
" <td>2911.39</td>\n",
" <td>2930.42</td>\n",
" <td>2896.78</td>\n",
" <td>2912.06</td>\n",
" <td>225312</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>11</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-10</td>\n",
" <td>2911.25</td>\n",
" <td>2918.22</td>\n",
" <td>2880.22</td>\n",
" <td>2889.02</td>\n",
" <td>220535</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>12</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-11</td>\n",
" <td>2888.82</td>\n",
" <td>2922.13</td>\n",
" <td>2880.30</td>\n",
" <td>2916.08</td>\n",
" <td>175258</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>13</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-12</td>\n",
" <td>2915.66</td>\n",
" <td>2940.48</td>\n",
" <td>2906.11</td>\n",
" <td>2933.24</td>\n",
" <td>170540</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>14</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-13</td>\n",
" <td>2934.10</td>\n",
" <td>2989.05</td>\n",
" <td>2932.89</td>\n",
" <td>2989.01</td>\n",
" <td>177969</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>15</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-14</td>\n",
" <td>2989.31</td>\n",
" <td>3004.93</td>\n",
" <td>2978.46</td>\n",
" <td>2986.39</td>\n",
" <td>197059</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>16</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-17</td>\n",
" <td>2984.83</td>\n",
" <td>3001.86</td>\n",
" <td>2982.13</td>\n",
" <td>3001.42</td>\n",
" <td>155946</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>17</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-18</td>\n",
" <td>3001.16</td>\n",
" <td>3038.25</td>\n",
" <td>2999.39</td>\n",
" <td>3034.08</td>\n",
" <td>179165</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>18</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-19</td>\n",
" <td>3033.89</td>\n",
" <td>3051.96</td>\n",
" <td>3022.79</td>\n",
" <td>3047.26</td>\n",
" <td>174636</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>19</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-20</td>\n",
" <td>3047.96</td>\n",
" <td>3057.46</td>\n",
" <td>3025.69</td>\n",
" <td>3044.64</td>\n",
" <td>200333</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>20</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-21</td>\n",
" <td>3044.55</td>\n",
" <td>3047.43</td>\n",
" <td>2999.46</td>\n",
" <td>3023.15</td>\n",
" <td>185542</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>21</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-24</td>\n",
" <td>3021.99</td>\n",
" <td>3033.33</td>\n",
" <td>3002.46</td>\n",
" <td>3011.81</td>\n",
" <td>193224</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>22</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-25</td>\n",
" <td>3011.62</td>\n",
" <td>3035.94</td>\n",
" <td>3007.55</td>\n",
" <td>3020.34</td>\n",
" <td>153347</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>23</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-26</td>\n",
" <td>3019.39</td>\n",
" <td>3032.03</td>\n",
" <td>3012.34</td>\n",
" <td>3018.96</td>\n",
" <td>162718</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>24</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-27</td>\n",
" <td>3019.37</td>\n",
" <td>3059.67</td>\n",
" <td>3017.60</td>\n",
" <td>3056.73</td>\n",
" <td>196828</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>25</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-28</td>\n",
" <td>3056.57</td>\n",
" <td>3086.76</td>\n",
" <td>3054.19</td>\n",
" <td>3084.56</td>\n",
" <td>187584</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>26</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-03-31</td>\n",
" <td>3086.34</td>\n",
" <td>3127.96</td>\n",
" <td>3076.77</td>\n",
" <td>3124.07</td>\n",
" <td>209942</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>27</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-01</td>\n",
" <td>3122.98</td>\n",
" <td>3148.96</td>\n",
" <td>3100.79</td>\n",
" <td>3114.26</td>\n",
" <td>206537</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>28</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-02</td>\n",
" <td>3113.80</td>\n",
" <td>3143.32</td>\n",
" <td>3105.20</td>\n",
" <td>3133.56</td>\n",
" <td>188846</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>29</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-03</td>\n",
" <td>3142.25</td>\n",
" <td>3167.64</td>\n",
" <td>3054.21</td>\n",
" <td>3113.32</td>\n",
" <td>313074</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>30</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-04</td>\n",
" <td>3114.54</td>\n",
" <td>3136.61</td>\n",
" <td>3015.79</td>\n",
" <td>3038.42</td>\n",
" <td>252778</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>31</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-07</td>\n",
" <td>3008.62</td>\n",
" <td>3055.38</td>\n",
" <td>2956.52</td>\n",
" <td>2982.60</td>\n",
" <td>212668</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>32</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-08</td>\n",
" <td>2983.16</td>\n",
" <td>3022.64</td>\n",
" <td>2974.72</td>\n",
" <td>2982.34</td>\n",
" <td>185173</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>33</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-09</td>\n",
" <td>2983.48</td>\n",
" <td>3099.46</td>\n",
" <td>2969.98</td>\n",
" <td>3082.91</td>\n",
" <td>253727</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>34</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-10</td>\n",
" <td>3083.53</td>\n",
" <td>3176.29</td>\n",
" <td>3071.39</td>\n",
" <td>3175.77</td>\n",
" <td>184496</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>35</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-11</td>\n",
" <td>3175.72</td>\n",
" <td>3245.34</td>\n",
" <td>3175.71</td>\n",
" <td>3237.59</td>\n",
" <td>187568</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>36</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-14</td>\n",
" <td>3226.90</td>\n",
" <td>3245.72</td>\n",
" <td>3193.72</td>\n",
" <td>3210.36</td>\n",
" <td>157467</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>37</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-15</td>\n",
" <td>3211.18</td>\n",
" <td>3233.55</td>\n",
" <td>3210.02</td>\n",
" <td>3229.79</td>\n",
" <td>115741</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>38</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-16</td>\n",
" <td>3231.04</td>\n",
" <td>3342.39</td>\n",
" <td>3229.80</td>\n",
" <td>3342.26</td>\n",
" <td>172558</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>39</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-17</td>\n",
" <td>3343.13</td>\n",
" <td>3357.71</td>\n",
" <td>3283.98</td>\n",
" <td>3327.48</td>\n",
" <td>162159</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>40</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-21</td>\n",
" <td>3332.68</td>\n",
" <td>3430.48</td>\n",
" <td>3328.90</td>\n",
" <td>3424.67</td>\n",
" <td>165503</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>41</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-22</td>\n",
" <td>3424.07</td>\n",
" <td>3500.04</td>\n",
" <td>3366.85</td>\n",
" <td>3381.28</td>\n",
" <td>205173</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>42</th>\n",
2025-04-25 15:27:30 +02:00
" <td>2025-04-23</td>\n",
" <td>3353.28</td>\n",
" <td>3386.63</td>\n",
" <td>3260.21</td>\n",
" <td>3288.34</td>\n",
" <td>193560</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>43</th>\n",
" <td>2025-04-24</td>\n",
" <td>3288.51</td>\n",
" <td>3367.41</td>\n",
" <td>3288.45</td>\n",
" <td>3349.38</td>\n",
" <td>160771</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>44</th>\n",
" <td>2025-04-25</td>\n",
" <td>3350.42</td>\n",
" <td>3370.71</td>\n",
" <td>3265.04</td>\n",
" <td>3318.69</td>\n",
" <td>240555</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
2025-05-27 13:23:26 +02:00
" <tr>\n",
" <th>45</th>\n",
" <td>2025-04-28</td>\n",
" <td>3325.13</td>\n",
" <td>3353.00</td>\n",
" <td>3267.94</td>\n",
" <td>3344.17</td>\n",
" <td>213198</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>2025-04-29</td>\n",
" <td>3344.69</td>\n",
" <td>3348.61</td>\n",
" <td>3299.62</td>\n",
" <td>3317.22</td>\n",
" <td>191465</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>2025-04-30</td>\n",
" <td>3313.76</td>\n",
" <td>3328.09</td>\n",
" <td>3266.90</td>\n",
" <td>3288.42</td>\n",
" <td>208859</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>2025-05-01</td>\n",
" <td>3289.21</td>\n",
" <td>3290.16</td>\n",
" <td>3201.96</td>\n",
" <td>3237.99</td>\n",
" <td>206881</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>2025-05-02</td>\n",
" <td>3238.70</td>\n",
" <td>3269.22</td>\n",
" <td>3222.86</td>\n",
" <td>3240.37</td>\n",
" <td>208163</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>2025-05-05</td>\n",
" <td>3239.47</td>\n",
" <td>3337.61</td>\n",
" <td>3237.41</td>\n",
" <td>3334.06</td>\n",
" <td>205296</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>2025-05-06</td>\n",
" <td>3336.22</td>\n",
" <td>3434.81</td>\n",
" <td>3323.37</td>\n",
" <td>3430.38</td>\n",
" <td>246511</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>2025-05-07</td>\n",
" <td>3438.23</td>\n",
" <td>3438.23</td>\n",
" <td>3360.23</td>\n",
" <td>3364.25</td>\n",
" <td>243602</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>2025-05-08</td>\n",
" <td>3366.16</td>\n",
" <td>3414.76</td>\n",
" <td>3288.71</td>\n",
" <td>3306.36</td>\n",
" <td>245009</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>2025-05-09</td>\n",
" <td>3304.70</td>\n",
" <td>3347.49</td>\n",
" <td>3274.74</td>\n",
" <td>3327.21</td>\n",
" <td>217656</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>2025-05-12</td>\n",
" <td>3287.15</td>\n",
" <td>3314.28</td>\n",
" <td>3207.77</td>\n",
" <td>3234.28</td>\n",
" <td>270255</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>2025-05-13</td>\n",
" <td>3236.58</td>\n",
" <td>3265.64</td>\n",
" <td>3215.87</td>\n",
" <td>3250.02</td>\n",
" <td>202239</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>2025-05-14</td>\n",
" <td>3249.88</td>\n",
" <td>3257.07</td>\n",
" <td>3168.02</td>\n",
" <td>3178.08</td>\n",
" <td>242008</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>2025-05-15</td>\n",
" <td>3177.50</td>\n",
" <td>3240.56</td>\n",
" <td>3120.75</td>\n",
" <td>3240.35</td>\n",
" <td>234795</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>2025-05-16</td>\n",
" <td>3240.30</td>\n",
" <td>3252.17</td>\n",
" <td>3206.50</td>\n",
" <td>3217.14</td>\n",
" <td>42203</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
2025-04-25 15:27:30 +02:00
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" time open high low close tick_volume spread \\\n",
2025-05-27 13:23:26 +02:00
"0 2025-02-21 2938.70 2949.74 2916.75 2935.95 159274 18 \n",
"1 2025-02-24 2935.19 2956.22 2921.30 2952.46 171870 18 \n",
"2 2025-02-25 2952.42 2953.75 2888.18 2914.93 198402 18 \n",
"3 2025-02-26 2915.06 2930.16 2890.77 2916.36 158179 18 \n",
"4 2025-02-27 2916.73 2920.82 2867.77 2877.15 207221 18 \n",
"5 2025-02-28 2877.31 2885.07 2832.62 2859.03 224045 18 \n",
"6 2025-03-03 2856.18 2895.21 2855.57 2893.66 205740 18 \n",
"7 2025-03-04 2892.77 2927.81 2881.92 2917.65 214258 18 \n",
"8 2025-03-05 2917.84 2929.88 2894.34 2919.11 231043 18 \n",
"9 2025-03-06 2919.52 2926.51 2891.20 2911.01 219058 18 \n",
"10 2025-03-07 2911.39 2930.42 2896.78 2912.06 225312 18 \n",
"11 2025-03-10 2911.25 2918.22 2880.22 2889.02 220535 18 \n",
"12 2025-03-11 2888.82 2922.13 2880.30 2916.08 175258 18 \n",
"13 2025-03-12 2915.66 2940.48 2906.11 2933.24 170540 18 \n",
"14 2025-03-13 2934.10 2989.05 2932.89 2989.01 177969 18 \n",
"15 2025-03-14 2989.31 3004.93 2978.46 2986.39 197059 18 \n",
"16 2025-03-17 2984.83 3001.86 2982.13 3001.42 155946 18 \n",
"17 2025-03-18 3001.16 3038.25 2999.39 3034.08 179165 18 \n",
"18 2025-03-19 3033.89 3051.96 3022.79 3047.26 174636 18 \n",
"19 2025-03-20 3047.96 3057.46 3025.69 3044.64 200333 18 \n",
"20 2025-03-21 3044.55 3047.43 2999.46 3023.15 185542 18 \n",
"21 2025-03-24 3021.99 3033.33 3002.46 3011.81 193224 18 \n",
"22 2025-03-25 3011.62 3035.94 3007.55 3020.34 153347 18 \n",
"23 2025-03-26 3019.39 3032.03 3012.34 3018.96 162718 18 \n",
"24 2025-03-27 3019.37 3059.67 3017.60 3056.73 196828 18 \n",
"25 2025-03-28 3056.57 3086.76 3054.19 3084.56 187584 18 \n",
"26 2025-03-31 3086.34 3127.96 3076.77 3124.07 209942 18 \n",
"27 2025-04-01 3122.98 3148.96 3100.79 3114.26 206537 18 \n",
"28 2025-04-02 3113.80 3143.32 3105.20 3133.56 188846 18 \n",
"29 2025-04-03 3142.25 3167.64 3054.21 3113.32 313074 0 \n",
"30 2025-04-04 3114.54 3136.61 3015.79 3038.42 252778 18 \n",
"31 2025-04-07 3008.62 3055.38 2956.52 2982.60 212668 0 \n",
"32 2025-04-08 2983.16 3022.64 2974.72 2982.34 185173 18 \n",
"33 2025-04-09 2983.48 3099.46 2969.98 3082.91 253727 18 \n",
"34 2025-04-10 3083.53 3176.29 3071.39 3175.77 184496 18 \n",
"35 2025-04-11 3175.72 3245.34 3175.71 3237.59 187568 18 \n",
"36 2025-04-14 3226.90 3245.72 3193.72 3210.36 157467 18 \n",
"37 2025-04-15 3211.18 3233.55 3210.02 3229.79 115741 18 \n",
"38 2025-04-16 3231.04 3342.39 3229.80 3342.26 172558 18 \n",
"39 2025-04-17 3343.13 3357.71 3283.98 3327.48 162159 18 \n",
"40 2025-04-21 3332.68 3430.48 3328.90 3424.67 165503 18 \n",
"41 2025-04-22 3424.07 3500.04 3366.85 3381.28 205173 18 \n",
"42 2025-04-23 3353.28 3386.63 3260.21 3288.34 193560 18 \n",
"43 2025-04-24 3288.51 3367.41 3288.45 3349.38 160771 18 \n",
"44 2025-04-25 3350.42 3370.71 3265.04 3318.69 240555 18 \n",
"45 2025-04-28 3325.13 3353.00 3267.94 3344.17 213198 18 \n",
"46 2025-04-29 3344.69 3348.61 3299.62 3317.22 191465 18 \n",
"47 2025-04-30 3313.76 3328.09 3266.90 3288.42 208859 18 \n",
"48 2025-05-01 3289.21 3290.16 3201.96 3237.99 206881 18 \n",
"49 2025-05-02 3238.70 3269.22 3222.86 3240.37 208163 18 \n",
"50 2025-05-05 3239.47 3337.61 3237.41 3334.06 205296 18 \n",
"51 2025-05-06 3336.22 3434.81 3323.37 3430.38 246511 18 \n",
"52 2025-05-07 3438.23 3438.23 3360.23 3364.25 243602 18 \n",
"53 2025-05-08 3366.16 3414.76 3288.71 3306.36 245009 18 \n",
"54 2025-05-09 3304.70 3347.49 3274.74 3327.21 217656 18 \n",
"55 2025-05-12 3287.15 3314.28 3207.77 3234.28 270255 18 \n",
"56 2025-05-13 3236.58 3265.64 3215.87 3250.02 202239 18 \n",
"57 2025-05-14 3249.88 3257.07 3168.02 3178.08 242008 18 \n",
"58 2025-05-15 3177.50 3240.56 3120.75 3240.35 234795 18 \n",
"59 2025-05-16 3240.30 3252.17 3206.50 3217.14 42203 18 \n",
2025-04-25 15:27:30 +02:00
"\n",
" real_volume \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 \n",
"5 0 \n",
"6 0 \n",
"7 0 \n",
"8 0 \n",
"9 0 \n",
"10 0 \n",
"11 0 \n",
"12 0 \n",
"13 0 \n",
"14 0 \n",
"15 0 \n",
"16 0 \n",
"17 0 \n",
"18 0 \n",
"19 0 \n",
"20 0 \n",
"21 0 \n",
"22 0 \n",
"23 0 \n",
"24 0 \n",
"25 0 \n",
"26 0 \n",
"27 0 \n",
"28 0 \n",
"29 0 \n",
"30 0 \n",
"31 0 \n",
"32 0 \n",
"33 0 \n",
"34 0 \n",
"35 0 \n",
"36 0 \n",
"37 0 \n",
"38 0 \n",
"39 0 \n",
"40 0 \n",
"41 0 \n",
"42 0 \n",
"43 0 \n",
"44 0 \n",
"45 0 \n",
"46 0 \n",
"47 0 \n",
"48 0 \n",
"49 0 \n",
"50 0 \n",
"51 0 \n",
"52 0 \n",
"53 0 \n",
"54 0 \n",
"55 0 \n",
"56 0 \n",
"57 0 \n",
"58 0 \n",
"59 0 "
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 6,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ohlc = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_D1, 0, 60)\n",
"ohlc_df = pd.DataFrame(ohlc)\n",
"ohlc_df['time']=pd.to_datetime(ohlc_df['time'], unit='s')\n",
"ohlc_df"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 7,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3500.0, 3367.0)"
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 7,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# alltime high, low - last 60 days\n",
"ath_df = ohlc_df.iloc[ohlc_df['high'].idxmax()]\n",
"ath = round(ath_df['high'],0)\n",
"atl = round(ath_df['low'],0)\n",
"ath, atl"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 8,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"(3240.56, 3120.75)"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 8,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#lastday high, low\n",
"ldh = ohlc_df.iloc[-2]['high']\n",
"ldl = ohlc_df.iloc[-2]['low']\n",
"ldh, ldl\n"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 9,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"(3252.17, 3206.5)"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 9,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#today high, low\n",
"tdh = ohlc_df.iloc[-1]['high']\n",
"tdl = ohlc_df.iloc[-1]['low']\n",
"tdh ,tdl\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get High and Low last 5 Minutes intervall - 75 candles"
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 10,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"def tp_sl():\n",
" ohlc = mt.copy_rates_from_pos('XAUUSD', mt.TIMEFRAME_M5, 1, 75)\n",
2025-04-25 15:27:30 +02:00
" ohlc_df = pd.DataFrame(ohlc)\n",
" ohlc_df['time']=pd.to_datetime(ohlc_df['time'], unit='s')\n",
"\n",
"\n",
" # Create a column to mark the start of 5-minute intervals\n",
" ohlc_df['box_start'] = (ohlc_df['time'].dt.minute % 15 == 0).astype(int)\n",
2025-04-25 15:27:30 +02:00
" # Create columns for rolling maximum and minimum over the last 5 candles, excluding the current candle\n",
" ohlc_df['max_box'] = ohlc_df['high'].shift(1).rolling(window=15).max()\n",
" ohlc_df['min_box'] = ohlc_df['low'].shift(1).rolling(window=15).min()\n",
2025-04-25 15:27:30 +02:00
" # Breaking signal\n",
" #ohlc_df[\"Break_signal\"] = (ohlc_df[\"close\"] > ohlc_df[\"max_box\"]).astype(int) * 2 + (ohlc_df[\"close\"] < ohlc_df[\"min_box\"]).astype(int)\n",
2025-04-25 15:27:30 +02:00
" #print(ohlc_df['max_box'][14].astype(int)*2)\n",
"\n",
" return ohlc_df\n"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 11,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>time</th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>tick_volume</th>\n",
" <th>spread</th>\n",
" <th>real_volume</th>\n",
" <th>box_start</th>\n",
" <th>max_box</th>\n",
" <th>min_box</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>2</th>\n",
" <td>2025-05-16 01:30:00</td>\n",
" <td>3246.72</td>\n",
" <td>3246.72</td>\n",
" <td>3244.33</td>\n",
" <td>3245.02</td>\n",
" <td>305</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-04-25 15:27:30 +02:00
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>5</th>\n",
" <td>2025-05-16 01:45:00</td>\n",
" <td>3249.78</td>\n",
" <td>3250.68</td>\n",
" <td>3247.90</td>\n",
" <td>3249.74</td>\n",
" <td>526</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>8</th>\n",
" <td>2025-05-16 02:00:00</td>\n",
" <td>3251.21</td>\n",
" <td>3251.24</td>\n",
" <td>3242.27</td>\n",
" <td>3243.55</td>\n",
" <td>740</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>11</th>\n",
" <td>2025-05-16 02:15:00</td>\n",
" <td>3248.13</td>\n",
" <td>3248.19</td>\n",
" <td>3243.21</td>\n",
" <td>3244.53</td>\n",
" <td>358</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>14</th>\n",
" <td>2025-05-16 02:30:00</td>\n",
" <td>3243.08</td>\n",
" <td>3246.99</td>\n",
" <td>3242.67</td>\n",
" <td>3246.49</td>\n",
" <td>399</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>17</th>\n",
" <td>2025-05-16 02:45:00</td>\n",
" <td>3238.98</td>\n",
" <td>3239.07</td>\n",
" <td>3237.60</td>\n",
" <td>3238.15</td>\n",
" <td>364</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3252.17</td>\n",
" <td>3237.40</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>20</th>\n",
" <td>2025-05-16 03:00:00</td>\n",
" <td>3237.15</td>\n",
" <td>3240.84</td>\n",
" <td>3236.41</td>\n",
" <td>3240.33</td>\n",
" <td>763</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3252.17</td>\n",
" <td>3236.56</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>23</th>\n",
" <td>2025-05-16 03:15:00</td>\n",
" <td>3238.95</td>\n",
" <td>3239.78</td>\n",
" <td>3238.19</td>\n",
" <td>3239.46</td>\n",
" <td>486</td>\n",
2025-04-25 15:27:30 +02:00
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3251.24</td>\n",
" <td>3233.44</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>26</th>\n",
" <td>2025-05-16 03:30:00</td>\n",
" <td>3234.54</td>\n",
" <td>3234.72</td>\n",
" <td>3232.00</td>\n",
" <td>3232.81</td>\n",
" <td>588</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3248.19</td>\n",
" <td>3233.43</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>29</th>\n",
" <td>2025-05-16 03:45:00</td>\n",
" <td>3236.20</td>\n",
" <td>3238.70</td>\n",
" <td>3235.08</td>\n",
" <td>3237.08</td>\n",
" <td>525</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3246.99</td>\n",
" <td>3232.00</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>32</th>\n",
" <td>2025-05-16 04:00:00</td>\n",
" <td>3243.13</td>\n",
" <td>3244.47</td>\n",
" <td>3235.03</td>\n",
" <td>3236.75</td>\n",
" <td>926</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3243.93</td>\n",
" <td>3232.00</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>35</th>\n",
" <td>2025-05-16 04:15:00</td>\n",
" <td>3231.04</td>\n",
" <td>3231.04</td>\n",
" <td>3223.49</td>\n",
" <td>3223.49</td>\n",
" <td>828</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3244.47</td>\n",
" <td>3228.72</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>38</th>\n",
" <td>2025-05-16 04:30:00</td>\n",
" <td>3223.44</td>\n",
" <td>3227.52</td>\n",
" <td>3221.57</td>\n",
" <td>3227.34</td>\n",
" <td>786</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3244.47</td>\n",
" <td>3221.68</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>41</th>\n",
" <td>2025-05-16 04:45:00</td>\n",
" <td>3221.39</td>\n",
" <td>3221.41</td>\n",
" <td>3215.52</td>\n",
" <td>3215.67</td>\n",
" <td>777</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3244.47</td>\n",
" <td>3220.25</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>44</th>\n",
" <td>2025-05-16 05:00:00</td>\n",
" <td>3222.27</td>\n",
" <td>3225.92</td>\n",
" <td>3221.82</td>\n",
" <td>3224.69</td>\n",
" <td>757</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3244.47</td>\n",
" <td>3215.10</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>47</th>\n",
" <td>2025-05-16 05:15:00</td>\n",
" <td>3223.19</td>\n",
" <td>3224.83</td>\n",
" <td>3222.94</td>\n",
" <td>3224.68</td>\n",
" <td>451</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3244.47</td>\n",
" <td>3215.10</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>50</th>\n",
" <td>2025-05-16 05:30:00</td>\n",
" <td>3223.11</td>\n",
" <td>3227.51</td>\n",
" <td>3222.85</td>\n",
" <td>3226.93</td>\n",
" <td>667</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3231.04</td>\n",
" <td>3215.10</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>53</th>\n",
" <td>2025-05-16 05:45:00</td>\n",
" <td>3220.09</td>\n",
" <td>3220.92</td>\n",
" <td>3217.72</td>\n",
" <td>3217.95</td>\n",
" <td>556</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3228.25</td>\n",
" <td>3215.10</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>56</th>\n",
" <td>2025-05-16 06:00:00</td>\n",
" <td>3215.47</td>\n",
" <td>3217.41</td>\n",
" <td>3210.82</td>\n",
" <td>3215.08</td>\n",
" <td>731</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3227.51</td>\n",
" <td>3212.91</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>59</th>\n",
" <td>2025-05-16 06:15:00</td>\n",
" <td>3207.98</td>\n",
" <td>3210.37</td>\n",
" <td>3206.91</td>\n",
" <td>3210.31</td>\n",
" <td>737</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3227.51</td>\n",
" <td>3206.50</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>62</th>\n",
" <td>2025-05-16 06:30:00</td>\n",
" <td>3210.53</td>\n",
" <td>3213.23</td>\n",
" <td>3209.67</td>\n",
" <td>3212.29</td>\n",
" <td>570</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3227.51</td>\n",
" <td>3206.50</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>65</th>\n",
" <td>2025-05-16 06:45:00</td>\n",
" <td>3208.76</td>\n",
" <td>3210.77</td>\n",
" <td>3208.04</td>\n",
" <td>3210.53</td>\n",
" <td>450</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3227.51</td>\n",
" <td>3206.50</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>68</th>\n",
" <td>2025-05-16 07:00:00</td>\n",
" <td>3211.77</td>\n",
" <td>3213.45</td>\n",
" <td>3211.72</td>\n",
" <td>3213.44</td>\n",
" <td>409</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3220.92</td>\n",
" <td>3206.50</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>71</th>\n",
" <td>2025-05-16 07:15:00</td>\n",
" <td>3214.96</td>\n",
" <td>3215.87</td>\n",
" <td>3212.93</td>\n",
" <td>3215.55</td>\n",
" <td>464</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3217.41</td>\n",
" <td>3206.50</td>\n",
" </tr>\n",
" <tr>\n",
2025-05-27 13:23:26 +02:00
" <th>74</th>\n",
" <td>2025-05-16 07:30:00</td>\n",
" <td>3214.64</td>\n",
" <td>3216.83</td>\n",
" <td>3214.51</td>\n",
" <td>3216.18</td>\n",
" <td>336</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3219.38</td>\n",
" <td>3206.91</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" time open high low close tick_volume \\\n",
2025-05-27 13:23:26 +02:00
"2 2025-05-16 01:30:00 3246.72 3246.72 3244.33 3245.02 305 \n",
"5 2025-05-16 01:45:00 3249.78 3250.68 3247.90 3249.74 526 \n",
"8 2025-05-16 02:00:00 3251.21 3251.24 3242.27 3243.55 740 \n",
"11 2025-05-16 02:15:00 3248.13 3248.19 3243.21 3244.53 358 \n",
"14 2025-05-16 02:30:00 3243.08 3246.99 3242.67 3246.49 399 \n",
"17 2025-05-16 02:45:00 3238.98 3239.07 3237.60 3238.15 364 \n",
"20 2025-05-16 03:00:00 3237.15 3240.84 3236.41 3240.33 763 \n",
"23 2025-05-16 03:15:00 3238.95 3239.78 3238.19 3239.46 486 \n",
"26 2025-05-16 03:30:00 3234.54 3234.72 3232.00 3232.81 588 \n",
"29 2025-05-16 03:45:00 3236.20 3238.70 3235.08 3237.08 525 \n",
"32 2025-05-16 04:00:00 3243.13 3244.47 3235.03 3236.75 926 \n",
"35 2025-05-16 04:15:00 3231.04 3231.04 3223.49 3223.49 828 \n",
"38 2025-05-16 04:30:00 3223.44 3227.52 3221.57 3227.34 786 \n",
"41 2025-05-16 04:45:00 3221.39 3221.41 3215.52 3215.67 777 \n",
"44 2025-05-16 05:00:00 3222.27 3225.92 3221.82 3224.69 757 \n",
"47 2025-05-16 05:15:00 3223.19 3224.83 3222.94 3224.68 451 \n",
"50 2025-05-16 05:30:00 3223.11 3227.51 3222.85 3226.93 667 \n",
"53 2025-05-16 05:45:00 3220.09 3220.92 3217.72 3217.95 556 \n",
"56 2025-05-16 06:00:00 3215.47 3217.41 3210.82 3215.08 731 \n",
"59 2025-05-16 06:15:00 3207.98 3210.37 3206.91 3210.31 737 \n",
"62 2025-05-16 06:30:00 3210.53 3213.23 3209.67 3212.29 570 \n",
"65 2025-05-16 06:45:00 3208.76 3210.77 3208.04 3210.53 450 \n",
"68 2025-05-16 07:00:00 3211.77 3213.45 3211.72 3213.44 409 \n",
"71 2025-05-16 07:15:00 3214.96 3215.87 3212.93 3215.55 464 \n",
"74 2025-05-16 07:30:00 3214.64 3216.83 3214.51 3216.18 336 \n",
2025-04-25 15:27:30 +02:00
"\n",
" spread real_volume box_start max_box min_box \n",
2025-05-27 13:23:26 +02:00
"2 18 0 1 NaN NaN \n",
"5 18 0 1 NaN NaN \n",
"8 18 0 1 NaN NaN \n",
"11 18 0 1 NaN NaN \n",
"14 18 0 1 NaN NaN \n",
"17 18 0 1 3252.17 3237.40 \n",
"20 18 0 1 3252.17 3236.56 \n",
"23 18 0 1 3251.24 3233.44 \n",
"26 18 0 1 3248.19 3233.43 \n",
"29 18 0 1 3246.99 3232.00 \n",
"32 18 0 1 3243.93 3232.00 \n",
"35 18 0 1 3244.47 3228.72 \n",
"38 18 0 1 3244.47 3221.68 \n",
"41 18 0 1 3244.47 3220.25 \n",
"44 18 0 1 3244.47 3215.10 \n",
"47 18 0 1 3244.47 3215.10 \n",
"50 18 0 1 3231.04 3215.10 \n",
"53 18 0 1 3228.25 3215.10 \n",
"56 18 0 1 3227.51 3212.91 \n",
"59 18 0 1 3227.51 3206.50 \n",
"62 18 0 1 3227.51 3206.50 \n",
"65 18 0 1 3227.51 3206.50 \n",
"68 18 0 1 3220.92 3206.50 \n",
"71 18 0 1 3217.41 3206.50 \n",
"74 18 0 1 3219.38 3206.91 "
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 11,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lastchart = tp_sl()\n",
"lastchart = lastchart.drop(lastchart[lastchart.box_start != 1].index)\n",
2025-04-25 15:27:30 +02:00
"lastchart"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 12,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"45.67000000000007"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2025-05-27 13:23:26 +02:00
"current_high = lastchart['high'].iloc[-1]\n",
"current_close = lastchart['close'].iloc[-1]\n",
"#sl = lastchart['min_box'][23] - tp_sl_ratio * (current_high - current_close) # SL at the high of the current candle\n",
"#tp = lastchart['max_box'][23] + tp_sl_ratio * (current_high - current_close)\n",
"current_diff = lastchart.max_box.max() - lastchart.min_box.min()\n",
"lastchart.max_box.max() - lastchart.min_box.min()\n",
"\n",
"#current_close, current_high"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"(3307.48, 3228.42, 3237.2039999999997, 3219.41)"
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 13,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"last_max = lastchart.max_box.mean()\n",
"last_min = lastchart.min_box.mean()\n",
"mean_high = round((ath + tdh + ldh + last_max) / 4, 2)\n",
"mean_low = round((atl + tdl + ldl + last_min) / 4, 2)\n",
2025-04-25 15:27:30 +02:00
"mean_high, mean_low, last_max, last_min"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fibanaccio retracement"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Fibonacci retracement strategy is a popular technical analysis tool to identify potential reversal levels in financial markets and is used by traders. Based on the Fibonacci sequence, this strategy involves plotting key retracement levels. The typical or default levels are **23.6%, 38.2%, 50%, 61.8%, and 78.6%**, against a price movement.\n",
"\n",
"- Total up move = $250 - $200 = $50 38.2% of up move = 38.2% * 50 = $19.1\n",
"- Retracement forecast = $250 - $19.1 = $230.9\n",
"\n",
"e.g.:\n",
"\n",
"res = AllTimeHigh - LastDayLow\n",
"fb1 = round(AllTimeHigh - (res * 0.236))\n",
"\n",
"**The ratios 38.2% and 61.8% are the most important support levels.**\n",
"\n",
"[Link zur Webseite Fibanaccio](https://blog.quantinsti.com/fibonacci-retracement-trading-strategy-python/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculate BuyLimit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Fibanaccio == Take Price**"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 14,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"(3283.65, 3268.91, 3238.71, 3228.11)"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 14,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res = ath - ldl\n",
"res = ldh - tdl\n",
"res = mean_high - tdl\n",
"fb1 = round(mean_high - (res * 0.236),2)\n",
"fb2 = round(mean_high - (res * 0.382),2)\n",
"fb3 = round(mean_high - (res * 0.681),2)\n",
"fb4 = round(mean_high - (res * 0.786),2)\n",
2025-04-25 15:27:30 +02:00
"fb1, fb2, fb3, fb4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Take Profit and Stop Loss**"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 15,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"(3543.09, 2981.12)"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 15,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tp = ath - ldh + fb1\n",
"sl = fb1 - (tp - ldh)\n",
"tp, sl"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create Dataframe "
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 16,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2025-05-27 13:23:26 +02:00
"Aktueller Preis 3217.14 ist kleiner als FB1 3283.65, trading ist BuyStop\n",
"Aktueller Preis 3217.14 ist kleiner als FB2 3268.91, trading ist BuyStop\n",
"Aktueller Preis 3217.14 ist kleiner als FB3 3238.71, trading ist BuyStop\n",
"Aktueller Preis 3217.14 ist kleiner als FB4 3228.11, trading ist BuyStop\n"
2025-04-25 15:27:30 +02:00
]
},
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"['BuyStop', 'BuyStop', 'BuyStop', 'BuyStop']"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 16,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"current_price = mt.symbol_info_tick(symbol)\n",
"fb = [fb1, fb2, fb3, fb4]\n",
"trading_type = []\n",
"\n",
"x = 1\n",
"for i in fb:\n",
" #print(i)\n",
" \n",
" if current_price.bid < i:\n",
" print(f\"Aktueller Preis {current_price.bid} ist kleiner als FB{x} {i}, trading ist BuyStop\")\n",
" trading_type.append('BuyStop')\n",
" elif current_price.bid > i: \n",
" print(f\"Aktueller Preis {current_price.bid} ist größer als FB{x} {i}, trading type ist BuyLimit\")\n",
" trading_type.append(\"BuyLimit\")\n",
" x += 1\n",
"\n",
"trading_type\n"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 17,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-05-27 13:23:26 +02:00
"79.05999999999995"
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
2025-04-25 15:27:30 +02:00
"source": [
"ldh - tdl\n",
"mean_high - mean_low"
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 18,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"tp_factor = ath-ldh\n",
"tp_factor = ath - tdh\n",
2025-04-25 15:27:30 +02:00
"#tp_factor = ath - mean_low\n",
"tp_factor = mean_high - mean_low - current_diff\n",
2025-04-25 15:27:30 +02:00
"sl_factor = [tp - fb1, tp - fb2, tp - fb3, tp - fb4]\n",
"\n",
"\n",
"data = {\n",
" 'trade_type' : [trading_type[0] + '01', trading_type[1] + '02', trading_type[2] + '03', trading_type[3] + '04'],\n",
" 'trade_price': [fb1, fb2, fb3, fb4],\n",
" 'trade_volume': [0.1, 0.2, 0.3, 0.4],\n",
" #'trade_sl': [fb1 - sl_factor, fb2 - sl_factor, fb3 - sl_factor, fb4 - sl_factor],\n",
" #'trade_sl': [fb1 - sl_factor[0], fb2 - sl_factor[1], fb3 - sl_factor[2], fb4 - sl_factor[3]],\n",
" 'trade_sl': [fb1 - tp_factor, fb2 - tp_factor, fb3 - tp_factor, fb4 - tp_factor],\n",
" 'trade_tp': [tp_factor + fb1, tp_factor + fb2, tp_factor + fb3, tp_factor + fb4]\n",
"\n",
"}"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 19,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"# adj = 15\n",
"# factor = 5\n",
"# adj2 = adj - 5\n",
"\n",
"# data = {\n",
"# 'trade_type' : ['BuyLimit01', 'BuyLimit02', 'BuyLimit03', 'BuyLimit04', 'BuyLimit05', 'BuyLimit06', 'BuyLimit07', 'BuyLimit08', 'BuyLimit09', 'BuyStop01', 'BuyStop02'],\n",
"# 'trade_price': [ath - adj, ath - adj - 25, ath - adj - 50, ath - adj - 75, ath - adj - 100, ath - adj - 125, ath - adj - 150, ath - adj - 175, ath - adj - 200, ath - 66, ath - adj],\n",
"# 'trade_volume': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.1],\n",
"# 'trade_sl': [ath - adj - factor, ath - adj - 25 - factor, ath - adj - 50 - factor, ath - adj - 75 - factor, ath - adj - 100 - factor, ath - adj - 125 - factor, ath - adj - 150 - factor, ath - adj - 175 - factor, ath - adj - 200 - factor, ath - 66 - 20, ath - adj - 20],\n",
"# 'trade_tp': [ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath - adj2, ath, ath]\n",
"\n",
"# }"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 20,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>trade_type</th>\n",
" <th>trade_price</th>\n",
" <th>trade_volume</th>\n",
" <th>trade_sl</th>\n",
" <th>trade_tp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>BuyStop01</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3283.65</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3250.26</td>\n",
" <td>3317.04</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>BuyStop02</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3268.91</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.2</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3235.52</td>\n",
" <td>3302.30</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
2025-05-27 13:23:26 +02:00
" <td>BuyStop03</td>\n",
" <td>3238.71</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.3</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3205.32</td>\n",
" <td>3272.10</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
2025-05-27 13:23:26 +02:00
" <td>BuyStop04</td>\n",
" <td>3228.11</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.4</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3194.72</td>\n",
" <td>3261.50</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
2025-05-27 13:23:26 +02:00
" trade_type trade_price trade_volume trade_sl trade_tp\n",
"0 BuyStop01 3283.65 0.1 3250.26 3317.04\n",
"1 BuyStop02 3268.91 0.2 3235.52 3302.30\n",
"2 BuyStop03 3238.71 0.3 3205.32 3272.10\n",
"3 BuyStop04 3228.11 0.4 3194.72 3261.50"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 20,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(data)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Set volume on BuyStops to 0.1**"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 21,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BuyStop01 0.1 0\n",
"BuyStop02 0.2 1\n",
2025-05-27 13:23:26 +02:00
"BuyStop03 0.3 2\n",
"BuyStop04 0.4 3\n"
2025-04-25 15:27:30 +02:00
]
}
],
"source": [
"for index, row in df.iterrows():\n",
" if bool(re.search('^BuyStop[0-9]{2}', row.trade_type)):\n",
" df.loc[index, ['trade_volume']] = 0.1\n",
" print(row.trade_type, row.trade_volume, index)\n",
" "
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 22,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>trade_type</th>\n",
" <th>trade_price</th>\n",
" <th>trade_volume</th>\n",
" <th>trade_sl</th>\n",
" <th>trade_tp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>BuyStop01</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3283.65</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3250.26</td>\n",
" <td>3317.04</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>BuyStop02</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3268.91</td>\n",
2025-04-25 15:27:30 +02:00
" <td>0.1</td>\n",
2025-05-27 13:23:26 +02:00
" <td>3235.52</td>\n",
" <td>3302.30</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
2025-05-27 13:23:26 +02:00
" <td>BuyStop03</td>\n",
" <td>3238.71</td>\n",
" <td>0.1</td>\n",
" <td>3205.32</td>\n",
" <td>3272.10</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
2025-05-27 13:23:26 +02:00
" <td>BuyStop04</td>\n",
" <td>3228.11</td>\n",
" <td>0.1</td>\n",
" <td>3194.72</td>\n",
" <td>3261.50</td>\n",
2025-04-25 15:27:30 +02:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
2025-05-27 13:23:26 +02:00
" trade_type trade_price trade_volume trade_sl trade_tp\n",
"0 BuyStop01 3283.65 0.1 3250.26 3317.04\n",
"1 BuyStop02 3268.91 0.1 3235.52 3302.30\n",
"2 BuyStop03 3238.71 0.1 3205.32 3272.10\n",
"3 BuyStop04 3228.11 0.1 3194.72 3261.50"
2025-04-25 15:27:30 +02:00
]
},
2025-05-27 13:23:26 +02:00
"execution_count": 22,
2025-04-25 15:27:30 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
2025-05-27 13:23:26 +02:00
"cell_type": "markdown",
"metadata": {},
"source": [
2025-05-27 13:23:26 +02:00
"# Correct Volume Manuel"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>trade_type</th>\n",
" <th>trade_price</th>\n",
" <th>trade_volume</th>\n",
" <th>trade_sl</th>\n",
" <th>trade_tp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>BuyStop01</td>\n",
" <td>3367.70</td>\n",
" <td>0.1</td>\n",
" <td>3302.47</td>\n",
" <td>3432.93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>BuyStop02</td>\n",
" <td>3349.94</td>\n",
" <td>0.1</td>\n",
" <td>3284.71</td>\n",
" <td>3415.17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>BuyLimit03</td>\n",
" <td>3313.56</td>\n",
" <td>0.2</td>\n",
" <td>3248.33</td>\n",
" <td>3378.79</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>BuyLimit04</td>\n",
" <td>3300.78</td>\n",
" <td>0.3</td>\n",
" <td>3235.55</td>\n",
" <td>3366.01</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" trade_type trade_price trade_volume trade_sl trade_tp\n",
"0 BuyStop01 3367.70 0.1 3302.47 3432.93\n",
"1 BuyStop02 3349.94 0.1 3284.71 3415.17\n",
"2 BuyLimit03 3313.56 0.2 3248.33 3378.79\n",
"3 BuyLimit04 3300.78 0.3 3235.55 3366.01"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"if bool(re.search('^BuyLimit[0-9]{2}', df.trade_type[2])) and df.trade_volume[1] == 0.1 and df.trade_volume[2] != 0.1:\n",
" df.at[2, 'trade_volume'] = df.trade_volume[1] + 0.1\n",
"\n",
2025-05-27 13:23:26 +02:00
"if bool(re.search('^BuyLimit[0-9]{2}', df.trade_type[3])) and df.trade_volume[2] != 0.1 and df.trade_volume[3] != 0.1:\n",
" df.at[3, 'trade_volume'] = df.trade_volume[2] + 0.1\n",
"\n",
2025-05-27 13:23:26 +02:00
"#df.at[3, 'trade_volume'] = df.trade_volume[2] + 0.1\n",
"\n",
"\n",
"df"
]
},
2025-04-25 15:27:30 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Place Order"
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Pending Orders in MT5**\n",
"\n",
"Pending orders allow you to execute trades at your predetermined levels rather than at the current market price. There are four types of pending orders: \n",
"\n",
"- **Buy Limit:** It is a pending order to buy an asset below the current market price. It is ideal for buying at a support level during correction.\n",
"\n",
"- **Sell Limit:** It is an order to sell an asset above the current market price. It helps to short-sell at the resistance level.\n",
"\n",
"- **Buy Stop:** It is a buy order used to catch the bullish breakouts. You can place a stop above the current market price. \n",
"\n",
"- **Sell Stop:** It is a sell order used to catch a bearish breakout by putting an order below the current market price."
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 23,
2025-04-25 15:27:30 +02:00
"metadata": {},
2025-05-27 13:23:26 +02:00
"outputs": [],
2025-04-25 15:27:30 +02:00
"source": [
2025-05-27 13:23:26 +02:00
"# if bool(re.search('^StopLimit[0-9]{2}', 'BuyLimit01')):\n",
"# print('Wahr')\n",
"# else:\n",
"# print('Falsch')"
2025-04-25 15:27:30 +02:00
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 24,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"def buyOrder(trade_type: str, trade_price: float, trade_volume: float, trade_sl: float, trade_tp: float, symbol: str):\n",
" \n",
" if bool(re.search('^BuyLimit[0-9]{2}', trade_type)):\n",
" # Buy Stop\n",
" request = {\n",
" \"action\": mt.TRADE_ACTION_PENDING,\n",
" \"symbol\": symbol,\n",
" \"volume\": trade_volume, # FLOAT\n",
" \"type\": mt.ORDER_TYPE_BUY_LIMIT,\n",
" \"price\": trade_price,\n",
" \"sl\": trade_sl, # FLOAT\n",
" \"tp\": trade_tp, # FLOAT\n",
" \"deviation\": 20, # INTERGER\n",
" \"magic\": 0, # INTERGER\n",
" \"comment\": trade_type,\n",
" \"type_time\": mt.ORDER_TIME_GTC,\n",
" \"type_filling\": mt.ORDER_FILLING_IOC,\n",
" }\n",
" else:\n",
" #Sell Stop \n",
" request = {\n",
" \"action\": mt.TRADE_ACTION_PENDING,\n",
" \"symbol\": symbol,\n",
" \"volume\": trade_volume, # FLOAT\n",
" \"type\": mt.ORDER_TYPE_BUY_STOP,\n",
" \"price\": trade_price,\n",
" \"sl\": trade_sl, # FLOAT\n",
" \"tp\": trade_tp, # FLOAT\n",
" \"deviation\": 20, # INTERGER\n",
" \"magic\": 0, # INTERGER\n",
" \"comment\": trade_type,\n",
" \"type_time\": mt.ORDER_TIME_GTC,\n",
" \"type_filling\": mt.ORDER_FILLING_IOC,\n",
" }\n",
"\n",
" order = mt.order_send(request)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Place Orders**"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 25,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2025-05-27 13:23:26 +02:00
"BuyStop01 3283.65 0.1 3250.26 3317.04 XAUUSD\n",
"BuyStop02 3268.91 0.1 3235.52 3302.2999999999997 XAUUSD\n",
"BuyStop03 3238.71 0.1 3205.32 3272.1 XAUUSD\n",
"BuyStop04 3228.11 0.1 3194.7200000000003 3261.5 XAUUSD\n"
2025-04-25 15:27:30 +02:00
]
}
],
"source": [
"for index, row in df.iterrows():\n",
" #print(index, row)\n",
" print(row['trade_type'], row['trade_price'], row['trade_volume'], row['trade_sl'], row['trade_tp'], symbol)\n",
" buyOrder(row['trade_type'], row['trade_price'], row['trade_volume'], row['trade_sl'], row['trade_tp'], symbol)\n",
"\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Remove Pending Orders"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 50,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [],
"source": [
"# Remove Pending Order\n",
"\n",
"def rm_pending_orders():\n",
"\n",
" while mt.orders_total() > 0:\n",
" pending_orders = mt.orders_get()\n",
" order1 = pending_orders[0]\n",
" request = {\n",
" 'action': mt.TRADE_ACTION_REMOVE,\n",
" 'order': order1.ticket\n",
" }\n",
" mt.order_send(request)\n"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": 51,
2025-04-25 15:27:30 +02:00
"metadata": {},
"outputs": [
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
2025-05-27 13:23:26 +02:00
"Cell \u001b[1;32mIn[51], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m rm_pending_orders()\n",
"Cell \u001b[1;32mIn[50], line 5\u001b[0m, in \u001b[0;36mrm_pending_orders\u001b[1;34m()\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrm_pending_orders\u001b[39m():\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m mt\u001b[38;5;241m.\u001b[39morders_total() \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 6\u001b[0m pending_orders \u001b[38;5;241m=\u001b[39m mt\u001b[38;5;241m.\u001b[39morders_get()\n\u001b[0;32m 7\u001b[0m order1 \u001b[38;5;241m=\u001b[39m pending_orders[\u001b[38;5;241m0\u001b[39m]\n",
"\u001b[1;31mKeyboardInterrupt\u001b[0m: "
]
}
],
2025-04-25 15:27:30 +02:00
"source": [
"rm_pending_orders()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Check pending Orders"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pos = mt.orders_get()\n",
"for i in pos:\n",
" print(i.comment)\n",
" df.loc[df['trade_type'] == i.comment, 'pending_trades'] = 1\n",
"df['pending_trades'] = df['pending_trades']. fillna(0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.loc[df['trade_type'].isin(['BuyLimit02', 'BuyLimit03'])]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"row = df.loc[df['trade_type'] == 'BuyLimit02']\n",
"df.loc[df['trade_type'] == 'BuyLimit02', 'pending_trades'] = 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
2025-05-27 13:23:26 +02:00
"outputs": [],
"source": [
"tp_price = 30\n",
"\n",
"pos = mt.positions_get()\n",
"pos[0].profit\n",
"pos[0].price_open + tp_price"
]
},
2025-04-25 15:27:30 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Check for open trades"
]
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": null,
2025-04-25 15:27:30 +02:00
"metadata": {},
2025-05-27 13:23:26 +02:00
"outputs": [],
2025-04-25 15:27:30 +02:00
"source": [
"pos = mt.positions_get()\n",
"for i in pos:\n",
" print(i)\n",
" pos_comment = i.comment\n",
" pos_profit = i.profit\n",
" print(pos_comment, pos_profit)\n",
" df.loc[df['trade_type'] == i.comment, 'open_trades'] = 1\n",
"df['open_trades'] = df['open_trades']. fillna(0)"
]
},
{
"cell_type": "markdown",
2025-04-25 15:27:30 +02:00
"metadata": {},
"source": []
},
{
"cell_type": "code",
2025-05-27 13:23:26 +02:00
"execution_count": null,
"metadata": {},
2025-05-27 13:23:26 +02:00
"outputs": [],
2025-04-25 15:27:30 +02:00
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"open_trades = df.loc[df['open_trades'] == 1]\n",
"open_trades"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for index, row in open_trades.iterrows():\n",
" print(row.trade_type)"
]
},
{
"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
}