Manipulate[
If[P<=0,P=1];
If[A<=0,A=1];
If[And[P>A,unknown=!="A"],P=A];
If[And[P>A,unknown=!="P"],A=P];

startDate=DateObject[{tY1,tM1,tD1}];
endDate=DateObject[{tY2,tM2,tD2}];

If[startDate>=endDate,
tY2=tY1;
tM2=tM1;
tD2=tD1+1;];

t=tStandard[{tD1,tM1,tY1},{tD2,tM2,tY2}];

If[unknown==="P",P=N@TimeValue[A,EffectiveInterest[i/100,f],-t]];
If[unknown==="A",A=N@TimeValue[P,EffectiveInterest[i/100,f],t]];
If[unknown==="i",
i=100*(r/.Quiet@FindRoot[TimeValue[P,EffectiveInterest[r,f],t]==A,{r,0}][[1]]);
];
If[unknown==="t",t=N[n/.NSolve[TimeValue[P,EffectiveInterest[i/100,f],n]==A,n,Reals][[1]]]];

Avalues=Table[N[TimeValue[P,EffectiveInterest[i/100,f],t1]],{t1,1,Ceiling@t}];
Pvalues=Table[P,Ceiling@t];
chartYMax=TimeValue[P,EffectiveInterest[i/100,f],chartXMax+1];

Column[{Grid[{
{"současná hodnota [Kč]",NumberForm[N@P,{Infinity,precision}]},
{"budoucí hodnota [Kč]",NumberForm[N@A,{Infinity,precision}]},
{"nominální úroková míra [%]",NumberForm[N@i,{Infinity,precision}]},
{"efektivní úroková míra [%]",NumberForm[N[100*EffectiveInterest[i/100,f],{Infinity,1+precision}]]},
{"doba úročení [v letech]",NumberForm[N@t,{Infinity,precision}]},
{"úroky celkem [Kč]",NumberForm[N[A-P],{Infinity,precision}]}
},
Alignment->Left,
Frame->All,
ItemSize->{20,2}],
"",
"Vývoj budoucí hodnoty v čase (roky)",
ListPlot[
{Labeled[#,Dynamic@If[chartLabels,#,""],{Center,Top}]&/@Avalues,
Labeled[#,Dynamic@If[chartLabels,#,""],{Center,Top}]&/@Pvalues},
PlotRange->{{chartXMin-1,chartXMax+1},{0,chartYMax}},
ImageSize->Medium,
Filling->Axis,
AxesLabel->{"současná hodnota [Kč]","úrok"},
PlotTheme->{"HeightGrid","PastelColor"},
FillingStyle->Thickness[0.02]
]
}],

Style["Složené úročení",Bold],
Delimiter,

{{unknown,"P","neznámá"},{"P"->"současná hodnota","A"->"budoucí hodnota","i"->"úroková míra","t"->"doba úročení"}},
{{precision,2,"desetinná místa"},0,10,1,AppearanceElements->None, Appearance->"Labeled"},

Delimiter,
"Parametry úročení",

{{P,1,"současná hodnota [Kč]"}, 1,10^6,TrackingFunction->(P=If[And[#>A,unknown=!="A"],A,#];&),Appearance->"Labeled",Enabled->(unknown=!="P"), AppearanceElements->None},
{{A,105.101,"budoucí hodnota [Kč]"}, 1,10^6,TrackingFunction->(A=If[And[#<P,unknown=!="P"],P,#];&),Appearance->"Labeled",Enabled->(unknown=!="A"),AppearanceElements->None},
{{i,1,"nominální úroková míra [%]"}, 1,100,Appearance->"Labeled",Enabled->(unknown=!="i"),AppearanceElements->None},
{{f,1,"frekvence úročení"},{
1->"rok",
(1/2)->"půlrok",
(1/4)->"čtvrtletí",
(1/12)->"měsíc"},
ControlType->PopupMenu, 
AppearanceElements->None},
{{tStandard,tStandard30E360,"doba úročení"},{tStandard30E360->"30E/360",tStandardACT360->"ACT/360",tStandardACT365->"ACT/365"},ControlType->RadioButton,Enabled->(unknown=!="t"),AppearanceElements->None},

Delimiter,
Delimiter,
"Ovládání grafu",

{{chartXMin,1,"od"},1,t,1,TrackingFunction->(chartXMin=If[#>=chartXMax,chartXMax-1,#];&),Appearance->"Labeled", AppearanceElements->None},
{{chartXMax,2,"do"}, 1,t,1,TrackingFunction->(chartXMax=If[#<=chartXMin,chartXMin+1,#];&),Appearance->"Labeled", AppearanceElements->None},
{{chartLabels,False,"popisky"},{True,False}},

Grid[
{
{"od",
Control[{{tD1,1,""},Range[1,31], ControlType->PopupMenu,Enabled->(unknown=!="t")}],Control[{{tM1,1,""},Range[1,12], ControlType->PopupMenu,Enabled->(unknown=!="t")}],
Control[{{tY1,2000,""},Range[2000,2100], ControlType->Slider,Enabled->(unknown=!="t"), Appearance->"Labeled",ImageSize->Small}]
},
{"do",
Control[{{tD2,1,""},Range[1,31], ControlType->PopupMenu,Enabled->(unknown=!="t")}],Control[{{tM2,1,""},Range[1,12], ControlType->PopupMenu,Enabled->(unknown=!="t")}],
Control[{{tY2,2005,""},Range[2000,2100], ControlType->Slider,Enabled->(unknown=!="t"), Appearance->"Labeled",ImageSize->Small}]
}
}],

{t, ControlType->None},
{startDate, ControlType->None},
{endDate, ControlType->None},

Delimiter,

Initialization:>(
tStandard30E360[{d1_,m1_,r1_}, {d2_,m2_,r2_}]:=((360*(r2-r1)+30*(m2-m1)+(d2-d1))/360)//N;
tStandardACT360[{d1_,m1_,r1_}, {d2_,m2_,r2_}]:=((DayCount[{r2,m2,d2},{r1,m1,d1}])/360)//N;tStandardACT365[{d1_,m1_,r1_}, {d2_,m2_,r2_}]:=((DayCount[{r2,m2,d2},{r1,m1,d1}])/365)//N;
),
AppearanceElements->"ResetButton",
ControlPlacement->Left,
ContinuousAction->False,
SynchronousInitialization->False
]