@@ -34,6 +34,9 @@ public partial class FinancialPairsModel : ObservableObject
3434 [ ObservableProperty ]
3535 private int _smaValueMax ;
3636
37+ [ ObservableProperty ]
38+ private Balance _balance ;
39+
3740 public ExtFinancialPair ? SelectedPair
3841 {
3942 get => _selectedPair ;
@@ -59,16 +62,22 @@ public int SmaValue
5962 public event EventHandler SelectedPairChanged ;
6063 public event EventHandler SmaValueChanged ;
6164 public event EventHandler LoadNewDataRequested ;
65+ public event EventHandler Calculated ;
6266
6367 public ObservableCollection < ExtFinancialPair > Pairs { get ; }
6468
6569 public event EventHandler PairsChanged ;
6670
67- public FinancialPairsModel ( IStockDataProvider dataProvider , ILogger logger )
71+ public FinancialPairsModel ( IStockDataProvider dataProvider , Balance balance , Risk risk , ILogger logger )
6872 {
6973 _dataProvider = dataProvider ?? throw new ArgumentNullException ( nameof ( dataProvider ) ) ;
74+ _balance = balance ?? throw new ArgumentNullException ( nameof ( balance ) ) ;
7075 _log = logger ?? throw new ArgumentNullException ( nameof ( logger ) ) ;
7176 Pairs = new ObservableCollection < ExtFinancialPair > ( ) ;
77+
78+ balance . ValueChanged += ( s , e ) => Calculate ( ) ;
79+ risk . ValueChanged += ( s , e ) => Calculate ( ) ;
80+ SelectedPairChanged += ( s , e ) => Calculate ( ) ;
7281 }
7382
7483 public void ReselectSelectedPair ( )
@@ -92,13 +101,19 @@ public void UpdatePairs()
92101
93102 _log . Debug ( "Updating stocks with {Count} pairs" , pairs ? . Count ( ) ?? 0 ) ;
94103
104+ foreach ( var p in Pairs )
105+ {
106+ p . SelectedChanged -= Pair_SelectedChanged ;
107+ }
108+
95109 Pairs . Clear ( ) ;
96110
97111 if ( pairs != null )
98112 {
99113 foreach ( var pair in pairs )
100114 {
101115 Pairs . Add ( pair ) ;
116+ pair . SelectedChanged += Pair_SelectedChanged ;
102117 }
103118 }
104119
@@ -112,33 +127,42 @@ public void UpdatePairs()
112127 }
113128 }
114129
115- public void Calculate ( double balance )
130+ private void Pair_SelectedChanged ( object ? sender , EventArgs e ) => Calculate ( ) ;
131+
132+ public void Calculate ( )
116133 {
117134 try
118135 {
136+ //preparation
137+ foreach ( var pair in Pairs )
138+ {
139+ pair . TradeVolume = 0 ;
140+ pair . X . TradeVolume = 0 ;
141+ pair . Y . TradeVolume = 0 ;
142+ }
143+
119144 var checkedPairs = Pairs . Where ( i => i . Selected ) . ToList ( ) ;
120145
121146 if ( checkedPairs . Count > 0 )
122147 {
123- //preparation
124- foreach ( var pair in Pairs )
125- {
126- pair . TradeVolume = 0 ;
127- pair . X . TradeVolume = 0 ;
128- pair . Y . TradeVolume = 0 ;
129- }
130-
131- new RiskManager ( checkedPairs , balance ) . Calculate ( ) ;
132- }
133- else
134- {
135- UserNotification . Display ( "Pairs are not selected." ) ;
148+ var balanceValue = Balance . Value ;
149+ new RiskManager ( checkedPairs , balanceValue ) . Calculate ( ) ;
136150 }
151+
152+ Calculated ? . Invoke ( this , EventArgs . Empty ) ;
137153 }
138154 catch ( Exception ex )
139155 {
140156 UserNotification . Display ( "CalculateRisk => " + ex . Message ) ;
141157 _log . Error ( ex , "Error calculating risk" ) ;
142158 }
143159 }
160+
161+ public void ChangeSelection ( )
162+ {
163+ if ( SelectedPair is not null )
164+ {
165+ SelectedPair . Selected = ! SelectedPair . Selected ;
166+ }
167+ }
144168}
0 commit comments