diff --git a/csharp/TraderBot/.dockerignore b/csharp/TraderBot/.dockerignore new file mode 100644 index 00000000..cbbd0b5c --- /dev/null +++ b/csharp/TraderBot/.dockerignore @@ -0,0 +1,2 @@ +bin/ +obj/ \ No newline at end of file diff --git a/csharp/TraderBot/.env.example b/csharp/TraderBot/.env.example new file mode 100644 index 00000000..c8c92e29 --- /dev/null +++ b/csharp/TraderBot/.env.example @@ -0,0 +1,19 @@ +LOG_LEVEL_DEFAULT="Information" +MICROSOFT_HOSTING_LIFETIME="Information" +ACCESS_TOKEN="" +APP_NAME="LinksPlatformScalper" +INSTRUMENT="Etf" +TICKER="TRUR" +CASH_CURRENCY="rub" +ACCOUNT_INDEX=-1 +MINIMUM_PROFIT_STEPS=-2 +MARKET_ORDER_BOOK_DEPTH=10 +MINIMUM_MARKET_ORDER_SIZE_TO_CHANGE_BUY_PRICE=250000 +MINIMUM_MARKET_ORDER_SIZE_TO_CHANGE_SELL_PRICE=0 +MINIMUM_MARKET_ORDER_SIZE_TO_BUY=250000 +MINIMUM_MARKET_ORDER_SIZE_TO_SELL=0 +MINIMUM_TIME_TO_BUY="09:00:00" +MAXIMUM_TIME_TO_BUY="14:45:00" +EARLY_SELL_OWNED_LOTS_DELTA=250000 +EARLY_SELL_OWNED_LOTS_MULTIPLIER=0 +LOAD_OPERATIONS_FROM="2022-08-21T00:00:01.3389860Z" \ No newline at end of file diff --git a/csharp/TraderBot/.gitignore b/csharp/TraderBot/.gitignore new file mode 100644 index 00000000..2eea525d --- /dev/null +++ b/csharp/TraderBot/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/csharp/TraderBot/Dockerfile b/csharp/TraderBot/Dockerfile new file mode 100644 index 00000000..172218a3 --- /dev/null +++ b/csharp/TraderBot/Dockerfile @@ -0,0 +1,13 @@ +FROM mcr.microsoft.com/dotnet/sdk:6.0 as build-env +WORKDIR /app + +COPY . ./ +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 +WORKDIR /app +RUN apt update && apt install jq -y +COPY entrypoint.sh . +COPY --from=build-env /app/out . + +ENTRYPOINT ["bash", "/app/entrypoint.sh"] \ No newline at end of file diff --git a/csharp/TraderBot/docker-compose.yml b/csharp/TraderBot/docker-compose.yml new file mode 100644 index 00000000..76e63d8b --- /dev/null +++ b/csharp/TraderBot/docker-compose.yml @@ -0,0 +1,6 @@ +version: "3.9" +services: + trader-bot: + build: . + env_file: .env + restart: on-failure diff --git a/csharp/TraderBot/entrypoint.sh b/csharp/TraderBot/entrypoint.sh new file mode 100644 index 00000000..3e1b4d7b --- /dev/null +++ b/csharp/TraderBot/entrypoint.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +set -o pipefail +set +e + +jq -n \ + --arg logLevelDefault "$LOG_LEVEL_DEFAULT" \ + --arg microsoftHostingLifetime "$MICROSOFT_HOSTING_LIFETIME" \ + --arg accessToken "$ACCESS_TOKEN" \ + --arg appName "$APP_NAME" \ + --arg instrument "$INSTRUMENT" \ + --arg ticker "$TICKER" \ + --arg cashCurrency "$CASH_CURRENCY" \ + --arg accountIndex "$ACCOUNT_INDEX" \ + --arg minimumProfitSteps "$MINIMUM_PROFIT_STEPS" \ + --arg marketOrderBookDepth "$MARKET_ORDER_BOOK_DEPTH" \ + --arg minimumMarketOrderSizeToChangeBuyPrice "$MINIMUM_MARKET_ORDER_SIZE_TO_CHANGE_BUY_PRICE" \ + --arg minimumMarketOrderSizeToChangeSellPrice "$MINIMUM_MARKET_ORDER_SIZE_TO_CHANGE_SELL_PRICE" \ + --arg minimumMarketOrderSizeToBuy "$MINIMUM_MARKET_ORDER_SIZE_TO_BUY" \ + --arg minimumMarketOrderSizeToSell "$MINIMUM_MARKET_ORDER_SIZE_TO_SELL" \ + --arg minimumTimeToBuy "$MINIMUM_TIME_TO_BUY" \ + --arg maximumTimeToBuy "$MAXIMUM_TIME_TO_BUY" \ + --arg earlySellOwnedLotsDelta "$EARLY_SELL_OWNED_LOTS_DELTA" \ + --arg earlySellOwnedLotsMultiplier "$EARLY_SELL_OWNED_LOTS_MULTIPLIER" \ + --arg loadOperationsFrom "$LOAD_OPERATIONS_FROM" \ + '{ + "Logging": { + "LogLevel": { + "Default": $logLevelDefault, + "Microsoft.Hosting.Lifetime": $microsoftHostingLifetime + } + }, + "InvestApiSettings": { + "AccessToken": $accessToken, + "AppName": $appName + }, + "TradingSettings": { + "Instrument": $instrument, + "Ticker": $ticker, + "CashCurrency": $cashCurrency, + "AccountIndex": $accountIndex, + "MinimumProfitSteps": $minimumProfitSteps, + "MarketOrderBookDepth": $marketOrderBookDepth, + "MinimumMarketOrderSizeToChangeBuyPrice": $minimumMarketOrderSizeToChangeBuyPrice, + "MinimumMarketOrderSizeToChangeSellPrice": $minimumMarketOrderSizeToChangeSellPrice, + "MinimumMarketOrderSizeToBuy": $minimumMarketOrderSizeToBuy, + "MinimumMarketOrderSizeToSell": $minimumMarketOrderSizeToSell, + "MinimumTimeToBuy": $minimumTimeToBuy, + "MaximumTimeToBuy": $maximumTimeToBuy, + "EarlySellOwnedLotsDelta": $earlySellOwnedLotsDelta, + "EarlySellOwnedLotsMultiplier": $earlySellOwnedLotsMultiplier, + "LoadOperationsFrom": $loadOperationsFrom + } + }' > appsettings.json + +dotnet TraderBot.dll \ No newline at end of file