lib_statemachine_modified

Modified to fix bugs and create getState and priorState methods.
method step(this, before, after, condition)
Namespace types: StateMachine
Parameters:
this (StateMachine)
before (int): (int): Current state before transition
after (int): (int): State to transition to
condition (bool): (bool): Condition to trigger the transition
Returns: (bool): True if the state changed, else False
method step(this, after, condition)
Namespace types: StateMachine
Parameters:
this (StateMachine)
after (int): (int): State to transition to
condition (bool): (bool): Condition to trigger the transition
Returns: (bool): True if the state changed, else False
method currentState(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
method previousState(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
method changed(this, within_bars)
Namespace types: StateMachine
Parameters:
this (StateMachine)
within_bars (int): (int): Number of bars to look back for a state change
Returns: (bool): True if a state change occurred within the timeframe, else False
method reset(this, condition, min_occurrences)
Namespace types: StateMachine
Parameters:
this (StateMachine)
condition (bool): (bool): Condition to trigger the reset
min_occurrences (int): (int): Minimum number of times the condition must be true to reset
Returns: (bool): True if the state was reset, else False
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_state (series int)
last_change_bar (series int)
Added:
method didWeJustChangeThisBar(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
method didWeChangeFromTo(this, fromState, toState, within_bars)
Namespace types: StateMachine
Parameters:
this (StateMachine)
fromState (int)
toState (int)
within_bars (int)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_state (series int)
last_change_bar (series int)
last_distinct_prior_state (series int)
Added:
method getLatestState(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_state (series int)
last_change_bar (series int)
last_distinct_prior_state (series int)
stateHistory (array<float>)
Added:
method changedPriorToCurrentBar(this, within_bars)
Namespace types: StateMachine
Parameters:
this (StateMachine)
within_bars (int): (int): Number of bars to look back for a state change
Returns: (bool): True if a state change occurred within the timeframe, else False
Removed:
method changed(this, within_bars)
Added:
method getLatestIndexOfState(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
StateRecord
Fields:
state (series int)
bar_index (series int)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_state (series int)
last_change_bar (series int)
last_distinct_prior_state (series int)
stateHistory (array<StateRecord>)
Types
StateRecord
Fields:
state (int): The state value recorded at a given moment.
bar_index (int): The bar index when that state was recorded.
StateMachine
Fields:
state (int): The current state of the machine (default 0).
neutral (int): The designated neutral (default) state.
enabled (bool): Flag to enable/disable state transitions.
reset_counter (int): Counter tracking how many times the reset condition has been met.
prior_state (int): The state immediately preceding the current state.
last_change_bar (int): The bar index at which the last state change occurred (or na if none).
last_distinct_prior_state (int): The last distinct state before the current transition.
stateHistory (StateRecord[]): An array storing a history of state transitions.
Methods
step(this, before, after, condition)
Namespace: StateMachine
Parameters:
this (StateMachine): The state machine instance.
before (int): The expected current state before the transition.
after (int): The target state to transition to.
condition (bool): Condition that triggers the transition.
Returns: (bool) — true if the state transition occurs; otherwise, false.
Notes:
If after differs from the current state, a new StateRecord is appended to stateHistory.
Updates prior_state, last_change_bar, and resets the reset_counter.
Overloaded step(this, after, condition)
Uses the current state as the expected before value.
Parameters:
this (StateMachine)
after (int): The target state.
condition (bool): Trigger condition.
Returns: (bool) — true if the state changed; otherwise, false.
currentState(this)
Parameters: this (StateMachine)
Returns: (int) — The current state.
previousState(this)
Parameters: this (StateMachine)
Returns: (int) — The state immediately prior to the current state change.
changedPriorToCurrentBar(this, within_bars)
Parameters:
this (StateMachine)
within_bars (int): Number of bars to look back for a state change (excluding the current bar).
Returns: (bool) — true if a state change occurred within the specified timeframe; otherwise, false.
didWeJustChangeThisBar(this)
Parameters: this (StateMachine)
Returns: (bool) — true if the state changed exactly on the current bar; otherwise, false.
didWeChangeFromTo(this, fromState, toState, within_bars)
Parameters:
this (StateMachine)
fromState (int): The state expected before the transition.
toState (int): The state expected after the transition.
within_bars (int): The timeframe (in bars) within which the transition should have occurred.
Returns: (bool) — true if the specific transition occurred recently; otherwise, false.
reset(this, condition, min_occurrences)
Parameters:
this (StateMachine)
condition (bool): The condition that may trigger a reset.
min_occurrences (int): The number of times the condition must be met before the reset occurs.
Returns: (bool) — true if the state machine was reset to the neutral state; otherwise, false.
getLatestState(this)
Parameters: this (StateMachine)
Returns: (int) — The latest recorded state from stateHistory (or na if none exists).
getLatestIndexOfState(this)
Parameters: this (StateMachine)
Returns: (int) — The bar index of the latest state record (or na if stateHistory is empty).
barsSinceState(this, searchState)
Parameters:
this (StateMachine)
searchState (int): The state to search for in the history.
Returns: (int) — The number of bars since the specified state was last active; returns na if that state has never been active.
Notes:
Iterates through stateHistory (accessed in reverse order) to find the most recent occurrence of searchState and computes the difference between the current bar index and the recorded bar index.
Updated:
method barsSinceState(this, searchState, isLast)
Namespace types: StateMachine
Parameters:
this (StateMachine)
searchState (int): (int): The state to search for.
isLast (bool): (bool): (Optional, default = true)
If true, returns the number of bars elapsed since the most recent record where the state is active
(i.e. where record.state == searchState);
if false, returns the number of bars elapsed since the record where the state was first triggered
(i.e. where record.before == searchState).
Returns: (int): Number of bars since the state was active, or na if never active.
StateRecord
Fields:
before (series int)
state (series int)
barIndex (series int)
Added:
method previousBarState(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
Added:
method print_transitions(this, n)
Namespace types: StateMachine
Parameters:
this (StateMachine)
n (int): (int): The number of most recent transitions to include in the log.
Returns: (string): A log of the last N state transitions.
method wasConditionMetOnBar(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_bar_state (series int)
last_change_bar (series int)
last_condition_bar (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
Fix issue with print_transitions
Added:
method setStateNames(this, mapping)
Namespace types: StateMachine
Parameters:
this (StateMachine)
mapping (array<string>)
method getStateName(this, s)
Namespace types: StateMachine
Parameters:
this (StateMachine)
s (int)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_bar_state (series int)
last_change_bar (series int)
last_condition_bar (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
Added:
method print_transitions_array(this, n)
Namespace types: StateMachine
Parameters:
this (StateMachine)
n (int): (int): The number of most recent transitions to include in the array (default is 2).
Returns: (int[]): An array of state integers from the last n transitions.
Added:
method statesArrayToText(this, states)
Namespace types: StateMachine
Parameters:
this (StateMachine)
states (array<int>): (int[]): An array of state integers.
Returns: (string): A string with each state name on a separate line.
method print_transitions_names(this, n)
Namespace types: StateMachine
Parameters:
this (StateMachine)
n (int): (int): The number of most recent transitions to include (default is 2).
Returns: (string): A formatted string where each state's name is on a new line.
- fix bug method statesArrayToText(StateMachine this, int[] states) check for empty array
Added:
method getOverlappingTransitions(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
StateOverlap
Fields:
state1 (series int)
state2 (series int)
barIndex (series int)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
prior_bar_state (series int)
last_change_bar (series int)
last_condition_bar (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
Added:
method printOverlappingTransitions(this)
Namespace types: StateMachine
Parameters:
this (StateMachine)
Added:
method showStateHistory(this, s)
Namespace types: StateMachine
Parameters:
this (StateMachine)
s (int): (int): The state to search for in the state history.
Returns: (string): A summary message indicating how many labels were created.
fix bugs
Fixing the bug in previousState
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_change_bar (series int)
last_condition_bar (series int)
prev_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_change_bar (series int)
last_condition_bar (series int)
prior_bar_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_processed_bar (series int)
last_change_bar (series int)
last_condition_bar (series int)
prior_bar_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_processed_bar (series int)
last_change_bar (series int)
last_condition_bar (series int)
prior_bar_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
just_changed_flag (series bool)
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_processed_bar (series int)
last_change_bar (series int)
last_condition_bar (series int)
prior_bar_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
just_changed_flag (series bool)
lastTrueConditionState (series int)
Added:
method visualizeStateTransition(this, labelPrefix)
Namespace types: StateMachine
Parameters:
this (StateMachine)
labelPrefix (string)
method debugStateTransition(this, expectedFromState, expectedToState)
Namespace types: StateMachine
Parameters:
this (StateMachine)
expectedFromState (int)
expectedToState (int)
Updated:
method didWeChangeFromTo(this, fromState, toState, within_bars)
Namespace types: StateMachine
Parameters:
this (StateMachine)
fromState (int): (int): The state expected before the transition
toState (int): (int): The state expected after the transition
within_bars (int): (int): Number of bars within which the transition must have occurred
Returns: (bool): True if the specific transition occurred recently, else False
Enhanced version of didWeChangeFromTo with more robust checking
Updated:
StateMachine
Fields:
state (series int)
neutral (series int)
enabled (series bool)
reset_counter (series int)
last_processed_bar (series int)
last_change_bar (series int)
last_condition_bar (series int)
prior_bar_state (series int)
previous_distinct_state (series int)
transitions_this_bar (series int)
stateHistory (array<StateRecord>)
stateNames (array<string>)
overlapList (array<StateOverlap>)
just_changed_flag (series bool)
lastTrueConditionState (series int)
offset (series int)
Libreria Pine
In pieno spirito TradingView, l'autore ha pubblicato questo codice Pine come libreria open-source in modo che altri programmatori Pine della nostra comunità possano riutilizzarlo. Complimenti all'autore! È possibile utilizzare questa libreria privatamente o in altre pubblicazioni open-source, ma il riutilizzo di questo codice in una pubblicazione è regolato dal nostro Regolamento.
Declinazione di responsabilità
Libreria Pine
In pieno spirito TradingView, l'autore ha pubblicato questo codice Pine come libreria open-source in modo che altri programmatori Pine della nostra comunità possano riutilizzarlo. Complimenti all'autore! È possibile utilizzare questa libreria privatamente o in altre pubblicazioni open-source, ma il riutilizzo di questo codice in una pubblicazione è regolato dal nostro Regolamento.