first commit
This commit is contained in:
164
jeroen_test.py
Normal file
164
jeroen_test.py
Normal file
@@ -0,0 +1,164 @@
|
||||
|
||||
from freqtrade.strategy.interface import IStrategy
|
||||
from typing import Dict, List
|
||||
from functools import reduce
|
||||
from pandas import DataFrame
|
||||
from freqtrade.persistence import Trade
|
||||
from datetime import datetime, date, timedelta
|
||||
|
||||
|
||||
import talib.abstract as ta
|
||||
import freqtrade.vendor.qtpylib.indicators as qtpylib
|
||||
import numpy # noqa
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class jeroen_test(IStrategy):
|
||||
|
||||
# Minimal ROI designed for the strategy.
|
||||
minimal_roi = {
|
||||
"0": 0.02
|
||||
}
|
||||
|
||||
order_types = {
|
||||
'buy': 'market',
|
||||
'sell': 'market',
|
||||
'stoploss': 'market',
|
||||
'stoploss_on_exchange': False
|
||||
}
|
||||
|
||||
# Optimal stoploss designed for the strategy
|
||||
stoploss = -10
|
||||
|
||||
# Optimal timeframe for the strategy
|
||||
timeframe = '1m'
|
||||
|
||||
def calc_profit(self, price: float, current: float) -> float:
|
||||
fee = 1.0007
|
||||
profit = ((current*fee) -
|
||||
(price*fee))
|
||||
|
||||
return float(f"{profit:.8f}")
|
||||
|
||||
def calc_percentage_lower(self, price: float, current: float) -> float:
|
||||
fee = 1.0007
|
||||
price = price*fee
|
||||
current = current*fee
|
||||
lowerpercent = ((price-current)/(price*fee))*100
|
||||
|
||||
return float(f"{lowerpercent:.8f}")
|
||||
|
||||
def bot_loop_start(self, **kwargs) -> None:
|
||||
print(" ")
|
||||
|
||||
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
""" Adds several different TA indicators to the given DataFrame
|
||||
"""
|
||||
profit = False
|
||||
profit_percent = False
|
||||
percent_lower = False
|
||||
current_price = dataframe['close'].iloc[-1]
|
||||
|
||||
dataframe['should_sell'] = False
|
||||
dataframe['should_buy'] = False
|
||||
|
||||
# Get the previous trade
|
||||
trade = Trade.get_trades_proxy(is_open=False, pair=metadata['pair'])
|
||||
if trade:
|
||||
trade = trade[-1]
|
||||
lsp = trade.close_rate
|
||||
if lsp:
|
||||
percent_lower = self.calc_percentage_lower(price=lsp, current=current_price)
|
||||
# Found a bug? When force selling it doesnt close it
|
||||
else:
|
||||
lsp = trade.open_rate
|
||||
if lsp:
|
||||
percent_lower = self.calc_percentage_lower(price=lsp, current=current_price)
|
||||
else:
|
||||
lsp = 0.00
|
||||
|
||||
# Get the current Trade
|
||||
trade = Trade.get_trades_proxy(is_open=True, pair=metadata['pair'])
|
||||
if trade:
|
||||
trade = trade[-1]
|
||||
lbp = trade.open_rate
|
||||
open_trade = True
|
||||
profit = self.calc_profit(price=lbp, current=current_price)
|
||||
profit_percent = (profit/lbp)*100
|
||||
else:
|
||||
lbp = 0.00
|
||||
open_trade = False
|
||||
profit = False
|
||||
profit_percent = False
|
||||
|
||||
|
||||
print("------------")
|
||||
|
||||
print("Last Sold For:", lsp)
|
||||
|
||||
if open_trade:
|
||||
print("Bought for: ", lbp)
|
||||
print("Current Price: ", current_price)
|
||||
if profit:
|
||||
print("Current Profit: ", profit, " ", float(f"{profit_percent:.8f}"), "%")
|
||||
if percent_lower and not open_trade:
|
||||
print("Percent Lower: ", float(f"{percent_lower:.8f}"), "%")
|
||||
|
||||
|
||||
# Should we Sell?
|
||||
if profit_percent:
|
||||
if profit_percent > 1:
|
||||
dataframe['should_sell'] = True
|
||||
|
||||
# Should we buy?
|
||||
if not open_trade:
|
||||
if (lsp == 0.00 ) & (lbp == 0.00):
|
||||
dataframe['should_buy'] = True
|
||||
# Is the percentage of what we sold for and the current price 2% lower
|
||||
if percent_lower > 2:
|
||||
dataframe['should_buy'] = True
|
||||
|
||||
|
||||
dataframe['last_sell_price'] = lsp
|
||||
dataframe['last_buy_price'] = lbp
|
||||
|
||||
|
||||
print("Current Dataframe:")
|
||||
print(dataframe.tail(1))
|
||||
|
||||
|
||||
return dataframe
|
||||
|
||||
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
|
||||
dataframe.loc[(
|
||||
# We have not bought or sold anything yet, lets buy!
|
||||
((dataframe['last_sell_price'] == 0.00) & (dataframe['last_buy_price'] == 0.00) ) |
|
||||
(
|
||||
# Make sure the last selling price is higher than the current price
|
||||
((dataframe['last_sell_price']) > dataframe['close']) &
|
||||
|
||||
# Calculated earlier
|
||||
(dataframe['should_buy'] == True)
|
||||
)
|
||||
), 'buy'
|
||||
] = 1
|
||||
|
||||
return dataframe
|
||||
|
||||
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
|
||||
dataframe.loc[(
|
||||
# Make at least profit
|
||||
(dataframe['last_buy_price'] < (dataframe['close'])) &
|
||||
|
||||
# Calculated earlier
|
||||
(dataframe['should_sell'] == True) &
|
||||
|
||||
# If we have nothing we bought, there is nothing to sell
|
||||
(dataframe['last_buy_price'] > 0.00)
|
||||
), 'sell'
|
||||
] = 1
|
||||
|
||||
return dataframe
|
||||
Reference in New Issue
Block a user