# PT Feeder 1.7 Release Notes

For this release, the minimum requirement is ProfitTrailer 2.1.5. There is a new method for saving config which allows all 3 config files to be saved in one go, rather than in 3 consecutive times.

Note that this is NOT backwards compatible and PT Feeder 1.7 WILL NOT work with ProfitTrailer version 2.1.4 and below.

This next version contains numerous feature requests by power users and there are a lot of new toys. The majority of the below are all OPTIONAL and do not need to be used if you do not wish to. If you do wish to utilise them, you will need to learn how to use the custom condition syntax in PT Feeder. Popular custom conditions will be built into future releases for ease of use.

If you would like a particular custom condition added, please create a forum post. The same goes if you would like help creating your own condition.

# Upgrade instructions

Upgrade instructions

  1. Backup your exiting PT Feeder directory so you can revert to it if needs be. Then install the beta as normal in a new directory.
  2. Upgrade to dotnet core to 2.2 as per the Microsoft site (opens new window)
  3. In your appsettings, change your time trends to the new syntax, e.g "MeasureTimes": [ 120, 360, 720 ], as described here
  4. In your appsettings, if you use PT Feeder to calculate your trailings, you will need to add DcaMaxTrailingBuy, DcaMinTrailingBuy, DcaMaxTrailingProfit and DcaMinTrailingProfit in the PtFeeder section. More info here
  5. If you have any SellOnlyModeEnabled outside of an override group in your appsettings, you will need to move it in one. For an example, see here
  6. In hostsettings.json, you will need to add ProfitTrailerServerApiToken1. More information on this can be seen here
  7. Delete ptfeeder.db in the database directory if you have one.
  8. Change any TV Alerts you have that have a first line that is not the PT Feeder hostname or the coin the alert is for in the syntax BINANCE:QTUMBTC

# Added

# Dynamic trend windows

It is now possible to add as many time trends as you want. In the PtFeeder section of your appsettings, you NEED to replace all MinutesToMeasure trend with

"MeasureTimes": [ 120, 360, 720 ],

All other sections have backward compatibility.

In custom conditions, you can then use for example:

[pair.PercentageChange(3)] > [config.PriceChangeFor12h]

If you use the Medium/Long in your custom conditions, these will need to be changed:

For example:

There is no MediumVwapChange or LongTopCoinsChange on the market object. There is VwapChange(1), VwapChange(2) or TopCoinsChange(3)

# Grouping Improvements

# Ability to Enable or Disable a grouping for coins

Properties can be added to enable to disable a grouping for certain pairs. By default, all pairs are included:

"WikiExampleGrouping": {
    "Condition": "[market.BaseCoinPriceChange] - [pair.PercentageChange] <= [config.TriggerName] ",
    "EnabledMarkets":   "ETH,ETC,MTL",
    "DisabledMarkets":  "BCC,XRP",
    "Configs": [
      {
        "TriggerName": "-1",
        "Override": {
          "DcaRebuyTimeout": "30",
          "Weight": "100"
        }
      },
    ]
  },

# Ability to ignore offsets

