Price
Contents
Overview
price is not a calculated indicator -- it is the current candle's closing price. It allows you to compare raw price directly against indicator values, moving averages, Bollinger Bands, or fixed numeric levels.
Every other indicator in Botmarley derives a signal from price. Sometimes, though, you want to work with price itself: "Is the price above the 200-period SMA?" or "Has price dropped below the lower Bollinger Band?" or "Is price above 100,000?" The price field makes these comparisons possible.
This gives you the building block for classic technical analysis rules: support/resistance levels, moving average crossovers from price's perspective, and price-relative-to-band signals.
Format
price
Price has no period parameter. It always represents the close of the current candle on the specified timeframe. The format is simply price.
Value range: The actual market price of the asset. For BTC, this might be 50,000--100,000+. For a small-cap altcoin, it might be 0.001. Values are always positive.
price always refers to the closing price of the current candle on the trigger's timeframe. On a 1-hour chart, it is the close of the current hourly candle. On a daily chart, it is the close of the current daily candle.
How Price Works in Triggers
Price is unique because it can be used on either side of a trigger -- as the indicator or as the target.
Price as the indicator:
indicator = "price"
operator = "<"
target = "bb_lower"
Read as: "price is below the lower Bollinger Band."
Price as the target:
indicator = "bb_lower"
operator = ">"
target = "price"
Read as: "the lower Bollinger Band is above price." This is logically identical to the first form -- both mean price is below the lower Bollinger Band.
Price compared to a fixed value:
indicator = "price"
operator = ">"
target = "100000"
Read as: "price is above 100,000." This allows you to set absolute level-based triggers.
The flexibility of price means you can express the same condition in multiple ways. Choose whichever reads most naturally to you. Most traders find indicator = "price" with the comparison target to be the most intuitive form.
Understanding Operators with Price
All five operators work with price. The behavior follows the same state-based vs. event-based rules as other indicators.
< Price Below a Level -- State-Based
What it does: True on every candle where price is below the target value. This is a sustained condition.
[[actions.triggers]]
indicator = "price"
operator = "<"
target = "bb_lower"
timeframe = "1h"
On the chart: Price is sitting below the lower Bollinger Band. For as long as it stays there, this trigger fires on every candle. Use max_count to limit repeated firing, or switch to cross_below if you only want the initial break.
Common pairings:
price < bb_lower-- below the volatility envelope (oversold by Bollinger standards)price < sma_200-- below the long-term moving average (bearish territory)price < ema_50-- below the medium-term trend line
> Price Above a Level -- State-Based
What it does: True on every candle where price is above the target value. This is a sustained condition.
[[actions.triggers]]
indicator = "price"
operator = ">"
target = "sma_200"
timeframe = "1d"
Typical use: Trend filter. "Only allow entries when price is above the 200-day SMA" -- a classic bull-market confirmation. Because this is state-based, it works perfectly as a background filter for other entry signals.
Common pairings:
price > sma_200-- above the long-term trend (bullish territory)price > bb_upper-- above the volatility envelope (breakout or overbought)price > ema_20-- above the short-term trend
cross_above -- Price Crossing Above
What it does: Fires once at the exact candle where price transitions from below the target to above it. The previous candle's close was at or below the target; the current candle's close is above it.
[[actions.triggers]]
indicator = "price"
operator = "cross_above"
target = "ema_50"
timeframe = "1h"
On the chart: Price was below the EMA(50) line, then closes above it. This crossing moment fires the trigger once. This is the classic "golden cross from price's perspective" -- the moment price reclaims a key moving average.
Typical use: Breakout entries. When price crosses above a significant level (moving average, Bollinger middle band), it signals a potential trend shift. Event-based operators fire once, making them ideal for entry signals without needing max_count.
cross_below -- Price Crossing Below
What it does: Fires once at the exact candle where price transitions from above the target to below it.
[[actions.triggers]]
indicator = "price"
operator = "cross_below"
target = "sma_50"
timeframe = "1h"
Typical use: Breakdown signals. Price dropping below a key moving average can signal trend weakness. Use as an exit trigger or as a warning that the trend is changing.
= Exact Price -- Rarely Useful
What it does: True only when price exactly equals the target value.
[[actions.triggers]]
indicator = "price"
operator = "="
target = "100000"
Price is a floating-point value with many decimal places. The chance of price landing on exactly 100000.000000 is extremely low. In practice, = almost never fires with price. Use > or < instead, or use cross_above / cross_below to catch the moment price passes through a level.
TOML Examples
Price Below Bollinger Lower Band
The classic Bollinger Bounce entry. Price has extended more than 2 standard deviations below the mean -- a statistically significant move that often reverts.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "price"
operator = "<"
target = "bb_lower"
timeframe = "1h"
Price Above Long-Term Moving Average
Use price above the 200-period SMA on the daily chart as a macro trend filter. Only allow entries when the market is in confirmed bullish territory.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "price"
operator = ">"
target = "sma_200"
timeframe = "1d"
[[actions.triggers]]
indicator = "rsi_14"
operator = "<"
target = "35"
timeframe = "1h"
Price Crosses Above EMA
Enter when price reclaims the 50-period EMA. This catches the moment price moves back above the medium-term trend line -- a potential trend resumption signal.
[[actions]]
type = "open_long"
amount = "100 USDC"
[[actions.triggers]]
indicator = "price"
operator = "cross_above"
target = "ema_50"
timeframe = "1h"
[[actions.triggers]]
indicator = "macd_line"
operator = ">"
target = "0"
timeframe = "1h"
Absolute Price Target
Sell when price breaks above a specific level. Useful for taking profit at a predetermined price target.
[[actions]]
type = "sell"
amount = "50%"
[[actions.triggers]]
indicator = "price"
operator = "cross_above"
target = "100000"
timeframe = "1h"
max_count = 1
Tips
price can be used on either side of the trigger. These two triggers are logically identical:
indicator = "price",operator = "<",target = "bb_lower"-- "price is below the lower band"indicator = "bb_lower",operator = ">",target = "price"-- "the lower band is above price"
Choose whichever reads more naturally. Most strategies use indicator = "price" because it reads like plain English: "price below X."
The simplest trend filter in technical analysis: is price above or below a key moving average? price > sma_200 on the daily chart has been used for decades to define bull vs. bear markets. Add it as a background filter to virtually any strategy to avoid trading against the major trend.
If you want to act when price hits a specific level (a round number like 100,000, or a moving average), use cross_above or cross_below instead of > or <. The cross operator fires once at the moment of crossing. The comparison operators fire on every candle while the condition holds, which can cause repeated actions without max_count.
When using fixed numeric targets like target = "100000", remember that this value is specific to the trading pair. A strategy with price > 100000 makes sense for BTC/USDC but is meaningless for ETH/USDC. If you reuse strategy templates across pairs, prefer indicator-relative targets (like bb_lower or sma_200) over hardcoded price levels.