From 54ee78ddfe9d9ed906c878afc958ed9fda46e05c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 5 Mar 2019 15:40:06 +0100 Subject: [PATCH] Strategy 2 implemented --- Multi-Period-Market/User.Bot.js | 98 +++++++++++++++++++++++---------- 1 file changed, 68 insertions(+), 30 deletions(-) diff --git a/Multi-Period-Market/User.Bot.js b/Multi-Period-Market/User.Bot.js index f4a9acefc..a78052dae 100644 --- a/Multi-Period-Market/User.Bot.js +++ b/Multi-Period-Market/User.Bot.js @@ -639,7 +639,7 @@ n++; - if (n < global.marketFilesPeriods.length) { + if (n < global.marketFilesPeriods.length - 1) { loopBody(); @@ -781,7 +781,7 @@ manually. */ - strategy = 1; + strategy = 2; } /* Checking what happened since the last execution. We need to know if the Stop Loss @@ -817,7 +817,7 @@ if (strategyPhase < 4) { // A buy condition has not been detected. - if (strategy === 2) { + if (strategy === 1) { /* Strategy #1: Trend Following. */ @@ -998,30 +998,6 @@ } } - - /* Check if a Sell condition was found. */ - - if (strategyPhase === 2) { - - previousBalanceAssetA = balanceAssetA; - lastProfit = 0; - lastProfitPercent = 0; - - balanceAssetB = balanceAssetA * candle.close; - balanceAssetA = 0; - - rate = candle.close; - sellRate = rate; - - stopLoss = sellRate + sellRate * stopLossPercentage / 100; - - stopLossDecay = 0; - - addRecord(); - - strategyPhase = 3; - continue; - } } if (strategy === 2) { @@ -1040,9 +1016,24 @@ let subChannel = getElement(bollingerSubChannelsArray, candle.begin, candle.end); - /* Signal to be ready to Sell */ + /* Sell Condition #1 */ + + if ( + strategyPhase === 1 && + candle.max > band.movingAverage + band.deviation + ) { + + type = '"Sell-1"'; + + strategyPhase = 2; + stopLossPhase = 1; + buyOrderPhase = 1; + } + + /* Signal to be ready to Sell */ + if ( strategyPhase === 0 && subChannel.direction === 'Up' && @@ -1057,14 +1048,53 @@ strategyPhase = 1; } - } + /* Stop Loss Management */ + + if (stopLossPhase === 1) { + + newStopLoss = newStopLoss = sellRate + sellRate * (stopLossPercentage - stopLossDecay) / 100; + + if (newStopLoss < previousStopLoss) { + stopLoss = newStopLoss; + } else { + stopLoss = previousStopLoss; + } + } + + /* Buy Orders Management */ + + if (buyOrderPhase === 1) { + + buyOrder = band.movingAverage; + + } + } } + /* Check if a Sell condition was found. */ + if (strategyPhase === 2) { + previousBalanceAssetA = balanceAssetA; + lastProfit = 0; + lastProfitPercent = 0; + balanceAssetB = balanceAssetA * candle.close; + balanceAssetA = 0; + rate = candle.close; + sellRate = rate; + + stopLoss = sellRate + sellRate * stopLossPercentage / 100; + + stopLossDecay = 0; + + addRecord(); + + strategyPhase = 3; + continue; + } /* Here we define what to do if the conditions to buy were activated. */ @@ -1162,14 +1192,22 @@ function getElement(pArray, begin, end) { + let element; + for (let i = 0; i < pArray.length; i++) { - let element = pArray[i]; + element = pArray[i]; if (begin >= element.begin && end <= element.end) { return element } } + + element = { + direction: 'unknown', + slope: 'unknown' + }; + return element; } } catch (err) {