From 7487234e81b2e242434f1da78fb7b1e6a92e040e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Fr=C3=B6hlich?= Date: Fri, 25 Apr 2025 15:27:30 +0200 Subject: [PATCH] added v01 --- placedOrderBot.ipynb | 2217 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2217 insertions(+) create mode 100644 placedOrderBot.ipynb diff --git a/placedOrderBot.ipynb b/placedOrderBot.ipynb new file mode 100644 index 0000000..a6cd455 --- /dev/null +++ b/placedOrderBot.ipynb @@ -0,0 +1,2217 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Import Libaries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import MetaTrader5 as mt\n", + "import time\n", + "import re" + ] + }, + { + "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 = 10730196\n", + "password = '#mDJu9O3'\n", + "server = 'VantageInternational-Demo'\n", + "\n", + "mt.login(login, password, server)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set Symbol" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "symbol = 'XAUUSD'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get Alltimehigh " + ] + }, + { + "cell_type": "code", + "execution_count": 665, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosetick_volumespreadreal_volume
02025-01-292763.282766.152744.832759.46163594180
12025-01-302759.432798.402758.212793.09162479180
22025-01-312796.262817.072791.032799.25176088180
32025-02-032800.672830.722772.092814.76222780180
42025-02-042814.232845.342807.332842.09190207180
52025-02-052842.572882.222839.762867.22144079180
62025-02-062865.362873.342834.232855.99136634180
72025-02-072855.962886.762852.552861.36174549180
82025-02-102858.802911.712854.732907.97174533180
92025-02-112907.842942.672881.612897.68221876180
102025-02-122898.022909.092864.202904.11185547180
112025-02-132904.022929.412900.542928.40152063180
122025-02-142927.852939.992876.942882.55180610180
132025-02-172884.842906.382878.832897.46129712180
142025-02-182898.402936.882891.992935.23139030180
152025-02-192935.712946.872918.542932.76160944180
162025-02-202933.472954.832924.082938.61155405180
172025-02-212938.702949.742916.752935.95159274180
182025-02-242935.192956.222921.302952.46171870180
192025-02-252952.422953.752888.182914.93198402180
202025-02-262915.062930.162890.772916.36158179180
212025-02-272916.732920.822867.772877.15207221180
222025-02-282877.312885.072832.622859.03224045180
232025-03-032856.182895.212855.572893.66205740180
242025-03-042892.772927.812881.922917.65214258180
252025-03-052917.842929.882894.342919.11231043180
262025-03-062919.522926.512891.202911.01219058180
272025-03-072911.392930.422896.782912.06225312180
282025-03-102911.252918.222880.222889.02220535180
292025-03-112888.822922.132880.302916.08175258180
302025-03-122915.662940.482906.112933.24170540180
312025-03-132934.102989.052932.892989.01177969180
322025-03-142989.313004.932978.462986.39197059180
332025-03-172984.833001.862982.133001.42155946180
342025-03-183001.163038.252999.393034.08179165180
352025-03-193033.893051.963022.793047.26174636180
362025-03-203047.963057.463025.693044.64200333180
372025-03-213044.553047.432999.463023.15185542180
382025-03-243021.993033.333002.463011.81193224180
392025-03-253011.623035.943007.553020.34153347180
402025-03-263019.393032.033012.343018.96162718180
412025-03-273019.373059.673017.603056.73196828180
422025-03-283056.573086.763054.193084.56187584180
432025-03-313086.343127.963076.773124.07209942180
442025-04-013122.983148.963100.793114.26206537180
452025-04-023113.803143.323105.203133.56188846180
462025-04-033142.253167.643054.213113.3231307400
472025-04-043114.543136.613015.793038.42252778180
482025-04-073008.623055.382956.522982.6021266800
492025-04-082983.163022.642974.722982.34185173180
502025-04-092983.483099.462969.983082.91253727180
512025-04-103083.533176.293071.393175.77184496180
522025-04-113175.723245.343175.713237.59187568180
532025-04-143226.903245.723193.723210.36157467180
542025-04-153211.183233.553210.023229.79115741180
552025-04-163231.043342.393229.803342.26172558180
562025-04-173343.133357.713283.983327.48162159180
572025-04-213332.683430.483328.903424.67165503180
582025-04-223424.073500.043366.853381.28205173180
592025-04-233353.283386.633260.213284.89184866180
\n", + "
" + ], + "text/plain": [ + " time open high low close tick_volume spread \\\n", + "0 2025-01-29 2763.28 2766.15 2744.83 2759.46 163594 18 \n", + "1 2025-01-30 2759.43 2798.40 2758.21 2793.09 162479 18 \n", + "2 2025-01-31 2796.26 2817.07 2791.03 2799.25 176088 18 \n", + "3 2025-02-03 2800.67 2830.72 2772.09 2814.76 222780 18 \n", + "4 2025-02-04 2814.23 2845.34 2807.33 2842.09 190207 18 \n", + "5 2025-02-05 2842.57 2882.22 2839.76 2867.22 144079 18 \n", + "6 2025-02-06 2865.36 2873.34 2834.23 2855.99 136634 18 \n", + "7 2025-02-07 2855.96 2886.76 2852.55 2861.36 174549 18 \n", + "8 2025-02-10 2858.80 2911.71 2854.73 2907.97 174533 18 \n", + "9 2025-02-11 2907.84 2942.67 2881.61 2897.68 221876 18 \n", + "10 2025-02-12 2898.02 2909.09 2864.20 2904.11 185547 18 \n", + "11 2025-02-13 2904.02 2929.41 2900.54 2928.40 152063 18 \n", + "12 2025-02-14 2927.85 2939.99 2876.94 2882.55 180610 18 \n", + "13 2025-02-17 2884.84 2906.38 2878.83 2897.46 129712 18 \n", + "14 2025-02-18 2898.40 2936.88 2891.99 2935.23 139030 18 \n", + "15 2025-02-19 2935.71 2946.87 2918.54 2932.76 160944 18 \n", + "16 2025-02-20 2933.47 2954.83 2924.08 2938.61 155405 18 \n", + "17 2025-02-21 2938.70 2949.74 2916.75 2935.95 159274 18 \n", + "18 2025-02-24 2935.19 2956.22 2921.30 2952.46 171870 18 \n", + "19 2025-02-25 2952.42 2953.75 2888.18 2914.93 198402 18 \n", + "20 2025-02-26 2915.06 2930.16 2890.77 2916.36 158179 18 \n", + "21 2025-02-27 2916.73 2920.82 2867.77 2877.15 207221 18 \n", + "22 2025-02-28 2877.31 2885.07 2832.62 2859.03 224045 18 \n", + "23 2025-03-03 2856.18 2895.21 2855.57 2893.66 205740 18 \n", + "24 2025-03-04 2892.77 2927.81 2881.92 2917.65 214258 18 \n", + "25 2025-03-05 2917.84 2929.88 2894.34 2919.11 231043 18 \n", + "26 2025-03-06 2919.52 2926.51 2891.20 2911.01 219058 18 \n", + "27 2025-03-07 2911.39 2930.42 2896.78 2912.06 225312 18 \n", + "28 2025-03-10 2911.25 2918.22 2880.22 2889.02 220535 18 \n", + "29 2025-03-11 2888.82 2922.13 2880.30 2916.08 175258 18 \n", + "30 2025-03-12 2915.66 2940.48 2906.11 2933.24 170540 18 \n", + "31 2025-03-13 2934.10 2989.05 2932.89 2989.01 177969 18 \n", + "32 2025-03-14 2989.31 3004.93 2978.46 2986.39 197059 18 \n", + "33 2025-03-17 2984.83 3001.86 2982.13 3001.42 155946 18 \n", + "34 2025-03-18 3001.16 3038.25 2999.39 3034.08 179165 18 \n", + "35 2025-03-19 3033.89 3051.96 3022.79 3047.26 174636 18 \n", + "36 2025-03-20 3047.96 3057.46 3025.69 3044.64 200333 18 \n", + "37 2025-03-21 3044.55 3047.43 2999.46 3023.15 185542 18 \n", + "38 2025-03-24 3021.99 3033.33 3002.46 3011.81 193224 18 \n", + "39 2025-03-25 3011.62 3035.94 3007.55 3020.34 153347 18 \n", + "40 2025-03-26 3019.39 3032.03 3012.34 3018.96 162718 18 \n", + "41 2025-03-27 3019.37 3059.67 3017.60 3056.73 196828 18 \n", + "42 2025-03-28 3056.57 3086.76 3054.19 3084.56 187584 18 \n", + "43 2025-03-31 3086.34 3127.96 3076.77 3124.07 209942 18 \n", + "44 2025-04-01 3122.98 3148.96 3100.79 3114.26 206537 18 \n", + "45 2025-04-02 3113.80 3143.32 3105.20 3133.56 188846 18 \n", + "46 2025-04-03 3142.25 3167.64 3054.21 3113.32 313074 0 \n", + "47 2025-04-04 3114.54 3136.61 3015.79 3038.42 252778 18 \n", + "48 2025-04-07 3008.62 3055.38 2956.52 2982.60 212668 0 \n", + "49 2025-04-08 2983.16 3022.64 2974.72 2982.34 185173 18 \n", + "50 2025-04-09 2983.48 3099.46 2969.98 3082.91 253727 18 \n", + "51 2025-04-10 3083.53 3176.29 3071.39 3175.77 184496 18 \n", + "52 2025-04-11 3175.72 3245.34 3175.71 3237.59 187568 18 \n", + "53 2025-04-14 3226.90 3245.72 3193.72 3210.36 157467 18 \n", + "54 2025-04-15 3211.18 3233.55 3210.02 3229.79 115741 18 \n", + "55 2025-04-16 3231.04 3342.39 3229.80 3342.26 172558 18 \n", + "56 2025-04-17 3343.13 3357.71 3283.98 3327.48 162159 18 \n", + "57 2025-04-21 3332.68 3430.48 3328.90 3424.67 165503 18 \n", + "58 2025-04-22 3424.07 3500.04 3366.85 3381.28 205173 18 \n", + "59 2025-04-23 3353.28 3386.63 3260.21 3284.89 184866 18 \n", + "\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 " + ] + }, + "execution_count": 665, + "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", + "execution_count": 666, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3500.0, 3367.0)" + ] + }, + "execution_count": 666, + "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", + "execution_count": 667, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3500.04, 3366.85)" + ] + }, + "execution_count": 667, + "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", + "execution_count": 668, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3386.63, 3260.21)" + ] + }, + "execution_count": 668, + "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 25 Minutes" + ] + }, + { + "cell_type": "code", + "execution_count": 669, + "metadata": {}, + "outputs": [], + "source": [ + "def tp_sl():\n", + " ohlc = mt.copy_rates_from_pos('XAUUSD', mt.TIMEFRAME_M1, 1, 25)\n", + " 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 % 5 == 0).astype(int)\n", + " # 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=5).max()\n", + " ohlc_df['min_box'] = ohlc_df['low'].shift(1).rolling(window=5).min()\n", + " # 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", + " #print(ohlc_df['max_box'][14].astype(int)*2)\n", + "\n", + " return ohlc_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 670, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timeopenhighlowclosetick_volumespreadreal_volumebox_startmax_boxmin_boxBreak_signal
02025-04-23 21:36:003279.673279.723279.113279.27781800NaNNaN0
12025-04-23 21:37:003279.313281.243279.253280.81951800NaNNaN0
22025-04-23 21:38:003280.813281.403280.453281.20861800NaNNaN0
32025-04-23 21:39:003281.313281.523280.103280.12881800NaNNaN0
42025-04-23 21:40:003280.123280.553279.803280.10771801NaNNaN0
52025-04-23 21:41:003280.103280.103279.053279.156518003281.523279.110
62025-04-23 21:42:003278.983279.073277.923278.3710218003281.523279.051
72025-04-23 21:43:003278.373280.353277.783280.0810818003281.523277.920
82025-04-23 21:44:003280.053280.443279.933280.336418003281.523277.780
92025-04-23 21:45:003280.333281.343280.313280.317818013280.553277.780
102025-04-23 21:46:003280.313280.713280.133280.327318003281.343277.780
112025-04-23 21:47:003280.323282.193280.153282.198118003281.343277.782
122025-04-23 21:48:003282.223282.513282.013282.136318003282.193277.780
132025-04-23 21:49:003282.133282.433281.903282.356018003282.513279.930
142025-04-23 21:50:003282.353283.043282.253282.927118013282.513280.132
152025-04-23 21:51:003282.923283.813282.833282.906918003283.043280.130
162025-04-23 21:52:003282.893283.263282.353282.976118003283.813280.150
172025-04-23 21:53:003282.973282.983281.793281.845318003283.813281.901
182025-04-23 21:54:003281.843281.943281.053281.096918003283.813281.791
192025-04-23 21:55:003281.113281.853281.103281.539118013283.813281.050
202025-04-23 21:56:003281.533282.343281.453282.3210218003283.813281.050
212025-04-23 21:57:003282.323282.323281.543281.828118003283.263281.050
222025-04-23 21:58:003281.753282.783281.743282.7412418003282.983281.050
232025-04-23 21:59:003282.753282.943282.403282.8011318003282.783281.052
242025-04-23 22:00:003282.783284.323282.643284.1612018013282.943281.102
\n", + "
" + ], + "text/plain": [ + " time open high low close tick_volume \\\n", + "0 2025-04-23 21:36:00 3279.67 3279.72 3279.11 3279.27 78 \n", + "1 2025-04-23 21:37:00 3279.31 3281.24 3279.25 3280.81 95 \n", + "2 2025-04-23 21:38:00 3280.81 3281.40 3280.45 3281.20 86 \n", + "3 2025-04-23 21:39:00 3281.31 3281.52 3280.10 3280.12 88 \n", + "4 2025-04-23 21:40:00 3280.12 3280.55 3279.80 3280.10 77 \n", + "5 2025-04-23 21:41:00 3280.10 3280.10 3279.05 3279.15 65 \n", + "6 2025-04-23 21:42:00 3278.98 3279.07 3277.92 3278.37 102 \n", + "7 2025-04-23 21:43:00 3278.37 3280.35 3277.78 3280.08 108 \n", + "8 2025-04-23 21:44:00 3280.05 3280.44 3279.93 3280.33 64 \n", + "9 2025-04-23 21:45:00 3280.33 3281.34 3280.31 3280.31 78 \n", + "10 2025-04-23 21:46:00 3280.31 3280.71 3280.13 3280.32 73 \n", + "11 2025-04-23 21:47:00 3280.32 3282.19 3280.15 3282.19 81 \n", + "12 2025-04-23 21:48:00 3282.22 3282.51 3282.01 3282.13 63 \n", + "13 2025-04-23 21:49:00 3282.13 3282.43 3281.90 3282.35 60 \n", + "14 2025-04-23 21:50:00 3282.35 3283.04 3282.25 3282.92 71 \n", + "15 2025-04-23 21:51:00 3282.92 3283.81 3282.83 3282.90 69 \n", + "16 2025-04-23 21:52:00 3282.89 3283.26 3282.35 3282.97 61 \n", + "17 2025-04-23 21:53:00 3282.97 3282.98 3281.79 3281.84 53 \n", + "18 2025-04-23 21:54:00 3281.84 3281.94 3281.05 3281.09 69 \n", + "19 2025-04-23 21:55:00 3281.11 3281.85 3281.10 3281.53 91 \n", + "20 2025-04-23 21:56:00 3281.53 3282.34 3281.45 3282.32 102 \n", + "21 2025-04-23 21:57:00 3282.32 3282.32 3281.54 3281.82 81 \n", + "22 2025-04-23 21:58:00 3281.75 3282.78 3281.74 3282.74 124 \n", + "23 2025-04-23 21:59:00 3282.75 3282.94 3282.40 3282.80 113 \n", + "24 2025-04-23 22:00:00 3282.78 3284.32 3282.64 3284.16 120 \n", + "\n", + " spread real_volume box_start max_box min_box Break_signal \n", + "0 18 0 0 NaN NaN 0 \n", + "1 18 0 0 NaN NaN 0 \n", + "2 18 0 0 NaN NaN 0 \n", + "3 18 0 0 NaN NaN 0 \n", + "4 18 0 1 NaN NaN 0 \n", + "5 18 0 0 3281.52 3279.11 0 \n", + "6 18 0 0 3281.52 3279.05 1 \n", + "7 18 0 0 3281.52 3277.92 0 \n", + "8 18 0 0 3281.52 3277.78 0 \n", + "9 18 0 1 3280.55 3277.78 0 \n", + "10 18 0 0 3281.34 3277.78 0 \n", + "11 18 0 0 3281.34 3277.78 2 \n", + "12 18 0 0 3282.19 3277.78 0 \n", + "13 18 0 0 3282.51 3279.93 0 \n", + "14 18 0 1 3282.51 3280.13 2 \n", + "15 18 0 0 3283.04 3280.13 0 \n", + "16 18 0 0 3283.81 3280.15 0 \n", + "17 18 0 0 3283.81 3281.90 1 \n", + "18 18 0 0 3283.81 3281.79 1 \n", + "19 18 0 1 3283.81 3281.05 0 \n", + "20 18 0 0 3283.81 3281.05 0 \n", + "21 18 0 0 3283.26 3281.05 0 \n", + "22 18 0 0 3282.98 3281.05 0 \n", + "23 18 0 0 3282.78 3281.05 2 \n", + "24 18 0 1 3282.94 3281.10 2 " + ] + }, + "execution_count": 670, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lastchart = tp_sl()\n", + "lastchart" + ] + }, + { + "cell_type": "code", + "execution_count": 671, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3427.52, 3337.87, 3282.5284999999994, 3279.768)" + ] + }, + "execution_count": 671, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "last_max = lastchart.max_box.mean()\n", + "last_min = lastchart.min_box.mean()\n", + "mean_high = round((ath + ldh + last_max) / 3,2)\n", + "mean_low = round((atl + ldl + last_min) / 3,2)\n", + "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", + "execution_count": 672, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3443.41, 3408.4, 3336.7, 3311.53)" + ] + }, + "execution_count": 672, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = ath - ldl\n", + "res = ath - tdl\n", + "#res = mean_high - tdl\n", + "fb1 = round(ath - (res * 0.236),2)\n", + "fb2 = round(ath - (res * 0.382),2)\n", + "fb3 = round(ath - (res * 0.681),2)\n", + "fb4 = round(ath - (res * 0.786),2)\n", + "fb1, fb2, fb3, fb4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Take Profit and Stop Loss**" + ] + }, + { + "cell_type": "code", + "execution_count": 673, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3443.37, 3500.08)" + ] + }, + "execution_count": 673, + "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", + "execution_count": 674, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Aktueller Preis 3285.06 ist kleiner als FB1 3443.41, trading ist BuyStop\n", + "Aktueller Preis 3285.06 ist kleiner als FB2 3408.4, trading ist BuyStop\n", + "Aktueller Preis 3285.06 ist kleiner als FB3 3336.7, trading ist BuyStop\n", + "Aktueller Preis 3285.06 ist kleiner als FB4 3311.53, trading ist BuyStop\n" + ] + }, + { + "data": { + "text/plain": [ + "['BuyStop', 'BuyStop', 'BuyStop', 'BuyStop']" + ] + }, + "execution_count": 674, + "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", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ldh - tdl" + ] + }, + { + "cell_type": "code", + "execution_count": 675, + "metadata": {}, + "outputs": [], + "source": [ + "tp_factor = ath-ldh\n", + "tp_fachtor = ath - tdh\n", + "#tp_factor = ath - mean_low\n", + "tp_factor = mean_high - tdl\n", + "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", + "execution_count": null, + "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", + "execution_count": 676, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trade_typetrade_pricetrade_volumetrade_sltrade_tp
0BuyStop013443.410.13276.103610.72
1BuyStop023408.400.23241.093575.71
2BuyStop033336.700.33169.393504.01
3BuyStop043311.530.43144.223478.84
\n", + "
" + ], + "text/plain": [ + " trade_type trade_price trade_volume trade_sl trade_tp\n", + "0 BuyStop01 3443.41 0.1 3276.10 3610.72\n", + "1 BuyStop02 3408.40 0.2 3241.09 3575.71\n", + "2 BuyStop03 3336.70 0.3 3169.39 3504.01\n", + "3 BuyStop04 3311.53 0.4 3144.22 3478.84" + ] + }, + "execution_count": 676, + "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", + "execution_count": 677, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BuyStop01 0\n", + "BuyStop02 1\n", + "BuyStop03 2\n", + "BuyStop04 3\n" + ] + } + ], + "source": [ + "for index, row in df.iterrows():\n", + " print(row.trade_type, index)\n", + " if bool(re.search('^BuyStop[0-9]{2}', row.trade_type)):\n", + " df.loc[index, ['trade_volume']] = 0.1" + ] + }, + { + "cell_type": "code", + "execution_count": 678, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trade_typetrade_pricetrade_volumetrade_sltrade_tp
0BuyStop013443.410.13276.103610.72
1BuyStop023408.400.13241.093575.71
2BuyStop033336.700.13169.393504.01
3BuyStop043311.530.13144.223478.84
\n", + "
" + ], + "text/plain": [ + " trade_type trade_price trade_volume trade_sl trade_tp\n", + "0 BuyStop01 3443.41 0.1 3276.10 3610.72\n", + "1 BuyStop02 3408.40 0.1 3241.09 3575.71\n", + "2 BuyStop03 3336.70 0.1 3169.39 3504.01\n", + "3 BuyStop04 3311.53 0.1 3144.22 3478.84" + ] + }, + "execution_count": 678, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Place Order" + ] + }, + { + "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", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if bool(re.search('^StopLimit[0-9]{2}', 'BuyLimit01')):\n", + " print('Wahr')\n", + "else:\n", + " print('Falsch')" + ] + }, + { + "cell_type": "code", + "execution_count": 679, + "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", + "execution_count": 680, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BuyStop01 3443.41 0.1 3276.1 3610.72 XAUUSD\n", + "BuyStop02 3408.4 0.1 3241.09 3575.71 XAUUSD\n", + "BuyStop03 3336.7 0.1 3169.39 3504.0099999999998 XAUUSD\n", + "BuyStop04 3311.53 0.1 3144.2200000000003 3478.84 XAUUSD\n" + ] + } + ], + "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", + "execution_count": 681, + "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", + "execution_count": 682, + "metadata": {}, + "outputs": [], + "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": "markdown", + "metadata": {}, + "source": [ + "## Check for open trades" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "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": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "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 +}