Announcements working again

This commit is contained in:
Luis Fernando Molina committed 2020-06-24 20:48:39 +02:00
1 parent b968fd3609
commit ff922bf797
4 files changed
+48 -139

No files matched your search

+20 -74
View File
@@ -3,7 +3,6 @@ exports.newAnnouncements = function newAnnouncements(bot, logger) {
const MODULE_NAME = 'Announcements'
let thisObject = {
checkAnnouncements: checkAnnouncements,
makeAnnoucements: makeAnnoucements,
initialize: initialize,
finalize: finalize
@@ -20,93 +19,40 @@ exports.newAnnouncements = function newAnnouncements(bot, logger) {
function finalize() {
tradingEngine = undefined
announcementsToBeMade = undefined
}
function checkAnnouncements(node, value) {
/*
Value is an optional parameter that represents the value that the announcement is monitoring for change (for numeric values only).
If we do receive this value, we will only make the annoucement if the variance is grater than the user pre-defined value
for this variance.
*/
function makeAnnoucements(node) {
if (node.announcements !== undefined) {
for (let i = 0; i < node.announcements.length; i++) {
let announcement = node.announcements[i]
let key = node.type + '-' + announcement.name + '-' + announcement.id
let lastPeriodAnnounced = -1
let newAnnouncementRecord = {}
for (let j = 0; j < variable.announcements.length; j++) {
let announcementRecord = variable.announcements[j]
if (announcementRecord.key === key) {
lastPeriodAnnounced = announcementRecord.periods
newAnnouncementRecord = announcementRecord
break
let canAnnounce = true
if (announcement.announcementCondition !== undefined) {
let conditionValue
try {
conditionValue = eval(announcement.announcementCondition.code)
} catch (err) {
tradingSystem.errors.push([announcement.announcementCondition.id, err.message])
}
if (conditionValue !== true) { canAnnounce = false }
}
if (tradingEngine.episode.episodeCounters.periods.value > lastPeriodAnnounced) {
if (isNaN(value) === false) {
/* The Value Variation is what tells us how much the value already announced must change in order to annouce it again. */
let valueVariation
let config = announcement.config
valueVariation = config.valueVariation
if (newAnnouncementRecord.value !== undefined && valueVariation !== undefined) {
let upperLimit = newAnnouncementRecord.value + newAnnouncementRecord.value * valueVariation / 100
let lowerLimit = newAnnouncementRecord.value - newAnnouncementRecord.value * valueVariation / 100
if (value > lowerLimit && value < upperLimit) {
/* There is not enough variation to announce this again. */
return
}
if (canAnnounce === true) {
let text = announcement.config.text
if (announcement.formula !== undefined) {
try {
text = eval(announcement.formula.code)
} catch (err) {
tradingSystem.errors.push([announcement.formula.id, err.message])
}
}
/*
We store the announcement temporarily at an Array to differ its execution, becasue we need to evaulate its formula
and at this point in time the potential variables used at the formula are still not set.
*/
announcement.value = value
announcementsToBeMade.push(announcement)
/* Next, we will remmeber this announcement was already done, so that it is not announced again in further processing of the same day. */
if (newAnnouncementRecord.periods !== undefined) {
newAnnouncementRecord.periods = tradingEngine.episode.episodeCounters.periods.value
newAnnouncementRecord.value = value
if (bot.SESSION.socialBots !== undefined) {
bot.SESSION.socialBots.announce(text)
} else {
newAnnouncementRecord = {
key: key,
periods: tradingEngine.episode.episodeCounters.periods.value,
value: value
}
variable.announcements.push(newAnnouncementRecord)
tradingSystem.errors.push([announcement.id, 'Could not announce because session does not have Social Bots.'])
}
}
}
}
}
function makeAnnoucements() {
/* Here we go through all the annoucements that need to be done during this loop, and we just do them. */
for (let i = 0; i < announcementsToBeMade.length; i++) {
announcement = announcementsToBeMade[i]
/* Here we check if there is a formula attached to the annoucement, we evaluate it to get the annoucement text. */
let formulaValue
if (announcement.formula !== undefined) {
try {
let value = announcement.value
formulaValue = eval(announcement.formula.code)
} catch (err) {
announcement.formula.error = err.message
}
}
announcement.formulaValue = formulaValue
if (bot.SESSION.socialBots !== undefined) {
bot.SESSION.socialBots.announce(announcement)
}
}
}
}
-6
View File
@@ -68,10 +68,6 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
let snapshotsModule = SNAPSHOTS_MODULE.newSnapshots(bot, logger)
snapshotsModule.initialize()
const ANNOUNCEMENTS_MODULE = require('./Announcements.js')
let announcementsModule = ANNOUNCEMENTS_MODULE.newAnnouncements(bot, logger)
announcementsModule.initialize()
const TRADING_SYSTEM_MODULE = require('./TradingSystem.js')
let tradingSystemModule = TRADING_SYSTEM_MODULE.newTradingSystem(bot, logger)
tradingSystemModule.initialize()
@@ -224,7 +220,6 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
snapshotsModule.manageSnapshots()
tradingRecordsModule.appendRecords()
announcementsModule.makeAnnoucements() // After everything at the simulation level was done, we will do the annoucements that are pending.
controlLoop()
}
@@ -259,7 +254,6 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
tradingSystemModule.finalize()
tradingRecordsModule.finalize()
snapshotsModule.finalize()
announcementsModule.finalize()
callback()
}
+24 -48
View File
@@ -44,6 +44,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
const TRADING_POSITION_MODULE = require('./TradingPosition.js')
let tradingPositionModule = TRADING_POSITION_MODULE.newTradingPosition(bot, logger)
const ANNOUNCEMENTS_MODULE = require('./Announcements.js')
let announcementsModule = ANNOUNCEMENTS_MODULE.newAnnouncements(bot, logger)
return thisObject
function initialize() {
@@ -53,6 +56,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingStrategyModule.initialize()
tradingPositionModule.initialize()
announcementsModule.initialize()
}
function finalize() {
@@ -62,6 +66,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingPositionModule.finalize()
tradingPositionModule = undefined
announcementsModule.finalize()
announcementsModule = undefined
chart = undefined
conditions = undefined
@@ -296,9 +303,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingEngine.current.distanceToEvent.triggerOn.value = 1
announcementsModule.makeAnnoucements(triggerStage.triggerOn)
announcementsModule.makeAnnoucements(triggerStage)
/* TODO See what to do with this:
checkAnnouncements(triggerStage.triggerOn)
checkAnnouncements(triggerStage)
saveAsLastTriggerOnSnapshot = true
*/
@@ -346,9 +353,7 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingEngine.current.distanceToEvent.triggerOff.value = 1
/* TODO See what to do with this:
checkAnnouncements(triggerStage.triggerOff)
*/
announcementsModule.makeAnnoucements(triggerStage.triggerOff)
logger.write(MODULE_NAME, '[INFO] checkTriggerOff -> Closing Strategy: ' + strategy.name)
return true // This Means that we have just met the conditions to trigger off.
@@ -397,9 +402,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingStrategyModule.updateStageType('Open Stage')
tradingPositionModule.openPosition(situation.name)
announcementsModule.makeAnnoucements(triggerStage.takePosition)
announcementsModule.makeAnnoucements(strategy.openStage)
/* TODO See what to do with this:
checkAnnouncements(triggerStage.takePosition)
checkAnnouncements(strategy.openStage)
saveAsLastTakePositionSnapshot = true
*/
@@ -481,14 +486,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
if (tradingEngine.current.position.takeProfit.takeProfitPhase.value > 0) {
tradingStrategyModule.updateStageType('Manage Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(manageStage, 'Take Profit')
*/
announcementsModule.makeAnnoucements(manageStage)
}
/* TODO ANNOUNCEMENT
checkAnnouncements(nextPhaseEvent)
*/
announcementsModule.makeAnnoucements(nextPhaseEvent)
return // only one event can pass at the time
}
}
@@ -538,13 +538,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
if (tradingEngine.current.position.takeProfit.takeProfitPhase.value > 0) {
tradingStrategyModule.updateStageType('Manage Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(manageStage, 'Take Profit')
*/
announcementsModule.makeAnnoucements(manageStage)
}
/*
checkAnnouncements(moveToPhaseEvent)
*/
announcementsModule.makeAnnoucements(moveToPhaseEvent)
return // only one event can pass at the time
}
}
@@ -580,11 +576,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
let previousValue = tradingEngine.current.position.stopLoss.value
tradingPositionModule.applyStopLossFormula(formulas, phase.formula.id)
/* TODO ANNOUNCEMENTS
if (tradingEngine.current.position.stopLoss.value !== previousValue) {
checkAnnouncements(phase, tradingEngine.current.position.stopLoss.value)
announcementsModule.makeAnnoucements(phase)
}
*/
}
}
}
@@ -658,13 +652,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
if (tradingEngine.current.position.stopLoss.stopLossPhase.value > 0) {
tradingStrategyModule.updateStageType('Manage Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(manageStage, 'Stop')
*/
announcementsModule.makeAnnoucements(manageStage)
}
/* TODO ANNOUNCEMENT
checkAnnouncements(nextPhaseEvent)
*/
announcementsModule.makeAnnoucements(nextPhaseEvent)
return // only one event can pass at the time
}
}
@@ -714,13 +704,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
if (tradingEngine.current.position.stopLoss.stopLossPhase.value > 0) {
tradingStrategyModule.updateStageType('Manage Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(manageStage, 'Stop')
*/
announcementsModule.makeAnnoucements(manageStage)
}
/* TODO ANNOUNCEMENT
checkAnnouncements(moveToPhaseEvent)
*/
announcementsModule.makeAnnoucements(moveToPhaseEvent)
return // only one event can pass at the time
}
}
@@ -756,11 +742,9 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
let previousValue = tradingEngine.current.position.takeProfit.value
tradingPositionModule.applyTakeProfitFormula(formulas, phase.formula.id)
/* TODO ANNOUNCEMENTS
if (tradingEngine.current.position.takeProfit.value !== previousValue) {
checkAnnouncements(phase, tradingEngine.current.position.takeProfit.value)
announcementsModule.makeAnnoucements(phase)
}
*/
}
}
}
@@ -785,12 +769,8 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingPositionModule.preventStopLossDistortion()
tradingPositionModule.applySlippageToStopLoss()
tradingPositionModule.closePosition('Stop Loss')
tradingStrategyModule.updateStageType('Close Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(strategy.closeStage, 'Stop')
*/
announcementsModule.makeAnnoucements(strategy.closeStage)
return true // This means that the STOP was hit.
}
@@ -804,12 +784,8 @@ exports.newTradingSystem = function newTradingSystem(bot, logger) {
tradingPositionModule.preventTakeProfitDistortion()
tradingPositionModule.applySlippageToTakeProfit()
tradingPositionModule.closePosition('Take Profit')
tradingStrategyModule.updateStageType('Close Stage')
/* TODO ANNOUNCEMENT
checkAnnouncements(strategy.closeStage, 'Take Profit')
*/
announcementsModule.makeAnnoucements(strategy.closeStage)
return true // This means that the Take Profit was hit.
}
}
+4 -11
View File
@@ -19,29 +19,22 @@ exports.newSocialBots = function newSocialBots(bot, logger) {
let socialBot = bot.SESSION.socialBots.bots[i]
if (socialBot.type === "Telegram Bot") {
let config = socialBot.config
socialBot.botInstance = SOCIAL_BOTS_MODULE.newTelegramBot(bot, logger)
socialBot.botInstance = TELEGRAM_BOT_MODULE.newTelegramBot(bot, logger)
socialBot.botInstance.initialize(config.botToken, config.chatId)
}
}
}
function announce(announcement) {
function announce(text) {
if (bot.SESSION.socialBots.bots !== undefined) {
for (let i = 0; i < bot.SESSION.socialBots.bots.length; i++) {
let socialBot = bot.SESSION.socialBots.bots[i]
try {
let config = announcement.config
if (socialBot.type === "Telegram Bot") {
if (announcement.formulaValue !== undefined) {
socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, announcement.formulaValue).catch(err => parentLogger.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
} else {
socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, config.text).catch(err => parentLogger.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
}
socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, text).catch(err => logger.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
}
} catch (err) {
parentLogger.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack);
logger.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack);
}
}
}