Hey Guys,
On a SciChart surface (CandleStickChart), how could I add LineAnnotation, BoxAnnotation, and TextBox annotation using TradingAnnotationCreationModifierMvvm (available under
ChartAnnotations/Trade Annotations sample). I have recreated a sample, based on the example.
Following is my XAML code,
Chart Surface: Modifiers.
<s:TradingAnnotationCreationModifierMvvm AnnotationViewModelType="{Binding DataContext.AnnotationCreationVM.AnnotationType, Source={StaticResource ROOT_OHLC_CHART_SPY}}"
AnnotationViewModelsCollection="{Binding LAnnotations}"
IsEnabled="{Binding DataContext.AnnotationCreationVM.IsAnnotationCreationEnable, Source={StaticResource ROOT_OHLC_CHART_SPY}, Mode=TwoWay}"
ReceiveHandledEvents="True">
<i:Interaction.Behaviors>
<ext:EventToCommandBehavior Command="{Binding DataContext.AnnotationCreationVM.AnnotationCreatedCommand, Source={StaticResource ROOT_OHLC_CHART_SPY}}"
Event="AnnotationCreated"
PassArguments="True" />
</i:Interaction.Behaviors>
</s:TradingAnnotationCreationModifierMvvm>
ParentView Buttons,
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Line"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.Line}"
CommandParameter="{x:Type s:LineAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Elliot Wave" Grid.Row="1"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.EllioteWave}"
CommandParameter="{x:Type dt:ElliotWaveAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Pitch Fork" Grid.Row="2"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.PitchFork}"
CommandParameter="{x:Type dt:PitchforkAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Xabcd" Grid.Row="3"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.Xabcd}"
CommandParameter="{x:Type dt:XabcdAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Head N Shoulders" Grid.Row="4"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.Hns}"
CommandParameter="{x:Type dt:HeadAndShouldersAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Fibonacci Extension" Grid.Row="5"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.FibExt}"
CommandParameter="{x:Type dt:FibonacciExtensionAnnotationViewModel}"/>
<ToggleButton Width="Auto" HorizontalAlignment="Stretch" Content="Fibonacci Retracement" Grid.Row="6"
Style="{StaticResource ChartToggleButton}"
IsChecked="{Binding AnnotationCreationVM.FibRetr}"
CommandParameter="{x:Type dt:FibonacciRetracementAnnotationViewModel}"/>
ParentView view model,
public ICommand AnnotationCreatedCommand => new ActionCommand<AnnotationCreationMVVMArgs>(e =>
{
try
{
var annotation = e.NewAnnotationViewModel;
if (annotation != null)
{
if (annotation is ITradingAnnotationViewModel tradingAnnotation)
{
((AnnotationBase)tradingAnnotation.Annotation).Selected += OnAnnotationSelectionChanged;
((AnnotationBase)tradingAnnotation.Annotation).Unselected += OnAnnotationSelectionChanged;
}
annotation.IsEditable = true;
annotation.CanEditText = true;
annotation.IsSelected = true;
FibRetr = false;
FibExt = false;
Hns = false;
Xabcd = false;
PitchFork = false;
EllioteWave = false;
Line = false;
}
IsAnnotationCreationEnable = false;
IsAnnotationDrawn = false;
OnPropertyChanged("IsAnnotationDrawn");
}
catch { }
});
private void OnAnnotationSelectionChanged(object sender, EventArgs eventArgs)
{
try
{
var parent = ((System.Windows.FrameworkElement)((System.Windows.FrameworkElement)sender).Parent).TemplatedParent;
if(parent is SciChartSurface)
{
var surface = parent as SciChartSurface;
if(null != surface)
{
OHLCVChart chart = surface.DataContext as OHLCVChart;
Annotations = chart.LAnnotations;
SelectedAnnotation = Annotations.FirstOrDefault(x => x.IsSelected);
}
}
}
catch { }
}
If there is any other way to club all Trading related annotations + TextBox, Line, TrendLine Annotations creation dynamically using any other modiefier, that will do. We are tying to build Trading charts: with Ability to add annotations.
Thanks.
- Roger Thomas asked 3 years ago
- last active 3 years ago
I create a real time chart and want to add line annotation which help to user to understand chart wave form.
However I can’t add fix position of annotation. I change annotation every time chart is update but the annotation is not fixed in one position. The x value is datetime axis and the visible range is 5 second. Data is added around 100 data per second.
- トー カウン asked 4 years ago
Hi,
I’m creating lines chart with data from CSV file.
I have multiple series and each serie has its own YAxis.
As it comes from different CSV files, the number of series and their names are not known in advance.
I create the series in the code (MVVM) .
I’m using the trial version for 2 weeks now and before I purchase the licence, I have two questions:
1) I need to implement a function allowing the user to create multiple VerticalSliceModifier and display data for each serie on the graph and store data to a list or datatable.
Is it possible to have Vertical Slice Tooltip with multiple YAxis ?
If I create a vertical line annotation, can I get data for each serie crossing the line?
2) I need to be able to add annotation dynamically (measure, text, box, lines…).
Is there a way to save annotations to a list (and then to a file) so that if the user reopens the same CSV file he can load and display the corresponding annotations?
Thank you in advance for your answer,
Regards
Nicolas
- Nicolas MARTINEZ asked 5 years ago
- last active 5 years ago
Dear All,
I would like to ask are there any method to draw a line (or annotation) by user touch event ?
For example user touch the chart to set the starting point of the line and then touch/drag to another point to draw the line.
Thanks.
- Ray Hung asked 7 years ago
- last active 6 years ago
HI,
After reading the example annotation code and articles in the forum, I still can’t find a way to achieve my purpose: My app has a thread to receive data sent by a server, the data may trigger an annotation created lively. My app also need to maintain all created annotations and change their properties like X/Y values or remove them later. So far I only see the way of creating annotation by clicking some button. I tries different ways but failed.
Please help me out with some detailed guides. I am a beginner for WPF.
regards
Chunxi
I try to do this in user thread:
LineAnnotation annotationBase = new LineAnnotation();
change annotationBase properties.
But get this exception:
2014-11-09 13:42:20,623 [11] ERROR WpfApplication2.MainWindow [(null)] – at System.Windows.Input.InputManager..ctor()
at System.Windows.Input.InputManager.GetCurrentInputManagerImpl()
at System.Windows.Input.KeyboardNavigation..ctor()
at System.Windows.FrameworkElement.FrameworkServices..ctor()
at System.Windows.FrameworkElement.EnsureFrameworkServices()
at System.Windows.FrameworkElement..ctor()
at System.Windows.Controls.Control..ctor()
at System.Windows.Controls.ContentControl..ctor()
at Abt.Controls.SciChart.ChartModifiers.ApiElementBase..ctor()
at Abt.Controls.SciChart.Visuals.Annotations.AnnotationBase..ctor()
at Abt.Controls.SciChart.Visuals.Annotations.LineAnnotationBase..ctor()
at Abt.Controls.SciChart.Visuals.Annotations.LineAnnotation..ctor()
at WpfApplication2.InstrumentViewModel.addZone() in c:\Users\jokeslala\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\InstrumentViewModel.cs:line 134
at WpfApplication2.InstrumentViewModel.addMA20(Int32 barIdx, Double ma) in c:\Users\jokeslala\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\InstrumentViewModel.cs:line 128
at WpfApplication2.MainWindow.processEMA(String str) in c:\Users\jokeslala\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\MainWindow.xaml.cs:line 222
at WpfApplication2.MainWindow.consumeQueue() in c:\Users\jokeslala\Documents\Visual Studio 2013\Projects\WpfApplication2\WpfApplication2\MainWindow.xaml.cs:line 155
- chunxi asked 10 years ago
- last active 10 years ago