A property can be added on a grouping to ignore offsets in that group.

 "PriceTrendChangeGrouping": {
   "IgnoreOffsets": "true",
    "Configs": [
      {
        "MaxPriceTrendPercentageChange": "-10"
      },

# Default market condition

A market condition can be set as the default, which is the one which is used if for any reason, the market condition cannot be evaluated.

 {
        "Name": "Boring",
        "Default": "true",
        "MaxTopCoinAverageChange": "2.5"
      },

# TA Indicators for groupings

The following indicators have been added to the market for use in custom conditions:

NEW:

market.CurrentBaseCoinPrice

market.BaseCoinShortSma 
market.BaseCoinLongSma

market.BaseCoinShortEma
market.BaseCoinLongEma

market.BaseCoinHighest
market.BaseCoinLowest

market.HighLowPriceChange

market.BaseCoinRsiLong
market.BaseCoinRsiShort

market.BaseCoinMacd (this is the histogram value)

market.BaseCoinAtrp
market.TopCoinsAtrpAverage

EXISTING:

market.TopCoinsChange,
market.VwapChange,
market.BaseCoinPriceChange,

The following indicators have been added to the pair for use in custom conditions:

NEW:

pair.Atrp

pair.Vwap

pair.Highest
pair.Lowest

pair.ShortSma
pair.LongSma

pair.ShortEma
pair.LongEma

pair.AverageCandleBodySize

EXISTING:
pair.DcaEnabled
pair.SellOnlyModeEnabled

pair.BaseCurrency
pair.QuoteCurrency
pair.FirstSeen

pair.Volume // 24 hour volume
pair.LastPrice

pair.PercentageChange 

pair.HighLowPercentageChange

pair.HighLowVolumePercentageChange

pair.TrailingProfit
pair.TrailingBuy

For each of these indicators, the following indicator properties need to be set in the PtFeeder section of your appsettings (with examples)


    "EmaShortCandleSize": "5m", 
    "EmaLongCandleSize": "5m", 
    "EmaShortPeriod": "13", 
    "EmaLongPeriod": "63",
    
    "SmaShortCandleSize": "5m", 
    "SmaLongCandleSize": "5m",   
    "SmaShortPeriod": "13", 
    "SmaLongPeriod": "63", 
    
    "RsiLongPeriod": "40",
    "RsiShortPeriod": "20",
    "RsiShortCandleSize": "5m",
    "RsiLongCandleSize": "5m",

    "BaseHighLowPriceChangeCandleSize": "5m",
    "HighestCandlesSize": "5m",
    "LowestCandlesSize": "5m",
  
    "VwmaLength": "2",
    "VwmaLookBackPeriod": "2"

Possible candle sizes are 1m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w, 1mon. The supported values also depends if your exchange supports those candle periods. If you use a period not supported by your exchange, you will get an error. The more candle sizes you use, the slower PT Feeder will be in starting up and will consume more memory.

To use different time trends with the any of the above market or pair properties, you use the number of the time window you would like from the MeasureTimes property. For example, if this property is: "MeasureTimes": [ 120, 360, 720, 1000 ], and you would like to use the 1000, your custom condition could look like this:

"Condition": "[market.BaseCoinPriceChange(4)] - [pair.PercentageChange(4)] <= [config.TriggerName] ",

As an example of how this could be used, the below looks at difference between the short SMA and the long SMA of your base coin, BTC for example. If the short is less than the long, then we consider it a bear market.

"MarketConditionsGrouping": {
    "Condition": "[market.BaseCoinShortSma] - [market.BaseCoinLongSma] < [config.SmaDifference]",
    "Configs": [
      {
        "Name": "Bear",
        "SmaDifference": "0"

      },
      {
        "Name": "Bull",
        "SmaDifference": "100000"
      }
    ]
  },

# Previous values available

You can now access the previous values for use in custom conditions to measure change. They are nested up to the 3 previous values.

[pair.PercentageChange] - [pair.Previous.PercentageChange] > [config.ChangeInPricePercentage]

# Position management

  • Create custom conditions based on ProfitTrailer positions. ProfitTrailerServerApiToken1 needs to be added to hostsettings. See ProfitTrailer wiki on how to set this here (opens new window). The object positions is available and it has the following properties:
positions.TotalPairsCurrentValue
positions.TotalDcaCurrentValue
positions.TotalPairsBoughtCost
positions.TotalDcaBoughtCost
positions.PairsBalance
positions.DcaBalance
positions.RealBalance
positions.DcaCoinCount
positions.PairsCoinCount

positions.TotalPendingCurrentValue
positions.TotalPendingBoughtCost
  • Pair properties also available
pair.DcaCount 
pair.Profit
pair.TotalCost 
pair.FirstBoughtInMinutes

pair.PendingBoughtCost 
pair.PendingValue 
pair.PendingCount 

# Custom market conditions

  • Add ability to create a custom MarketCondition grouping config.
Condition: "[market.BaseCoinPriceChange] - [market.TopCoinsChange] < [config.SomePropertyFromConfig]"

# BTC Dominance and Market cap

The CMC api is going Pro end of this year. To use the data, you can use the free plan and please add your CMC api key as CoinMarketCapApiKey in your hostsettings.

market.BtcDominance
market.TotalMarketCap

# Config Switch

Switch to an alternate PT config using PT Feeder market conditions. Few notes for this feature:

  • If this feature is used, none of the other PT Feeder overrides or offsets are applied.
  • The configs NEED TO EXIST in your config list that is tied to your license in ProfitTrailer.
  • All market conditions need to have a SwitchConfigTo.

Example below:

  "MarketConditionsGrouping": {
    "Configs": [
      {
        "Name": "Bear",
        "MaxTopCoinAverageChange": "0.5",
        "SwitchConfigTo": "El Dorado"
      },
      {
        "Name": "Bull",
        "MaxTopCoinAverageChange": "10000",
        "SwitchConfigTo": "Golden Cross"
      }
    ]
  }

# Snippets

For common groups of config that are used in PT Feeder, a snippet can be created,

"Snippets": [
    {
        "SnippetName": "SellDefault",
        "ASellStrategy": "GAIN",
        "ASellValue": "0.25",
        "BSellStrategy": "STOCHRSICROSS",
        "BSellValue": "-0.01",
        "CSellStrategy": "RSI",
        "CSellValue": "50",
        "Weight": "120"
    },
    {
        "SnippetName": "SellQuick",
        "ASellStrategy": "GAIN",
        "ASellValue": "0.01",
        "BSellStrategy": "DISABLED",
        "CSellStrategy": "DISABLED",
        "Weight": "99"
    },
]

To use the snippets, you can do something like:

"TestingSnippetGrouping": {
    "Condition": "[pair.DcaCount] >= [config.DcaCount]",
    "Configs": [
        {
            "DcaCount": "2",
            "Override": {
              "InsertSnippets": "SellQuick,SellSlow",
              "Weight": "98"
            }
        }
    ]
}

# Sticky Timer

For market conditions or any grouping, a property is added so this grouping says valid for period of time, regardless of if the condition changes. To use this feature, add a new property to the config called StickyTimer like so, for example:

 {
        "Name": "Boring",
        "StickyTimer": "250",
        "MaxTopCoinAverageChange": "2.5",
  },

The value for StickyTimer is in minutes.

# Auto whitelist

Add a new property in the PtFeeder section called:

AutoTopCoinWhitelist as a boolean, default is false.

If this is true, then only the top coins (35 for example if this is the settings) have trading enabled and have config generated. Any other coins in the PT data log, will have SellOnlyModeEnabled as true.

# Override your BaseCurrency

USE AT OWN RISK. This could lead to undesired effect like lost bought prices.

# Kucoin and Huobi

Support for Kucoin and Huobi ProfitTrailer bots.

# Changed

# Calculated Trailing improvements

  • Added DcaMaxTrailingBuy/DcaMinTrailingBuy and DcaMaxTrailingProfit/DcaMinTrailingProfit in PT Feeder section.

If a user has TrailingBuy/TrailingProfit and/or DcaTrailingProfit/DcaTrailingBuy in their Defaults section, we assume that they DO NOT want to calculate trailings. They can use a combination this way, so they can have a fixed DcaTrailingProfit but calculate DcaTrailingBuy for example.

# Offset Min/Max trailing buy and profit

Now the boundaries for the calculated trailing buy and profit can be offset like other properties.

# Top coin trend selection

  • Choose which coins you would like your TopCoinTrendChange to be built off. Add TopCoinTrendChangeCoins to your PtFeeder section of appsettings to use this feature.

# PT Feeder candle size

By default, PT Feeder uses 5 min candles. This can be changed by adding the property FeederCandleSize in the PtFeeder section of your appsettings. Possible values are: 1m, 5m, 30m, 1h, 1d. Note to make sure your MeasureTimes correspond or you will get an error. For example, a measure time of 120 mins will NOT work with 1 day candles.

# Seperate pairs and market condition checks

In hostsettings, MarketConditionCheckInMinutes is now how often properties on the pairs are checked and calculated. A new property called MarketIndicatorsCheckInSeconds is how often the market condition and the base coin indicators are checked. Default for this is 10 seconds.

# Trading View Alerts to specify PT Feeder host

To allow one trading view account to be used for multiple feeder, the first line can be set as the HOSTNAME specified in your PT Feeder hostsettings. If this matches, then only that Feeder instance will act on the alert. This is optional, BUT the first line cannot be anything else except the HOSTNAME OR the alert syntax of BINANCE:QTUMBTC as an example.

# Reduced comments

On some occasions, the PT Feeder config file is too large for ProfitTrailer. This can be avoided by reducing the comments in the config. To do this, add this to your hostsettings.json file:

"PrintPairComments" : "false",

By default, comments are included in your settings file.

# Reduced discord / telegram notifications

To recieve basic notifications when market conditions change, the following can be set

"MinimalNotifications" : "true",

By default, comments are included in your settings file.

# Removed

# Important SellOnlyModeEnabled change

Removed SellOnlyModeEnabled taking precedence. This is prior to having weights and overrides. If you have anything like this in your appsettings:

For example:

 "NewCoinsGrouping": {
    "Configs": [
      {
        "CoinAge": "3",
        "SellOnlyModeEnabled": "true",
        "TimeUnit": "Days"
      }
    ]
  },

Please change it to:

  "NewCoinsGrouping": {
    "Configs": [
      {
        "CoinAge": "3",
        "TimeUnit": "Days",
        "Override": {
          "SellOnlyModeEnabled": "true",
          "Weight":  "300" 
        } 
      }
    ]
  },

# Removed PT Feeder testmode

  • PT Test mode and paper trading is sufficient. PT Feeder does not need its own test mode.

  • ProfitTrailer version 1 compatiblity removed.

# Other fixes / improvements

  • Added discord messages on startup
  • Comments on pairs/dca config about which conditions were used from your appsettings.
  • Reduce the size of the PT config by condensing the PTF comments and only writing pairs that are not filtered
  • Fix BB Std always rounded up
  • Fix PendingOrderWaitTime converted to decimal value
  • Fix Min/Max trailing not respected on some occasions
  • Trading View time zone fix. Both Gmail and your local machine has be in the correct local timezone for the time comparision of the alert to match.
  • Lots of other small fixes