What Is Futures Grid Trading?

2020-12-23 11:22
Tutorial
Add Margin or Investment on a Running Grid
Frequently Asked Questions

Tutorial Video

Last updated: 16 Dec 2024

Disclaimer: In compliance with MiCA requirements, unauthorized stablecoins are subject to certain restrictions for EEA users. For more information, please click here.

Grid trading is a trading bot that automates the buying and selling of Futures contracts. It is designed to place orders in the market at preset intervals within a configured price range.

Grid trading is when orders are placed above and below a set price, creating a grid of orders at incrementally increasing and decreasing prices. In this way, it constructs a trading grid. For example, a trader could place BTC buy orders at every 1,000 USDT below the market price and place sell orders at every 1,000 USDT above the market price to take advantage of ranging conditions.

Grid trading performs best in volatile and sideways markets when prices fluctuate in a given range. This technique attempts to make profits on small price changes. The more grids you include, the greater the frequency of trades will be. However, it comes with an expense as the profit you make from each order is lower.

Thus, it is a tradeoff between making small profits from many trades, versus a strategy with lower frequency but generates a bigger profit per order.

How does Binance Grid Trading work?

Binance Grid Trading now supports USDⓈ-M and COIN-M Futures. You can customize and set grid parameters to determine the grid's upper and lower limits and the number of grids. Once the grid is created, the system automatically buys or sells orders at preset prices.

Let’s understand how it works.

You expect Bitcoin to hover in a price range between 50,000 USDT and 60,000 USDT in the next 24 hours. In this case, you could set up a grid trading system to trade within this predicted range.

On the grid trading panel, you could set parameters of the bot, including:

  • The upper and lower boundaries of the price range;
  • The number of orders to be placed within the configured price range; and
  • The width between each buy and sell limit order.

In this scenario, as the BTC price falls toward 55,000 USDT , the grid trading bot will accumulate buy positions on the way down at a lower-than-market price. As the price recovers, the bot will sell on the way up at a higher-than-market price. This strategy essentially attempts to profit from price reversions.

For more details, please read What Is Long/Short Grid Trading?.

Risk Warning: Grid trading as a strategic trading tool should not be regarded as financial or investment advice from Binance. Grid trading is used at your discretion and at your own risk. Binance will not be liable to you for any loss that might arise from your use of the feature. It is recommended that users should read and fully understand the Grid Trading tutorial and make risk control and trade rationally within their financial ability.

How to set up a Grid Trading strategy?

1. Log in to your Binance account and go to [Futures]. Click [Trading Bots] - [Futures Grid].

If you’re using the app, go to [Futures] - [USDⓈ-M] or [COIN-M]. Tap [Grid] at the bottom left.

2. Select a symbol to execute the strategy and set the grid parameters. Select the grid direction (Long, Short, or Neutral), the range, the number of grids, and order size. Then click [Create] to confirm.

Please note that the following conditions might prevent the successful creation of a new grid:

  • If there is an existing active grid trading bot for the chosen symbol.
  • If there are open orders or open positions associated with the selected symbol.
  • If the account is set to the Hedge Mode; it must be adjusted to the One-Way Mode.
  • If the maximum limit for grid strategies has been reached:
    • You can have up to 54 grid strategies for USDⓈ-M Futures: 50 on Cross Margin and 4 on Isolated Margin.
    • This is separate from COIN-M Futures, which has a limit of 50 grid strategies using Cross Margin grid trading mechanism.

Grid trading mechanism

Let’s use the USDⓈ-M Futures BTCUSDT Perpetual contract as an example to understand the process for grid trading.

  • Setting a grid trigger (optional)
  • Defining the initial structure of your grid strategy
  • Initial grid creation process
  • Grid update
  • Setting a stop trigger (optional)
  • Order cancellation
Setting a grid trigger (optional)

For parameters #10 & #11:

You can place your grid limit orders immediately or trigger them when the market price reaches a certain value. The grid orders will be triggered when the market price (Last Price or Mark Price) rises above or falls below the trigger price you enter.

Defining the initial structure of grid strategy

For parameters #1, #2,# 3,# 4, and #6:

You can determine a series of price levels according to the latest market price (buy, sell, mid-price), and place sell limit orders at a price higher than the market price, and a buy limit order at a price lower than the market price. After that, you can wait for the limit orders to be triggered and executed.

How to create the initial grid?

For neutral grids, the strategy does not involve an initial position. Instead, the initial position is established only when the market exceeds the closest price point after the initial setup.

Example:

Suppose you have set your strategy parameters as such:

  • Contract: BTCUSDT Perpetual
  • Lower price: 20,000 USDT
  • Upper price: 45,000 USDT
  • Number of grids: 5
  • Mode: Arithmetic

