Strategy Objects working well
This commit is contained in:
1 parent
7dc1aa648f
commit
2f7b02b027
2 files changed
+91
-41
No files matched your search
@@ -0,0 +1,70 @@
|
||||
exports.newTradingStrategy = function newTradingStrategy(bot, logger) {
|
||||
/*
|
||||
This module packages all functions related to Strategies.
|
||||
*/
|
||||
const MODULE_NAME = 'Trading Strategy'
|
||||
let thisObject = {
|
||||
openStrategy: openStrategy,
|
||||
closeStrategy: closeStrategy,
|
||||
updateStageType: updateStageType,
|
||||
resetStrategy: resetStrategy,
|
||||
updateStatus: updateStatus,
|
||||
updateCounters: updateCounters,
|
||||
initialize: initialize,
|
||||
finalize: finalize
|
||||
}
|
||||
|
||||
let tradingEngine
|
||||
|
||||
return thisObject
|
||||
|
||||
function initialize() {
|
||||
tradingEngine = bot.simulationState.tradingEngine
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
tradingEngine = undefined
|
||||
}
|
||||
|
||||
function openStrategy(stageType, index, situationName, strategyName) {
|
||||
tradingEngine.current.strategy.status.value = 'Open'
|
||||
tradingEngine.current.strategy.begin.value = tradingEngine.current.candle.begin.value
|
||||
tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value // TODO: overrride with the node Formula
|
||||
tradingEngine.current.strategy.beginRate.value = tradingEngine.current.candle.min.value
|
||||
tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.min.value // TODO: overrride with the node Formula
|
||||
|
||||
tradingEngine.current.strategy.stageType.value = stageType
|
||||
tradingEngine.current.strategy.index.value = index
|
||||
tradingEngine.current.strategy.situationName.value = situationName
|
||||
tradingEngine.current.strategy.strategyName.value = strategyName
|
||||
}
|
||||
|
||||
function closeStrategy() {
|
||||
tradingEngine.current.strategy.status.value = 'Closed'
|
||||
tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value
|
||||
tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.min.value
|
||||
}
|
||||
|
||||
function resetStrategy() {
|
||||
tradingEngine.current.strategy.status.value = tradingEngine.current.strategy.status.config.initialValue
|
||||
tradingEngine.current.strategy.stageType.value = tradingEngine.current.strategy.stageType.config.initialValue
|
||||
tradingEngine.current.strategy.index.value = tradingEngine.current.strategy.index.config.initialValue
|
||||
tradingEngine.current.strategy.strategyCounters.periods.value = tradingEngine.current.strategy.strategyCounters.periods.config.initialValue
|
||||
}
|
||||
|
||||
function updateStageType(stageType) {
|
||||
tradingEngine.current.strategy.stageType.value = stageType
|
||||
}
|
||||
|
||||
function updateStatus() {
|
||||
if (tradingEngine.current.strategy.status.value === 'Closed') {
|
||||
resetStrategy()
|
||||
}
|
||||
}
|
||||
|
||||
function updateCounters() {
|
||||
if (tradingEngine.current.strategy.status.value === 'Open') {
|
||||
tradingEngine.current.strategy.strategyCounters.periods.value++
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,15 +38,23 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
let conditions = new Map()
|
||||
let formulas = new Map()
|
||||
|
||||
const TRADING_STRATEGY_MODULE = require('./TradingStrategy.js')
|
||||
let tradingStrategyModule = TRADING_STRATEGY_MODULE.newTradingStrategy(bot, logger)
|
||||
|
||||
return thisObject
|
||||
|
||||
function initialize() {
|
||||
tradingSystem = bot.simulationState.tradingSystem
|
||||
tradingEngine = bot.simulationState.tradingEngine
|
||||
sessionParameters = bot.SESSION.parameters
|
||||
|
||||
tradingStrategyModule.initialize()
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
tradingStrategyModule.finalize()
|
||||
tradingStrategyModule = undefined
|
||||
|
||||
chart = undefined
|
||||
|
||||
conditions = undefined
|
||||
@@ -75,9 +83,8 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
}
|
||||
|
||||
function mantainStrategies() {
|
||||
if (tradingEngine.current.strategy.status.value === 'Closed') {
|
||||
resetStrategy()
|
||||
}
|
||||
tradingStrategyModule.updateStatus()
|
||||
tradingStrategyModule.updateCounters()
|
||||
}
|
||||
|
||||
function mantainPositions() {
|
||||
@@ -275,11 +282,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
tradingSystem.highlights.push(triggerStage.triggerOn.id)
|
||||
tradingSystem.highlights.push(triggerStage.id)
|
||||
|
||||
tradingEngine.current.strategy.stageType.value = 'Trigger Stage'
|
||||
openStrategy()
|
||||
tradingEngine.current.strategy.index.value = j
|
||||
tradingEngine.current.strategy.situationName.value = situation.name
|
||||
tradingEngine.current.strategy.strategyName.value = strategy.name
|
||||
tradingStrategyModule.openStrategy('Trigger Stage', j, situation.name, strategy.name)
|
||||
|
||||
tradingEngine.current.distanceToEvent.triggerOn.value = 1
|
||||
|
||||
@@ -329,9 +332,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
tradingSystem.highlights.push(triggerStage.triggerOff.id)
|
||||
tradingSystem.highlights.push(triggerStage.id)
|
||||
|
||||
closeTrateggy()
|
||||
tradingEngine.current.strategy.stageType.value = 'No Stage'
|
||||
tradingEngine.current.strategy.index.value = tradingEngine.current.strategy.index.config.initialValue
|
||||
tradingStrategyModule.closeStrategy()
|
||||
|
||||
tradingEngine.current.distanceToEvent.triggerOff.value = 1
|
||||
|
||||
@@ -380,7 +381,8 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
tradingSystem.highlights.push(triggerStage.takePosition.id)
|
||||
tradingSystem.highlights.push(triggerStage.id)
|
||||
|
||||
tradingEngine.current.strategy.stageType.value = 'Open Stage'
|
||||
tradingStrategyModule.updateStageType('Open Stage')
|
||||
|
||||
tradingEngine.current.position.stopLoss.stopLossStage.value = 'Open Stage'
|
||||
tradingEngine.current.position.takeProfit.takeProfitStage.value = 'Open Stage'
|
||||
tradingEngine.current.position.stopLoss.stopLossPhase.value = 0
|
||||
@@ -470,7 +472,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
tradingEngine.current.position.stopLoss.stopLossPhase.value++
|
||||
tradingEngine.current.position.stopLoss.stopLossStage.value = 'Manage Stage'
|
||||
if (tradingEngine.current.position.takeProfit.takeProfitPhase.value > 0) {
|
||||
tradingEngine.current.strategy.stageType.value = 'Manage Stage'
|
||||
tradingStrategyModule.updateStageType('Manage Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(manageStage, 'Take Profit')
|
||||
*/
|
||||
@@ -528,7 +530,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
|
||||
tradingEngine.current.position.stopLoss.stopLossStage.value = 'Manage Stage'
|
||||
if (tradingEngine.current.position.takeProfit.takeProfitPhase.value > 0) {
|
||||
tradingEngine.current.strategy.stageType.value = 'Manage Stage'
|
||||
tradingStrategyModule.updateStageType('Manage Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(manageStage, 'Take Profit')
|
||||
*/
|
||||
@@ -648,7 +650,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
tradingEngine.current.position.takeProfit.takeProfitPhase.value++
|
||||
tradingEngine.current.position.takeProfit.takeProfitStage.value = 'Manage Stage'
|
||||
if (tradingEngine.current.position.stopLoss.stopLossPhase.value > 0) {
|
||||
tradingEngine.current.strategy.stageType.value = 'Manage Stage'
|
||||
tradingStrategyModule.updateStageType('Manage Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(manageStage, 'Stop')
|
||||
*/
|
||||
@@ -705,7 +707,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
|
||||
tradingEngine.current.position.takeProfit.takeProfitStage.value = 'Manage Stage'
|
||||
if (tradingEngine.current.position.stopLoss.stopLossPhase.value > 0) {
|
||||
tradingEngine.current.strategy.stageType.value = 'Manage Stage'
|
||||
tradingStrategyModule.updateStageType('Manage Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(manageStage, 'Stop')
|
||||
*/
|
||||
@@ -802,7 +804,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
|
||||
tradingEngine.current.position.endRate.value = slippedStopLoss
|
||||
|
||||
tradingEngine.current.strategy.stageType.value = 'Close Stage'
|
||||
tradingStrategyModule.updateStageType('Close Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(strategy.closeStage, 'Stop')
|
||||
*/
|
||||
@@ -849,7 +851,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
|
||||
tradingEngine.current.position.endRate.value = slippedTakeProfit
|
||||
|
||||
tradingEngine.current.strategy.stageType.value = 'Close Stage'
|
||||
tradingStrategyModule.updateStageType('Close Stage')
|
||||
/* TODO ANNOUNCEMENT
|
||||
checkAnnouncements(strategy.closeStage, 'Take Profit')
|
||||
*/
|
||||
@@ -987,11 +989,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
|
||||
function exitStrategyAfterPosition() {
|
||||
if (tradingEngine.current.strategy.stageType.value === 'Close Stage') {
|
||||
|
||||
closeTrateggy()
|
||||
tradingEngine.current.strategy.index.value = tradingEngine.current.strategy.index.config.initialValue
|
||||
tradingEngine.current.strategy.stageType.value = 'No Stage'
|
||||
|
||||
tradingStrategyModule.closeStrategy()
|
||||
tradingEngine.current.distanceToEvent.triggerOff.value = 1
|
||||
}
|
||||
}
|
||||
@@ -1041,23 +1039,5 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function closeTrateggy() {
|
||||
tradingEngine.current.strategy.status.value = 'Closed'
|
||||
tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value
|
||||
tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.min.value
|
||||
}
|
||||
|
||||
function openStrategy() {
|
||||
tradingEngine.current.strategy.status.value = 'Open'
|
||||
tradingEngine.current.strategy.begin.value = tradingEngine.current.candle.begin.value
|
||||
tradingEngine.current.strategy.end.value = tradingEngine.current.candle.end.value // TODO: overrride with the node Formula
|
||||
tradingEngine.current.strategy.beginRate.value = tradingEngine.current.candle.min.value
|
||||
tradingEngine.current.strategy.endRate.value = tradingEngine.current.candle.min.value // TODO: overrride with the node Formula
|
||||
}
|
||||
|
||||
function resetStrategy() {
|
||||
tradingEngine.current.strategy.status.value = tradingEngine.current.strategy.status.config.initialValue
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user