diff --git a/src/routes/options-calculator/+page.svelte b/src/routes/options-calculator/+page.svelte index cf890860..cbc3e7f2 100644 --- a/src/routes/options-calculator/+page.svelte +++ b/src/routes/options-calculator/+page.svelte @@ -84,18 +84,52 @@ ]; let description = strategies?.at(0)?.description; + function changeStrategy(strategy) { + selectedStrategy = strategy?.name; + description = strategy?.description; + + switch (selectedStrategy) { + case "Long Call": + selectedOptionType = "Call"; + selectedAction = "Buy"; + break; + + case "Short Call": + selectedOptionType = "Call"; + selectedAction = "Sell"; + break; + + case "Long Put": + selectedOptionType = "Put"; + selectedAction = "Buy"; + break; + + case "Short Put": + selectedOptionType = "Put"; + selectedAction = "Sell"; + break; + + default: + console.warn("Unknown strategy:", strategy); + selectedOptionType = null; + selectedAction = null; + } + + config = plotData(); + } + const payoffFunctions = { "Buy Call": (s, strike, premium) => - s < strike ? -premium : (s - strike) * 100 - premium, + s < strike ? -premium : (s - strike) * 100 * selectedQuantity - premium, "Sell Call": (s, strike, premium) => - s < strike ? premium : premium - (s - strike) * 100, + s < strike ? premium : premium - (s - strike) * 100 * selectedQuantity, "Buy Put": (s, strike, premium) => - s > strike ? -premium : (strike - s) * 100 - premium, + s > strike ? -premium : (strike - s) * 100 * selectedQuantity - premium, "Sell Put": (s, strike, premium) => - s > strike ? premium : premium - (strike - s) * 100, + s > strike ? premium : premium - (strike - s) * 100 * selectedQuantity, }; // Define break-even calculators for each scenario (using per-share price) @@ -165,7 +199,7 @@ const dataPoints = []; const xMin = 0; - const xMax = 600; + const xMax = Math.floor(currentStockPrice * 3); const step = 10; if (payoffFunctions[scenarioKey]) { @@ -404,6 +438,17 @@ }, 500); } + function handleQuantityInput(event) { + selectedQuantity = +event.target.value; + // Clear any existing debounce timeout + if (debounceTimeout) clearTimeout(debounceTimeout); + + // Set a new debounce timeout (1 second) + debounceTimeout = setTimeout(() => { + config = plotData(); + }, 500); + } + onMount(async () => { await loadData("default"); }); @@ -446,12 +491,9 @@