update calculator
This commit is contained in:
parent
582178cff3
commit
1af68b024b
@ -84,18 +84,52 @@
|
|||||||
];
|
];
|
||||||
let description = strategies?.at(0)?.description;
|
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 = {
|
const payoffFunctions = {
|
||||||
"Buy Call": (s, strike, premium) =>
|
"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) =>
|
"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) =>
|
"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) =>
|
"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)
|
// Define break-even calculators for each scenario (using per-share price)
|
||||||
@ -165,7 +199,7 @@
|
|||||||
|
|
||||||
const dataPoints = [];
|
const dataPoints = [];
|
||||||
const xMin = 0;
|
const xMin = 0;
|
||||||
const xMax = 600;
|
const xMax = Math.floor(currentStockPrice * 3);
|
||||||
const step = 10;
|
const step = 10;
|
||||||
|
|
||||||
if (payoffFunctions[scenarioKey]) {
|
if (payoffFunctions[scenarioKey]) {
|
||||||
@ -404,6 +438,17 @@
|
|||||||
}, 500);
|
}, 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 () => {
|
onMount(async () => {
|
||||||
await loadData("default");
|
await loadData("default");
|
||||||
});
|
});
|
||||||
@ -446,12 +491,9 @@
|
|||||||
|
|
||||||
<div class="mt-5 mb-5 w-fulll">
|
<div class="mt-5 mb-5 w-fulll">
|
||||||
<div class="flex flex-wrap gap-3 mt-4">
|
<div class="flex flex-wrap gap-3 mt-4">
|
||||||
{#each strategies as strategy, index}
|
{#each strategies as strategy}
|
||||||
<div
|
<div
|
||||||
on:click={() => {
|
on:click={() => changeStrategy(strategy)}
|
||||||
selectedStrategy = strategy?.name;
|
|
||||||
description = strategy?.description;
|
|
||||||
}}
|
|
||||||
class="{selectedStrategy === strategy?.name
|
class="{selectedStrategy === strategy?.name
|
||||||
? 'bg-blue-100'
|
? 'bg-blue-100'
|
||||||
: ''} select-none flex items-center space-x-2 border rounded-full px-3 py-1 text-sm font-medium border border-gray-300 cursor-pointer sm:hover:bg-blue-100"
|
: ''} select-none flex items-center space-x-2 border rounded-full px-3 py-1 text-sm font-medium border border-gray-300 cursor-pointer sm:hover:bg-blue-100"
|
||||||
@ -551,7 +593,8 @@
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
min="1"
|
min="1"
|
||||||
value="1"
|
bind:value={selectedQuantity}
|
||||||
|
on:input={handleQuantityInput}
|
||||||
class="border border-gray-300 rounded px-2 py-1 w-20 focus:outline-none focus:ring-1 focus:ring-blue-500"
|
class="border border-gray-300 rounded px-2 py-1 w-20 focus:outline-none focus:ring-1 focus:ring-blue-500"
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user