Spaces:
Runtime error
Runtime error
Upload 5 files
Browse files- Dockerfile +15 -0
- start.sh +5 -0
- user_data/config.json +34 -0
- user_data/freqai/config.json +9 -0
- user_data/strategies/SimpleScalp.py +45 -0
Dockerfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
| 2 |
+
|
| 3 |
+
RUN apt-get update && apt-get install -y git build-essential && rm -rf /var/lib/apt/lists/*
|
| 4 |
+
|
| 5 |
+
RUN pip install --no-cache-dir freqtrade
|
| 6 |
+
|
| 7 |
+
WORKDIR /app
|
| 8 |
+
|
| 9 |
+
COPY user_data /app/user_data
|
| 10 |
+
COPY start.sh /app/start.sh
|
| 11 |
+
RUN chmod +x /app/start.sh
|
| 12 |
+
|
| 13 |
+
EXPOSE 7860
|
| 14 |
+
|
| 15 |
+
CMD ["/app/start.sh"]
|
start.sh
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -e
|
| 3 |
+
export PYTHONUNBUFFERED=1
|
| 4 |
+
|
| 5 |
+
freqtrade trade --config /app/user_data/config.json --strategy SimpleScalp
|
user_data/config.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://freqtrade.io/schemas/config.schema.json",
|
| 3 |
+
"runmode": "dry_run",
|
| 4 |
+
"dry_run": true,
|
| 5 |
+
"strategy": "SimpleScalp",
|
| 6 |
+
"timeframe": "1m",
|
| 7 |
+
"max_open_trades": 1,
|
| 8 |
+
"stake_currency": "USDT",
|
| 9 |
+
"stake_amount": 25,
|
| 10 |
+
"exchange": {
|
| 11 |
+
"name": "binance",
|
| 12 |
+
"key": "${BINANCE_API_KEY}",
|
| 13 |
+
"secret": "${BINANCE_API_SECRET}",
|
| 14 |
+
"ccxt_config": {
|
| 15 |
+
"enableRateLimit": true
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
"pairlists": [
|
| 19 |
+
{
|
| 20 |
+
"method": "StaticPairList"
|
| 21 |
+
}
|
| 22 |
+
],
|
| 23 |
+
"pair_whitelist": [
|
| 24 |
+
"BTC/USDT",
|
| 25 |
+
"ETH/USDT"
|
| 26 |
+
],
|
| 27 |
+
"api_server": {
|
| 28 |
+
"enabled": true,
|
| 29 |
+
"listen_ip_address": "0.0.0.0",
|
| 30 |
+
"listen_port": 7860,
|
| 31 |
+
"verbosity": "error",
|
| 32 |
+
"enable_openapi": true
|
| 33 |
+
}
|
| 34 |
+
}
|
user_data/freqai/config.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"enabled": false,
|
| 3 |
+
"model_training": {
|
| 4 |
+
"enabled": false
|
| 5 |
+
},
|
| 6 |
+
"prediction_parameters": {
|
| 7 |
+
"threshold": 0.75
|
| 8 |
+
}
|
| 9 |
+
}
|
user_data/strategies/SimpleScalp.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from freqtrade.strategy import IStrategy
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import talib.abstract as ta
|
| 4 |
+
|
| 5 |
+
class SimpleScalp(IStrategy):
|
| 6 |
+
timeframe = "1m"
|
| 7 |
+
startup_candle_count = 50
|
| 8 |
+
|
| 9 |
+
minimal_roi = {"0": 0.003}
|
| 10 |
+
stoploss = -0.002
|
| 11 |
+
|
| 12 |
+
@property
|
| 13 |
+
def protections(self):
|
| 14 |
+
return [
|
| 15 |
+
{"method": "CooldownPeriod", "stop_duration_candles": 2},
|
| 16 |
+
{
|
| 17 |
+
"method": "StoplossGuard",
|
| 18 |
+
"lookback_period_candles": 20,
|
| 19 |
+
"trade_limit": 3,
|
| 20 |
+
"stop_duration_candles": 10
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"method": "MaxDrawdown",
|
| 24 |
+
"lookback_period_candles": 1440,
|
| 25 |
+
"trade_limit": 1,
|
| 26 |
+
"stop_duration_candles": 1440,
|
| 27 |
+
"max_allowed_drawdown": 0.02
|
| 28 |
+
}
|
| 29 |
+
]
|
| 30 |
+
|
| 31 |
+
def populate_indicators(self, df: pd.DataFrame, metadata: dict):
|
| 32 |
+
df["ema_fast"] = ta.EMA(df, 9)
|
| 33 |
+
df["ema_slow"] = ta.EMA(df, 21)
|
| 34 |
+
df["vol_mean"] = df["volume"].rolling(20).mean()
|
| 35 |
+
return df
|
| 36 |
+
|
| 37 |
+
def populate_buy_trend(self, df: pd.DataFrame, metadata: dict):
|
| 38 |
+
df.loc[
|
| 39 |
+
(df["ema_fast"] > df["ema_slow"]) &
|
| 40 |
+
(df["volume"] > df["vol_mean"]),
|
| 41 |
+
"buy"
|
| 42 |
+
] = 1
|
| 43 |
+
|
| 44 |
+
def populate_sell_trend(self, df: pd.DataFrame, metadata: dict):
|
| 45 |
+
df.loc[df["ema_fast"] < df["ema_slow"], "sell"] = 1
|