This script actually does not really involve any Technical Analysis (TA). It just a bot that runs on traditional martingale strategy.
Martingale startegy is a risk management strategy that originated in 18th-century France. It is based on the principle of doubling down on losses to recover them in the next winning trade.
//@version=5
strategy("SUI(Binance TF5)www.capayam.com", overlay=false, initial_capital=168, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=10, commission_type=strategy.commission.percent, commission_value=0.12)
// IMPORTANT!! Pay attention to Initial Capital, it equals to capital required in wallet.
// Usual minimum buy is 5usdt in many exchanges, thus the Initial Buy is 5.2usdt
// Capital needed for IB 5.2usdt: Multiplier 1.5 ~168usdt, Multiplier 1.75 ~342 usdt, Multiplier 2.0 ~661 usdt
// IMPORTANT! You MUST set the trading date to start on the day after today, meaning the earliest is tomorrow.
// IMPORTANT!! Ensure the decimals are correct; 1zero=1decimals, 2zeroes=2decimals, 0zeroes=NoDecimals
// Inputs
percentageDrop = input.float(2.7, title="Percentage Drop for Position Increase (%)", step=0.1) / 100
maxPositions = input.int(7, title="Max Positions (adjust in Pyramiding as well)", minval=1)
multiplier = input.float(1.5, title="Multiplier for Position Increase", minval=1, step=0.1)
takeProfitPct = input.float(2.7, title="Take Profit Percentage (%)", step=0.1) / 100
initialCapital = input.float(5.2, title="Initial Buy(adjust in initialCapital accordingly)", step=0.1)
stopLossPct = input.float(99, title="Stop Loss Percentage (%)", step=0.1) / 100
show_time = input(true, title="---Start Stop (Optional)---")
start_year = input(2024, title="Start Year")
start_month = input(12, title="Start Month (1-12)")
start_day = input(14, title="Start Day (1-31)")
stop_year = input(2025,title="Stop Year")
stop_month = input(12, title="Stop Month (1-12)")
stop_day = input(31, title="Stop Day (1-31)")
// Create timestamps from the input dates
start_trading_date = timestamp(start_year, start_month, start_day, 0, 0)
stop_trading_date = timestamp(stop_year, stop_month, stop_day, 23, 59)
// Variables
var float averageEntry = na
var float totalPositionSize = 0
var float totalCost = 0
var int positionCount = 0
var float lastPositionSize = na // Track the last added position size
// Price Levels
dropLevel = na(averageEntry) ? na : averageEntry * (1 - percentageDrop)
takeProfitLevel = na(averageEntry) ? na : averageEntry * (1 + takeProfitPct)
stopLossLevel = na(averageEntry) ? na : averageEntry * (1 - stopLossPct)
// Entry Condition [ADJUST DECIMALS ACCORDINGLY]
if na(averageEntry) and positionCount == 0 and (time >= start_trading_date) and (time <= stop_trading_date)
initialQty = math.round((initialCapital / close) * 10) / 10
strategy.entry("Initial Buy", strategy.long, qty=initialQty)
averageEntry := close
totalPositionSize := initialQty
totalCost := initialQty * close
positionCount := 1
lastPositionSize := initialQty // Initialize the last position size
if not na(averageEntry) and close <= dropLevel and positionCount < maxPositions
newPositionSize = lastPositionSize * multiplier // Calculate based on the last position size
roundedQty = math.round(newPositionSize * 10) / 10
strategy.entry("Add Position", strategy.long, qty=roundedQty)
totalCost := totalCost + roundedQty * close
totalPositionSize := totalPositionSize + roundedQty
averageEntry := totalCost / totalPositionSize
positionCount := positionCount + 1
lastPositionSize := roundedQty // Update the last position size
// Take Profit Condition
if not na(averageEntry) and close >= takeProfitLevel
strategy.close("Initial Buy")
strategy.close("Add Position")
averageEntry := na
totalPositionSize := 0
totalCost := 0
positionCount := 0
lastPositionSize := na // Reset the last position size
// Stop-Loss Condition
if not na(averageEntry) and close <= stopLossLevel
strategy.close("Initial Buy")
strategy.close("Add Position")
averageEntry := na
totalPositionSize := 0
totalCost := 0
positionCount := 0
lastPositionSize := na // Reset the last position size
// Plotting
plot(averageEntry, color=color.blue, title="Average Entry")
plot(takeProfitLevel, color=color.green, title="Take Profit Level")
plot(dropLevel, color=color.red, title="Drop Level")
plot(stopLossLevel, color=color.orange, title="Stop Loss Level")
Comments
Post a Comment