{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Setup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import Libaries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import MetaTrader5 as mt\n",
"import time\n",
"import re\n",
"import keyring as kr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Login"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# login to your Trading Account - sign up in the description\n",
"mt.initialize()\n",
" \n",
"login = 10730196\n",
"server = 'VantageInternational-Demo'\n",
"password = kr.get_password(server, str(login))\n",
"\n",
"\n",
"mt.login(login, password, server)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set Symbol"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"symbol = 'XAUUSD'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get Alltimehigh "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" time | \n",
" open | \n",
" high | \n",
" low | \n",
" close | \n",
" tick_volume | \n",
" spread | \n",
" real_volume | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 2025-02-21 | \n",
" 2938.70 | \n",
" 2949.74 | \n",
" 2916.75 | \n",
" 2935.95 | \n",
" 159274 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 1 | \n",
" 2025-02-24 | \n",
" 2935.19 | \n",
" 2956.22 | \n",
" 2921.30 | \n",
" 2952.46 | \n",
" 171870 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 2 | \n",
" 2025-02-25 | \n",
" 2952.42 | \n",
" 2953.75 | \n",
" 2888.18 | \n",
" 2914.93 | \n",
" 198402 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 3 | \n",
" 2025-02-26 | \n",
" 2915.06 | \n",
" 2930.16 | \n",
" 2890.77 | \n",
" 2916.36 | \n",
" 158179 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 4 | \n",
" 2025-02-27 | \n",
" 2916.73 | \n",
" 2920.82 | \n",
" 2867.77 | \n",
" 2877.15 | \n",
" 207221 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 5 | \n",
" 2025-02-28 | \n",
" 2877.31 | \n",
" 2885.07 | \n",
" 2832.62 | \n",
" 2859.03 | \n",
" 224045 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 6 | \n",
" 2025-03-03 | \n",
" 2856.18 | \n",
" 2895.21 | \n",
" 2855.57 | \n",
" 2893.66 | \n",
" 205740 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 7 | \n",
" 2025-03-04 | \n",
" 2892.77 | \n",
" 2927.81 | \n",
" 2881.92 | \n",
" 2917.65 | \n",
" 214258 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 8 | \n",
" 2025-03-05 | \n",
" 2917.84 | \n",
" 2929.88 | \n",
" 2894.34 | \n",
" 2919.11 | \n",
" 231043 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 9 | \n",
" 2025-03-06 | \n",
" 2919.52 | \n",
" 2926.51 | \n",
" 2891.20 | \n",
" 2911.01 | \n",
" 219058 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 10 | \n",
" 2025-03-07 | \n",
" 2911.39 | \n",
" 2930.42 | \n",
" 2896.78 | \n",
" 2912.06 | \n",
" 225312 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 11 | \n",
" 2025-03-10 | \n",
" 2911.25 | \n",
" 2918.22 | \n",
" 2880.22 | \n",
" 2889.02 | \n",
" 220535 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 12 | \n",
" 2025-03-11 | \n",
" 2888.82 | \n",
" 2922.13 | \n",
" 2880.30 | \n",
" 2916.08 | \n",
" 175258 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 13 | \n",
" 2025-03-12 | \n",
" 2915.66 | \n",
" 2940.48 | \n",
" 2906.11 | \n",
" 2933.24 | \n",
" 170540 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 14 | \n",
" 2025-03-13 | \n",
" 2934.10 | \n",
" 2989.05 | \n",
" 2932.89 | \n",
" 2989.01 | \n",
" 177969 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 15 | \n",
" 2025-03-14 | \n",
" 2989.31 | \n",
" 3004.93 | \n",
" 2978.46 | \n",
" 2986.39 | \n",
" 197059 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 16 | \n",
" 2025-03-17 | \n",
" 2984.83 | \n",
" 3001.86 | \n",
" 2982.13 | \n",
" 3001.42 | \n",
" 155946 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 17 | \n",
" 2025-03-18 | \n",
" 3001.16 | \n",
" 3038.25 | \n",
" 2999.39 | \n",
" 3034.08 | \n",
" 179165 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 18 | \n",
" 2025-03-19 | \n",
" 3033.89 | \n",
" 3051.96 | \n",
" 3022.79 | \n",
" 3047.26 | \n",
" 174636 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 19 | \n",
" 2025-03-20 | \n",
" 3047.96 | \n",
" 3057.46 | \n",
" 3025.69 | \n",
" 3044.64 | \n",
" 200333 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 20 | \n",
" 2025-03-21 | \n",
" 3044.55 | \n",
" 3047.43 | \n",
" 2999.46 | \n",
" 3023.15 | \n",
" 185542 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 21 | \n",
" 2025-03-24 | \n",
" 3021.99 | \n",
" 3033.33 | \n",
" 3002.46 | \n",
" 3011.81 | \n",
" 193224 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 22 | \n",
" 2025-03-25 | \n",
" 3011.62 | \n",
" 3035.94 | \n",
" 3007.55 | \n",
" 3020.34 | \n",
" 153347 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 23 | \n",
" 2025-03-26 | \n",
" 3019.39 | \n",
" 3032.03 | \n",
" 3012.34 | \n",
" 3018.96 | \n",
" 162718 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 24 | \n",
" 2025-03-27 | \n",
" 3019.37 | \n",
" 3059.67 | \n",
" 3017.60 | \n",
" 3056.73 | \n",
" 196828 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 25 | \n",
" 2025-03-28 | \n",
" 3056.57 | \n",
" 3086.76 | \n",
" 3054.19 | \n",
" 3084.56 | \n",
" 187584 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 26 | \n",
" 2025-03-31 | \n",
" 3086.34 | \n",
" 3127.96 | \n",
" 3076.77 | \n",
" 3124.07 | \n",
" 209942 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 27 | \n",
" 2025-04-01 | \n",
" 3122.98 | \n",
" 3148.96 | \n",
" 3100.79 | \n",
" 3114.26 | \n",
" 206537 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 28 | \n",
" 2025-04-02 | \n",
" 3113.80 | \n",
" 3143.32 | \n",
" 3105.20 | \n",
" 3133.56 | \n",
" 188846 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 29 | \n",
" 2025-04-03 | \n",
" 3142.25 | \n",
" 3167.64 | \n",
" 3054.21 | \n",
" 3113.32 | \n",
" 313074 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" | 30 | \n",
" 2025-04-04 | \n",
" 3114.54 | \n",
" 3136.61 | \n",
" 3015.79 | \n",
" 3038.42 | \n",
" 252778 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 31 | \n",
" 2025-04-07 | \n",
" 3008.62 | \n",
" 3055.38 | \n",
" 2956.52 | \n",
" 2982.60 | \n",
" 212668 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" | 32 | \n",
" 2025-04-08 | \n",
" 2983.16 | \n",
" 3022.64 | \n",
" 2974.72 | \n",
" 2982.34 | \n",
" 185173 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 33 | \n",
" 2025-04-09 | \n",
" 2983.48 | \n",
" 3099.46 | \n",
" 2969.98 | \n",
" 3082.91 | \n",
" 253727 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 34 | \n",
" 2025-04-10 | \n",
" 3083.53 | \n",
" 3176.29 | \n",
" 3071.39 | \n",
" 3175.77 | \n",
" 184496 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 35 | \n",
" 2025-04-11 | \n",
" 3175.72 | \n",
" 3245.34 | \n",
" 3175.71 | \n",
" 3237.59 | \n",
" 187568 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 36 | \n",
" 2025-04-14 | \n",
" 3226.90 | \n",
" 3245.72 | \n",
" 3193.72 | \n",
" 3210.36 | \n",
" 157467 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 37 | \n",
" 2025-04-15 | \n",
" 3211.18 | \n",
" 3233.55 | \n",
" 3210.02 | \n",
" 3229.79 | \n",
" 115741 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 38 | \n",
" 2025-04-16 | \n",
" 3231.04 | \n",
" 3342.39 | \n",
" 3229.80 | \n",
" 3342.26 | \n",
" 172558 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 39 | \n",
" 2025-04-17 | \n",
" 3343.13 | \n",
" 3357.71 | \n",
" 3283.98 | \n",
" 3327.48 | \n",
" 162159 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 40 | \n",
" 2025-04-21 | \n",
" 3332.68 | \n",
" 3430.48 | \n",
" 3328.90 | \n",
" 3424.67 | \n",
" 165503 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 41 | \n",
" 2025-04-22 | \n",
" 3424.07 | \n",
" 3500.04 | \n",
" 3366.85 | \n",
" 3381.28 | \n",
" 205173 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 42 | \n",
" 2025-04-23 | \n",
" 3353.28 | \n",
" 3386.63 | \n",
" 3260.21 | \n",
" 3288.34 | \n",
" 193560 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 43 | \n",
" 2025-04-24 | \n",
" 3288.51 | \n",
" 3367.41 | \n",
" 3288.45 | \n",
" 3349.38 | \n",
" 160771 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 44 | \n",
" 2025-04-25 | \n",
" 3350.42 | \n",
" 3370.71 | \n",
" 3265.04 | \n",
" 3318.69 | \n",
" 240555 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 45 | \n",
" 2025-04-28 | \n",
" 3325.13 | \n",
" 3353.00 | \n",
" 3267.94 | \n",
" 3344.17 | \n",
" 213198 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 46 | \n",
" 2025-04-29 | \n",
" 3344.69 | \n",
" 3348.61 | \n",
" 3299.62 | \n",
" 3317.22 | \n",
" 191465 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 47 | \n",
" 2025-04-30 | \n",
" 3313.76 | \n",
" 3328.09 | \n",
" 3266.90 | \n",
" 3288.42 | \n",
" 208859 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 48 | \n",
" 2025-05-01 | \n",
" 3289.21 | \n",
" 3290.16 | \n",
" 3201.96 | \n",
" 3237.99 | \n",
" 206881 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 49 | \n",
" 2025-05-02 | \n",
" 3238.70 | \n",
" 3269.22 | \n",
" 3222.86 | \n",
" 3240.37 | \n",
" 208163 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 50 | \n",
" 2025-05-05 | \n",
" 3239.47 | \n",
" 3337.61 | \n",
" 3237.41 | \n",
" 3334.06 | \n",
" 205296 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 51 | \n",
" 2025-05-06 | \n",
" 3336.22 | \n",
" 3434.81 | \n",
" 3323.37 | \n",
" 3430.38 | \n",
" 246511 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 52 | \n",
" 2025-05-07 | \n",
" 3438.23 | \n",
" 3438.23 | \n",
" 3360.23 | \n",
" 3364.25 | \n",
" 243602 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 53 | \n",
" 2025-05-08 | \n",
" 3366.16 | \n",
" 3414.76 | \n",
" 3288.71 | \n",
" 3306.36 | \n",
" 245009 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 54 | \n",
" 2025-05-09 | \n",
" 3304.70 | \n",
" 3347.49 | \n",
" 3274.74 | \n",
" 3327.21 | \n",
" 217656 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 55 | \n",
" 2025-05-12 | \n",
" 3287.15 | \n",
" 3314.28 | \n",
" 3207.77 | \n",
" 3234.28 | \n",
" 270255 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 56 | \n",
" 2025-05-13 | \n",
" 3236.58 | \n",
" 3265.64 | \n",
" 3215.87 | \n",
" 3250.02 | \n",
" 202239 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 57 | \n",
" 2025-05-14 | \n",
" 3249.88 | \n",
" 3257.07 | \n",
" 3168.02 | \n",
" 3178.08 | \n",
" 242008 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 58 | \n",
" 2025-05-15 | \n",
" 3177.50 | \n",
" 3240.56 | \n",
" 3120.75 | \n",
" 3240.35 | \n",
" 234795 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
" | 59 | \n",
" 2025-05-16 | \n",
" 3240.30 | \n",
" 3252.17 | \n",
" 3206.50 | \n",
" 3217.14 | \n",
" 42203 | \n",
" 18 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" time open high low close tick_volume spread \\\n",
"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",
"\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": 6,
"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": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3500.0, 3367.0)"
]
},
"execution_count": 7,
"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": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3240.56, 3120.75)"
]
},
"execution_count": 8,
"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": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3252.17, 3206.5)"
]
},
"execution_count": 9,
"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"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def tp_sl():\n",
" ohlc = mt.copy_rates_from_pos('XAUUSD', mt.TIMEFRAME_M5, 1, 75)\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 % 15 == 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=15).max()\n",
" ohlc_df['min_box'] = ohlc_df['low'].shift(1).rolling(window=15).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": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" time | \n",
" open | \n",
" high | \n",
" low | \n",
" close | \n",
" tick_volume | \n",
" spread | \n",
" real_volume | \n",
" box_start | \n",
" max_box | \n",
" min_box | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2 | \n",
" 2025-05-16 01:30:00 | \n",
" 3246.72 | \n",
" 3246.72 | \n",
" 3244.33 | \n",
" 3245.02 | \n",
" 305 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 5 | \n",
" 2025-05-16 01:45:00 | \n",
" 3249.78 | \n",
" 3250.68 | \n",
" 3247.90 | \n",
" 3249.74 | \n",
" 526 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 8 | \n",
" 2025-05-16 02:00:00 | \n",
" 3251.21 | \n",
" 3251.24 | \n",
" 3242.27 | \n",
" 3243.55 | \n",
" 740 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 11 | \n",
" 2025-05-16 02:15:00 | \n",
" 3248.13 | \n",
" 3248.19 | \n",
" 3243.21 | \n",
" 3244.53 | \n",
" 358 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 14 | \n",
" 2025-05-16 02:30:00 | \n",
" 3243.08 | \n",
" 3246.99 | \n",
" 3242.67 | \n",
" 3246.49 | \n",
" 399 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 17 | \n",
" 2025-05-16 02:45:00 | \n",
" 3238.98 | \n",
" 3239.07 | \n",
" 3237.60 | \n",
" 3238.15 | \n",
" 364 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3252.17 | \n",
" 3237.40 | \n",
"
\n",
" \n",
" | 20 | \n",
" 2025-05-16 03:00:00 | \n",
" 3237.15 | \n",
" 3240.84 | \n",
" 3236.41 | \n",
" 3240.33 | \n",
" 763 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3252.17 | \n",
" 3236.56 | \n",
"
\n",
" \n",
" | 23 | \n",
" 2025-05-16 03:15:00 | \n",
" 3238.95 | \n",
" 3239.78 | \n",
" 3238.19 | \n",
" 3239.46 | \n",
" 486 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3251.24 | \n",
" 3233.44 | \n",
"
\n",
" \n",
" | 26 | \n",
" 2025-05-16 03:30:00 | \n",
" 3234.54 | \n",
" 3234.72 | \n",
" 3232.00 | \n",
" 3232.81 | \n",
" 588 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3248.19 | \n",
" 3233.43 | \n",
"
\n",
" \n",
" | 29 | \n",
" 2025-05-16 03:45:00 | \n",
" 3236.20 | \n",
" 3238.70 | \n",
" 3235.08 | \n",
" 3237.08 | \n",
" 525 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3246.99 | \n",
" 3232.00 | \n",
"
\n",
" \n",
" | 32 | \n",
" 2025-05-16 04:00:00 | \n",
" 3243.13 | \n",
" 3244.47 | \n",
" 3235.03 | \n",
" 3236.75 | \n",
" 926 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3243.93 | \n",
" 3232.00 | \n",
"
\n",
" \n",
" | 35 | \n",
" 2025-05-16 04:15:00 | \n",
" 3231.04 | \n",
" 3231.04 | \n",
" 3223.49 | \n",
" 3223.49 | \n",
" 828 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3244.47 | \n",
" 3228.72 | \n",
"
\n",
" \n",
" | 38 | \n",
" 2025-05-16 04:30:00 | \n",
" 3223.44 | \n",
" 3227.52 | \n",
" 3221.57 | \n",
" 3227.34 | \n",
" 786 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3244.47 | \n",
" 3221.68 | \n",
"
\n",
" \n",
" | 41 | \n",
" 2025-05-16 04:45:00 | \n",
" 3221.39 | \n",
" 3221.41 | \n",
" 3215.52 | \n",
" 3215.67 | \n",
" 777 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3244.47 | \n",
" 3220.25 | \n",
"
\n",
" \n",
" | 44 | \n",
" 2025-05-16 05:00:00 | \n",
" 3222.27 | \n",
" 3225.92 | \n",
" 3221.82 | \n",
" 3224.69 | \n",
" 757 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3244.47 | \n",
" 3215.10 | \n",
"
\n",
" \n",
" | 47 | \n",
" 2025-05-16 05:15:00 | \n",
" 3223.19 | \n",
" 3224.83 | \n",
" 3222.94 | \n",
" 3224.68 | \n",
" 451 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3244.47 | \n",
" 3215.10 | \n",
"
\n",
" \n",
" | 50 | \n",
" 2025-05-16 05:30:00 | \n",
" 3223.11 | \n",
" 3227.51 | \n",
" 3222.85 | \n",
" 3226.93 | \n",
" 667 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3231.04 | \n",
" 3215.10 | \n",
"
\n",
" \n",
" | 53 | \n",
" 2025-05-16 05:45:00 | \n",
" 3220.09 | \n",
" 3220.92 | \n",
" 3217.72 | \n",
" 3217.95 | \n",
" 556 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3228.25 | \n",
" 3215.10 | \n",
"
\n",
" \n",
" | 56 | \n",
" 2025-05-16 06:00:00 | \n",
" 3215.47 | \n",
" 3217.41 | \n",
" 3210.82 | \n",
" 3215.08 | \n",
" 731 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3227.51 | \n",
" 3212.91 | \n",
"
\n",
" \n",
" | 59 | \n",
" 2025-05-16 06:15:00 | \n",
" 3207.98 | \n",
" 3210.37 | \n",
" 3206.91 | \n",
" 3210.31 | \n",
" 737 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3227.51 | \n",
" 3206.50 | \n",
"
\n",
" \n",
" | 62 | \n",
" 2025-05-16 06:30:00 | \n",
" 3210.53 | \n",
" 3213.23 | \n",
" 3209.67 | \n",
" 3212.29 | \n",
" 570 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3227.51 | \n",
" 3206.50 | \n",
"
\n",
" \n",
" | 65 | \n",
" 2025-05-16 06:45:00 | \n",
" 3208.76 | \n",
" 3210.77 | \n",
" 3208.04 | \n",
" 3210.53 | \n",
" 450 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3227.51 | \n",
" 3206.50 | \n",
"
\n",
" \n",
" | 68 | \n",
" 2025-05-16 07:00:00 | \n",
" 3211.77 | \n",
" 3213.45 | \n",
" 3211.72 | \n",
" 3213.44 | \n",
" 409 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3220.92 | \n",
" 3206.50 | \n",
"
\n",
" \n",
" | 71 | \n",
" 2025-05-16 07:15:00 | \n",
" 3214.96 | \n",
" 3215.87 | \n",
" 3212.93 | \n",
" 3215.55 | \n",
" 464 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3217.41 | \n",
" 3206.50 | \n",
"
\n",
" \n",
" | 74 | \n",
" 2025-05-16 07:30:00 | \n",
" 3214.64 | \n",
" 3216.83 | \n",
" 3214.51 | \n",
" 3216.18 | \n",
" 336 | \n",
" 18 | \n",
" 0 | \n",
" 1 | \n",
" 3219.38 | \n",
" 3206.91 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" time open high low close tick_volume \\\n",
"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",
"\n",
" spread real_volume box_start max_box min_box \n",
"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 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lastchart = tp_sl()\n",
"lastchart = lastchart.drop(lastchart[lastchart.box_start != 1].index)\n",
"lastchart"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"45.67000000000007"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"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",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3307.48, 3228.42, 3237.2039999999997, 3219.41)"
]
},
"execution_count": 13,
"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",
"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": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3283.65, 3268.91, 3238.71, 3228.11)"
]
},
"execution_count": 14,
"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",
"fb1, fb2, fb3, fb4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Take Profit and Stop Loss**"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3543.09, 2981.12)"
]
},
"execution_count": 15,
"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": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"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"
]
},
{
"data": {
"text/plain": [
"['BuyStop', 'BuyStop', 'BuyStop', 'BuyStop']"
]
},
"execution_count": 16,
"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": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"79.05999999999995"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ldh - tdl\n",
"mean_high - mean_low"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"tp_factor = ath-ldh\n",
"tp_factor = ath - tdh\n",
"#tp_factor = ath - mean_low\n",
"tp_factor = mean_high - mean_low - current_diff\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": 19,
"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": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" trade_type | \n",
" trade_price | \n",
" trade_volume | \n",
" trade_sl | \n",
" trade_tp | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" BuyStop01 | \n",
" 3283.65 | \n",
" 0.1 | \n",
" 3250.26 | \n",
" 3317.04 | \n",
"
\n",
" \n",
" | 1 | \n",
" BuyStop02 | \n",
" 3268.91 | \n",
" 0.2 | \n",
" 3235.52 | \n",
" 3302.30 | \n",
"
\n",
" \n",
" | 2 | \n",
" BuyStop03 | \n",
" 3238.71 | \n",
" 0.3 | \n",
" 3205.32 | \n",
" 3272.10 | \n",
"
\n",
" \n",
" | 3 | \n",
" BuyStop04 | \n",
" 3228.11 | \n",
" 0.4 | \n",
" 3194.72 | \n",
" 3261.50 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 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"
]
},
"execution_count": 20,
"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": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BuyStop01 0.1 0\n",
"BuyStop02 0.2 1\n",
"BuyStop03 0.3 2\n",
"BuyStop04 0.4 3\n"
]
}
],
"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",
" "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" trade_type | \n",
" trade_price | \n",
" trade_volume | \n",
" trade_sl | \n",
" trade_tp | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" BuyStop01 | \n",
" 3283.65 | \n",
" 0.1 | \n",
" 3250.26 | \n",
" 3317.04 | \n",
"
\n",
" \n",
" | 1 | \n",
" BuyStop02 | \n",
" 3268.91 | \n",
" 0.1 | \n",
" 3235.52 | \n",
" 3302.30 | \n",
"
\n",
" \n",
" | 2 | \n",
" BuyStop03 | \n",
" 3238.71 | \n",
" 0.1 | \n",
" 3205.32 | \n",
" 3272.10 | \n",
"
\n",
" \n",
" | 3 | \n",
" BuyStop04 | \n",
" 3228.11 | \n",
" 0.1 | \n",
" 3194.72 | \n",
" 3261.50 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 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"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Correct Volume Manuel"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" trade_type | \n",
" trade_price | \n",
" trade_volume | \n",
" trade_sl | \n",
" trade_tp | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" BuyStop01 | \n",
" 3367.70 | \n",
" 0.1 | \n",
" 3302.47 | \n",
" 3432.93 | \n",
"
\n",
" \n",
" | 1 | \n",
" BuyStop02 | \n",
" 3349.94 | \n",
" 0.1 | \n",
" 3284.71 | \n",
" 3415.17 | \n",
"
\n",
" \n",
" | 2 | \n",
" BuyLimit03 | \n",
" 3313.56 | \n",
" 0.2 | \n",
" 3248.33 | \n",
" 3378.79 | \n",
"
\n",
" \n",
" | 3 | \n",
" BuyLimit04 | \n",
" 3300.78 | \n",
" 0.3 | \n",
" 3235.55 | \n",
" 3366.01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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",
"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",
"#df.at[3, 'trade_volume'] = df.trade_volume[2] + 0.1\n",
"\n",
"\n",
"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": 23,
"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": 24,
"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": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"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"
]
}
],
"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": 50,
"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": 51,
"metadata": {},
"outputs": [
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"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: "
]
}
],
"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": {},
"outputs": [],
"source": [
"tp_price = 30\n",
"\n",
"pos = mt.positions_get()\n",
"pos[0].profit\n",
"pos[0].price_open + tp_price"
]
},
{
"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": "markdown",
"metadata": {},
"source": []
},
{
"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
}