From 2bf702f4649967408e1870b353f069397236f326 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 11:44:31 +0000 Subject: [PATCH 01/11] Add installation script for antigravity CLI --- install_antigravity_cli.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 install_antigravity_cli.sh diff --git a/install_antigravity_cli.sh b/install_antigravity_cli.sh new file mode 100644 index 0000000..1811f66 --- /dev/null +++ b/install_antigravity_cli.sh @@ -0,0 +1 @@ +curl -fsSL https://antigravity.google/cli/install.sh | bash From 66655b25bee8b972a0ca8c3d9636bf78fd271a12 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 11:51:20 +0000 Subject: [PATCH 02/11] Add Julia installation script: Install Julia using juliaup --- Julia/install_julia.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 Julia/install_julia.sh diff --git a/Julia/install_julia.sh b/Julia/install_julia.sh new file mode 100755 index 0000000..92f1b7d --- /dev/null +++ b/Julia/install_julia.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Installs Julia via juliaup (the official Julia version manager/installer). + +set -euo pipefail + +curl -fsSL https://install.julialang.org | sh -s -- --yes + +echo "Julia installation complete. Restart your shell or run 'source ~/.bashrc' to update PATH." From bcdd812c926f428d5c000e24e5a4de5a04ae2dea Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:15:07 +0000 Subject: [PATCH 03/11] Add ATR Risk Parameter Simulation script and update .gitignore --- .gitignore | 1 + Julia/atr_risk_simulation.jl | 95 ++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 Julia/atr_risk_simulation.jl diff --git a/.gitignore b/.gitignore index bee8a64..f1f5df3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ __pycache__ +Manifest.toml diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl new file mode 100644 index 0000000..80ad13c --- /dev/null +++ b/Julia/atr_risk_simulation.jl @@ -0,0 +1,95 @@ +#!/usr/bin/env julia +# ATR Risk Parameter Simulation +# +# Simulates how ATR (volatility range) and ATR_RISK_BUDGET (risk allocation %) +# drive POSITION_VALUE and STOP_RATE, and exports 2D line plots and 3D +# surface plots visualizing the results. +# +# Assumptions (not explicitly given in the PRD, confirmed with stakeholder): +# - REFERENCE_PRICE : 10,000 KRW, used to convert ATR (KRW) into a raw stop rate. +# - TOTAL_BUDGET_LIMIT: 100,000,000 KRW, the capital base for ATR_RISK_BUDGET. + +using Pkg +Pkg.activate(@__DIR__) + +using Plots +gr() + +const REFERENCE_PRICE = 10_000.0 # KRW, used to convert ATR into a rate +const TOTAL_BUDGET_LIMIT = 100_000_000.0 # KRW +const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor + +const ATR_VALUES = 100:100:1000 # KRW, 10 points +const RISK_BUDGET_PCTS = 0.005:0.005:0.05 # fraction, 0.5%~5.0%, 10 points + +"Effective stop rate: ATR normalized to REFERENCE_PRICE, floored at MIN_STOP_RATE." +effective_stop_rate(atr::Real) = max(atr / REFERENCE_PRICE, MIN_STOP_RATE) + +"Position value derived from the risk budget and the effective stop rate." +function position_value(atr::Real, risk_budget_pct::Real) + risk_budget_krw = risk_budget_pct * TOTAL_BUDGET_LIMIT + return risk_budget_krw / effective_stop_rate(atr) +end + +"Compute the full 10x10 grid of (stop_rate, position_value) for all ATR / risk budget combinations." +function simulate() + n_atr, n_budget = length(ATR_VALUES), length(RISK_BUDGET_PCTS) + stop_rate = Matrix{Float64}(undef, n_budget, n_atr) + pos_value = Matrix{Float64}(undef, n_budget, n_atr) + for (j, budget) in enumerate(RISK_BUDGET_PCTS), (i, atr) in enumerate(ATR_VALUES) + stop_rate[j, i] = effective_stop_rate(atr) * 100 # store as % + pos_value[j, i] = position_value(atr, budget) + end + return stop_rate, pos_value +end + +"Build the 2-row multi-panel line plot (POSITION_VALUE / STOP_RATE vs ATR, grouped by risk budget)." +function plot_2d(stop_rate, pos_value) + top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (KRW)", + legend=:outertopright, legendtitle="Risk Budget") + bottom = plot(title="STOP_RATE vs ATR", xlabel="ATR (KRW)", ylabel="STOP_RATE (%)", + legend=:outertopright, legendtitle="Risk Budget") + + for (j, budget) in enumerate(RISK_BUDGET_PCTS) + label = string(round(budget * 100, digits=1), "%") + plot!(top, ATR_VALUES, pos_value[j, :], label=label, marker=:circle, linewidth=2) + plot!(bottom, ATR_VALUES, stop_rate[j, :], label=label, marker=:circle, linewidth=2) + end + + return plot(top, bottom, layout=(2, 1), size=(1000, 1200)) +end + +"Build the 3D surface plots for POSITION_VALUE and STOP_RATE over the ATR x risk-budget grid." +function plot_3d(stop_rate, pos_value) + budget_pcts = RISK_BUDGET_PCTS .* 100 + + pos_surface = surface(ATR_VALUES, budget_pcts, pos_value, + title="POSITION_VALUE Landscape", + xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (KRW)", + color=:viridis) + + stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, + title="STOP_RATE Landscape", + xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="STOP_RATE (%)", + color=:plasma) + + return pos_surface, stop_surface +end + +function main() + output_dir = joinpath(@__DIR__, "output") + mkpath(output_dir) + + stop_rate, pos_value = simulate() + + fig_2d = plot_2d(stop_rate, pos_value) + savefig(fig_2d, joinpath(output_dir, "atr_risk_2d.png")) + + pos_surface, stop_surface = plot_3d(stop_rate, pos_value) + savefig(pos_surface, joinpath(output_dir, "atr_risk_3d_position_value.png")) + savefig(stop_surface, joinpath(output_dir, "atr_risk_3d_stop_rate.png")) + + println("Saved figures to: ", output_dir) +end + +main() From 2d9be239430f375efc7a445fa01e7ccc07237fa4 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:16:42 +0000 Subject: [PATCH 04/11] Add Project.toml file with Plots dependency --- Julia/Project.toml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Julia/Project.toml diff --git a/Julia/Project.toml b/Julia/Project.toml new file mode 100644 index 0000000..43aec5b --- /dev/null +++ b/Julia/Project.toml @@ -0,0 +1,2 @@ +[deps] +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" From 7d63c4529c2f404104303a6c0b606614da197826 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:21:09 +0000 Subject: [PATCH 05/11] Add run.sh script to execute Julia scripts with proper environment setup --- Julia/run.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 Julia/run.sh diff --git a/Julia/run.sh b/Julia/run.sh new file mode 100755 index 0000000..2e819fc --- /dev/null +++ b/Julia/run.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Runs a Julia script after sourcing ~/.bashrc so the juliaup PATH is available. + +# Usage: ./run.sh filename.jl + +set -euo pipefail + +if [[ $# -lt 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +source ~/.bashrc + +julia --project="$(dirname "$0")" "$@" From 8e47fde8640cbf2c162ecb073fd1f7cbbb22c26a Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:30:42 +0000 Subject: [PATCH 06/11] Add comma formatting for number display in plots and enhance plot functions --- Julia/atr_risk_simulation.jl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index 80ad13c..ed041ad 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -15,6 +15,9 @@ Pkg.activate(@__DIR__) using Plots gr() +"Format a number with thousands separators, e.g. 10000 -> \"10,000\"." +comma_format(x) = replace(string(round(Int, x)), r"(?<=[0-9])(?=(?:[0-9]{3})+(?!\d))" => ",") + const REFERENCE_PRICE = 10_000.0 # KRW, used to convert ATR into a rate const TOTAL_BUDGET_LIMIT = 100_000_000.0 # KRW const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor @@ -46,7 +49,7 @@ end "Build the 2-row multi-panel line plot (POSITION_VALUE / STOP_RATE vs ATR, grouped by risk budget)." function plot_2d(stop_rate, pos_value) top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (KRW)", - legend=:outertopright, legendtitle="Risk Budget") + legend=:outertopright, legendtitle="Risk Budget", yformatter=comma_format) bottom = plot(title="STOP_RATE vs ATR", xlabel="ATR (KRW)", ylabel="STOP_RATE (%)", legend=:outertopright, legendtitle="Risk Budget") @@ -66,12 +69,12 @@ function plot_3d(stop_rate, pos_value) pos_surface = surface(ATR_VALUES, budget_pcts, pos_value, title="POSITION_VALUE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (KRW)", - color=:viridis) + color=:viridis, zformatter=comma_format, right_margin=15Plots.mm) stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, title="STOP_RATE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="STOP_RATE (%)", - color=:plasma) + color=:plasma, camera=(120, 30)) return pos_surface, stop_surface end From 84fa2139a7a87917abcb0f93239b6c5761c59c35 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:42:13 +0000 Subject: [PATCH 07/11] Update REFERENCE_PRICE and POSITION_VALUE display format in ATR simulation script --- Julia/atr_risk_simulation.jl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index ed041ad..16aa296 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -6,8 +6,9 @@ # surface plots visualizing the results. # # Assumptions (not explicitly given in the PRD, confirmed with stakeholder): -# - REFERENCE_PRICE : 10,000 KRW, used to convert ATR (KRW) into a raw stop rate. +# - REFERENCE_PRICE : 100,000 KRW, used to convert ATR (KRW) into a raw stop rate. # - TOTAL_BUDGET_LIMIT: 100,000,000 KRW, the capital base for ATR_RISK_BUDGET. +# - POSITION_VALUE is displayed in units of 10,000 KRW (만원) for readability. using Pkg Pkg.activate(@__DIR__) @@ -18,9 +19,10 @@ gr() "Format a number with thousands separators, e.g. 10000 -> \"10,000\"." comma_format(x) = replace(string(round(Int, x)), r"(?<=[0-9])(?=(?:[0-9]{3})+(?!\d))" => ",") -const REFERENCE_PRICE = 10_000.0 # KRW, used to convert ATR into a rate +const REFERENCE_PRICE = 100_000.0 # KRW, used to convert ATR into a rate const TOTAL_BUDGET_LIMIT = 100_000_000.0 # KRW const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor +const MAN_WON = 10_000.0 # display unit for POSITION_VALUE (만원) const ATR_VALUES = 100:100:1000 # KRW, 10 points const RISK_BUDGET_PCTS = 0.005:0.005:0.05 # fraction, 0.5%~5.0%, 10 points @@ -41,14 +43,14 @@ function simulate() pos_value = Matrix{Float64}(undef, n_budget, n_atr) for (j, budget) in enumerate(RISK_BUDGET_PCTS), (i, atr) in enumerate(ATR_VALUES) stop_rate[j, i] = effective_stop_rate(atr) * 100 # store as % - pos_value[j, i] = position_value(atr, budget) + pos_value[j, i] = position_value(atr, budget) / MAN_WON # store in 만원 end return stop_rate, pos_value end "Build the 2-row multi-panel line plot (POSITION_VALUE / STOP_RATE vs ATR, grouped by risk budget)." function plot_2d(stop_rate, pos_value) - top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (KRW)", + top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (x10,000 KRW)", legend=:outertopright, legendtitle="Risk Budget", yformatter=comma_format) bottom = plot(title="STOP_RATE vs ATR", xlabel="ATR (KRW)", ylabel="STOP_RATE (%)", legend=:outertopright, legendtitle="Risk Budget") @@ -68,13 +70,13 @@ function plot_3d(stop_rate, pos_value) pos_surface = surface(ATR_VALUES, budget_pcts, pos_value, title="POSITION_VALUE Landscape", - xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (KRW)", + xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (x10,000 KRW)", color=:viridis, zformatter=comma_format, right_margin=15Plots.mm) stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, title="STOP_RATE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="STOP_RATE (%)", - color=:plasma, camera=(120, 30)) + color=:plasma, camera=(45, 30)) return pos_surface, stop_surface end From 5d401120e6591c9162b876a740f9a2c6f71d6878 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:45:12 +0000 Subject: [PATCH 08/11] Update REFERENCE_PRICE and TOTAL_BUDGET_LIMIT constants for ATR simulation --- Julia/atr_risk_simulation.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index 16aa296..543b116 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -19,8 +19,8 @@ gr() "Format a number with thousands separators, e.g. 10000 -> \"10,000\"." comma_format(x) = replace(string(round(Int, x)), r"(?<=[0-9])(?=(?:[0-9]{3})+(?!\d))" => ",") -const REFERENCE_PRICE = 100_000.0 # KRW, used to convert ATR into a rate -const TOTAL_BUDGET_LIMIT = 100_000_000.0 # KRW +const REFERENCE_PRICE = 10_000.0 # KRW, used to convert ATR into a rate +const TOTAL_BUDGET_LIMIT = 1_000_000.0 # KRW const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor const MAN_WON = 10_000.0 # display unit for POSITION_VALUE (만원) From 6c3370807d55e6ae6b59ecae6a4d837205001193 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 12:59:27 +0000 Subject: [PATCH 09/11] Update risk budget range and enhance plot layout options in ATR simulation --- Julia/atr_risk_simulation.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index 543b116..7111f4a 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -25,7 +25,7 @@ const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor const MAN_WON = 10_000.0 # display unit for POSITION_VALUE (만원) const ATR_VALUES = 100:100:1000 # KRW, 10 points -const RISK_BUDGET_PCTS = 0.005:0.005:0.05 # fraction, 0.5%~5.0%, 10 points +const RISK_BUDGET_PCTS = 0.003:0.003:0.03 # fraction, 0.3%~3.0%, 10 points "Effective stop rate: ATR normalized to REFERENCE_PRICE, floored at MIN_STOP_RATE." effective_stop_rate(atr::Real) = max(atr / REFERENCE_PRICE, MIN_STOP_RATE) @@ -61,7 +61,7 @@ function plot_2d(stop_rate, pos_value) plot!(bottom, ATR_VALUES, stop_rate[j, :], label=label, marker=:circle, linewidth=2) end - return plot(top, bottom, layout=(2, 1), size=(1000, 1200)) + return plot(top, bottom, layout=(2, 1), size=(1000, 1200), left_margin=15Plots.mm) end "Build the 3D surface plots for POSITION_VALUE and STOP_RATE over the ATR x risk-budget grid." @@ -71,12 +71,14 @@ function plot_3d(stop_rate, pos_value) pos_surface = surface(ATR_VALUES, budget_pcts, pos_value, title="POSITION_VALUE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (x10,000 KRW)", - color=:viridis, zformatter=comma_format, right_margin=15Plots.mm) + color=:viridis, zformatter=comma_format, right_margin=15Plots.mm, + bottom_margin=8Plots.mm, size=(900, 700), camera=(30, 40)) stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, title="STOP_RATE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="STOP_RATE (%)", - color=:plasma, camera=(45, 30)) + color=:plasma, camera=(-45, 30), bottom_margin=15Plots.mm, size=(900, 700), + guidefontsize=9) return pos_surface, stop_surface end From 7b0283b5b9fe6eee8ecb22f023f0eba8fbf79f79 Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 13:07:45 +0000 Subject: [PATCH 10/11] Remove POSITION_VALUE display unit from assumptions and update plot labels to show values in KRW --- Julia/atr_risk_simulation.jl | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index 7111f4a..f780e69 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -8,7 +8,6 @@ # Assumptions (not explicitly given in the PRD, confirmed with stakeholder): # - REFERENCE_PRICE : 100,000 KRW, used to convert ATR (KRW) into a raw stop rate. # - TOTAL_BUDGET_LIMIT: 100,000,000 KRW, the capital base for ATR_RISK_BUDGET. -# - POSITION_VALUE is displayed in units of 10,000 KRW (만원) for readability. using Pkg Pkg.activate(@__DIR__) @@ -22,7 +21,6 @@ comma_format(x) = replace(string(round(Int, x)), r"(?<=[0-9])(?=(?:[0-9]{3})+(?! const REFERENCE_PRICE = 10_000.0 # KRW, used to convert ATR into a rate const TOTAL_BUDGET_LIMIT = 1_000_000.0 # KRW const MIN_STOP_RATE = 0.005 # 0.5% mandatory floor -const MAN_WON = 10_000.0 # display unit for POSITION_VALUE (만원) const ATR_VALUES = 100:100:1000 # KRW, 10 points const RISK_BUDGET_PCTS = 0.003:0.003:0.03 # fraction, 0.3%~3.0%, 10 points @@ -43,14 +41,14 @@ function simulate() pos_value = Matrix{Float64}(undef, n_budget, n_atr) for (j, budget) in enumerate(RISK_BUDGET_PCTS), (i, atr) in enumerate(ATR_VALUES) stop_rate[j, i] = effective_stop_rate(atr) * 100 # store as % - pos_value[j, i] = position_value(atr, budget) / MAN_WON # store in 만원 + pos_value[j, i] = position_value(atr, budget) end return stop_rate, pos_value end "Build the 2-row multi-panel line plot (POSITION_VALUE / STOP_RATE vs ATR, grouped by risk budget)." function plot_2d(stop_rate, pos_value) - top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (x10,000 KRW)", + top = plot(title="POSITION_VALUE vs ATR", xlabel="ATR (KRW)", ylabel="POSITION_VALUE (KRW)", legend=:outertopright, legendtitle="Risk Budget", yformatter=comma_format) bottom = plot(title="STOP_RATE vs ATR", xlabel="ATR (KRW)", ylabel="STOP_RATE (%)", legend=:outertopright, legendtitle="Risk Budget") @@ -70,15 +68,15 @@ function plot_3d(stop_rate, pos_value) pos_surface = surface(ATR_VALUES, budget_pcts, pos_value, title="POSITION_VALUE Landscape", - xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (x10,000 KRW)", + xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (KRW)", color=:viridis, zformatter=comma_format, right_margin=15Plots.mm, bottom_margin=8Plots.mm, size=(900, 700), camera=(30, 40)) stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, title="STOP_RATE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="STOP_RATE (%)", - color=:plasma, camera=(-45, 30), bottom_margin=15Plots.mm, size=(900, 700), - guidefontsize=9) + color=:plasma, camera=(-45, 30), bottom_margin=15Plots.mm, top_margin=10Plots.mm, + size=(900, 700), guidefontsize=9, fillalpha=0.60) return pos_surface, stop_surface end From c96559547eec02b8ff83e21f23a679fb2a645c6b Mon Sep 17 00:00:00 2001 From: Kangrok Kim Date: Thu, 10 Sep 2026 13:09:36 +0000 Subject: [PATCH 11/11] 3D plot: add fill transparency to POSITION_VALUE surface for better visualization --- Julia/atr_risk_simulation.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Julia/atr_risk_simulation.jl b/Julia/atr_risk_simulation.jl index f780e69..45c578c 100644 --- a/Julia/atr_risk_simulation.jl +++ b/Julia/atr_risk_simulation.jl @@ -70,7 +70,7 @@ function plot_3d(stop_rate, pos_value) title="POSITION_VALUE Landscape", xlabel="ATR (KRW)", ylabel="ATR_RISK_BUDGET (%)", zlabel="POSITION_VALUE (KRW)", color=:viridis, zformatter=comma_format, right_margin=15Plots.mm, - bottom_margin=8Plots.mm, size=(900, 700), camera=(30, 40)) + bottom_margin=8Plots.mm, size=(900, 700), camera=(30, 40), fillalpha=0.60) stop_surface = surface(ATR_VALUES, budget_pcts, stop_rate, title="STOP_RATE Landscape",