Fix views and view models.

This commit is contained in:
2025-02-14 19:02:17 -05:00
parent 786f5f67df
commit 9f836a09f5
5 changed files with 1171 additions and 57 deletions

View File

@@ -132,7 +132,7 @@
<d3:VerticalAxis Name="countAxis"/>
</d3:ChartPlotter.MainVerticalAxis>
<d3:LineGraph d3:NewLegend.Description="Gain/Loss" d3:Viewport2D.UsesApproximateContentBoundsComparison="False" x:Name="Data" DataSource="{Binding Path=Data}" Stroke="MidnightBlue" StrokeThickness="2"/>
<d3:LineGraph x:Name="LeastSquares" d3:NewLegend.Description="{Binding Path=LeastSquaresTitle}" DataSource="{Binding LeastSquares}" Stroke="Orange" StrokeThickness="2"/>
<!--<d3:LineGraph x:Name="LeastSquares" d3:NewLegend.Description="{Binding Path=LeastSquaresTitle}" DataSource="{Binding LeastSquares}" Stroke="Orange" StrokeThickness="2"/>-->
<d3:CursorCoordinateGraph Name="cursorGraph" dc:CoordinateGraphBehavior.XTextMappingProperty="MM/dd/yyyy" LineStrokeThickness="1"/>
<d3:Header FontFamily="Arial" Content="{Binding Path=GraphTitle}"/>
<d3:VerticalAxisTitle FontFamily="Arial" Content="Gain/Loss"/>

View File

