Timeframe
15m
Direction
Long Only
Stoploss
-100.0%
Trailing Stop
No
ROI
120m: 30.1%, 125m: 29.9%, 130m: 29.7%, 135m: 29.5%
Interface Version
2
Startup Candles
N/A
Indicators
10
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
import logging
import numpy as np # noqa
import pandas as pd # noqa
from pandas import DataFrame
from sqlalchemy.orm.base import RELATED_OBJECT_OK
from sqlalchemy.sql.elements import or_
import talib.abstract as ta
import pandas_ta as pta
import freqtrade.vendor.qtpylib.indicators as qtpylib
from freqtrade.exchange import timeframe_to_minutes
from freqtrade.persistence import Trade
from technical import indicators
from datetime import datetime, timezone
from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter, RealParameter,
IStrategy, IntParameter, merge_informative_pair)
class flawless_lambo(IStrategy):
# Add some logging
logger = logging.getLogger(__name__)
# Strategy interface version - allow new iterations of the strategy interface.
# Check the documentation or the Sample strategy to get the latest version.
INTERFACE_VERSION = 2
@property
def protections(self):
return [
{
"method": "MaxDrawdown",
"lookback_period": 360,
"trade_limit": 1,
"stop_duration": 720,
"max_allowed_drawdown": 0.05
},
{
"method": "StoplossGuard",
"lookback_period": 4320,
"trade_limit": 1,
"stop_duration": 10080,
"only_per_pair": True
},
{
"method": "LowProfitPairs",
"lookback_period": 1440,
"trade_limit": 1,
"stop_duration": 1440,
"required_profit": 0.003
}
]
# Minimal ROI designed for the strategy.
# This attribute will be overridden if the config file contains "minimal_roi".
# ROI1 table:
minimal_roi = {
"120": 0.30135315985130107,
"125": 0.29907620817843866,
"130": 0.2967992565055762,
"135": 0.29452230483271374,
"140": 0.2922453531598513,
"145": 0.2899684014869888,
"150": 0.28769144981412637,
"155": 0.2854144981412639,
"160": 0.2831375464684015,
"165": 0.28086059479553904,
"170": 0.2785836431226766,
"175": 0.2763066914498141,
"180": 0.27402973977695166,
"185": 0.2717527881040892,
"190": 0.26947583643122675,
"195": 0.2671988847583643,
"200": 0.2649219330855018,
"205": 0.26264498141263937,
"210": 0.2603680297397769,
"215": 0.25809107806691445,
"220": 0.25581412639405204,
"225": 0.2535371747211896,
"230": 0.2512602230483271,
"235": 0.2489832713754647,
"240": 0.2467063197026022,
"245": 0.24442936802973975,
"250": 0.2421524163568773,
"255": 0.23987546468401488,
"260": 0.2375985130111524,
"265": 0.23532156133828996,
"270": 0.2330446096654275,
"275": 0.23076765799256505,
"280": 0.2284907063197026,
"285": 0.22621375464684013,
"290": 0.22393680297397767,
"295": 0.22165985130111523,
"300": 0.2193828996282528,
"305": 0.21710594795539032,
"310": 0.21482899628252783,
"315": 0.2125520446096654,
"320": 0.21027509293680297,
"325": 0.2079981412639405,
"330": 0.20572118959107805,
"335": 0.2034442379182156,
"340": 0.20116728624535313,
"345": 0.1988903345724907,
"350": 0.19661338289962824,
"355": 0.19433643122676575,
"360": 0.19205947955390332,
"365": 0.18978252788104089,
"370": 0.18750557620817845,
"375": 0.18522862453531597,
"380": 0.1829516728624535,
"385": 0.18067472118959105,
"390": 0.17839776951672862,
"395": 0.17612081784386616,
"400": 0.1738438661710037,
"405": 0.17156691449814124,
"410": 0.16928996282527878,
"415": 0.16701301115241635,
"420": 0.1647360594795539,
"425": 0.16245910780669143,
"430": 0.16018215613382897,
"435": 0.15790520446096654,
"440": 0.15562825278810408,
"445": 0.15335130111524162,
"450": 0.15107434944237916,
"455": 0.1487973977695167,
"460": 0.14652044609665427,
"465": 0.1442434944237918,
"470": 0.14196654275092935,
"475": 0.1396895910780669,
"480": 0.13741263940520443,
"485": 0.135135687732342,
"490": 0.13285873605947954,
"495": 0.13058178438661708,
"500": 0.12830483271375462,
"505": 0.1260278810408922,
"510": 0.12375092936802971,
"515": 0.12147397769516728,
"520": 0.1191970260223048,
"525": 0.11692007434944236,
"530": 0.11464312267657992,
"535": 0.11236617100371746,
"540": 0.11079597315436242,
"545": 0.11028590604026846,
"550": 0.1097758389261745,
"555": 0.10926577181208054,
"560": 0.10875570469798658,
"565": 0.10824563758389262,
"570": 0.10773557046979866,
"575": 0.1072255033557047,
"580": 0.10671543624161074,
"585": 0.10620536912751678,
"590": 0.10569530201342282,
"595": 0.10518523489932886,
"600": 0.1046751677852349,
"605": 0.10416510067114094,
"610": 0.103655033557047,
"615": 0.10314496644295304,
"620": 0.10263489932885908,
"625": 0.10212483221476512,
"630": 0.10161476510067116,
"635": 0.1011046979865772,
"640": 0.10059463087248324,
"645": 0.10008456375838928,
"650": 0.0995744966442953,
"655": 0.09906442953020134,
"660": 0.09855436241610738,
"665": 0.09804429530201342,
"670": 0.09753422818791946,
"675": 0.0970241610738255,
"680": 0.09651409395973154,
"685": 0.09600402684563758,
"690": 0.09549395973154362,
"695": 0.09498389261744966,
"700": 0.0944738255033557,
"705": 0.09396375838926174,
"710": 0.09345369127516778,
"715": 0.09294362416107382,
"720": 0.09243355704697986,
"725": 0.0919234899328859,
"730": 0.09141342281879196,
"735": 0.090903355704698,
"740": 0.09039328859060404,
"745": 0.08988322147651007,
"750": 0.08937315436241611,
"755": 0.08886308724832215,
"760": 0.08835302013422819,
"765": 0.08784295302013423,
"770": 0.08733288590604027,
"775": 0.08682281879194631,
"780": 0.08631275167785235,
"785": 0.08580268456375839,
"790": 0.08529261744966443,
"795": 0.08478255033557047,
"800": 0.08427248322147651,
"805": 0.08376241610738255,
"810": 0.0832523489932886,
"815": 0.08274228187919463,
"820": 0.08223221476510068,
"825": 0.08172214765100672,
"830": 0.08121208053691276,
"835": 0.0807020134228188,
"840": 0.08019194630872484,
"845": 0.07968187919463088,
"850": 0.07917181208053692,
"855": 0.07866174496644296,
"860": 0.078151677852349,
"865": 0.07764161073825504,
"870": 0.07713154362416108,
"875": 0.07662147651006712,
"880": 0.07611140939597316,
"885": 0.0756013422818792,
"890": 0.07509127516778524,
"895": 0.07458120805369128,
"900": 0.07407114093959732,
"905": 0.07356107382550336,
"910": 0.0730510067114094,
"915": 0.07254093959731545,
"920": 0.07203087248322149,
"925": 0.07152080536912753,
"930": 0.07101073825503357,
"935": 0.07050067114093961,
"940": 0.06999060402684565,
"945": 0.06948053691275169,
"950": 0.06897046979865773,
"955": 0.06846040268456377,
"960": 0.06795033557046981,
"965": 0.06744026845637585,
"970": 0.06693020134228189,
"975": 0.06642013422818793,
"980": 0.06591006711409397,
"985": 0.06540000000000001,
"990": 0.06488993288590604,
"995": 0.06437986577181208,
"1000": 0.06386979865771812,
"1005": 0.06335973154362416,
"1010": 0.0628496644295302,
"1015": 0.06233959731543624,
"1020": 0.06182953020134229,
"1025": 0.06131946308724832,
"1030": 0.060809395973154365,
"1035": 0.060299328859060405,
"1040": 0.059789261744966446,
"1045": 0.059279194630872487,
"1050": 0.05876912751677853,
"1055": 0.05825906040268457,
"1060": 0.05774899328859061,
"1065": 0.05723892617449665,
"1070": 0.05672885906040269,
"1075": 0.05621879194630873,
"1080": 0.05570872483221477,
"1085": 0.05519865771812081,
"1090": 0.05468859060402685,
"1095": 0.05417852348993289,
"1100": 0.05366845637583893,
"1105": 0.05315838926174497,
"1110": 0.052648322147651014,
"1115": 0.05213825503355705,
"1120": 0.05162818791946309,
"1125": 0.05111812080536913,
"1130": 0.05060805369127517,
"1135": 0.05009798657718121,
"1140": 0.04958791946308725,
"1145": 0.04907785234899329,
"1150": 0.04856778523489933,
"1155": 0.04805771812080538,
"1160": 0.04754765100671142,
"1165": 0.04703758389261746,
"1170": 0.0465275167785235,
"1175": 0.04601744966442954,
"1180": 0.04550738255033557,
"1185": 0.04499731543624161,
"1190": 0.04448724832214765,
"1195": 0.04397718120805369,
"1200": 0.04346711409395973,
"1205": 0.04295704697986577,
"1210": 0.04244697986577181,
"1215": 0.04193691275167785,
"1220": 0.04142684563758389,
"1225": 0.04091677852348993,
"1230": 0.04040671140939597,
"1235": 0.039896644295302014,
"1240": 0.039386577181208055,
"1245": 0.038876510067114095,
"1250": 0.038366442953020136,
"1255": 0.037856375838926176,
"1260": 0.03734630872483222,
"1265": 0.03683624161073826,
"1270": 0.0363261744966443,
"1275": 0.03581610738255034,
"1280": 0.03530604026845638,
"1285": 0.03497163695299838,
"1290": 0.03490072933549433,
"1295": 0.03482982171799028,
"1300": 0.034758914100486225,
"1305": 0.034688006482982175,
"1310": 0.034617098865478126,
"1315": 0.03454619124797407,
"1320": 0.03447528363047002,
"1325": 0.03440437601296597,
"1330": 0.03433346839546192,
"1335": 0.03426256077795786,
"1340": 0.03419165316045381,
"1345": 0.03412074554294976,
"1350": 0.034049837925445706,
"1355": 0.033978930307941656,
"1360": 0.033908022690437606,
"1365": 0.033837115072933556,
"1370": 0.0337662074554295,
"1375": 0.03369529983792545,
"1380": 0.0336243922204214,
"1385": 0.03355348460291734,
"1390": 0.03348257698541329,
"1395": 0.03341166936790924,
"1400": 0.03334076175040519,
"1405": 0.033269854132901136,
"1410": 0.033198946515397086,
"1415": 0.033128038897893036,
"1420": 0.03305713128038898,
"1425": 0.03298622366288493,
"1430": 0.03291531604538088,
"1435": 0.03284440842787682,
"1440": 0.03277350081037277,
"1445": 0.03270259319286872,
"1450": 0.03263168557536467,
"1455": 0.032560777957860616,
"1460": 0.032489870340356566,
"1465": 0.032418962722852517,
"1470": 0.03234805510534847,
"1475": 0.03227714748784441,
"1480": 0.03220623987034036,
"1485": 0.03213533225283631,
"1490": 0.03206442463533225,
"1495": 0.0319935170178282,
"1500": 0.03192260940032415,
"1505": 0.031851701782820104,
"1510": 0.03178079416531605,
"1515": 0.031709886547812,
"1520": 0.03163897893030795,
"1525": 0.03156807131280389,
"1530": 0.03149716369529984,
"1535": 0.03142625607779579,
"1540": 0.03135534846029174,
"1545": 0.031284440842787684,
"1550": 0.031213533225283634,
"1555": 0.03114262560777958,
"1560": 0.03107171799027553,
"1565": 0.031000810372771477,
"1570": 0.030929902755267427,
"1575": 0.030858995137763377,
"1580": 0.03078808752025932,
"1585": 0.03071717990275527,
"1590": 0.03064627228525122,
"1595": 0.030575364667747167,
"1600": 0.03050445705024311,
"1605": 0.030433549432739064,
"1610": 0.03036264181523501,
"1615": 0.030291734197730957,
"1620": 0.030220826580226907,
"1625": 0.030149918962722858,
"1630": 0.030079011345218804,
"1635": 0.03000810372771475,
"1640": 0.0299371961102107,
"1645": 0.029866288492706648,
"1650": 0.02979538087520259,
"1655": 0.029724473257698544,
"1660": 0.029653565640194494,
"1665": 0.02958265802269044,
"1670": 0.029511750405186388,
"1675": 0.029440842787682334,
"1680": 0.029369935170178284,
"1685": 0.02929902755267423,
"1690": 0.02922811993517018,
"1695": 0.02915721231766613,
"1700": 0.02908630470016208,
"1705": 0.029015397082658025,
"1710": 0.028944489465153975,
"1715": 0.02887358184764992,
"1720": 0.028802674230145868,
"1725": 0.028731766612641815,
"1730": 0.028660858995137768,
"1735": 0.028589951377633715,
"1740": 0.02851904376012966,
"1745": 0.02844813614262561,
"1750": 0.02837722852512156,
"1755": 0.028306320907617505,
"1760": 0.028235413290113455,
"1765": 0.028164505672609405,
"1770": 0.02809359805510535,
"1775": 0.0280226904376013,
"1780": 0.02795178282009725,
"1785": 0.027880875202593195,
"1790": 0.027809967585089145,
"1795": 0.027739059967585092,
"1800": 0.02766815235008104,
"1805": 0.02759724473257699,
"1810": 0.027526337115072935,
"1815": 0.027455429497568885,
"1820": 0.027384521880064832,
"1825": 0.02731361426256078,
"1830": 0.02724270664505673,
"1835": 0.02717179902755268,
"1840": 0.027100891410048625,
"1845": 0.027029983792544572,
"1850": 0.02695907617504052,
"1855": 0.02688816855753647,
"1860": 0.026817260940032416,
"1865": 0.02674635332252837,
"1870": 0.026675445705024316,
"1875": 0.026604538087520262,
"1880": 0.02653363047001621,
"1885": 0.02646272285251216,
"1890": 0.026391815235008102,
"1895": 0.026320907617504052,
"1900": 0.02625,
"1905": 0.026179092382495953,
"1910": 0.0261081847649919,
"1915": 0.02603727714748785,
"1920": 0.025966369529983796,
"1925": 0.025895461912479743,
"1930": 0.02582455429497569,
"1935": 0.02575364667747164,
"1940": 0.02568273905996759,
"1945": 0.025611831442463536,
"1950": 0.025540923824959483,
"1955": 0.025470016207455433,
"1960": 0.02539910858995138,
"1965": 0.02532820097244733,
"1970": 0.025257293354943276,
"1975": 0.025186385737439223,
"1980": 0.025115478119935173,
"1985": 0.02504457050243112,
"1990": 0.02497366288492707,
"1995": 0.024902755267423016,
"2000": 0.024831847649918963,
"2005": 0.024760940032414913,
"2010": 0.024690032414910863,
"2015": 0.02461912479740681,
"2020": 0.024548217179902757,
"2025": 0.024477309562398707,
"2030": 0.024406401944894653,
"2035": 0.0243354943273906,
"2040": 0.02426458670988655,
"2045": 0.0241936790923825,
"2050": 0.024122771474878447,
"2055": 0.024051863857374393,
"2060": 0.023980956239870344,
"2065": 0.02391004862236629,
"2070": 0.023839141004862237,
"2075": 0.023768233387358187,
"2080": 0.023697325769854137,
"2085": 0.023626418152350084,
"2090": 0.02355551053484603,
"2095": 0.02348460291734198,
"2100": 0.023413695299837927,
"2105": 0.023342787682333874,
"2110": 0.023271880064829824,
"2115": 0.023200972447325777,
"2120": 0.02313006482982172,
"2125": 0.023059157212317667,
"2130": 0.022988249594813617,
"2135": 0.022917341977309564,
"2140": 0.02284643435980551,
"2145": 0.02277552674230146,
"2150": 0.02270461912479741,
"2155": 0.022633711507293357,
"2160": 0.022562803889789304,
"2165": 0.022491896272285258,
"2170": 0.0224209886547812,
"2175": 0.022350081037277147,
"2180": 0.022279173419773098,
"2185": 0.022208265802269048,
"2190": 0.02213735818476499,
"2195": 0.02206645056726094,
"2200": 0.02199554294975689,
"2205": 0.02192463533225284,
"2210": 0.021853727714748784,
"2215": 0.021782820097244734,
"2220": 0.021711912479740685,
"2225": 0.02164100486223663,
"2230": 0.021570097244732574,
"2235": 0.021499189627228528,
"2240": 0.021428282009724475,
"2245": 0.02135737439222042,
"2250": 0.02128646677471637,
"2255": 0.02121555915721232,
"2260": 0.021144651539708268,
"2265": 0.021073743922204215,
"2270": 0.021002836304700165,
"2275": 0.02093192868719611,
"2280": 0.020861021069692055,
"2285": 0.020790113452188008,
"2290": 0.02071920583468396,
"2295": 0.020648298217179905,
"2300": 0.02057739059967585,
"2305": 0.0205064829821718,
"2310": 0.020435575364667752,
"2315": 0.020364667747163695,
"2320": 0.020293760129659645,
"2325": 0.020222852512155595,
"2330": 0.020151944894651545,
"2335": 0.02008103727714749,
"2340": 0.02001012965964344,
"2345": 0.01993922204213939,
"2350": 0.019868314424635332,
"2355": 0.01979740680713128,
"2360": 0.019726499189627232,
"2365": 0.01965559157212318,
"2370": 0.019584683954619125,
"2375": 0.019513776337115075,
"2380": 0.019442868719611026,
"2385": 0.019371961102106972,
"2390": 0.01930105348460292,
"2395": 0.01923014586709887,
"2400": 0.019159238249594816,
"2405": 0.01908833063209076,
"2410": 0.019017423014586712,
"2415": 0.01894651539708266,
"2420": 0.01887560777957861,
"2425": 0.018804700162074556,
"2430": 0.018733792544570502,
"2435": 0.018662884927066452,
"2440": 0.0185919773095624,
"2445": 0.01852106969205835,
"2450": 0.018450162074554296,
"2455": 0.01837925445705025,
"2460": 0.018308346839546193,
"2465": 0.018237439222042143,
"2470": 0.01816653160453809,
"2475": 0.018095623987034036,
"2480": 0.018024716369529983,
"2485": 0.017953808752025933,
"2490": 0.017882901134521883,
"2495": 0.01781199351701783,
"2500": 0.01774108589951378,
"2505": 0.017670178282009726,
"2510": 0.017599270664505673,
"2515": 0.017528363047001623,
"2520": 0.01745745542949757,
"2525": 0.01738654781199352,
"2530": 0.017315640194489466,
"2535": 0.017244732576985417,
"2540": 0.017173824959481363,
"2545": 0.01710291734197731,
"2550": 0.01703200972447326,
"2555": 0.016961102106969207,
"2560": 0.016890194489465157,
"2565": 0.016819286871961103,
"2570": 0.016748379254457053,
"2575": 0.016677471636953,
"2580": 0.016606564019448947,
"2585": 0.016535656401944897,
"2590": 0.016464748784440843,
"2595": 0.016393841166936794,
"2600": 0.01632293354943274,
"2605": 0.01625202593192869,
"2610": 0.016181118314424637,
"2615": 0.016110210696920584,
"2620": 0.016039303079416534,
"2625": 0.01596839546191248,
"2630": 0.01589748784440843,
"2635": 0.015826580226904377,
"2640": 0.015755672609400327,
"2645": 0.015684764991896274,
"2650": 0.01561385737439222,
"2655": 0.01554294975688817,
"2660": 0.015472042139384115,
"2665": 0.015401134521880067,
"2670": 0.015330226904376014,
"2675": 0.015259319286871964,
"2680": 0.01518841166936791,
"2685": 0.015117504051863856,
"2690": 0.015046596434359807,
"2695": 0.014975688816855754,
"2700": 0.014904781199351704,
"2705": 0.01483387358184765,
"2710": 0.0147629659643436,
"2715": 0.014692058346839548,
"2720": 0.014621150729335494,
"2725": 0.014550243111831444,
"2730": 0.014479335494327393,
"2735": 0.01440842787682334,
"2740": 0.014337520259319288,
"2745": 0.014266612641815238,
"2750": 0.014195705024311184,
"2755": 0.014124797406807133,
"2760": 0.01405388978930308,
"2765": 0.013982982171799028,
"2770": 0.013912074554294978,
"2775": 0.013841166936790925,
"2780": 0.013770259319286876,
"2785": 0.01369935170178282,
"2790": 0.013628444084278771,
"2795": 0.013557536466774718,
"2800": 0.013486628849270665,
"2805": 0.013415721231766617,
"2810": 0.01334481361426256,
"2815": 0.013273905996758512,
"2820": 0.013202998379254458,
"2825": 0.013132090761750408,
"2830": 0.013061183144246357,
"2835": 0.012990275526742302,
"2840": 0.012919367909238252,
"2845": 0.012848460291734198,
"2850": 0.012777552674230148,
"2855": 0.012706645056726097,
"2860": 0.012635737439222043,
"2865": 0.012564829821717992,
"2870": 0.012493922204213938,
"2875": 0.012423014586709889,
"2880": 0.012352106969205835,
"2885": 0.012281199351701784,
"2890": 0.012210291734197732,
"2895": 0.012139384116693682,
"2900": 0.012068476499189629,
"2905": 0.011997568881685575,
"2910": 0.011926661264181524,
"2915": 0.011855753646677472,
"2920": 0.011784846029173422,
"2925": 0.011713938411669369,
"2930": 0.01164303079416532,
"2935": 0.011572123176661266,
"2940": 0.011501215559157212,
"2945": 0.011430307941653162,
"2950": 0.011359400324149107,
"2955": 0.01128849270664506,
"2960": 0.011217585089141006,
"2965": 0.011146677471636956,
"2970": 0.011075769854132902,
"2975": 0.011004862236628847,
"2980": 0.0109339546191248,
"2985": 0.010863047001620746,
"2990": 0.010792139384116696,
"2995": 0.010721231766612644,
"3000": 0.010650324149108593,
"3005": 0.01057941653160454,
"3010": 0.010508508914100486,
"3015": 0.010437601296596436,
"3020": 0.010366693679092384,
"3025": 0.010295786061588331,
"3030": 0.01022487844408428,
"3035": 0.01015397082658023,
"3040": 0.010083063209076176,
"3045": 0.010012155591572125,
"3050": 0.009941247974068071,
"3055": 0.00987034035656402,
"3060": 0.00979943273905997,
"3065": 0.009728525121555916,
"3070": 0.009657617504051868,
"3075": 0.009586709886547811,
"3080": 0.00951580226904376,
"3085": 0.00944489465153971,
"3090": 0.009373987034035657,
"3095": 0.009303079416531608,
"3100": 0.009232171799027552,
"3105": 0.009161264181523503,
"3110": 0.00909035656401945,
"3115": 0.009019448946515397,
"3120": 0.008948541329011347,
"3125": 0.008877633711507293,
"3130": 0.008806726094003244,
"3135": 0.00873581847649919,
"3140": 0.00866491085899514,
"3145": 0.008594003241491087,
"3150": 0.008523095623987034,
"3155": 0.008452188006482984,
"3160": 0.00838128038897893,
"3165": 0.00831037277147488,
"3170": 0.008239465153970827,
"3175": 0.008168557536466777,
"3180": 0.008097649918962724,
"3185": 0.00802674230145867,
"3190": 0.00795583468395462,
"3195": 0.007884927066450567,
"3200": 0.007814019448946517,
"3205": 0.007743111831442464,
"3210": 0.007672204213938414,
"3215": 0.007601296596434361,
"3220": 0.007530388978930307,
"3225": 0.007459481361426257,
"3230": 0.007388573743922204,
"3235": 0.007317666126418154,
"3240": 0.007246758508914101,
"3245": 0.007175850891410051,
"3250": 0.0071049432739059976,
"3255": 0.007034035656401944,
"3260": 0.006963128038897894,
"3265": 0.006892220421393841,
"3270": 0.006821312803889791,
"3275": 0.006750405186385738,
"3280": 0.006679497568881688,
"3285": 0.0066085899513776344,
"3290": 0.006537682333873581,
"3295": 0.006466774716369531,
"3300": 0.006395867098865478,
"3305": 0.006324959481361428,
"3310": 0.006254051863857375,
"3315": 0.006183144246353325,
"3320": 0.006112236628849271,
"3325": 0.006041329011345218,
"3330": 0.005970421393841168,
"3335": 0.005899513776337115,
"3340": 0.005828606158833065,
"3345": 0.0057576985413290115,
"3350": 0.005686790923824962,
"3355": 0.005615883306320908,
"3360": 0.005544975688816855,
"3365": 0.005474068071312805,
"3370": 0.005403160453808752,
"3375": 0.005332252836304702,
"3380": 0.005261345218800648,
"3385": 0.0051904376012965985,
"3390": 0.005119529983792545,
"3395": 0.005048622366288495,
"3400": 0.004977714748784442,
"3405": 0.0049068071312803885,
"3410": 0.004835899513776339,
"3415": 0.004764991896272285,
"3420": 0.004694084278768235,
"3425": 0.004623176661264182,
"3430": 0.004552269043760132,
"3435": 0.004481361426256079,
"3440": 0.004410453808752025,
"3445": 0.0043395461912479755,
"3450": 0.004268638573743922,
"3455": 0.004197730956239872,
"3460": 0.004126823338735819,
"3465": 0.004055915721231769,
"3470": 0.003985008103727716,
"3475": 0.003914100486223662,
"3480": 0.003843192868719613,
"3485": 0.003772285251215559,
"3490": 0.0037013776337115056,
"3495": 0.003630470016207456,
"3500": 0.003559562398703406,
"3505": 0.003488654781199349,
"3510": 0.003417747163695299,
"3515": 0.0033468395461912492,
"3520": 0.0032759319286871993,
"3525": 0.0032050243111831425,
"3530": 0.0031341166936790926,
"3535": 0.0030632090761750427,
"3540": 0.002992301458670986,
"3545": 0.002921393841166936,
"3550": 0.002850486223662886,
"3555": 0.002779578606158836,
"3560": 0.0027086709886547794,
"3565": 0.0026377633711507295,
"3570": 0.0025668557536466796,
"3575": 0.002495948136142623,
"3580": 0.002425040518638573,
"3585": 0.002354132901134523,
"3590": 0.002283225283630473,
"3595": 0.0022123176661264163,
"3600": 0.0021414100486223664,
"3605": 0.0020705024311183165,
"3610": 0.0019995948136142597,
"3615": 0.0019286871961102096,
"3620": 0.00185777957860616,
"3625": 0.00178687196110211,
"3630": 0.0017159643435980532,
"3635": 0.0016450567260940033,
"3640": 0.0015741491085899534,
"3645": 0.0015032414910858966,
"3650": 0.0014323338735818469,
"3655": 0.0013614262560777968,
"3660": 0.0012905186385737469,
"3665": 0.00121961102106969,
"3670": 0.0011487034035656402,
"3675": 0.0010777957860615905,
"3680": 0.0010068881685575334,
"3685": 0.0009359805510534837,
"3690": 0.0008650729335494337,
"3695": 0.0007941653160453838,
"3700": 0.0007232576985413269,
"3705": 0.000652350081037277,
"3710": 0.0005814424635332271,
"3715": 0.0005105348460291703,
"3720": 0.0004396272285251204,
"3725": 0.00036871961102107054,
"3730": 0.00029781199351702065,
"3735": 0.00022690437601296384,
"3740": 0.00015599675850891392,
"3745": 8.508914100486403e-05,
"3750": 1.4181523500814142e-05,
"3755": 0,
"3900": -0.01,
"3960": -0.02,
"4020": -0.03
}
# Optimal stoploss designed for the strategy.
# This attribute will be overridden if the config file contains "stoploss".
# use_custom_stoploss = True
stoploss = -1 #-0.10
# Trailing stop:
trailing_stop = False
trailing_stop_positive = 0.006
trailing_stop_positive_offset = 0.019
trailing_only_offset_is_reached = False
process_only_new_candles = True
# Number of candles the strategy requires before producing valid signals
startup_candle_count: int = 30 #30
# Optimal timeframe for the strategy.
timeframe = '15m'
# These values can be overridden in the "ask_strategy" section in the config.
use_sell_signal = True
sell_profit_only = False
# sell_profit_offset = 0.019
ignore_roi_if_buy_signal = False
# hyperopt params
sell_rsi = DecimalParameter(60, 100, default=70)
sell_williams = DecimalParameter(-30, 0, default=-10)
# trailing sell (borrowed from UziChanTB2)
custom_info_trail_sell = dict()
trailing_sell_order_enabled = True
# trailing_expire_seconds = 1800 #NOTE 5m timeframe
# trailing_expire_seconds = 1800/5 #NOTE 1m timeframe
trailing_expire_seconds = 1800*3 #NOTE 15m timeframe
# trailing_expire_seconds = 1800*6
trailing_sell_uptrend_enabled = True
trailing_expire_seconds_uptrend = 300
min_uptrend_trailing_profit = 0.02
debug_mode = True
trailing_sell_max_stop = 0.01 # stop trailing sell if current_price < starting_price * (1+trailing_buy_max_stop)
trailing_sell_max_sell = 0.000 # sell if price between downlimit (=max of serie (current_price * (1 + trailing_sell_offset())) and (start_price * 1+trailing_sell_max_sell))
abort_trailing_when_sell_signal_triggered = False
init_trailing_sell_dict = {
'trailing_sell_order_started': False,
'trailing_sell_order_downlimit': 0,
'start_trailing_sell_price': 0,
'sell_tag': None,
'start_trailing_time': None,
'offset': 0,
'allow_sell_trailing': False,
}
# Optional order type mapping.
order_types = {
'buy': 'limit',
'sell': 'limit',
'stoploss': 'market',
'stoploss_on_exchange': False
}
# Optional order time in force.
order_time_in_force = {
'buy': 'gtc',
'sell': 'gtc'
}
@property
def plot_config(self):
return {
"main_plot": {
"bb.lower": {
"color": "#9c6edc",
"type": "line"
},
"bb.upper": {
"color": "#9c6edc",
"type": "line"
},
"vwma": {
"color": "#4f9f02",
"type": "line"
}
},
"subplots": {
"obv": {
"OBV": {
"color": "#1b61ab",
"type": "line"
},
"OBVSlope": {
"color": "#f18b7a",
"type": "line"
}
},
"vpci": {
"vpci": {
"color": "#d59a7a",
"type": "line"
}
},
"macd": {
"macd": {
"color": "#1c3d6a",
"type": "line"
},
"macdsignal": {
"color": "#873480",
"type": "line"
},
"macdhist": {
"color": "#478a87",
"type": "bar"
}
},
"wiliams": {
"williamspercent": {
"color": "#10f551",
"type": "line"
}
},
"stoch + rsi": {
"rsi": {
"color": "#d7affd",
"type": "line"
},
"slowd": {
"color": "#d7cc5c",
"type": "line"
},
"fastk": {
"color": "#186f86",
"type": "line"
}
},
"adx": {
"adx": {
"color": "#c392cd",
"type": "line"
},
"plus.di": {
"color": "#bcd6c5",
"type": "line"
},
"plus.di.slope": {
"color": "#ffffff",
"type": "line"
},
"minus.di": {
"color": "#eb044c",
"type": "line"
}
}
}
}
def informative_pairs(self):
"""
Define additional, informative pair/interval combinations to be cached from the exchange.
These pair/interval combinations are non-tradeable, unless they are part
of the whitelist as well.
For more information, please consult the documentation
:return: List of tuples in the format (pair, interval)
Sample: return [("ETH/USDT", "5m"),
("BTC/USDT", "15m"),
]
"""
pairs = self.dp.current_whitelist()
informative_pairs = [(pair, self.timeframe) for pair in pairs]
return informative_pairs
def trailing_sell(self, pair, reinit=False):
# returns trailing sell info for pair (init if necessary)
if not pair in self.custom_info_trail_sell:
self.custom_info_trail_sell[pair] = dict()
if (reinit or not 'trailing_sell' in self.custom_info_trail_sell[pair]):
self.custom_info_trail_sell[pair]['trailing_sell'] = self.init_trailing_sell_dict.copy()
return self.custom_info_trail_sell[pair]['trailing_sell']
def trailing_sell_info(self, pair: str, current_price: float):
# current_time live, dry run
current_time = datetime.now(timezone.utc)
if not self.debug_mode:
return
trailing_sell = self.trailing_sell(pair)
duration = 0
try:
duration = (current_time - trailing_sell['start_trailing_time'])
except TypeError:
duration = 0
finally:
self.logger.info("'\033[36m'SELL: "
f"pair: {pair} : "
f"start: {trailing_sell['start_trailing_sell_price']:.4f}, "
f"duration: {duration}, "
f"current: {current_price:.4f}, "
f"downlimit: {trailing_sell['trailing_sell_order_downlimit']:.4f}, "
f"profit: {self.current_trailing_sell_profit_ratio(pair, current_price)*100:.2f}%, "
f"offset: {trailing_sell['offset']}")
def current_trailing_sell_profit_ratio(self, pair: str, current_price: float) -> float:
trailing_sell = self.trailing_sell(pair)
if trailing_sell['trailing_sell_order_started']:
return (current_price - trailing_sell['start_trailing_sell_price'])/ trailing_sell['start_trailing_sell_price']
#return 0-((trailing_sell['start_trailing_sell_price'] - current_price) / trailing_sell['start_trailing_sell_price'])
else:
return 0
def trailing_sell_offset(self, dataframe, pair: str, current_price: float):
current_trailing_sell_profit_ratio = self.current_trailing_sell_profit_ratio(pair, current_price)
last_candle = dataframe.iloc[-1]
adapt = (last_candle['perc_norm']).round(5)
default_offset = 0.003 * (1 + adapt) #NOTE: default_offset 0.003 <--> 0.006
trailing_sell = self.trailing_sell(pair)
if not trailing_sell['trailing_sell_order_started']:
return default_offset
# example with duration and indicators
# dry run, live only
last_candle = dataframe.iloc[-1]
current_time = datetime.now(timezone.utc)
trailing_duration = current_time - trailing_sell['start_trailing_time']
if trailing_duration.total_seconds() > self.trailing_expire_seconds:
if ((current_trailing_sell_profit_ratio > 0) and (last_candle['sell'] != 0)):
# more than 1h, price over first signal, sell signal still active -> sell
return 'forcesell'
else:
# wait for next signal
return None
elif (self.trailing_sell_uptrend_enabled and (trailing_duration.total_seconds() < self.trailing_expire_seconds_uptrend) and (current_trailing_sell_profit_ratio < (-1 * self.min_uptrend_trailing_profit))):
# less than 90s and price is falling, sell
return 'forcesell'
if current_trailing_sell_profit_ratio > 0:
# current price is lower than initial price
return default_offset
trailing_sell_offset = {
# 0.06: 0.02,
# 0.03: 0.01,
0.1: default_offset,
}
for key in trailing_sell_offset:
if current_trailing_sell_profit_ratio < key:
return trailing_sell_offset[key]
return default_offset
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Retrieve best bid and best ask from the orderbook
# ------------------------------------
# first check if dataprovider is available
# if self.dp:
# if self.dp.runmode.value in ('live', 'dry_run'):
# ob = self.dp.orderbook(metadata['pair'], 1)
# dataframe['best_bid'] = ob['bids'][0][0]
# dataframe['best_ask'] = ob['asks'][0][0]
# Bollinger!
bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
dataframe['bb.lower'] = bollinger['lower']
dataframe['bb.middle'] = bollinger['mid']
dataframe['bb.upper'] = bollinger['upper']
# Added PCB Style OBV
dataframe['OBV'] = ta.OBV(dataframe)
dataframe['OBVSlope'] = pta.momentum.slope(dataframe['OBV'])
# VWMA
# vwma_period = 13
# dataframe['vwma'] = ((dataframe["close"] * dataframe["volume"]).rolling(vwma_period).sum() /
# dataframe['volume'].rolling(vwma_period).sum())
# VWAP
# vwap_period = 20
# dataframe['vwap'] = qtpylib.rolling_vwap(dataframe, window=vwap_period)
# VPCI
dataframe['vpci'] = indicators.vpci(dataframe, period_long=14)
#williamsR
dataframe['williamspercent'] = indicators.williams_percent(dataframe)
# ADX
dataframe['adx'] = ta.ADX(dataframe)
dataframe['plus.di'] = ta.PLUS_DI(dataframe)
dataframe['minus.di'] = ta.MINUS_DI(dataframe)
dataframe['plus.di.slope'] = pta.momentum.slope(dataframe['plus.di'])
# RSI
dataframe['rsi'] = ta.RSI(dataframe)
# MACD
macd = ta.MACD(dataframe)
dataframe['macd'] = macd['macd']
dataframe['macdsignal'] = macd['macdsignal']
dataframe['macdhist'] = macd['macdhist']
# Stochastic Fast
stoch_fast = ta.STOCHF(dataframe)
dataframe['fastd'] = stoch_fast['fastd']
dataframe['fastk'] = stoch_fast['fastk']
# Stochastic Slow
stoch_slow = ta.STOCH(dataframe)
dataframe['slowd'] = stoch_slow['slowd']
dataframe['slowk'] = stoch_slow['slowk']
# Perc
dataframe['perc'] = ((dataframe['high'] - dataframe['low']) / dataframe['low']*100)
dataframe['avg3_perc'] = ta.EMA(dataframe['perc'], 3)
dataframe['perc_norm'] = (dataframe['perc'] - dataframe['perc'].rolling(50).min())/(dataframe['perc'].rolling(50).max() - dataframe['perc'].rolling(50).min())
self.trailing_sell(metadata['pair'])
return dataframe
def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Bollinger!
bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
dataframe['bb.lower'] = bollinger['lower']
dataframe['bb.middle'] = bollinger['mid']
dataframe['bb.upper'] = bollinger['upper']
# Added PCB Style OBV
dataframe['OBV'] = ta.OBV(dataframe)
dataframe['OBVSlope'] = pta.momentum.slope(dataframe['OBV'])
# VWMA
# vwma_period = 13
# dataframe['vwma'] = ((dataframe["close"] * dataframe["volume"]).rolling(vwma_period).sum() /
# dataframe['volume'].rolling(vwma_period).sum())
# VWAP
# vwap_period = 20
# dataframe['vwap'] = qtpylib.rolling_vwap(dataframe, window=vwap_period)
# VPCI
dataframe['vpci'] = indicators.vpci(dataframe, period_long=14)
#williamsR
dataframe['williamspercent'] = indicators.williams_percent(dataframe)
# ADX
dataframe['adx'] = ta.ADX(dataframe)
dataframe['plus.di'] = ta.PLUS_DI(dataframe)
dataframe['minus.di'] = ta.MINUS_DI(dataframe)
dataframe['plus.di.slope'] = pta.momentum.slope(dataframe['plus.di'])
# RSI
dataframe['rsi'] = ta.RSI(dataframe)
# MACD
macd = ta.MACD(dataframe)
dataframe['macd'] = macd['macd']
dataframe['macdsignal'] = macd['macdsignal']
dataframe['macdhist'] = macd['macdhist']
# Stochastic Fast
stoch_fast = ta.STOCHF(dataframe)
dataframe['fastd'] = stoch_fast['fastd']
dataframe['fastk'] = stoch_fast['fastk']
# Stochastic Slow
stoch_slow = ta.STOCH(dataframe)
dataframe['slowd'] = stoch_slow['slowd']
dataframe['slowk'] = stoch_slow['slowk']
# Perc
dataframe['perc'] = ((dataframe['high'] - dataframe['low']) / dataframe['low']*100)
dataframe['avg3_perc'] = ta.EMA(dataframe['perc'], 3)
dataframe['perc_norm'] = (dataframe['perc'] - dataframe['perc'].rolling(50).min())/(dataframe['perc'].rolling(50).max()-dataframe['perc'].rolling(50).min())
self.trailing_sell(metadata['pair'])
return dataframe
def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str, amount: float,
rate: float, time_in_force: str, sell_reason: str, **kwargs) -> bool:
val = super().confirm_trade_exit(pair, trade, order_type, amount, rate, time_in_force, sell_reason, **kwargs)
if val:
if self.trailing_sell_order_enabled and self.config['runmode'].value in ('live', 'dry_run'):
val = False
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
if(len(dataframe) >= 1):
last_candle = dataframe.iloc[-1].squeeze()
current_price = rate
trailing_sell= self.trailing_sell(pair)
trailing_sell_offset = self.trailing_sell_offset(dataframe, pair, current_price)
if trailing_sell['allow_sell_trailing']:
if (not trailing_sell['trailing_sell_order_started'] and (last_candle['sell'] != 0)):
trailing_sell['trailing_sell_order_started'] = True
trailing_sell['trailing_sell_order_downlimit'] = last_candle['close']
trailing_sell['start_trailing_sell_price'] = last_candle['close']
trailing_sell['sell_tag'] = last_candle['sell_tag']
trailing_sell['start_trailing_time'] = datetime.now(timezone.utc)
trailing_sell['offset'] = 0
self.trailing_sell_info(pair, current_price)
self.logger.info(f'start trailing sell for {pair} at {last_candle["close"]}')
elif trailing_sell['trailing_sell_order_started']:
if trailing_sell_offset == 'forcesell':
# sell in custom conditions
val = True
ratio = "%.2f" % ((self.current_trailing_sell_profit_ratio(pair, current_price)) * 100)
self.trailing_sell_info(pair, current_price)
self.logger.info(f"FORCESELL for {pair} ({ratio} %, {current_price})")
elif trailing_sell_offset is None:
# stop trailing sell custom conditions
self.trailing_sell(pair, reinit=True)
self.logger.info(f'STOP trailing sell for {pair} because "trailing sell offset" returned None')
elif current_price > trailing_sell['trailing_sell_order_downlimit']:
# update downlimit
old_downlimit = trailing_sell["trailing_sell_order_downlimit"]
self.custom_info_trail_sell[pair]['trailing_sell']['trailing_sell_order_downlimit'] = max(current_price * (1 - trailing_sell_offset), self.custom_info_trail_sell[pair]['trailing_sell']['trailing_sell_order_downlimit'])
self.custom_info_trail_sell[pair]['trailing_sell']['offset'] = trailing_sell_offset
self.trailing_sell_info(pair, current_price)
self.logger.info(f'update trailing sell for {pair} at {old_downlimit} -> {self.custom_info_trail_sell[pair]["trailing_sell"]["trailing_sell_order_downlimit"]}')
elif current_price > (trailing_sell['start_trailing_sell_price'] * (1 - self.trailing_sell_max_sell)):
# sell! current price < downlimit && higher than starting price
val = True
ratio = "%.2f" % ((self.current_trailing_sell_profit_ratio(pair, current_price)) * 100)
self.trailing_sell_info(pair, current_price)
self.logger.info(f"current price ({current_price}) < downlimit ({trailing_sell['trailing_sell_order_downlimit']}) but higher than starting price ({(trailing_sell['start_trailing_sell_price'] * (1 + self.trailing_sell_max_sell))}). OK for {pair} ({ratio} %)")
elif current_price < (trailing_sell['start_trailing_sell_price'] * (1 - self.trailing_sell_max_stop)):
# stop trailing, sell fast, price too low
val = True
self.trailing_sell_info(pair, current_price)
self.logger.info(f'STOP trailing sell for {pair} because of the price is much lower than starting price * {1 + self.trailing_sell_max_stop}')
else:
# uplimit > current_price > max_price, continue trailing and wait for the price to go down
self.trailing_sell_info(pair, current_price)
self.logger.info(f'price too low for {pair} !')
else:
self.logger.info(f"Wait for next sell signal for {pair}")
if (val == True):
self.trailing_sell_info(pair, rate)
self.trailing_sell(pair, reinit=True)
self.logger.info(f'STOP trailing sell for {pair} because I SOLD it')
if sell_reason != 'sell_signal':
val = True
return val
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['volume'] > 0) &
(dataframe['OBVSlope'] > 0) &
(dataframe['plus.di.slope'] > 0) &
(dataframe['williamspercent'] < -66) &
(qtpylib.crossed_above(dataframe['close'], dataframe['bb.lower']))
),'buy'] = 1
return dataframe
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['volume'] > 0) &
(dataframe['close'] > dataframe['bb.upper']) &
(dataframe['plus.di.slope'] < 0) &
(dataframe['williamspercent'] >= self.sell_williams.value) &
(dataframe['rsi'] >= self.sell_rsi.value)
),
'sell'] = 1
if self.trailing_sell_order_enabled and self.config['runmode'].value in ('live', 'dry_run'):
last_candle = dataframe.iloc[-1].squeeze()
trailing_sell = self.trailing_sell(metadata['pair'])
if (last_candle['sell'] != 0):
if not trailing_sell['trailing_sell_order_started']:
open_trades = Trade.get_trades([Trade.pair == metadata['pair'], Trade.is_open.is_(True), ]).all()
if open_trades:
self.logger.info(f"Set 'allow_SELL_trailing' to True for {metadata['pair']} to start *SELL* trailing")
# self.custom_info_trail_buy[metadata['pair']]['trailing_buy']['allow_trailing'] = True
trailing_sell['allow_sell_trailing'] = True
initial_sell_tag = last_candle['sell_tag'] if 'sell_tag' in last_candle else 'sell signal'
dataframe.loc[:, 'sell_tag'] = f"{initial_sell_tag} (start trail price {last_candle['close']})"
else:
if (trailing_sell['trailing_sell_order_started'] == True):
self.logger.info(f"Continue trailing for {metadata['pair']}. Manually trigger sell signal!")
dataframe.loc[:,'sell'] = 1
dataframe.loc[:, 'sell_tag'] = trailing_sell['sell_tag']
return dataframe
# "All watched over by machines with loving grace..."