Files
Superalgos/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js
T

342 lines
9.0 KiB
JavaScript

function newProtocolNode () {
thisObject = {
getProtocolNode: getProtocolNode
}
return thisObject
function getProtocolNode (node) {
if (node === undefined) { return }
switch (node.type) {
case 'Code':
{
let code = {
type: node.type,
subType: node.subType,
name: node.name,
code: node.code
}
return code
}
case 'Condition':
{
let condition = {
type: node.type,
subType: node.subType,
name: node.name,
code: getProtocolNode(node.code)
}
return condition
}
case 'Situation': {
let situation = {
type: node.type,
subType: node.subType,
name: node.name,
conditions: []
}
for (let m = 0; m < node.conditions.length; m++) {
let condition = getProtocolNode(node.conditions[m])
situation.conditions.push(condition)
}
return situation
}
case 'Formula':
{
let formula = {
type: node.type,
subType: node.subType,
name: node.name,
code: node.code
}
return formula
}
case 'Next Phase Event':
{
let event = {
type: node.type,
subType: node.subType,
name: node.name,
situations: []
}
for (let m = 0; m < node.situations.length; m++) {
let situation = getProtocolNode(node.situations[m])
event.situations.push(situation)
}
return event
}
case 'Phase': {
let phase = {
type: node.type,
subType: node.subType,
name: node.name,
formula: getProtocolNode(node.formula),
nextPhaseEvent: getProtocolNode(node.nextPhaseEvent)
}
return phase
}
case 'Stop': {
let stop = {
type: node.type,
subType: node.subType,
name: node.name,
phases: []
}
for (let m = 0; m < node.phases.length; m++) {
let phase = getProtocolNode(node.phases[m])
stop.phases.push(phase)
}
return stop
}
case 'Take Profit': {
let takeProfit = {
type: node.type,
subType: node.subType,
name: node.name,
phases: []
}
for (let m = 0; m < node.phases.length; m++) {
let phase = getProtocolNode(node.phases[m])
takeProfit.phases.push(phase)
}
return takeProfit
}
case 'Take Position Event': {
let event = {
type: node.type,
subType: node.subType,
name: node.name,
situations: []
}
for (let m = 0; m < node.situations.length; m++) {
let situation = getProtocolNode(node.situations[m])
event.situations.push(situation)
}
return event
}
case 'Trigger On Event': {
let event = {
type: node.type,
subType: node.subType,
name: node.name,
situations: []
}
for (let m = 0; m < node.situations.length; m++) {
let situation = getProtocolNode(node.situations[m])
event.situations.push(situation)
}
return event
}
case 'Trigger Off Event': {
let event = {
type: node.type,
subType: node.subType,
name: node.name,
situations: []
}
for (let m = 0; m < node.situations.length; m++) {
let situation = getProtocolNode(node.situations[m])
event.situations.push(situation)
}
return event
}
case 'Initial Definition': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
stopLoss: getProtocolNode(node.stopLoss),
takeProfit: getProtocolNode(node.takeProfit),
positionSize: getProtocolNode(node.positionSize),
positionRate: getProtocolNode(node.positionRate)
}
return object
}
case 'Open Execution': {
let object = {
type: node.type,
subType: node.subType,
name: node.name
}
return object
}
case 'Close Execution': {
let object = {
type: node.type,
subType: node.subType,
name: node.name
}
return object
}
case 'Position Size': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
formula: getProtocolNode(node.formula)
}
return object
}
case 'Position Rate': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
formula: getProtocolNode(node.formula)
}
return object
}
case 'Trigger Stage': {
let stage = {
type: node.type,
subType: node.subType,
name: node.name,
triggerOn: getProtocolNode(node.triggerOn),
triggerOff: getProtocolNode(node.triggerOff),
takePosition: getProtocolNode(node.takePosition)
}
return stage
}
case 'Open Stage': {
let stage = {
type: node.type,
subType: node.subType,
name: node.name,
initialDefinition: getProtocolNode(node.initialDefinition),
openExecution: getProtocolNode(node.openExecution)
}
return stage
}
case 'Manage Stage': {
let stage = {
type: node.type,
subType: node.subType,
name: node.name,
stopLoss: getProtocolNode(node.stopLoss),
takeProfit: getProtocolNode(node.takeProfit)
}
return stage
}
case 'Close Stage': {
let stage = {
type: node.type,
subType: node.subType,
name: node.name,
closeExecution: getProtocolNode(node.closeExecution)
}
return stage
}
case 'Strategy': {
let strategy = {
type: node.type,
subType: node.subType,
name: node.name,
triggerStage: getProtocolNode(node.triggerStage),
openStage: getProtocolNode(node.openStage),
manageStage: getProtocolNode(node.manageStage),
closeStage: getProtocolNode(node.closeStage)
}
return strategy
}
case 'Base Asset': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
formula: getProtocolNode(node.formula)
}
return object
}
case 'Parameters': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
baseAsset: getProtocolNode(node.baseAsset)
}
return object
}
case 'Trading System': {
let tradingSystem = {
type: node.type,
subType: node.subType,
name: node.name,
strategies: [],
parameters: getProtocolNode(node.parameters)
}
for (let m = 0; m < node.strategies.length; m++) {
let strategy = getProtocolNode(node.strategies[m])
tradingSystem.strategies.push(strategy)
}
return tradingSystem
}
case 'Personal Data': {
let personalData = {
type: node.type,
subType: node.subType,
name: node.name,
exchangeAccounts: []
}
for (let m = 0; m < node.exchangeAccounts.length; m++) {
let exchangeAccount = getProtocolNode(node.exchangeAccounts[m])
personalData.exchangeAccounts.push(exchangeAccount)
}
return personalData
}
case 'Exchange Account': {
let exchangeAccount = {
type: node.type,
subType: node.subType,
name: node.name,
assets: [],
keys: []
}
for (let m = 0; m < node.assets.length; m++) {
let asset = getProtocolNode(node.assets[m])
exchangeAccount.assets.push(asset)
}
for (let m = 0; m < node.keys.length; m++) {
let key = getProtocolNode(node.keys[m])
exchangeAccount.keys.push(key)
}
return exchangeAccount
}
case 'Exchange Account Asset': {
let asset = {
type: node.type,
subType: node.subType,
name: node.name
}
return asset
}
case 'Exchange Account Key': {
let key = {
type: node.type,
subType: node.subType,
name: node.name,
code: node.code
}
return key
}
case 'Definition': {
let object = {
type: node.type,
subType: node.subType,
name: node.name,
tradingSystem: getProtocolNode(node.tradingSystem),
personalData: getProtocolNode(node.personalData)
}
return object
}
}
}
}