2024-08-20 18:13:15 +00:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< meta name = "description" content = "Freqtrade is a free and open source crypto trading bot written in Python, designed to support all major exchanges and be controlled via Telegram or builtin Web UI" >
2024-10-20 10:36:45 +00:00
< link rel = "canonical" href = "https://www.freqtrade.io/en/stable/webhook-config/" >
2024-08-20 18:13:15 +00:00
< link rel = "prev" href = "../rest-api/" >
< link rel = "next" href = "../data-download/" >
< link rel = "icon" href = "../images/logo.png" >
2024-11-04 05:27:51 +00:00
< meta name = "generator" content = "mkdocs-1.6.1, mkdocs-material-9.5.43" >
2024-08-20 18:13:15 +00:00
< title > Web Hook - Freqtrade< / title >
2024-10-21 05:32:43 +00:00
< link rel = "stylesheet" href = "../assets/stylesheets/main.0253249f.min.css" >
2024-08-20 18:13:15 +00:00
< link rel = "stylesheet" href = "../assets/stylesheets/palette.06af60db.min.css" >
< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin >
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" >
< style > : root { --md-text-font : "Roboto" ; --md-code-font : "Roboto Mono" } < / style >
< link rel = "stylesheet" href = "../stylesheets/ft.extra.css" >
2024-09-02 04:57:49 +00:00
< script > _ _md _scope = new URL ( ".." , location ) , _ _md _hash = e => [ ... e ] . reduce ( ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) ) , 0 ) , _ _md _get = ( e , _ = localStorage , t = _ _md _scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , _ _md _set = ( e , _ , t = localStorage , a = _ _md _scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } < / script >
2024-08-20 18:13:15 +00:00
2024-09-04 19:11:37 +00:00
< script id = "__analytics" > function _ _md _analytics ( ) { function e ( ) { dataLayer . push ( arguments ) } window . dataLayer = window . dataLayer || [ ] , e ( "js" , new Date ) , e ( "config" , "G-VH170LG9M5" ) , document . addEventListener ( "DOMContentLoaded" , ( function ( ) { document . forms . search && document . forms . search . query . addEventListener ( "blur" , ( function ( ) { this . value && e ( "event" , "search" , { search _term : this . value } ) } ) ) ; document $ . subscribe ( ( function ( ) { var t = document . forms . feedback ; if ( void 0 !== t ) for ( var a of t . querySelectorAll ( "[type=submit]" ) ) a . addEventListener ( "click" , ( function ( a ) { a . preventDefault ( ) ; var n = document . location . pathname , d = this . getAttribute ( "data-md-value" ) ; e ( "event" , "feedback" , { page : n , data : d } ) , t . firstElementChild . disabled = ! 0 ; var r = t . querySelector ( ".md-feedback__note [data-md-value='" + d + "']" ) ; r && ( r . hidden = ! 1 ) } ) ) , t . hidden = ! 1 } ) ) , location$ . subscribe ( ( function ( t ) { e ( "config" , "G-VH170LG9M5" , { page _path : t . pathname } ) } ) ) } ) ) ; var t = document . createElement ( "script" ) ; t . async = ! 0 , t . src = "https://www.googletagmanager.com/gtag/js?id=G-VH170LG9M5" , document . getElementById ( "__analytics" ) . insertAdjacentElement ( "afterEnd" , t ) } < / script >
< script > "undefined" != typeof _ _md _analytics && _ _md _analytics ( ) < / script >
2024-08-20 18:13:15 +00:00
< / head >
< body dir = "ltr" data-md-color-scheme = "default" data-md-color-primary = "blue-grey" data-md-color-accent = "tear" >
< input class = "md-toggle" data-md-toggle = "drawer" type = "checkbox" id = "__drawer" autocomplete = "off" >
< input class = "md-toggle" data-md-toggle = "search" type = "checkbox" id = "__search" autocomplete = "off" >
< label class = "md-overlay" for = "__drawer" > < / label >
< div data-md-component = "skip" >
< a href = "#webhook-usage" class = "md-skip" >
Skip to content
< / a >
< / div >
< div data-md-component = "announce" >
< / div >
2024-08-20 18:20:59 +00:00
< div data-md-color-scheme = "default" data-md-component = "outdated" hidden >
< / div >
2024-08-20 18:13:15 +00:00
< header class = "md-header md-header--shadow" data-md-component = "header" >
< nav class = "md-header__inner md-grid" aria-label = "Header" >
< a href = ".." title = "Freqtrade" class = "md-header__button md-logo" aria-label = "Freqtrade" data-md-component = "logo" >
< img src = "../images/logo.png" alt = "logo" >
< / a >
< label class = "md-header__button md-icon" for = "__drawer" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z" / > < / svg >
2024-08-20 18:13:15 +00:00
< / label >
< div class = "md-header__title" data-md-component = "header-title" >
< div class = "md-header__ellipsis" >
< div class = "md-header__topic" >
< span class = "md-ellipsis" >
Freqtrade
< / span >
< / div >
< div class = "md-header__topic" data-md-component = "header-topic" >
< span class = "md-ellipsis" >
Web Hook
< / span >
< / div >
< / div >
< / div >
< form class = "md-header__option" data-md-component = "palette" >
< input class = "md-option" data-md-color-media = "" data-md-color-scheme = "default" data-md-color-primary = "blue-grey" data-md-color-accent = "tear" aria-label = "Switch to dark mode" type = "radio" name = "__palette" id = "__palette_0" >
< label class = "md-header__button md-icon" title = "Switch to dark mode" for = "__palette_1" hidden >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3" / > < / svg >
2024-08-20 18:13:15 +00:00
< / label >
< input class = "md-option" data-md-color-media = "" data-md-color-scheme = "slate" data-md-color-primary = "blue-grey" data-md-color-accent = "tear" aria-label = "Switch to light mode" type = "radio" name = "__palette" id = "__palette_1" >
< label class = "md-header__button md-icon" title = "Switch to light mode" for = "__palette_0" hidden >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3" / > < / svg >
2024-08-20 18:13:15 +00:00
< / label >
< / form >
2024-09-02 04:57:49 +00:00
< script > var palette = _ _md _get ( "__palette" ) ; if ( palette && palette . color ) { if ( "(prefers-color-scheme)" === palette . color . media ) { var media = matchMedia ( "(prefers-color-scheme: light)" ) , input = document . querySelector ( media . matches ? "[data-md-color-media='(prefers-color-scheme: light)']" : "[data-md-color-media='(prefers-color-scheme: dark)']" ) ; palette . color . media = input . getAttribute ( "data-md-color-media" ) , palette . color . scheme = input . getAttribute ( "data-md-color-scheme" ) , palette . color . primary = input . getAttribute ( "data-md-color-primary" ) , palette . color . accent = input . getAttribute ( "data-md-color-accent" ) } for ( var [ key , value ] of Object . entries ( palette . color ) ) document . body . setAttribute ( "data-md-color-" + key , value ) } < / script >
2024-08-20 18:13:15 +00:00
2024-08-28 18:28:22 +00:00
< label class = "md-header__button md-icon" for = "__search" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
2024-08-28 18:28:22 +00:00
< / label >
< div class = "md-search" data-md-component = "search" role = "dialog" >
< label class = "md-search__overlay" for = "__search" > < / label >
< div class = "md-search__inner" role = "search" >
< form class = "md-search__form" name = "search" >
< input type = "text" class = "md-search__input" name = "query" aria-label = "Search" placeholder = "Search" autocapitalize = "off" autocorrect = "off" autocomplete = "off" spellcheck = "false" data-md-component = "search-query" required >
< label class = "md-search__icon md-icon" for = "__search" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
2024-08-28 18:28:22 +00:00
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" / > < / svg >
2024-08-28 18:28:22 +00:00
< / label >
< nav class = "md-search__options" aria-label = "Search" >
< a href = "javascript:void(0)" class = "md-search__icon md-icon" title = "Share" aria-label = "Share" data-clipboard data-clipboard-text = "" data-md-component = "search-share" tabindex = "-1" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08" / > < / svg >
2024-08-28 18:28:22 +00:00
< / a >
< button type = "reset" class = "md-search__icon md-icon" title = "Clear" aria-label = "Clear" tabindex = "-1" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" / > < / svg >
2024-08-28 18:28:22 +00:00
< / button >
< / nav >
< / form >
< div class = "md-search__output" >
< div class = "md-search__scrollwrap" tabindex = "0" data-md-scrollfix >
< div class = "md-search-result" data-md-component = "search-result" >
< div class = "md-search-result__meta" >
Initializing search
< / div >
< ol class = "md-search-result__list" role = "presentation" > < / ol >
< / div >
< / div >
< / div >
< / div >
< / div >
2024-08-20 18:13:15 +00:00
< div class = "md-header__source" >
< a href = "https://github.com/freqtrade/freqtrade" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81" / > < / svg >
2024-08-20 18:13:15 +00:00
< / div >
< div class = "md-source__repository" >
GitHub
< / div >
< / a >
< / div >
< / nav >
< / header >
< div class = "md-container" data-md-component = "container" >
< main class = "md-main" data-md-component = "main" >
< div class = "md-main__inner md-grid" >
<!-- Main navigation -->
< div class = "md-sidebar md-sidebar--primary" data-md-component = "sidebar" data-md-type = "navigation" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--primary" aria-label = "Navigation" data-md-level = "0" >
< label class = "md-nav__title" for = "__drawer" >
< a href = ".." title = "Freqtrade" class = "md-nav__button md-logo" aria-label = "Freqtrade" data-md-component = "logo" >
< img src = "../images/logo.png" alt = "logo" >
< / a >
Freqtrade
< / label >
< div class = "md-nav__source" >
< a href = "https://github.com/freqtrade/freqtrade" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81" / > < / svg >
2024-08-20 18:13:15 +00:00
< / div >
< div class = "md-source__repository" >
GitHub
< / div >
< / a >
< / div >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = ".." class = "md-nav__link" >
< span class = "md-ellipsis" >
Home
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../docker_quickstart/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Quickstart with Docker
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3" >
< label class = "md-nav__link" for = "__nav_3" id = "__nav_3_label" tabindex = "0" >
< span class = "md-ellipsis" >
Installation
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_3_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3" >
< span class = "md-nav__icon md-icon" > < / span >
Installation
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../installation/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Linux/MacOS/Raspberry
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../windows_installation/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Windows
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../bot-basics/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Freqtrade Basics
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../configuration/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Configuration
< / span >
< / a >
< / li >
2024-10-21 04:47:18 +00:00
< li class = "md-nav__item" >
< a href = "../strategy-101/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strategy Quickstart
< / span >
< / a >
< / li >
2024-08-20 18:13:15 +00:00
< li class = "md-nav__item" >
< a href = "../strategy-customization/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strategy Customization
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../strategy-callbacks/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strategy Callbacks
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../stoploss/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Stoploss
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../plugins/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plugins
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../bot-usage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Start the bot
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--active md-nav__item--nested" >
2024-10-21 04:47:18 +00:00
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_12" checked >
2024-08-20 18:13:15 +00:00
2024-10-21 04:47:18 +00:00
< label class = "md-nav__link" for = "__nav_12" id = "__nav_12_label" tabindex = "0" >
2024-08-20 18:13:15 +00:00
< span class = "md-ellipsis" >
Control the bot
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
2024-10-21 04:47:18 +00:00
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_12_label" aria-expanded = "true" >
< label class = "md-nav__title" for = "__nav_12" >
2024-08-20 18:13:15 +00:00
< span class = "md-nav__icon md-icon" > < / span >
Control the bot
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../telegram-usage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Telegram
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freq-ui/" class = "md-nav__link" >
< span class = "md-ellipsis" >
freqUI
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../rest-api/" class = "md-nav__link" >
< span class = "md-ellipsis" >
REST API
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--active" >
< input class = "md-nav__toggle md-toggle" type = "checkbox" id = "__toc" >
< label class = "md-nav__link md-nav__link--active" for = "__toc" >
< span class = "md-ellipsis" >
Web Hook
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< a href = "./" class = "md-nav__link md-nav__link--active" >
< span class = "md-ellipsis" >
Web Hook
< / span >
< / a >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#configuration" class = "md-nav__link" >
< span class = "md-ellipsis" >
Configuration
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#additional-configurations" class = "md-nav__link" >
< span class = "md-ellipsis" >
Additional configurations
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#webhook-message-types" class = "md-nav__link" >
< span class = "md-ellipsis" >
Webhook Message types
< / span >
< / a >
< nav class = "md-nav" aria-label = "Webhook Message types" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#entry" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#entry-cancel" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry cancel
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#entry-fill" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry fill
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit-fill" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit fill
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit-cancel" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit cancel
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#status" class = "md-nav__link" >
< span class = "md-ellipsis" >
Status
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#discord" class = "md-nav__link" >
< span class = "md-ellipsis" >
Discord
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../data-download/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Data Downloading
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../backtesting/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Backtesting
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../hyperopt/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Hyperopt
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
2024-10-21 04:47:18 +00:00
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_16" >
2024-08-20 18:13:15 +00:00
2024-10-21 04:47:18 +00:00
< label class = "md-nav__link" for = "__nav_16" id = "__nav_16_label" tabindex = "0" >
2024-08-20 18:13:15 +00:00
< span class = "md-ellipsis" >
FreqAI
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
2024-10-21 04:47:18 +00:00
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_16_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_16" >
2024-08-20 18:13:15 +00:00
< span class = "md-nav__icon md-icon" > < / span >
FreqAI
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../freqai/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Introduction
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-configuration/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Configuration
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-parameter-table/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Parameter table
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-feature-engineering/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Feature engineering
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-running/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Running FreqAI
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-reinforcement-learning/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Reinforcement Learning
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../freqai-developers/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Developer guide
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../leverage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Short / Leverage
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../utils/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Utility Sub-commands
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../plotting/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plotting
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../exchanges/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exchange-specific Notes
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
2024-10-21 04:47:18 +00:00
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_21" >
2024-08-20 18:13:15 +00:00
2024-10-21 04:47:18 +00:00
< label class = "md-nav__link" for = "__nav_21" id = "__nav_21_label" tabindex = "0" >
2024-08-20 18:13:15 +00:00
< span class = "md-ellipsis" >
Data Analysis
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
2024-10-21 04:47:18 +00:00
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_21_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_21" >
2024-08-20 18:13:15 +00:00
< span class = "md-nav__icon md-icon" > < / span >
Data Analysis
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../data-analysis/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Jupyter Notebooks
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../strategy_analysis_example/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strategy analysis
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../advanced-backtesting/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Backtest analysis
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
2024-10-21 04:47:18 +00:00
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_22" >
2024-08-20 18:13:15 +00:00
2024-10-21 04:47:18 +00:00
< label class = "md-nav__link" for = "__nav_22" id = "__nav_22_label" tabindex = "0" >
2024-08-20 18:13:15 +00:00
< span class = "md-ellipsis" >
Advanced Topics
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
2024-10-21 04:47:18 +00:00
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_22_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_22" >
2024-08-20 18:13:15 +00:00
< span class = "md-nav__icon md-icon" > < / span >
Advanced Topics
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../advanced-setup/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Advanced Post-installation Tasks
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../trade-object/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Trade Object
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../lookahead-analysis/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Lookahead analysis
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../recursive-analysis/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Recursive analysis
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../strategy-advanced/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Advanced Strategy
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../advanced-hyperopt/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Advanced Hyperopt
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../advanced-orderflow/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Orderflow
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../producer-consumer/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Producer/Consumer mode
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../sql_cheatsheet/" class = "md-nav__link" >
< span class = "md-ellipsis" >
SQL Cheat-sheet
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../edge/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Edge Positioning
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../faq/" class = "md-nav__link" >
< span class = "md-ellipsis" >
FAQ
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../strategy_migration/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strategy migration
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../updating/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Updating Freqtrade
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../deprecated/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Deprecated Features
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../developer/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Contributors Guide
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
<!-- Table of contents -->
< div class = "md-sidebar md-sidebar--secondary" data-md-component = "sidebar" data-md-type = "toc" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#configuration" class = "md-nav__link" >
< span class = "md-ellipsis" >
Configuration
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#additional-configurations" class = "md-nav__link" >
< span class = "md-ellipsis" >
Additional configurations
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#webhook-message-types" class = "md-nav__link" >
< span class = "md-ellipsis" >
Webhook Message types
< / span >
< / a >
< nav class = "md-nav" aria-label = "Webhook Message types" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#entry" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#entry-cancel" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry cancel
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#entry-fill" class = "md-nav__link" >
< span class = "md-ellipsis" >
Entry fill
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit-fill" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit fill
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#exit-cancel" class = "md-nav__link" >
< span class = "md-ellipsis" >
Exit cancel
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#status" class = "md-nav__link" >
< span class = "md-ellipsis" >
Status
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#discord" class = "md-nav__link" >
< span class = "md-ellipsis" >
Discord
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-content" data-md-component = "content" >
< article class = "md-content__inner md-typeset" >
< h1 id = "webhook-usage" > Webhook usage< a class = "headerlink" href = "#webhook-usage" title = "Permanent link" > ¶ < / a > < / h1 >
< h2 id = "configuration" > Configuration< a class = "headerlink" href = "#configuration" title = "Permanent link" > ¶ < / a > < / h2 >
< p > Enable webhooks by adding a webhook-section to your configuration file, and setting < code > webhook.enabled< / code > to < code > true< / code > .< / p >
< p > Sample configuration (tested using IFTTT).< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " webhook" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://maker.ifttt.com/trigger/< YOUREVENT> /with/key/< YOURKEY> /" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " entry" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Buying {pair}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " limit {limit:8f}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {stake_amount:8f} {stake_currency}" < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " entry_cancel" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Cancelling Open Buy Order for {pair}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " limit {limit:8f}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {stake_amount:8f} {stake_currency}" < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " entry_fill" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Buy Order for {pair} filled" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " at {open_rate:8f}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " exit" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Exiting {pair}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " limit {limit:8f}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " profit: {profit_amount:8f} {stake_currency} ({profit_ratio})" < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " exit_cancel" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Cancelling Open Exit Order for {pair}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " limit {limit:8f}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " profit: {profit_amount:8f} {stake_currency} ({profit_ratio})" < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " exit_fill" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Exit Order for {pair} filled" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " at {close_rate:8f}." < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "nt" > " status" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " value1" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Status: {status}" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value2" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " value3" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " " < / span >
< span class = "w" > < / span > < span class = "p" > }< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
< p > The url in < code > webhook.url< / code > should point to the correct url for your webhook. If you're using < a href = "https://ifttt.com" > IFTTT< / a > (as shown in the sample above) please insert your event and key to the url.< / p >
< p > You can set the POST body format to Form-Encoded (default), JSON-Encoded, or raw data. Use < code > "format": "form"< / code > , < code > "format": "json"< / code > , or < code > "format": "raw"< / code > respectively. Example configuration for Mattermost Cloud integration:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " webhook" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://< YOURSUBDOMAIN> .cloud.mattermost.com/hooks/< YOURHOOK> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " format" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " json" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " status" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " text" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Status: {status}" < / span >
< span class = "w" > < / span > < span class = "p" > }< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
< p > The result would be a POST request with e.g. < code > {"text":"Status: running"}< / code > body and < code > Content-Type: application/json< / code > header which results < code > Status: running< / code > message in the Mattermost channel.< / p >
< p > When using the Form-Encoded or JSON-Encoded configuration you can configure any number of payload values, and both the key and value will be output in the POST request. However, when using the raw data format you can only configure one value and it < strong > must< / strong > be named < code > "data"< / code > . In this instance the data key will not be output in the POST request, only the value. For example:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " webhook" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://< YOURHOOKURL> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " format" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " raw" < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " webhookstatus" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " data" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Status: {status}" < / span >
< span class = "w" > < / span > < span class = "p" > }< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
< p > The result would be a POST request with e.g. < code > Status: running< / code > body and < code > Content-Type: text/plain< / code > header.< / p >
< h2 id = "additional-configurations" > Additional configurations< a class = "headerlink" href = "#additional-configurations" title = "Permanent link" > ¶ < / a > < / h2 >
< p > The < code > webhook.retries< / code > parameter can be set for the maximum number of retries the webhook request should attempt if it is unsuccessful (i.e. HTTP response status is not 200). By default this is set to < code > 0< / code > which is disabled. An additional < code > webhook.retry_delay< / code > parameter can be set to specify the time in seconds between retry attempts. By default this is set to < code > 0.1< / code > (i.e. 100ms). Note that increasing the number of retries or retry delay may slow down the trader if there are connectivity issues with the webhook.
You can also specify < code > webhook.timeout< / code > - which defines how long the bot will wait until it assumes the other host as unresponsive (defaults to 10s).< / p >
< p > Example configuration for retries:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " webhook" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://< YOURHOOKURL> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " timeout" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mi" > 10< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " retries" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mi" > 3< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " retry_delay" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mf" > 0.2< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " status" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " status" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Status: {status}" < / span >
< span class = "w" > < / span > < span class = "p" > }< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
< p > Custom messages can be sent to Webhook endpoints via the < code > self.dp.send_msg()< / code > function from within the strategy. To enable this, set the < code > allow_custom_messages< / code > option to < code > true< / code > :< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " webhook" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://< YOURHOOKURL> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " allow_custom_messages" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " strategy_msg" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " status" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " StrategyMessage: {msg}" < / span >
< span class = "w" > < / span > < span class = "p" > }< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
< p > Different payloads can be configured for different events. Not all fields are necessary, but you should configure at least one of the dicts, otherwise the webhook will never be called.< / p >
< h2 id = "webhook-message-types" > Webhook Message types< a class = "headerlink" href = "#webhook-message-types" title = "Permanent link" > ¶ < / a > < / h2 >
< h3 id = "entry" > Entry< a class = "headerlink" href = "#entry" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.entry< / code > are filled when the bot executes a long/short. Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < del > < code > limit< / code > # Deprecated - should no longer be used.< / del > < / li >
< li > < code > open_rate< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > stake_amount< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > current_rate< / code > < / li >
< li > < code > enter_tag< / code > < / li >
< / ul >
< h3 id = "entry-cancel" > Entry cancel< a class = "headerlink" href = "#entry-cancel" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.entry_cancel< / code > are filled when the bot cancels a long/short order. Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < code > limit< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > stake_amount< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > current_rate< / code > < / li >
< li > < code > enter_tag< / code > < / li >
< / ul >
< h3 id = "entry-fill" > Entry fill< a class = "headerlink" href = "#entry-fill" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.entry_fill< / code > are filled when the bot filled a long/short order. Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < code > open_rate< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > stake_amount< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > current_rate< / code > < / li >
< li > < code > enter_tag< / code > < / li >
< / ul >
< h3 id = "exit" > Exit< a class = "headerlink" href = "#exit" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.exit< / code > are filled when the bot exits a trade. Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < code > gain< / code > < / li >
< li > < code > limit< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_rate< / code > < / li >
< li > < code > profit_amount< / code > < / li >
< li > < code > profit_ratio< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > exit_reason< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > close_date< / code > < / li >
< / ul >
< h3 id = "exit-fill" > Exit fill< a class = "headerlink" href = "#exit-fill" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.exit_fill< / code > are filled when the bot fills a exit order (closes a Trade). Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < code > gain< / code > < / li >
< li > < code > close_rate< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_rate< / code > < / li >
< li > < code > current_rate< / code > < / li >
< li > < code > profit_amount< / code > < / li >
< li > < code > profit_ratio< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > exit_reason< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > close_date< / code > < / li >
< / ul >
< h3 id = "exit-cancel" > Exit cancel< a class = "headerlink" href = "#exit-cancel" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.exit_cancel< / code > are filled when the bot cancels a exit order. Parameters are filled using string.format.
Possible parameters are:< / p >
< ul >
< li > < code > trade_id< / code > < / li >
< li > < code > exchange< / code > < / li >
< li > < code > pair< / code > < / li >
< li > < code > direction< / code > < / li >
< li > < code > leverage< / code > < / li >
< li > < code > gain< / code > < / li >
< li > < code > limit< / code > < / li >
< li > < code > amount< / code > < / li >
< li > < code > open_rate< / code > < / li >
< li > < code > current_rate< / code > < / li >
< li > < code > profit_amount< / code > < / li >
< li > < code > profit_ratio< / code > < / li >
< li > < code > stake_currency< / code > < / li >
< li > < code > base_currency< / code > < / li >
< li > < code > quote_currency< / code > < / li >
< li > < code > fiat_currency< / code > < / li >
< li > < code > exit_reason< / code > < / li >
< li > < code > order_type< / code > < / li >
< li > < code > open_date< / code > < / li >
< li > < code > close_date< / code > < / li >
< / ul >
< h3 id = "status" > Status< a class = "headerlink" href = "#status" title = "Permanent link" > ¶ < / a > < / h3 >
< p > The fields in < code > webhook.status< / code > are used for regular status messages (Started / Stopped / ...). Parameters are filled using string.format.< / p >
< p > The only possible value here is < code > {status}< / code > .< / p >
< h2 id = "discord" > Discord< a class = "headerlink" href = "#discord" title = "Permanent link" > ¶ < / a > < / h2 >
< p > A special form of webhooks is available for discord.
You can configure this as follows:< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "nt" > " discord" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " webhook_url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://discord.com/api/webhooks/< Your webhook URL ...> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " exit_fill" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > [< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Trade ID" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {trade_id}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Exchange" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {exchange}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Pair" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {pair}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Direction" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {direction}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Open rate" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {open_rate}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Close rate" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {close_rate}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Amount" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {amount}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Open date" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {open_date:%Y-%m-%d %H:%M:%S}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Close date" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {close_date:%Y-%m-%d %H:%M:%S}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Profit" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {profit_amount} {stake_currency}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Profitability" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {profit_ratio:.2%}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Enter tag" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {enter_tag}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Exit Reason" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {exit_reason}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Strategy" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {strategy}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Timeframe" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {timeframe}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > ],< / span >
< span class = "w" > < / span > < span class = "nt" > " entry_fill" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > [< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Trade ID" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {trade_id}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Exchange" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {exchange}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Pair" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {pair}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Direction" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {direction}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Open rate" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {open_rate}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Amount" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {amount}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Open date" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {open_date:%Y-%m-%d %H:%M:%S}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Enter tag" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {enter_tag}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > {< / span > < span class = "nt" > " Strategy" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " {strategy} {timeframe}" < / span > < span class = "p" > },< / span >
< span class = "w" > < / span > < span class = "p" > ]< / span >
< span class = "p" > }< / span >
< / code > < / pre > < / div >
< p > The above represents the default (< code > exit_fill< / code > and < code > entry_fill< / code > are optional and will default to the above configuration) - modifications are obviously possible.
To disable either of the two default values (< code > entry_fill< / code > / < code > exit_fill< / code > ), you can assign them an empty array (< code > exit_fill: []< / code > ).< / p >
< p > Available fields correspond to the fields for webhooks and are documented in the corresponding webhook sections.< / p >
< p > The notifications will look as follows by default.< / p >
< p > < img alt = "discord-notification" src = "../assets/discord_notification.png" / > < / p >
< p > Custom messages can be sent from a strategy to Discord endpoints via the dataprovider.send_msg() function. To enable this, set the < code > allow_custom_messages< / code > option to < code > true< / code > :< / p >
< div class = "highlight" > < pre > < span > < / span > < code > < span class = "w" > < / span > < span class = "nt" > " discord" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< span class = "w" > < / span > < span class = "nt" > " enabled" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " webhook_url" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " https://discord.com/api/webhooks/< Your webhook URL ...> " < / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "nt" > " allow_custom_messages" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span >
< span class = "w" > < / span > < span class = "p" > },< / span >
< / code > < / pre > < / div >
2024-09-04 19:11:37 +00:00
2024-08-20 18:13:15 +00:00
< / article >
< / div >
< script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) < / script >
< / div >
< button type = "button" class = "md-top md-icon" data-md-component = "top" hidden >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z" / > < / svg >
2024-08-20 18:13:15 +00:00
Back to top
< / button >
< / main >
< footer class = "md-footer" >
< nav class = "md-footer__inner md-grid" aria-label = "Footer" >
< a href = "../rest-api/" class = "md-footer__link md-footer__link--prev" aria-label = "Previous: REST API" >
< div class = "md-footer__button md-icon" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" / > < / svg >
2024-08-20 18:13:15 +00:00
< / div >
< div class = "md-footer__title" >
< span class = "md-footer__direction" >
Previous
< / span >
< div class = "md-ellipsis" >
REST API
< / div >
< / div >
< / a >
< a href = "../data-download/" class = "md-footer__link md-footer__link--next" aria-label = "Next: Data Downloading" >
< div class = "md-footer__title" >
< span class = "md-footer__direction" >
Next
< / span >
< div class = "md-ellipsis" >
Data Downloading
< / div >
< / div >
< div class = "md-footer__button md-icon" >
2024-09-02 04:57:49 +00:00
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z" / > < / svg >
2024-08-20 18:13:15 +00:00
< / div >
< / a >
< / nav >
< div class = "md-footer-meta md-typeset" >
< div class = "md-footer-meta__inner md-grid" >
< div class = "md-copyright" >
Made with
< a href = "https://squidfunk.github.io/mkdocs-material/" target = "_blank" rel = "noopener" >
Material for MkDocs
< / a >
< / div >
< / div >
< / div >
< / footer >
<!-- Place this tag in your head or just before your close body tag. -->
< script async defer src = "https://buttons.github.io/buttons.js" > < / script >
< script src = "https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous">< / script >
< / div >
< div class = "md-dialog" data-md-component = "dialog" >
< div class = "md-dialog__inner md-typeset" > < / div >
< / div >
2024-09-23 06:38:12 +00:00
< script id = "__config" type = "application/json" > { "base" : ".." , "features" : [ "content.code.annotate" , "search.share" , "content.code.copy" , "navigation.top" , "navigation.footer" ] , "search" : "../assets/javascripts/workers/search.6ce7567c.min.js" , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } , "version" : { "alias" : true , "provider" : "mike" } } < / script >
2024-08-20 18:13:15 +00:00
2024-10-21 05:32:43 +00:00
< script src = "../assets/javascripts/bundle.83f73b43.min.js" > < / script >
2024-08-20 18:13:15 +00:00
< script src = "../javascripts/config.js" > < / script >
< script src = "https://polyfill.io/v3/polyfill.min.js?features=es6" > < / script >
< script src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" > < / script >
< / body >
< / html >