**Question**

I need to automate calculations.

Strangely, declaring function by \pgfmathdeclarefunction{PnL} does not allow me to use the calculations when I call Pnl{3.5} and get the y coordinate.

Details in the code.

![TAGammaQuestion.png](/image?hash=4a19ce58f7f5a8b252088c61f05cdc9089547de50c82d4d3f744d57ec529fce0)

**Next step**

Of course animation :) The dashed curve will move along the y axis from its orinal position (dashed) to south, displaying more and more of the gray area.


\documentclass[border =2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{
calc,
intersections,
positioning,
}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\usepgfplotslibrary{
fillbetween,
}

\begin{document}

\newcommand*{\ShowIntersection}{
\fill
[name intersections={of=PnL and line, name=i, total=\t}]
[red, opacity=1, every node/.style={above left, black, opacity=1}]
\foreach \s in {1,...,\t}{(i-\s) circle (3pt)
node [above] {}};
}

\begin{tikzpicture}
\pgfmathdeclarefunction{PnL}{0}{\pgfmathparse{0.5*(x^2)-2}}

\begin{axis}[%customaxis2,
axis lines=middle,
xtick={\empty},
ytick={\empty},
ytick       = {0},
ticklabel style={font=\scriptsize},
xlabel=$dS$,
ylabel=$d\Pi$,
xlabel style={at={(ticklabel* cs:1)}, xshift=12.5pt, anchor=north west},
ylabel style={at={(ticklabel* cs:1)}, yshift=12.5pt, anchor=south west},
samples     = 51,
%    domain      = -3:3,
%    xmin = -2, xmax = 5,
%    ymin = -5, ymax = 10,
]

% X axis
\addplot[name path=line, gray, samples=2,no markers, line width=1pt] {0};
% curve
% dashed curve, inital position
\addplot[purple,samples=51,smooth,name path=PnL, thick, mark=none, ] {PnL};

%filled area
of = PnL and line,
split, % calculate segments
every even segment/.style = {white}, %Only trick I found to avoi
every odd segment/.style  = {gray!60}
] {};

% red intersection points to X axis
\ShowIntersection

% cord but too manual
\coordinate (P) at (-3.5, 3.8);
%  \coordinate (P) at (-3.5, \Pnl(-3.5)  );
\coordinate (Q) at (3.5, 3.8);

% too manual
\node[pin=130:$\Gamma$,draw=black,circle] at (-3.5, 3.8) {};
%\node[pin=130:$\Gamma$,draw=black,circle] at (-3.5, \Pnl(-3.5)) {};
\node[pin=40:$\Gamma$,draw=black,circle] at (3.5, 3.8) {};

% too manual
\draw [latex-latex,dashed, thick, name path global=HorizontalLine] (P) -- (Q) node[above] {};

% too manual, but did not manage to place it in the center of the filled area
\draw (0,-0.8) node {$\Theta^{-}$};

\end{axis}
\end{tikzpicture}
\end{document}


**Note**
The orginal graph
![Gammatheta.png](/image?hash=f50c7fc0d593143b57cdb199b1a05e3794152a5e99772690a4021fb6956e9c5c)

When declaring a function, you may want to specify and use the variables. In your case this may mean something like

\pgfmathdeclarefunction{PnL}{1}{\pgfmathparse{0.5*(#1*#1)-2}}

where {1} says that this is a function of one variable, and #1 represents this argument. Note that I use #1*#1 instead of #1^2 since pgf has somewhat strange conventions concerning the sign. An arguably more user-friendly way to declare the  function is to use the key

declare function={PnL(\x)=0.5*\x*\x-2;},



\documentclass[border =2mm]{standalone}
\usepackage{amsmath}
\newcommand{\diff}{\mathop{}\!\mathrm{d}}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\usepgfplotslibrary{fillbetween}

\begin{document}

\newcommand*{\ShowIntersection}{
\fill
[name intersections={of=PnL and line, name=i, total=\t}]
[red, opacity=1]
foreach \s in {1,...,\t}{(i-\s) circle [radius=3pt]};
}

\begin{tikzpicture}
% \pgfmathdeclarefunction{PnL}{1}{\pgfmathparse{0.5*(#1*#1)-2}}
\begin{axis}[%customaxis2,
declare function={PnL(\x)=0.5*\x*\x-2;},
axis lines=middle,
xtick={\empty},
ytick={\empty},
ytick       = {0},
ticklabel style={font=\scriptsize},
xlabel=$\diff S$,
ylabel=$\diff\Pi$,
xlabel style={at={(ticklabel* cs:1)}, xshift=12.5pt, anchor=north west},
ylabel style={at={(ticklabel* cs:1)}, yshift=12.5pt, anchor=south west},
samples     = 51,
%    domain      = -3:3,
%    xmin = -2, xmax = 5,
ymin ={PnL(0)-0.1}, ymax = 10,
]

% X axis
\addplot[name path=line, gray, samples=2,no markers, line width=1pt] {0};
% curve
% dashed curve, inital position
%
%filled area
of =PnL and line,
split, % calculate segments
every even segment/.style = {opacity=0}, %Only trick I found to avoi
every odd segment/.style  = {gray!60}
] {};

% red intersection points to X axis
\ShowIntersection
%
\draw[latex-latex,dashed, thick, name path global=HorizontalLine,
nodes={solid,draw=black,circle},every pin edge/.style={solid,thin,gray,-}]
(-3.5,{PnL(-3.5))}) node[pin=130:$\Gamma$]{}
--
(3.5,{PnL(3.5))}) node[pin=40:$\Gamma$]{};
%
\draw (0,-0.8) node {$\Theta^{-}$};
\end{axis}
\end{tikzpicture}
\end{document}

![Screen Shot 2020-11-21 at 12.25.27 PM.png](/image?hash=f701e1facce989074df259aa9bf4651d43ae7e296077a6de2590335e23f14baf)

Enter question or answer id or url (and optionally further answer ids/urls from the same question) from

Separate each id/url with a space. No need to list your own answers; they will be imported automatically.