1import {presets, numberInRange} from './calculator-math.mjs'; 2// Currency changes need confirmation only when the quote/account pair changes. 3export function conversionUpdate(previous, next) { 4 const before=presets[previous.instrument]?.quote, after=presets[next.instrument]?.quote; 5 if(after && after===next.currency) return '1'; 6 if(before && before===after && previous.currency===next.currency) return null; 7 return ''; 8} 9export function plannerInput(raw) { 10 const values={...raw}; 11 const simple=values.planner==='simple'; 12 if(simple) { 13 Object.assign(values,{riskMode:'percent',stopUnit:'pips',targetUnit:'pips',spread:0,commission:0,swap:0,nights:0}); 14 const preset=presets[values.instrument]; 15 if(preset) {values.contract=preset.contract;values.pip=preset.pip;} 16 if(preset?.quote===values.currency) values.conversion=1; 17 } 18 for(const [mode,key,value] of [['percent','riskPercent',1],['amount','riskAmount',100],['lots','lots',0.1]]) { 19 if(values.riskMode!==mode) values[key]=value; 20 } 21 return values; 22} 23export function pipExit(value, unit, entry, pip, direction, exit) { 24 if(unit==='pips') return value; 25 const sign=(direction==='buy'?1:-1)*(exit==='stop'?-1:1); 26 const distance=(Number(value)-Number(entry))*sign/Number(pip); 27 try{return numberInRange(exit,distance);}catch{return exit==='stop'?50:100;} 28}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.