The price distribution will be as follows: 20,000 USDT, 25,000 USDT, 30,000 USDT, 35,000 USDT, 40,000 USDT, 45,000 USDT

Initial sell orders for the neutral grid will be placed above the current market price. Meanwhile, the buy orders will be populated below the current market price. Note that the price nearest to the market price would be excluded. In this scenario, the initial grid limit orders will be populated as such:

DirectionPrice
Sell45,000 USDT
Sell40,000 USDT
Buy30,000 USDT
Buy25,000 USDT
Buy20,000 USDT
Grid update

Grid update means that every time a price point is touched, i.e., a limit order is filled, the grid limit order will update in time. The price of the most recently executed order will always be the one that is switched off, meaning it will not trigger any order. Buy or sell limit orders are then filled in again according to the set parameters to maintain the number of limit orders in the grid.

For example, the initial market price is 10,010 USDT , and the grid limit price at each unit is:

Price

Direction

10,200 USDT

Sell

10,100 USDT

Sell

10,000 USDT

Buy

9,900 USDT

Buy

9,800 USDT

Buy

Assuming that the price drops to 10,000 USDT and the buy order (the initial open position) is executed, the grid limit orders will become:

Price

Direction

10,200 USDT

Sell

10,100 USDT

Sell

10,000 USDT

-

9,900 USDT

Buy

9,800 USDT

Buy

Let’s assume the price then rises to 10,100 USDT, triggering the execution of the 10,100 USDT sell order. The grid limit orders will be updated as follows:

Price

Direction

10,200 USDT

Sell

10,100 USDT

-

10,000 USDT

Buy

9,900 USDT

Buy

9,800 USDT

Buy

If after that the price drops to 9,900 USDT, the two buy orders (10,000 USDT and 9,900 USDT) are then executed, and the grid limit orders will be subsequently updated as follows:

Price

Direction

10,200 USDT

Sell

10,100 USDT

Sell

10,000 USDT

Sell

9,900 USDT

-

9,800 USDT

Buy

And so on.

Setting a stop trigger (optional)

For parameter #12:

You can manually terminate the grid operation or set a Stop Trigger. There are 3 options for setting Stop Triggers:

  • Price Trigger: This activates when the latest or mark price of the grid reaches the take-profit or stop-loss price you set, causing the grid to terminate.
  • PNL Trigger: This activates when the total profit of the grid (calculated by the mark price) reaches the take-profit or stop-loss PNL you set, leading to grid termination.
  • ROI% Trigger: The system calculates the corresponding PNL based on the ROI% you set, and the grid terminates when the total profit (calculated by the mark price) reaches the specified take-profit or stop-loss level.

You can also set whether you want to keep the position open when the grid take profit and stop loss trigger the termination. This setting is independent of other termination scenarios, such as termination due to insufficient margin.

For parameters #13:

Enable [Open a position on creation] to automatically open position at market price when the grid is created; when disabled, the system will not open position for you after the grid is created. This feature is only for non-trailing grids.

Please note that during grid operation, the following scenarios will cause the grid to terminate:

  • Manually terminate the grid;
  • Insufficient margin causes some positions to be liquidated or fail to place orders;
  • When the delivery contract is delivered, the product no longer exists and the grid strategy will be automatically stopped. During the delivery process, the system will automatically remove your limit orders and settle open positions.

The system will notify you if a grid is currently in operation. For example, the recommended grid trading leverage is below 20x. If the leverage continues to be higher than 20x, you will see a second reminder to lower the leverage.

How to set up the grid trading parameters?

Choose the contract on which the trading bot will be deployed.

1. Leverage for grid trading

Start by adjusting the leverage. Please note that leverage magnifies both gains and losses. With leverage, you can magnify relatively small price movements to potentially create profits. However, leverage is a double-edged sword, please use it prudently.

2. Lower/Upper price

*Cannot be modified after placing the grid order

Set the lower price and the upper price of the grid. If the highest or the lowest grid is exceeded, no more positions will be opened. For example, if the current BTCUSDT perpetual Futures price is 48,000 USDT and you expect the price will fall when it goes above 49,000 USDT. In this case, you can set the upper price to 49,000 USDT. After the price reaches 49,000 USDT, the grid will no longer open positions.

3. Arithmetic/Geometric Mode

*Cannot be modified after placing the grid order

Arithmetic: Each grid has an equal price difference.

The arithmetic grid divides the price range from grid_lower_limit to grid_upper_limit into grid_count by an equal price difference.

The price difference of each grid is:

price_diff = (grid_upper_limit - grid_lower_limit) / grid_count

Then it constructed a series of price intervals:

price_1 = grid_lower_limit

