PROTECTED SOURCE SCRIPT
已更新 Buy The Dip - ENG

This script implements a grid trading strategy for long positions in the USDT market. The core idea is to place a series of buy limit orders at progressively lower prices below an initial entry point, aiming to lower the average entry price as the price drops. It then aims to exit the entire position when the price rises a certain percentage above the average entry price.
Here's a detailed breakdown:
1. Strategy Setup (`strategy` function):
`'거미줄 자동매매 250227'`: The name of the strategy.
`overlay = true`: Draws plots and labels directly on the main price chart.
`pyramiding = 15`: Allows up to 15 entries in the same direction (long). This is essential for grid trading, as it needs to open multiple buy orders.
`initial_capital = 600`: Sets the starting capital for backtesting to 600 USDT.
`currency = currency.USDT`: Specifies the account currency as USDT.
`margin_long/short = 0`: Doesn't define specific margin requirements (might imply spot trading logic or rely on exchange defaults if used live).
`calc_on_order_fills = false`: Strategy calculations happen on each bar's close, not just when orders fill.
2. Inputs (`input`):
Core Settings:
`lev`: Leverage (default 10x). Used to calculate position sizes.
`Investment Percentage %`: Percentage of total capital to allocate to the initial grid (default 80%).
`final entry Percentage %`: Percentage of the *remaining* capital (100 - `Investment Percentage %`) to use for the "semifinal" entry (default 50%). The rest goes to the "final" entry.
`Price Adjustment Length`: Lookback period (default 4 bars) to determine the initial `maxPrice`.
`price range`: The total percentage range downwards from `maxPrice` where the grid orders will be placed (default -10%, meaning 10% down).
`tp`: Take profit percentage above the average entry price (default 0.45%).
`semifinal entry price percent`: Percentage drop from `maxPrice` to trigger the "semifinal" larger entry (default -12%).
`final entry price percent`: Percentage drop from `maxPrice` to trigger the "final" larger entry (default -15%).
Rounding & Display:
`roundprice`, `round`: Decimal places for rounding price and quantity calculations.
`texts`, `label_style`: User interface preferences for text size and label appearance on the chart.
Time Filter:
`startTime`, `endTime`: Defines the date range for the backtest.
3. Calculations & Grid Setup:
`maxPrice`: The highest price point for the grid setup. Calculated as the lowest low of the previous `len` bars only if no trades are open. If trades are open, it uses the entry price of the very first order placed in the current sequence (`strategy.opentrades.entry_price(0)`).
`minPrice`: The lowest price point for the grid, calculated based on `maxPrice` and `range1`.
`totalCapital`: The amount of capital (considering leverage and `per1`) allocated for the main grid orders.
`coinRatios`: An array `[1, 2, 3, ..., 11]`. This defines the *relative* size ratio for each of the 11 grid orders. Later orders (at lower prices) will be progressively larger.
`totalRatio`: The sum of all ratios (66).
`positionSizes`: An array calculated based on `totalCapital` and `coinRatios`. It determines the actual quantity (size) for each of the 11 grid orders.
4. Order Placement Logic (`strategy.entry`):
Initial Grid Orders:
Runs only if within the specified time range and no position is currently open (`strategy.opentrades == 0`).
A loop places 11 limit buy orders (`Buy 1` to `Buy 11`).
Prices are calculated linearly between `maxPrice` and `minPrice`.
Order sizes are taken from the `positionSizes` array.
Semifinal & Final Entries:
Two additional, larger limit buy orders are placed simultaneously with the grid orders:
`semifinal entry`: At `maxPrice * (1 - semifinal / 100)`. Size is based on `per2`% of the capital *not* used by the main grid (`1 - per1`).
`final entry`: At `maxPrice * (1 - final / 100)`. Size is based on the remaining capital (`1 - per2`% of the unused portion).
5. Visualization (`line.new`, `label.new`, `plot`, `plotshape`, `plotchar`):
Grid Lines & Labels:
When a position is open (`strategy.opentrades > 0`), horizontal lines and labels are drawn for each of the 11 grid order prices and the "final" entry price.
Lines extend from the bar where the *first* entry occurred.
Labels show the price and planned size for each level.
Dynamic Coloring: If the price drops below a grid level, the corresponding line turns green, and the label color changes, visually indicating that the level has been reached or filled.
Plotted Lines:
`maxPrice` (initial high point for the grid).
`strategy.position_avg_price` (current average entry price of the open position, shown in red).
Target Profit Price (`strategy.position_avg_price * (1 + tp / 100)`, shown in green).
Markers:
A flag marks the `startTime`.
A rocket icon (`🚀`) appears below the bar where the `final entry` triggers.
A stop icon (`🛑`) appears below the bar where the `semifinal entry` triggers.
6. Exit Logic (`strategy.exit`, `strategy.entry` with `qty=0`):
Main Take Profit (`Full Exit`):
Uses `strategy.entry('Full Exit', strategy.short, qty = 0, limit = target2)`. This places a limit order to close the entire position (`qty=0`) at the calculated take profit level (`target2 = avgPrice * (1 + tp / 100)`). Note: Using `strategy.entry` with `strategy.short` and `qty=0` is a way to close a long position, though `strategy.exit` is often clearer. This exit seems intended to apply whenever any part of the grid position is open.
First Order Trailing Stop (`1st order Full Exit`):
Conditional: Only active if `trail` input is true AND the *last* order filled was "Buy 1" (meaning only the very first grid level was entered).
Uses `strategy.exit` with `trail_points` and `trail_offset` based on ATR values to implement a trailing stop loss/profit mechanism for this specific scenario.
This trailing stop order is cancelled (`strategy.cancel`) if any subsequent grid orders ("Buy 2", etc.) are filled.
Final/Semifinal Take Profit (`final Full Exit`):
Conditional: Only active if more than 11 entries have occurred (meaning either the "semifinal" or "final" entry must have triggered).
Uses `strategy.exit` to place a limit order to close the entire position at the take profit level (`target3 = avgPrice * (1 + tp / 100)`).
7. Information Display (Tables & UI Label):
`statsTable` (Top Right):
A comprehensive table displaying grouped information:
Market Info (Entry Point, Current Price)
Position Info (Avg Price, Target Price, Unrealized PNL $, Unrealized PNL %, Position Size, Position Value)
Strategy Performance (Realized PNL $, Realized PNL %, Initial/Total Balance, MDD, APY, Daily Profit %)
Trade Statistics (Trade Count, Wins/Losses, Win Rate, Cumulative Profit)
`buyAvgTable` (Bottom Left):
* Shows the *theoretical* entry price and average position price if trades were filled sequentially up to each `buy` level (buy1 to buy10). It uses hardcoded percentage drops (`buyper`, `avgper`) based on the initial `maxPrice` and `coinRatios`, not the dynamically changing actual average price.
`uiLabel` (Floating Label on Last Bar):
Updates only on the most recent bar (`barstate.islast`).
Provides real-time context when a position is open: Size, Avg Price, Current Price, Open PNL ($ and %), estimated % drop needed for the *next* theoretical buy (based on `ui_gridStep` input), % rise needed to hit TP, and estimated USDT profit at TP.
Shows "No Position" and basic balance/trade info otherwise.
In Summary:
This is a sophisticated long-only grid trading strategy. It aims to:
1. Define an entry range based on recent lows (`maxPrice`).
2. Place 11 scaled-in limit buy orders within a percentage range below `maxPrice`.
3. Place two additional, larger buy orders at deeper percentage drops (`semifinal`, `final`).
4. Calculate the average entry price as orders fill.
5. Exit the entire position for a small take profit (`tp`) above the average entry price.
6. Offer a conditional ATR trailing stop if only the first order fills.
7. Provide extensive visual feedback through lines, labels, icons, and detailed information tables/UI elements.
Keep in mind that grid strategies can perform well in ranging or slowly trending markets but can incur significant drawdowns if the price trends strongly against the position without sufficient retracements to hit the take profit. The leverage (`lev`) input significantly amplifies both potential profits and losses.
Here's a detailed breakdown:
1. Strategy Setup (`strategy` function):
`'거미줄 자동매매 250227'`: The name of the strategy.
`overlay = true`: Draws plots and labels directly on the main price chart.
`pyramiding = 15`: Allows up to 15 entries in the same direction (long). This is essential for grid trading, as it needs to open multiple buy orders.
`initial_capital = 600`: Sets the starting capital for backtesting to 600 USDT.
`currency = currency.USDT`: Specifies the account currency as USDT.
`margin_long/short = 0`: Doesn't define specific margin requirements (might imply spot trading logic or rely on exchange defaults if used live).
`calc_on_order_fills = false`: Strategy calculations happen on each bar's close, not just when orders fill.
2. Inputs (`input`):
Core Settings:
`lev`: Leverage (default 10x). Used to calculate position sizes.
`Investment Percentage %`: Percentage of total capital to allocate to the initial grid (default 80%).
`final entry Percentage %`: Percentage of the *remaining* capital (100 - `Investment Percentage %`) to use for the "semifinal" entry (default 50%). The rest goes to the "final" entry.
`Price Adjustment Length`: Lookback period (default 4 bars) to determine the initial `maxPrice`.
`price range`: The total percentage range downwards from `maxPrice` where the grid orders will be placed (default -10%, meaning 10% down).
`tp`: Take profit percentage above the average entry price (default 0.45%).
`semifinal entry price percent`: Percentage drop from `maxPrice` to trigger the "semifinal" larger entry (default -12%).
`final entry price percent`: Percentage drop from `maxPrice` to trigger the "final" larger entry (default -15%).
Rounding & Display:
`roundprice`, `round`: Decimal places for rounding price and quantity calculations.
`texts`, `label_style`: User interface preferences for text size and label appearance on the chart.
Time Filter:
`startTime`, `endTime`: Defines the date range for the backtest.
3. Calculations & Grid Setup:
`maxPrice`: The highest price point for the grid setup. Calculated as the lowest low of the previous `len` bars only if no trades are open. If trades are open, it uses the entry price of the very first order placed in the current sequence (`strategy.opentrades.entry_price(0)`).
`minPrice`: The lowest price point for the grid, calculated based on `maxPrice` and `range1`.
`totalCapital`: The amount of capital (considering leverage and `per1`) allocated for the main grid orders.
`coinRatios`: An array `[1, 2, 3, ..., 11]`. This defines the *relative* size ratio for each of the 11 grid orders. Later orders (at lower prices) will be progressively larger.
`totalRatio`: The sum of all ratios (66).
`positionSizes`: An array calculated based on `totalCapital` and `coinRatios`. It determines the actual quantity (size) for each of the 11 grid orders.
4. Order Placement Logic (`strategy.entry`):
Initial Grid Orders:
Runs only if within the specified time range and no position is currently open (`strategy.opentrades == 0`).
A loop places 11 limit buy orders (`Buy 1` to `Buy 11`).
Prices are calculated linearly between `maxPrice` and `minPrice`.
Order sizes are taken from the `positionSizes` array.
Semifinal & Final Entries:
Two additional, larger limit buy orders are placed simultaneously with the grid orders:
`semifinal entry`: At `maxPrice * (1 - semifinal / 100)`. Size is based on `per2`% of the capital *not* used by the main grid (`1 - per1`).
`final entry`: At `maxPrice * (1 - final / 100)`. Size is based on the remaining capital (`1 - per2`% of the unused portion).
5. Visualization (`line.new`, `label.new`, `plot`, `plotshape`, `plotchar`):
Grid Lines & Labels:
When a position is open (`strategy.opentrades > 0`), horizontal lines and labels are drawn for each of the 11 grid order prices and the "final" entry price.
Lines extend from the bar where the *first* entry occurred.
Labels show the price and planned size for each level.
Dynamic Coloring: If the price drops below a grid level, the corresponding line turns green, and the label color changes, visually indicating that the level has been reached or filled.
Plotted Lines:
`maxPrice` (initial high point for the grid).
`strategy.position_avg_price` (current average entry price of the open position, shown in red).
Target Profit Price (`strategy.position_avg_price * (1 + tp / 100)`, shown in green).
Markers:
A flag marks the `startTime`.
A rocket icon (`🚀`) appears below the bar where the `final entry` triggers.
A stop icon (`🛑`) appears below the bar where the `semifinal entry` triggers.
6. Exit Logic (`strategy.exit`, `strategy.entry` with `qty=0`):
Main Take Profit (`Full Exit`):
Uses `strategy.entry('Full Exit', strategy.short, qty = 0, limit = target2)`. This places a limit order to close the entire position (`qty=0`) at the calculated take profit level (`target2 = avgPrice * (1 + tp / 100)`). Note: Using `strategy.entry` with `strategy.short` and `qty=0` is a way to close a long position, though `strategy.exit` is often clearer. This exit seems intended to apply whenever any part of the grid position is open.
First Order Trailing Stop (`1st order Full Exit`):
Conditional: Only active if `trail` input is true AND the *last* order filled was "Buy 1" (meaning only the very first grid level was entered).
Uses `strategy.exit` with `trail_points` and `trail_offset` based on ATR values to implement a trailing stop loss/profit mechanism for this specific scenario.
This trailing stop order is cancelled (`strategy.cancel`) if any subsequent grid orders ("Buy 2", etc.) are filled.
Final/Semifinal Take Profit (`final Full Exit`):
Conditional: Only active if more than 11 entries have occurred (meaning either the "semifinal" or "final" entry must have triggered).
Uses `strategy.exit` to place a limit order to close the entire position at the take profit level (`target3 = avgPrice * (1 + tp / 100)`).
7. Information Display (Tables & UI Label):
`statsTable` (Top Right):
A comprehensive table displaying grouped information:
Market Info (Entry Point, Current Price)
Position Info (Avg Price, Target Price, Unrealized PNL $, Unrealized PNL %, Position Size, Position Value)
Strategy Performance (Realized PNL $, Realized PNL %, Initial/Total Balance, MDD, APY, Daily Profit %)
Trade Statistics (Trade Count, Wins/Losses, Win Rate, Cumulative Profit)
`buyAvgTable` (Bottom Left):
* Shows the *theoretical* entry price and average position price if trades were filled sequentially up to each `buy` level (buy1 to buy10). It uses hardcoded percentage drops (`buyper`, `avgper`) based on the initial `maxPrice` and `coinRatios`, not the dynamically changing actual average price.
`uiLabel` (Floating Label on Last Bar):
Updates only on the most recent bar (`barstate.islast`).
Provides real-time context when a position is open: Size, Avg Price, Current Price, Open PNL ($ and %), estimated % drop needed for the *next* theoretical buy (based on `ui_gridStep` input), % rise needed to hit TP, and estimated USDT profit at TP.
Shows "No Position" and basic balance/trade info otherwise.
In Summary:
This is a sophisticated long-only grid trading strategy. It aims to:
1. Define an entry range based on recent lows (`maxPrice`).
2. Place 11 scaled-in limit buy orders within a percentage range below `maxPrice`.
3. Place two additional, larger buy orders at deeper percentage drops (`semifinal`, `final`).
4. Calculate the average entry price as orders fill.
5. Exit the entire position for a small take profit (`tp`) above the average entry price.
6. Offer a conditional ATR trailing stop if only the first order fills.
7. Provide extensive visual feedback through lines, labels, icons, and detailed information tables/UI elements.
Keep in mind that grid strategies can perform well in ranging or slowly trending markets but can incur significant drawdowns if the price trends strongly against the position without sufficient retracements to hit the take profit. The leverage (`lev`) input significantly amplifies both potential profits and losses.
發行說明
Use only "BTC"over 30 min candlestick
受保護腳本
此腳本以閉源形式發佈。 不過,您可以自由且不受任何限制地使用它 — 在此處了解更多資訊。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。
受保護腳本
此腳本以閉源形式發佈。 不過,您可以自由且不受任何限制地使用它 — 在此處了解更多資訊。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。