@@ -40,6 +40,7 @@
<StackPanel Orientation="Vertical" Grid.Row="2" Grid.RowSpan="3" Grid.Column="0" Margin="0,4.962,0.396,-5">
<Label Content="Date" HorizontalAlignment="Left" ></Label>
<telerik:RadDatePicker SelectableDateStart="{Binding Path=SelectableDateStart}" SelectableDateEnd="{Binding Path=SelectableDateEnd}" VerticalAlignment="Top" HorizontalAlignment="Left" SelectedDate="{Binding Path=SelectedDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<Label Content="Parameters" HorizontalAlignment="Left" ></Label>
<ComboBox ItemsSource="{Binding Path=Parameters, Mode=OneWay}" SelectedItem="{Binding Path=SelectedParameter, ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{x:Null}" >
<ComboBox.ItemsPanel>
@@ -49,11 +50,19 @@
</ComboBox.ItemsPanel>
</ComboBox>
<TextBox Height="24" MinWidth="80" HorizontalAlignment="Stretch" IsReadOnly="true" Text="{Binding Path=ParameterValue, Mode=OneWay,ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" Validation.ErrorTemplate="{x:Null}"/>
<Label Content="Tradeable Cash" HorizontalAlignment="Left" ></Label>
<TextBox Height="24" MinWidth="80" HorizontalAlignment="Stretch" IsReadOnly="true" Text="{Binding Path=CashBalance, Mode=OneWay,ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" Validation.ErrorTemplate="{x:Null}"/>
<Label Content="Non-Tradeable Cash" HorizontalAlignment="Left" ></Label>
<TextBox Height="24" MinWidth="80" HorizontalAlignment="Stretch" IsReadOnly="true" Text="{Binding Path=NonTradeableCash, Mode=OneWay,ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" Validation.ErrorTemplate="{x:Null}"/>
<Button Margin="0,2" Content="Find Candidates" HorizontalAlignment="Stretch" Command="{Binding Path=RunCommand}"></Button>
<Label Content="Hedge Cash" HorizontalAlignment="Left" ></Label>
<TextBox Height="24" MinWidth="80" HorizontalAlignment="Stretch" IsReadOnly="true" Text="{Binding Path=HedgeCash, Mode=OneWay,ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" Validation.ErrorTemplate="{x:Null}"/>
<Button Margin="0,2" Content="Find Candidates" HorizontalAlignment="Stretch" Command="{Binding Path=RunCommand}"></Button>
<Label Content="Monitor Interval (sec)" HorizontalAlignment="Left" ></Label>
<ComboBox ItemsSource="{Binding Path=MonitorIntervals, Mode=OneWay}" SelectedItem="{Binding Path=SelectedMonitorInterval, ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{x:Null}" >
<ComboBox.ItemsPanel>
@@ -77,7 +86,8 @@
</StackPanel>
<DockPanel x:Name="DockPanelA" Grid.Row="2" Grid.Column="2" Width="Auto" Height="Auto" >
<telerik:RadGridView SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" ItemContainerStyle="{StaticResource MomentumItemStyle}" AlternationCount="2" AlternateRowBackground="Bisque" ShowGroupFooters="True" ShowColumnFooters="True" ItemsSource="{Binding Path=AllItems, ValidatesOnDataErrors=True}" AutoGenerateColumns="False" >
<telerik:RadGridView SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" ItemContainerStyle="{StaticResource MomentumItemStyle}" AlternationCount="2" AlternateRowBackground="Bisque" ShowGroupFooters="True" ShowColumnFooters="True" ItemsSource="{Binding Path=AllItems, ValidatesOnDataErrors=True}" AutoGenerateColumns="False" >
<telerik:RadContextMenu.ContextMenu>
<telerik:RadContextMenu x:Name="GridContextMenu" StaysOpen="False" ItemsSource="{Binding CandidateMenuItems}">
<telerik:RadContextMenu.ItemContainerStyle>
@@ -104,8 +114,6 @@
<telerik:GridViewDataColumn IsReadOnly="True" Header="DayCount" DataMemberBinding="{Binding Path=DayCount,StringFormat='{}{0:N0}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="IDIndicator" DataMemberBinding="{Binding Path=IDIndicator,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Score" DataMemberBinding="{Binding Path=Score,Converter={StaticResource DoubleFormat},ConverterParameter=2}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="MaxDrawdown" DataMemberBinding="{Binding Path=MaxDrawdown,StringFormat='{}{0:P2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="MaxUpside" DataMemberBinding="{Binding Path=MaxUpside,StringFormat='{}{0:P2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="PE" DataMemberBinding="{Binding Path=PE,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Beta" DataMemberBinding="{Binding Path=Beta,StringFormat='{}{0:N2}'}" >
@@ -128,8 +136,6 @@
</telerik:GridViewColumn.ToolTipTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="ZacksRank" DataMemberBinding="{Binding Path=ZacksRank}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Volume" DataMemberBinding="{Binding Path=Volume,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Return1D" DataMemberBinding="{Binding Path=Return1D,StringFormat='{}{0:N3}'}" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
@@ -145,7 +151,7 @@
<d3:VerticalAxis Name="countAxis"/>
</d3:ChartPlotter.MainVerticalAxis>
<d3:LineGraph d3:NewLegend.Description="Gain/Loss" d3:Viewport2D.UsesApproximateContentBoundsComparison="False" x:Name="Data" DataSource="{Binding Path=Data}" Stroke="MidnightBlue" StrokeThickness="2"/>
<d3:LineGraph x:Name="LeastSquares" d3:NewLegend.Description="{Binding Path=LeastSquaresTitle}" DataSource="{Binding LeastSquares}" Stroke="Orange" StrokeThickness="2"/>
<!--<d3:LineGraph x:Name="LeastSquares" d3:NewLegend.Description="{Binding Path=LeastSquaresTitle}" DataSource="{Binding LeastSquares}" Stroke="Orange" StrokeThickness="2"/>-->
<d3:CursorCoordinateGraph Name="cursorGraph" dc:CoordinateGraphBehavior.XTextMappingProperty="MM/dd/yyyy" LineStrokeThickness="1"/>
<d3:Header FontFamily="Arial" Content="{Binding Path=GraphTitle}"/>
<d3:VerticalAxisTitle FontFamily="Arial" Content="Gain/Loss"/>
@@ -195,6 +201,13 @@
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Sold" DataMemberBinding="{Binding Path=SellDate,StringFormat='{}{0:MM/dd/yyyy}'}" >
<telerik:GridViewColumn.ToolTipTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal" >
<TextBlock Background="LemonChiffon" MaxWidth="1000" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type vw:MGSHMomentumView}},Path=DataContext.ToolTipSold}"/>
</StackPanel>
</DataTemplate>
</telerik:GridViewColumn.ToolTipTemplate>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SellDate,StringFormat='{}{0:MM/dd/yyyy}'}" Foreground="{Binding Path=SellDateColor}"/>
@@ -219,6 +232,26 @@
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="RSI3" >
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Path=RSI3,StringFormat='{}{0:N2}'}"/>
<Setter Property="Foreground" Value="{Binding Path=RSI3Color}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=RSI3}" Value="NaN" >
<Setter Property="Text" Value="---"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Initial Stop" DataMemberBinding="{Binding Path=InitialStopLimit,StringFormat='{}{0:C}'}" >
<telerik:GridViewColumn.ToolTipTemplate>
<DataTemplate >
@@ -282,7 +315,6 @@
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<!--<telerik:GridViewDataColumn IsReadOnly="True" Header="RMultiple" DataMemberBinding="{Binding Path=RMultipleAsString,StringFormat='{}{0:S}'}" >-->
<telerik:GridViewDataColumn IsReadOnly="True" Header="RMultiple" DataMemberBinding="{Binding Path=RMultiple,Converter={StaticResource RMultipleFormat}}" >
<telerik:GridViewColumn.ToolTipTemplate>
<DataTemplate >
@@ -293,34 +325,19 @@
</telerik:GridViewColumn.ToolTipTemplate>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=RMultipleAsString,StringFormat='{}{0:S}'}" Foreground="{Binding Path=RMultipleAsStringColor}"/>
<TextBlock Text="{Binding Path=RMultipleAsString,StringFormat='{}{0:S}'}" Foreground="{Binding Path=RMultipleColor}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="RSI3" >
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Path=RSI3,StringFormat='{}{0:N2}'}"/>
<Setter Property="Foreground" Value="{Binding Path=RSI3Color}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=RSI3}" Value="NaN" >
<Setter Property="Text" Value="---"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Updated" DataMemberBinding="{Binding Path=LastUpdated,StringFormat='{}{0:MM/dd/yyyy HH:mm:ss}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Exposure">
<telerik:GridViewColumn.ToolTipTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal" >
<TextBlock Background="LemonChiffon" MaxWidth="1000" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type vw:MGSHMomentumView}},Path=DataContext.ToolTipExposure}"/>
</StackPanel>
</DataTemplate>
</telerik:GridViewColumn.ToolTipTemplate>
<telerik:GridViewDataColumn.AggregateFunctions>
<local:MGSHMomentumPositionSumFunctionExposure />
</telerik:GridViewDataColumn.AggregateFunctions>
@@ -331,17 +348,6 @@
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Mkt.Value">
<telerik:GridViewDataColumn.AggregateFunctions>
<local:MGSHMomentumPositionSumFunctionMarketValue />
</telerik:GridViewDataColumn.AggregateFunctions>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ActiveMarketValue,StringFormat='{}{0:C}'}" Foreground="{Binding Path=ActiveMarketValueColor}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="GainLoss" >
<telerik:GridViewDataColumn.AggregateFunctions>
<local:MGSHMomentumPositionSumFunctionGainLoss />
@@ -364,6 +370,17 @@
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Mkt.Value">
<telerik:GridViewDataColumn.AggregateFunctions>
<local:MGSHMomentumPositionSumFunctionMarketValue />
</telerik:GridViewDataColumn.AggregateFunctions>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ActiveMarketValue,StringFormat='{}{0:C}'}" Foreground="{Binding Path=ActiveMarketValueColor}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Last Stop Adj." DataMemberBinding="{Binding Path=LastStopAdjustment,Converter={StaticResource DateFormat}}" >
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
@@ -372,15 +389,25 @@
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="Days" DataMemberBinding="{Binding Path=DaysSinceLastStopAdjustment,Converter={StaticResource IntFormat},ConverterParameter=0}" >
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DaysSinceLastStopAdjustment,Converter={StaticResource IntFormat},ConverterParameter=0}" Foreground="{Binding Path=DaysSinceLastStopAdjustmentColor}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn IsReadOnly="True" Header="PE" DataMemberBinding="{Binding Path=PE,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Beta" DataMemberBinding="{Binding Path=Beta,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="IDIndicator" DataMemberBinding="{Binding Path=IDIndicator,StringFormat='{}{0:N2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Score" DataMemberBinding="{Binding Path=Score,Converter={StaticResource DoubleFormat},ConverterParameter=2}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="MaxDrawdown" DataMemberBinding="{Binding Path=MaxDrawdown,StringFormat='{}{0:P2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="MaxUpside" DataMemberBinding="{Binding Path=MaxUpside,StringFormat='{}{0:P2}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="ZacksRank" DataMemberBinding="{Binding Path=ZacksRank}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Volume" DataMemberBinding="{Binding Path=Volume,StringFormat='{}{0:N0}'}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Comment" DataMemberBinding="{Binding Path=Comment}" />
<telerik:GridViewDataColumn IsReadOnly="True" Header="Updated" DataMemberBinding="{Binding Path=LastUpdated,StringFormat='{}{0:MM/dd/yyyy HH:mm:ss}'}" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>