price_2 = grid_lower_limit + price_diff

price_3 = grid_lower_limit + price_diff * 2

...

price_n = grid_lower_limit + price_diff * (n-1)

At grid_upper_limit, n = grid_count

Example: Arithmetic price_diff = 100: 1,000, 1,100, 1,200, 1,300, 1,400,... (the next price is 100 higher than the previous one)

Geometric: Each grid has an equal price difference ratio.

The geometric grid divides the price range from grid_lower_limit to grid_upper_limit into grid_count by an equal price ratio.

The price ratio of each grid is:

price_ratio = (grid_upper_limit / grid_lower_limit) ^ (1/grid_count)

The price difference of each grid is:

price_diff_percentage = ( (grid_upper_limit / grid_lower_limit) ^ (1/grid_count) - 1) * 100%

Then it constructed a series of price intervals:

price_1 = grid_lower_limit

price_2 = grid_lower_limit * price_ratio

price_3 = grid_lower_limit * price_ratio ^ 2

...

price_n = grid_lower_limit * price_ratio ^ (n-1)

At grid_upper_limit, n = grid_count

Example: Geometric grid price_diff_percentage = 10%: 1,000, 1,100, 1,210, 1,331, 1,464.1,... (the next price is 10% higher than the previous one)

4. Grids (i.e., number of limit orders)

*Cannot be modified after placing the grid order

  • Minimum: 2
  • Maximum: 169

Note: Price difference cannot be lower than the tick size, otherwise you need to adjust the Grid_count or Grid upper/lower limit.

How to calculate?

1). Arithmetic grid, price_diff = (grid_upper_limit - grid_lower_limit)/gridCount

2). Geometric grid, min_price_diff = grid_lower_limit*price_ratio

5. Profit/Grid (After deducting the trading fees)

If the profit/grid is less than the maker commission, you will be notified that the total grid profit may not be able to cover trading fees.

How to calculate? (The profit/grid displayed is for reference only)

1). Arithmetic grid

d = (grid_upper_limit - grid_lower_limit) / grid_count

c = TradingFeeRate (your current maker fee rate)

profit_per_grid_lower = (grid_upper_limit * (1-c)) / (grid_upper_limit-d) - 1 - c

profit_per_grid_higher = (1-c) * d / grid_lower_limit-2c

Example: Price interval = 1,000 - 2,000, Grid_count = 10, Commission = 0.1%

Price difference of each grid is = (2000-1000) / 10 = 100

profit_per_grid_lower = (2000*(1-0.1%)) / (2000-100) - 1 - 0.1% = 5.05%

profit_per_grid_higher = (1-0.1%) * 100 / 1,000 - 2 * 0.1% = 9.79%

2). Geometric grid

r = (grid_upper_limit/grid_lower_limit) ^ (1/grid_count)

c =TradingFeeRate (your current maker fee rate)

profit_per_grid_geo = (1-c) * r - 1 - c

Example: Price interval = 1,000 - 2,000, Grid_count = 10, Commission = 0.1%

Price ratio of each grid is = (2,000 / 1,000) ^ (1/10) = 107.18%

Profit/grid = (1 - 0.1%) * 107.18% - 1 - 0.1% = 6.97%

6. Investment

*Cannot be modified after placing the grid order

Investment = initial_value / leverage

You can adjust the percentage of the investable amount up to 100% (Initial margin = percentage * margin balance). Please note that it must be within the interval between the min_initial_margin and the margin balance.

For USDⓈ-M Futures Grid

Calculate the min grid qty:

min grid qty = max(minQty, minNotional/grid_lower_limit)

  • Direction Neutral

min_initial_margin= min grid qty * sum (price)/ (leverage * adjust_coef)

  • Direction Long/Short Grid

“assuming price” is defined as per the following formulas:

assuming_price (BUY) = price*

assuming_price (SELL) = max (mark_price, price)

*”price” is the price of every order in the grid trading strategy, automatically set by the grid parameters. This definition applies every time “price” is quoted moving forward in the article.

min_initial_margin = sum (min grid qty * assuming price + leverage * min grid qty * abs {min [0, side * (mark price - price)]}) / (leverage * adjust_coef)

Note: If you have set a trigger price, the mark price should be replaced by the trigger price.

For COIN-M Futures Grid

Calculate the minimum grid quantity:

min grid qty = minQty

  • Direction Neutral

min_initial_margin = min grid qty * sum (contract_multiplier / price) / (leverage * adjust_coef)

  • Direction Long/Short Grid

Define the assuming price:

assuming price (BUY)= min( mark price, price)

assuming price(SELL) = price

