pub struct CustomIndicator { /* private fields */ }Expand description
An indicator defined at runtime via a calculation closure.
Build one with new and customise it with the builder
methods (with_description, with_color, with_overlay, etc.).
Implementations§
Source§impl CustomIndicator
impl CustomIndicator
Sourcepub fn new<F>(name: impl Into<String>, calculate_fn: F) -> Self
pub fn new<F>(name: impl Into<String>, calculate_fn: F) -> Self
Create a new custom indicator.
§Arguments
name– Display name shown in legends and tooltips.calculate_fn– Closure that computes indicator values from bars.
The indicator defaults to a single-line yellow overlay.
Sourcepub fn with_inputs<F>(
self,
inputs: Vec<StudyInput>,
calculate: F,
) -> Result<Self, StudyError>
pub fn with_inputs<F>( self, inputs: Vec<StudyInput>, calculate: F, ) -> Result<Self, StudyError>
Declare editable inputs and calculate from their current values. Ids must be unique; defaults and initial values must satisfy the same schema used by the editor and setters.
Sourcepub fn with_description(self, desc: impl Into<String>) -> Self
pub fn with_description(self, desc: impl Into<String>) -> Self
Set a human-readable description (used in tooltips).
Sourcepub fn with_color(self, color: Color32) -> Self
pub fn with_color(self, color: Color32) -> Self
Set the line color (single-line indicators).
Sourcepub fn with_colors(self, colors: Vec<Color32>) -> Self
pub fn with_colors(self, colors: Vec<Color32>) -> Self
Set colors for a multi-line indicator.
Sourcepub fn with_overlay(self, is_overlay: bool) -> Self
pub fn with_overlay(self, is_overlay: bool) -> Self
Set whether this indicator is drawn on the main price chart (true)
or in a separate sub-pane (false).
Sourcepub fn with_line_count(self, count: usize) -> Self
pub fn with_line_count(self, count: usize) -> Self
Set the number of output lines (must match the closure’s output).
Sourcepub fn with_value_format(self, format: StudyFormat) -> Self
pub fn with_value_format(self, format: StudyFormat) -> Self
Set the units used by every readout of this study.
Sourcepub fn with_scale(self, scale: StudyScale) -> Self
pub fn with_scale(self, scale: StudyScale) -> Self
Set the value scale independently of overlay or separate-pane placement.
Sourcepub fn with_plot_types(self, types: Vec<PlotType>) -> Self
pub fn with_plot_types(self, types: Vec<PlotType>) -> Self
Set geometry per output; omitted outputs remain lines.
Sourcepub fn with_offsets(self, offsets: Vec<isize>) -> Self
pub fn with_offsets(self, offsets: Vec<isize>) -> Self
Set displacement per output; omitted outputs stay on their source bars.
Sourcepub fn with_fills(self, fills: Vec<StudyFill>) -> Self
pub fn with_fills(self, fills: Vec<StudyFill>) -> Self
Set filled bands between output lines or constant levels.
Sourcepub fn with_plot_color<F>(self, color: F) -> Self
pub fn with_plot_color<F>(self, color: F) -> Self
Set a per-bar colour callback. Returning None uses the plot colour.
Sourcepub fn with_line_names(self, names: Vec<String>) -> Self
pub fn with_line_names(self, names: Vec<String>) -> Self
Set display names for each line (used in legends).
Trait Implementations§
Source§impl Clone for CustomIndicator
impl Clone for CustomIndicator
Source§fn clone(&self) -> CustomIndicator
fn clone(&self) -> CustomIndicator
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Indicator for CustomIndicator
impl Indicator for CustomIndicator
Source§fn inputs(&self) -> Vec<StudyInput>
fn inputs(&self) -> Vec<StudyInput>
Source§fn set_input(&mut self, id: &str, value: InputValue) -> Result<(), StudyError>
fn set_input(&mut self, id: &str, value: InputValue) -> Result<(), StudyError>
super::StudyError::UnknownInput
and wrong types and invalid values with super::StudyError::InvalidInput.
On success cached values are cleared; calculate again or let the chart refresh.Source§fn value_format(&self) -> StudyFormat
fn value_format(&self) -> StudyFormat
Source§fn scale(&self) -> StudyScale
fn scale(&self) -> StudyScale
is_overlay.Source§fn plot_style(&self, line: usize) -> PlotStyle
fn plot_style(&self, line: usize) -> PlotStyle
line_count, which renderers do not draw, still gets a style, so an
implementation must not panic on it. The default takes the line’s colour from
colors, white for a line without one, and its width from
line_style.Source§fn plot_offset(&self, line: usize) -> isize
fn plot_offset(&self, line: usize) -> isize
Source§fn plot_color(&self, line: usize, bar: usize) -> Option<Color32>
fn plot_color(&self, line: usize, bar: usize) -> Option<Color32>
Source§fn fills(&self) -> Vec<StudyFill>
fn fills(&self) -> Vec<StudyFill>
Source§fn name(&self) -> &str
fn name(&self) -> &str
"SMA", "RSI", "MACD").Source§fn desc(&self) -> &str
fn desc(&self) -> &str
Source§fn calculate(&mut self, data: &[Bar])
fn calculate(&mut self, data: &[Bar])
Source§fn values(&self) -> &IndicatorValues
fn values(&self) -> &IndicatorValues
Source§fn colors(&self) -> Vec<Color32>
fn colors(&self) -> Vec<Color32>
Source§fn set_colors(&mut self, colors: Vec<Color32>)
fn set_colors(&mut self, colors: Vec<Color32>)
Source§fn is_overlay(&self) -> bool
fn is_overlay(&self) -> bool
Source§fn line_count(&self) -> usize
fn line_count(&self) -> usize
0..line_count(). Read moreSource§fn line_names(&self) -> Vec<String>
fn line_names(&self) -> Vec<String>
Source§fn is_visible(&self) -> bool
fn is_visible(&self) -> bool
Source§fn set_visible(&mut self, visible: bool)
fn set_visible(&mut self, visible: bool)
Source§fn clone_box(&self) -> Box<dyn Indicator>
fn clone_box(&self) -> Box<dyn Indicator>
Box<dyn Indicator>. Read moreSource§fn projections(&self) -> &[StudyProjection]
fn projections(&self) -> &[StudyProjection]
Source§fn table(&self) -> Option<&StudyTable>
fn table(&self) -> Option<&StudyTable>
Source§fn has_settings(&self) -> bool
fn has_settings(&self) -> bool
Source§fn projection_fill_color(&self, projection: &StudyProjection) -> Color32
fn projection_fill_color(&self, projection: &StudyProjection) -> Color32
Source§fn plot_label_colors(&self, _line: usize) -> Option<(Color32, Color32)>
fn plot_label_colors(&self, _line: usize) -> Option<(Color32, Color32)>
Source§fn marker_style(&self) -> Option<PlotStyle>
fn marker_style(&self) -> Option<PlotStyle>
Source§fn level_style(&self, _value: f64) -> LineStyle
fn level_style(&self, _value: f64) -> LineStyle
Source§fn level_fill_color(&self) -> Color32
fn level_fill_color(&self) -> Color32
Source§fn legend_visible(&self, line: usize) -> bool
fn legend_visible(&self, line: usize) -> bool
line appears in the legend. Defaults to plot visibility; a study can
retain a labelled readout for a quantity excluded from its plot and scale by default.Source§fn plot_tagged(&self, line: usize) -> bool
fn plot_tagged(&self, line: usize) -> bool
line shows its last value in a tag on the price scale while the chart
shows study values. By default every plot of a study with up to four plots does and no
plot of a study with more, whose values stay in the legend, so that the tags leave the
scale’s tick labels readable. A study on a chart starts from this choice and keeps the
user’s in StudySettings::untagged_plots.Source§fn plot_output(&self, line: usize) -> usize
fn plot_output(&self, line: usize) -> usize
line, for a plot past
line_count that draws zones or candles for one of the outputs. The
default is line itself.Source§fn provisional_after(&self, line: usize) -> Option<usize>
fn provisional_after(&self, line: usize) -> Option<usize>
None, the
default, draws the whole line as styled.Source§fn plot_text(&self, line: usize, bar: usize) -> Option<String>
fn plot_text(&self, line: usize, bar: usize) -> Option<String>
Source§fn plot_value(&self, line: usize, bar: usize) -> Option<f64>
fn plot_value(&self, line: usize, bar: usize) -> Option<f64>
Source§fn settings(&self) -> StudySettings
fn settings(&self) -> StudySettings
Source§fn snapshot_settings(&self) -> StudySettingsSnapshot
fn snapshot_settings(&self) -> StudySettingsSnapshot
super::StudySettingsSnapshot::capture with their
global visibility toggle to do the same.Source§fn restore_settings(
&mut self,
snapshot: &StudySettingsSnapshot,
) -> Result<(), StudyError>
fn restore_settings( &mut self, snapshot: &StudySettingsSnapshot, ) -> Result<(), StudyError>
Self::apply_settings.
Returns an error if the snapshot is no longer accepted.Source§fn apply_settings(
&mut self,
inputs: &[(String, InputValue)],
settings: StudySettings,
) -> Result<(), StudyError>
fn apply_settings( &mut self, inputs: &[(String, InputValue)], settings: StudySettings, ) -> Result<(), StudyError>
ConfiguredStudy,
which validates inputs on a clone before replacing the calculation and presentation.Source§fn set_visible_range(&mut self, range: Range<usize>) -> bool
fn set_visible_range(&mut self, range: Range<usize>) -> bool
Source§fn set_timeframe(&mut self, timeframe: Timeframe)
fn set_timeframe(&mut self, timeframe: Timeframe)
Source§fn set_bar_clock(&mut self, clock: &BarClock) -> bool
fn set_bar_clock(&mut self, clock: &BarClock) -> bool
Source§fn scale_mapping(&self) -> Option<PriceMap>
fn scale_mapping(&self) -> Option<PriceMap>
Source§fn set_scale_mapping(&mut self, mapping: Option<PriceMap>)
fn set_scale_mapping(&mut self, mapping: Option<PriceMap>)
None restores the ordinary pane mapping.Source§fn set_value_formatter(
&mut self,
formatter: Option<Arc<dyn PriceFormatter>>,
) -> bool
fn set_value_formatter( &mut self, formatter: Option<Arc<dyn PriceFormatter>>, ) -> bool
None restores the
declared units and precision. Returns false when this study owns its formatting.Source§fn format_value(&self, value: f64) -> String
fn format_value(&self, value: f64) -> String
Source§fn format_plot_value(&self, line: usize, value: f64) -> String
fn format_plot_value(&self, line: usize, value: f64) -> String
format_value.Source§fn precision(&self) -> Option<usize>
fn precision(&self) -> Option<usize>
Source§fn data_requests(&self) -> Vec<StudyDataRequest>
fn data_requests(&self) -> Vec<StudyDataRequest>
Source§fn data_start(&self, request: &StudyDataRequest) -> Option<DateTime<Utc>>
fn data_start(&self, request: &StudyDataRequest) -> Option<DateTime<Utc>>
request, one of its
data_requests. A connected feed stops loading older
history of that series once it holds a bar at or before the earliest such time of the
studies reading it, and loads more when that time moves earlier. None, the default,
and a time before the chart’s first bar load the series back to that bar. Price-based
chart types such as Renko do not use the times and always load it back to that bar.Source§fn update_data(&mut self, data: &[Bar], from: usize, sources: &[StudyData<'_>])
fn update_data(&mut self, data: &[Bar], from: usize, sources: &[StudyData<'_>])
from retains the same requested
histories and follows update’s unchanged-prefix contract.Source§fn source(&self) -> Option<StudySource>
fn source(&self) -> Option<StudySource>
None for OHLC or multi-source studies.
Configured studies expose this as a Source input. Study references use chart ids and
undisplaced output columns; missing or cyclic references produce missing values.Source§fn update_source(&mut self, data: &[Bar], from: usize, source: &[f64])
fn update_source(&mut self, data: &[Bar], from: usize, source: &[f64])
Source§fn order_flow_inputs(&self) -> &[OrderFlowInput]
fn order_flow_inputs(&self) -> &[OrderFlowInput]
OrderFlowInputs of
fixed aggregations, footprints or books. A chart with a feed connects them before its
updates are coalesced, gives them its instrument’s tick size, applies the trade store’s
retention and the replay cutoff, and updates the study from the first bar that changed.
Hosts without a feed push events through the handles and recalculate. Several studies may
return the same source; it receives each event once.Source§fn needs_order_flow(&self) -> bool
fn needs_order_flow(&self) -> bool
order_flow_inputs, so that it cannot be calculated on the bars
of another interval or symbol, whose order flow the chart does not hold. The default is
whether it names any. A study that builds its results from the bars and refines them with
order flow where the chart holds it returns false, and keeps its Interval input.Source§fn update(&mut self, data: &[Bar], from: usize)
fn update(&mut self, data: &[Bar], from: usize)
values up to date after data[from..] changed or grew,
given that data[..from] is unchanged since the previous call. The values equal those of
calculate on the same data, bit for bit. After bars are
prepended, or after a setting of the study changed, pass 0; after bars are removed from
the end pass the new length. Read moreSource§fn is_incremental(&self) -> bool
fn is_incremental(&self) -> bool
false.Source§fn set_instrument(&mut self, instrument: Option<&Instrument>) -> bool
fn set_instrument(&mut self, instrument: Option<&Instrument>) -> bool
true
if calculation settings changed and the caller must recalculate from bar 0.
The chart calls this on add and before calculation after its symbol or metadata changes.
None clears chart metadata and restores the study’s own settings.
Studies independent of instrument metadata keep the default.Source§fn set_time_scale_events(&mut self, events: &[TimeScaleEvent]) -> bool
fn set_time_scale_events(&mut self, events: &[TimeScaleEvent]) -> bool
Chart::set_time_scale_events, in the order supplied. Returns true if calculation
settings changed and the caller must recalculate from bar 0. The chart calls this on add
and before calculation. Studies that read no events keep the default.Source§fn line_style(&self, line: usize) -> IndicatorLineStyle
fn line_style(&self, line: usize) -> IndicatorLineStyle
plot_style.Source§fn candles(&self) -> &[StudyCandle]
fn candles(&self) -> &[StudyCandle]
Source§fn drawings(&self) -> &[Drawing]
fn drawings(&self) -> &[Drawing]
calculate; use tools whose renderer needs only their anchors
and settings, such as trend lines, parallel channels, Fibonacci levels and pitchforks.Source§fn tpo(&self) -> Option<&TPOConfig>
fn tpo(&self) -> Option<&TPOConfig>
to_tpo_profiles and draws on the price pane, beside
each session’s bars, as it does for the TPO chart type. None by default.Source§fn zones(&self) -> &[StudyZone]
fn zones(&self) -> &[StudyZone]
Source§fn zones_cover_whole_bars(&self) -> bool
fn zones_cover_whole_bars(&self) -> bool
zones spans its bars from the left edge of the first to
the right edge of the last, as study candles do, rather than from the centre of the first
to the centre of the last. Off by default.Source§fn labels(&self) -> &[StudyLabel]
fn labels(&self) -> &[StudyLabel]
bar. The chart draws the labels near the visible
bars, in the colour of their plot, inside the plot area, so they never run under the
price axis. Empty by default. Keep the text from the last calculation: it is drawn every
frame.Source§fn labels_on_price(&self) -> bool
fn labels_on_price(&self) -> bool
labels on the main price chart, even when the study has its
own pane. Label prices use the main series’ scale. Off by default.Source§fn set_label_precision(&mut self, precision: Option<usize>)
fn set_label_precision(&mut self, precision: Option<usize>)
labels, None when they set none and the instrument’s decimals apply.
The text is written when the study calculates, so calculate again afterwards, as a chart
does after any settings edit. Studies without price labels keep the default.Source§fn volume_profiles(&self, visible: Range<usize>) -> Vec<StudyProfile>
fn volume_profiles(&self, visible: Range<usize>) -> Vec<StudyProfile>
Source§fn markers(&self) -> &[IndicatorMarker]
fn markers(&self) -> &[IndicatorMarker]
Source§fn extend_right(&self) -> bool
fn extend_right(&self) -> bool
Source§fn plot_label(&self) -> Option<(usize, String)>
fn plot_label(&self) -> Option<(usize, String)>
Source§fn set_color(&mut self, line_idx: usize, color: Color32)
fn set_color(&mut self, line_idx: usize, color: Color32)
Source§fn pane(&self) -> StudyPane
fn pane(&self) -> StudyPane
ConfiguredStudy returns its levels where its settings place
them, in their colours, and a hidden level in Color32::TRANSPARENT, which still bounds
the fill.Source§fn set_overlay(&mut self, _overlay: bool) -> bool
fn set_overlay(&mut self, _overlay: bool) -> bool
Auto Trait Implementations§
impl !RefUnwindSafe for CustomIndicator
impl !UnwindSafe for CustomIndicator
impl Freeze for CustomIndicator
impl Send for CustomIndicator
impl Sync for CustomIndicator
impl Unpin for CustomIndicator
impl UnsafeUnpin for CustomIndicator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more