Triggers
What starts an entry check, such as a launch, a trade, copied wallets, a timer or a webhook call.
The trigger is the When block. It decides when the bot starts an entry check. Open it and choose Start when:
| Start when | JSON | Starts a check when |
|---|---|---|
| A token launches | {"on": "launch"} | A new token launches on a launchpad. |
| Someone trades a launchpad token | {"on": "trade"} | A wallet buys or sells a launchpad token. |
| On a timer | {"on": "timer", "every_s": 3600} | The timer's period comes round. |
| My own service calls its webhook (Legendary) | {"on": "webhook", "fields": {...}} | Your own service calls the bot's webhook. |
Launchpads
A launch or trade trigger watches one or both launchpads. Choose it in Launchpad: Pons, Torch, or Pons and Torch.
- Pons: a token starts on a bonding curve, and moves to a Uniswap pool once the curve holds 4.2 ETH. The value
token.graduatedbecomes true then. - Torch: all of a token's supply is in its own Uniswap pool from the first block. Torch has no move to a pool. The value
token.graduatedbecomes true when the price reaches 10 times its launch price.
In JSON, the launchpads are venues: ["pons"], ["torch"] or ["pons", "torch"]. A trigger without venues watches Pons only.
Torch anti-snipe tax
Torch tokens trade in their own Uniswap pool from the first block. With anti-snipe, a buy in its first 15 to 60 seconds pays up to 80% tax: wait it out, or check token.buy_tax.
The value token.buy_tax is the tax as a fraction, so 0.8 is 80%. The Torch launch momentum preset waits 60 seconds and buys only if token.buy_tax is at most 0.1.
A token launches
The check starts once for each new token on the chosen launchpads. The token that launched is the token the bot buys, unless the strategy chooses another one. Read buying.
Most launch strategies add a wait, then check how the token traded in that time. Example: the launch momentum preset waits 60 seconds, then buys only if at least 30 wallets bought.
{
"schema": 1,
"name": "Launch momentum",
"entry": {
"trigger": { "on": "launch" },
"wait_s": 60,
"confirm": {
"and": [
{ ">=": [{ "f": "token.buyers", "args": [60] }, 30] },
{ "not": { "f": "token.creator_sold" } },
{ "not": { "f": "token.graduated" } }
]
},
"buy_eth": 0.02
},
"exits": [
{ "if": { ">=": [{ "f": "position.multiple" }, 2] }, "sell_pct": 50, "reason": "half_at_2x" },
{
"if": {
"and": [
{ ">=": [{ "f": "position.peak_multiple" }, 1.5] },
{ ">=": [{ "f": "position.drawdown_pct" }, 30] }
]
},
"reason": "trailing_stop"
},
{ "if": { "<=": [{ "f": "position.pnl_pct" }, -50] }, "reason": "stop_loss" },
{ "if": { ">=": [{ "f": "position.age_s" }, 1800] }, "reason": "time" }
],
"limits": { "max_open": 5 }
}Someone trades a launchpad token
The check starts on each trade of a token on the chosen launchpads. Set two more fields:
- Which trades: Buys, Sells, or Buys and sells. In JSON,
sideis"buy"or"sell". Leavesideout for both. - By: Any wallet, or Wallets I choose.
The token that was traded is the token the bot buys, unless the strategy chooses another one. Conditions can read the trade itself: event.eth (its size), event.first_buy (the trader's first buy of the token) and event.trader. Read conditions.
Copy wallets
Choose Wallets I choose to copy wallets. Paste the addresses in Wallets to copy: one a line, or with commas or spaces between them. The editor keeps each address once, and names any text that is not an address. A strategy can copy up to 1,000 wallets.
A wallet counts only when it sends the trade itself. In JSON, the list is wallets:
{
"schema": 1,
"name": "Copy wallets",
"entry": {
"trigger": { "on": "trade", "side": "buy", "wallets": ["0x1111111111111111111111111111111111111111"] },
"if": { "f": "event.first_buy" },
"wait_s": 10,
"buy_eth": 0.02
},
"exits": [
{ "if": { ">=": [{ "f": "position.multiple" }, 3] }, "reason": "take_profit" },
{ "if": { ">=": [{ "f": "position.age_s" }, 3600] }, "reason": "time" }
],
"limits": { "max_open": 50 }
}This is the copy wallets preset with one example address. Replace it with the wallets you want to copy.
On a timer
The check starts once in each period. Set the period in Every, in minutes. The shortest period is 1 minute, and the longest is 7 days. In JSON, every_s is the period in seconds (60 to 604800).
A timer has no token of its own. So a timer strategy must name the token it buys (entry.target), or launch a token. A timer has no triggering trade either, so its conditions cannot read event values.
Each bot runs at its own moment within the period, so bots on the same timer do not all trade at once. A timer first runs at its next moment after you save, never at once. If the bot misses a moment, it does not make it up.
The DCA presets use a timer. Read presets.
Act when a price passes a level
A timer can check a price. Name the token in entry.target, and put the level in the conditions. On each tick, the bot reads the token's price and buys only if the condition holds. token.price is in ETH for one whole token. The rule below buys once when one token costs 0.05 ETH or less:
{
"trigger": { "on": "timer", "every_s": 60 },
"target": { "token": "0x0000000000000000000000000000000000000001" },
"if": { "<=": [{ "f": "token.price" }, 0.05] },
"buy_eth": 0.01
}Add Once per token in the limits, or the bot buys again on each tick while the price stays below the level. The bot sees the price only on a tick, so a short period finds the level sooner.
Act on an AI signal
A timer can also ask an AI step on each tick: for example, "Is the news on this stock good or bad today?" The bot buys only if the step's answer passes your rules. AI steps in an entry need an Epic Spinner. Read AI steps.
My own service calls its webhook
Your own service starts the check with a signed call to the bot's webhook. You declare the fields that your service sends. Rules read them as hook.<field>, and prompts as {{hook.<field>}}. A token field can be the token that the bot buys. A webhook trigger needs a Legendary Spinner.
After you save, the webhook's address and secret show on the Strategy tab. Read webhooks to set it up.