min_initial_margin = min grid qty * sum (contract_multiplier /assuming price + leverage * contract_multiplier * abs {min [0, side * (1 / Order's Price - 1 / mark price)]}) / (leverage * adjust_coef)

*”min grid qty” is the minimum trade amount of the symbol. You can find more details on the trading rules page.

*If you have set a trigger price, the mark price should be replaced by the trigger price.

*Currently, the adjust_coef has defaulted to 0.8. It will be adjusted according to market conditions.

7. Total Investment

*Cannot be modified after placing the grid order
Total Investment = Initial Margin * Leverage

8. Qty/Order

For USDⓈ-M Futures Grid

Direction Neutral:

grid_qty = adjust_coef * initial_margin * leverage / sum (price)

Direction Long/Short Grid:

“assuming price” is defined as per the following formula:

assuming_price (BUY) = price

assuming_price (SELL) = max (mark_price, price)

grid qty = adjust_coef * initial_margin * Leverage / sum (assuming_price + leverage * abs (min (0, side * (mark_price-price)) ) )

*If you have set a trigger price, the mark price should be replaced by the trigger price.

For COIN-M Futures Grid

Direction Neutral:

grid qty = adjust_coef * initial_margin * leverage / sum (1 / price)

Direction Long/Short Grid:

“Assuming price” is defined as per the following formula:

assuming_price (BUY) = min(mark price, price)

assuming_price (SELL) = price

grid qty = adjust_coef * initial_margin * Leverage / sum(contract_multiplier /assuming_price + leverage *contract_multiplier* abs(min(0, side*(1 / price - 1 / mark price)) ) )

*If you have set a trigger price, the mark price should be replaced by the trigger price.

9. Available Margin Balance

Under Default Mode, it will show the margin balance of your USDⓈ-M or COIN-M Futures account. Under Portfolio Margin Mode, you will see the available balance in your spot wallet.

10. Trigger_type: Last Price / Mark Price

*Optional, can be modified before the grid is triggered

1). Grid trigger type: When the last price or the market price you choose reaches the trigger price, the grid will start running.

2). Stop trigger type: When the last price or the market price reaches the top or bottom stop price, the grid will be stopped.

11. Trigger_price

*Optional, can be modified after placing a grid order

Your grid order will be triggered when the last price or the mark price rises above or falls below the trigger price you set.

12. Stop Trigger

*Optional, can be modified after placing the grid order

1. Price Trigger

  • For Neutral grid, it is called Stop top price;
  • For Long grid, it is called Take profit price;
  • For Short grid, it is called Stop loss price.

The stop_upper_limit price should be higher than the upper price, the last price, and the trigger price. When the latest market price reaches the Stop_upper_limit, the grid will stop working.

Stop_lower_limit price

  • For Neutral grid, it is called Stop bottom price;
  • For Long grid, it is called Stop loss price;
  • For Short grid, it is called Take profit price.

The stop_lower_limitprice should be lower than the lower price, the last price, and the trigger price. When the latest market price reaches the Stop_lower_limit, the grid will stop working.

2. PNL Trigger

The calculation of the total profit will be based on the mark price, which may not be consistent with the data displayed on the page (the data displayed on the page is calculated by last price).

3. ROI% Trigger

The system will calculate the PNL corresponding to the ROI% you entered, and determine whether the conditions for triggering the TP/SL are met based on the estimated PNL.

4. Close All Positions on TP/SL Stop

You can also set whether or not you want to keep the position open when the grid take profit or stop loss triggers the termination. This setting is independent of other termination scenarios, such as termination due to insufficient margin.

13. Open a Position on Creation

Users can create a Long or Short Futures grid with or without opening a position. If this box is ticked, positions will be opened when the grid is created. If it’s unticked, no positions will be opened. For more information, refer to this FAQ.

14. Close All Positions on Stop

*Optional, can be modified after placing the grid order

You can enable this function to automatically close all open positions of the symbol at the market price when the grid stops. This option will not affect your TP/SL settings. If the price reaches the TP or SL, your positions will be closed or remain open depending on your TP/SL settings.

*Please note that the above parameter setting suggestions are for reference only. Futures trading carries a substantial risk and the possibility of both significant profits and losses. Past gains are not indicative of future returns. All of your margin balance could be liquidated in the event of extreme price movement. Binance shall not be liable for any of your losses.

How to calculate the current margin?

position_notional = Latest_Mark_Price * size

position_notional_value = abs (position notional)

present notional = max (abs (position_notional + open order's bid_notional), abs (position_notional - open order's ask_notional))

*Abs: absolute value

open order's ask_notional = askNotional

open order's bid_notional = bidNotional

  • Crossed margin:
    Current margin = present notional / current leverage
  • Isolated margin:
    Current margin = (present notional - position_notional_value) / leverage + isolatedWalletBalance