Files
Superalgos/Spaces/StrategySpace.js
T

229 lines
5.7 KiB
JavaScript

function newStrategySpace () {
const MODULE_NAME = 'Strategy Space'
let thisObject = {
sidePanel: undefined,
strategizerGateway: undefined,
container: undefined,
iconCollection: undefined,
iconByPartType: undefined,
workspace: undefined,
physics: physics,
draw: draw,
getContainer: getContainer,
makeVisible: makeVisible,
makeInvisible: makeInvisible,
initialize: initialize
}
let container = newContainer()
container.initialize()
thisObject.container = container
container.isDraggeable = false
thisObject.iconCollection = new Map()
thisObject.iconByPartType = new Map()
return thisObject
async function initialize () {
loadIconCollection()
buildIconByPartTypeMap()
thisObject.strategizerGateway = newStrategizerGateway()
thisObject.workspace = newWorkspace()
thisObject.workspace.initialize()
}
function buildIconByPartTypeMap () {
const relationshipArray = [
['Definition', 'text'],
['Network', 'network'],
['Network Node', 'network-node'],
['Layer Manager', 'video-player'],
['Layer', 'attractive'],
['Task Manager', 'task'],
['Task', 'timeline'],
['Sensor', 'pipette'],
['Indicator', 'vector'],
['Trading Engine', 'brainstorming'],
['Process', 'grid'],
['Backtesting Session', 'session-backtesting'],
['Live Trading Session', 'session-live-trading'],
['Fordward Testing Session', 'session-forward-testing'],
['Paper Trading Session', 'session-paper-trading'],
['Personal Data', 'security'],
['Exchange Account', 'approve'],
['Exchange Account Asset', 'paper-plane'],
['Exchange Account Key', 'login'],
['Workspace', 'design-tool'],
['Trading System', 'analysis'],
['Parameters', 'settings'],
['Base Asset', 'loading'],
['Time Range', 'chronometer'],
['Time Period', 'schedule'],
['Slippage', 'support'],
['Fee Structure', 'sitemap'],
['Strategy', 'quality'],
['Trigger Stage', 'stage-trigger'],
['Open Stage', 'stage-open'],
['Manage Stage', 'video-player'],
['Close Stage', 'stage-close'],
['Position Size', 'stage-open-position-size'],
['Position Rate', 'stage-open-postion-rate'],
['Trigger On Event', 'stage-trigger-trigger-on'],
['Trigger Off Event', 'stage-trigger-trigger-off'],
['Take Position Event', 'stage-trigger-take-position'],
['Initial Definition', 'task'],
['Open Execution', 'piggy-bank'],
['Close Execution', 'piggy-bank'],
['Stop', 'stop'],
['Take Profit', 'stage-open-take-profit'],
['Phase', 'placeholder'],
['Formula', 'pipette'],
['Next Phase Event', 'pantone'],
['Situation', 'pyramid'],
['Condition', 'testing'],
['Code', 'html']
]
for (let i = 0; i < relationshipArray.length; i++) {
let record = relationshipArray[i]
let icon = thisObject.iconCollection.get(record[1])
thisObject.iconByPartType.set(record[0], icon)
}
}
function loadIconCollection () {
const iconsNames = [
'analysis',
'analysis-1',
'approve',
'attach',
'attractive',
'pyramid',
'brainstorming',
'broken-link',
'chat',
'chronometer',
'compass',
'competition',
'content',
'design-tool',
'grid',
'headphones',
'html',
'image',
'layout',
'loading',
'login',
'pantone',
'paper-plane',
'photo-camera',
'piggy-bank',
'pipette',
'pixel',
'placeholder',
'planning',
'promotion',
'pyramid',
'quality',
'responsive',
'schedule',
'search',
'security',
'settings',
'sitemap',
'startup',
'support',
'tap',
'menu-fix-pinned',
'menu-fix-unpinned',
'targeting',
'task',
'testing',
'text',
'timeline',
'tools',
'delete',
'upload',
'vector',
'video-player',
'menu-mobility-freeze',
'menu-mobility-unfreeze',
'menu-tree-minus',
'menu-tree-plus',
'menu-backup',
'menu-share',
'stop',
'stage-open',
'stage-close',
'stage-trigger',
'stage-trigger-trigger-on',
'stage-trigger-trigger-off',
'stage-trigger-take-position',
'menu-tensor-fixed-angles',
'menu-tensor-free-angles',
'stage-open-position-size',
'stage-open-take-profit',
'stage-open-postion-rate',
'session-live-trading',
'session-paper-trading',
'session-backtesting',
'session-forward-testing',
'network',
'network-node'
]
for (let i = 0; i < iconsNames.length; i++) {
let name = iconsNames[i]
loadImage(name)
}
function loadImage (name) {
const PATH = 'Images/Icons/style-01/'
let image = new Image()
image.onload = onImageLoad
image.fileName = name
function onImageLoad () {
image.canDrawIcon = true
}
image.src = window.canvasApp.urlPrefix + PATH + name + '.png'
thisObject.iconCollection.set(name, image)
}
}
function physics () {
if (visible !== true) { return }
thisObject.workspace.physics()
}
function makeVisible () {
visible = true
}
function makeInvisible () {
visible = false
}
function getContainer (point) {
let container
if (thisObject.sidePanel !== undefined) {
container = thisObject.sidePanel.getContainer(point)
if (container !== undefined) { return container }
}
return
}
function draw () {
if (thisObject.sidePanel !== undefined) {
thisObject.sidePanel.draw()
}
}
}