Files
Superalgos/src/templates/strategyTemplate.js
T

260 lines
8.4 KiB
JavaScript

/* eslint-disable max-len */
const strategy = {
subStrategies: [
{
active: true,
name: 'Trend Following',
entryPoint: {
situations: [
{
name: 'Price Collapsing',
conditions: [
{
name: '%B Moving Average going down',
code: "percentageBandwidth.previous.direction === 'down' && percentageBandwidth.direction === 'down'",
},
{
name: '%B Bandwidth going up',
code: 'percentageBandwidth.previous.previous.bandwidth < percentageBandwidth.previous.bandwidth && percentageBandwidth.previous.bandwidth < percentageBandwidth.bandwidth',
},
{
name: 'Candles Min going down',
code: 'candle.previous.previous.min > candle.previous.min && candle.previous.min > candle.min',
},
],
},
],
},
exitPoint: {
situations: [
{
name: 'Market Reversing',
conditions: [
{
name: 'Close above Band Moving Average',
code: 'candle.close > bollingerBand.movingAverage',
},
],
},
],
},
sellPoint: {
situations: [
{
name: 'Min below lower bollingerBand.',
conditions: [
{
name: '3 Candles MIN below Lower Band',
code: 'candle.previous.previous.min < bollingerBand.previous.previous.movingAverage - bollingerBand.previous.previous.deviation && candle.previous.min < bollingerBand.previous.movingAverage - bollingerBand.previous.deviation && candle.min < bollingerBand.movingAverage - bollingerBand.deviation',
},
],
},
],
},
stopLoss: {
phases: [
{
name: 'Following Sell Rate',
code: 'newStopLoss = sellRate + sellRate * (stopLossPercentage - stopLossDecay) / 100',
situations: [
{
name: 'Candle below Moving Average',
conditions: [
{
name: 'Candle fully below Band Moving Average',
code: 'candle.max < bollingerBand.movingAverage',
},
{
name: 'Band Moving Average going down',
code: "bollingerBand.direction === 'down'",
},
],
},
],
},
{
name: 'Above Bands Moving Average',
code: 'newStopLoss = bollingerBand.movingAverage + bollingerBand.movingAverage * (stopLossPercentage - stopLossDecay) / 100',
situations: [
{
name: 'Candle below Moving Average',
conditions: [
{
name: 'Candle MAX below lower band',
code: 'candle.max < bollingerBand.movingAverage - bollingerBand.deviation',
},
],
},
],
},
{
name: 'At Bands Moving Average',
code: 'newStopLoss = bollingerBand.movingAverage',
situations: [],
},
],
},
buyOrder: {
phases: [
{
name: '12 times standard deviation',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation * 12',
situations: [
{
name: 'Candle cut by lower band',
conditions: [
{
name: 'Max above lower band',
code: 'candle.max > bollingerBand.movingAverage - bollingerBand.deviation',
},
{
name: 'MIN below lower band',
code: 'candle.min < bollingerBand.movingAverage - bollingerBand.deviation',
},
{
name: 'Band Moving Average going down',
code: 'bollingerBand.previous.movingAverage > bollingerBand.movingAverage',
},
],
},
],
},
{
name: '10 times standard deviation',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation * 10',
situations: [
{
name: '%B starting to revert',
conditions: [
{
name: '%B Moving Average going up',
code: "percentageBandwidth.direction === 'up'",
},
{
name: '%B Moving Average above 0',
code: 'percentageBandwidth.movingAverage > 0',
},
],
},
],
},
{
name: '4 times standard deviation',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation * 4',
situations: [
{
name: '%B going down again',
conditions: [
{
name: '%B Moving Average going down',
code: "percentageBandwidth.direction === 'down'",
},
],
},
],
},
{
name: '3 times standard deviation',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation * 3',
situations: [
{
name: '%B going up and above 30',
conditions: [
{
name: '%B Moving Average going up',
code: "percentageBandwidth.direction === 'up'",
},
{
name: '%B Moving Average above 30',
code: 'percentageBandwidth.movingAverage > 30',
},
],
},
],
},
{
name: 'At lower band',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation * 2',
situations: [],
},
],
},
},
{
active: true,
name: 'Range Trading',
entryPoint: {
situations: [
{
name: 'Gentle Up Trend',
conditions: [
{
name: 'Sub-Channel going up',
code: "subChannel.direction === 'up'",
},
{
name: 'Sub-Channel Side|Gentle|Medium',
code: "subChannel.slope === 'Side' || subChannel.slope === 'Gentle' || subChannel.slope === 'Medium'",
},
{
name: 'Candle Close above Lower Band',
code: 'candle.close > bollingerBand.movingAverage + bollingerBand.deviation',
},
],
},
],
},
exitPoint: {
situations: [
{
name: 'Outside Sub-Channel',
conditions: [
{
name: 'Going down or too Steep',
code: "subChannel.direction === 'Down' || subChannel.slope === 'Steep' || subChannel.slope === 'Extreme'",
},
],
},
],
},
sellPoint: {
situations: [
{
name: 'Min below lower bollingerBand.',
conditions: [
{
name: '%B Moving Average going down',
code: 'percentageBandwidth.previous.movingAverage > percentageBandwidth.movingAverage',
},
{
name: '%B Moving Average above 90',
code: 'percentageBandwidth.previous.movingAverage > 90',
},
],
},
],
},
stopLoss: {
phases: [
{
name: 'Following Sell Rate',
code: 'newStopLoss = sellRate + sellRate * (stopLossPercentage - stopLossDecay) / 100',
situations: [],
},
],
},
buyOrder: {
phases: [
{
name: 'Between Band Moving Average and Lower Band',
code: 'buyOrder = bollingerBand.movingAverage - bollingerBand.standardDeviation',
situations: [],
},
],
},
},
],
};
export default strategy;