Skip to main content
Latest Crypto Fear & Greed Index


New Pine Scipt: Martingale Strategy

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.

Strategy description: It places BUY order and double down (according to the multiplier) when the price got lower. TP as per your setting. This strategy works best during bearish period with recovery pattern.

Recommended setting:

Pair: SUIUSDT (Binance)

Time frame: 5min

Min capital in wallet: 168 USDT 


The code as follows: 

**Please read the important instruction in the code.

//@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")


Don't know how to set up your own bot? Read here, its easy!

ref:code 213

Comments

Popular posts from this blog

New Pine Script Stratgey: Buy on Whale Signal

This strategy is adapted from an indicator Whale detector, which is thanks to BLACKCAT1404, the curator of the indicator.  Startegy Description: It places buy order when then whale detector bar reaches certain threshold level which you can adjust as well as the Take Profit and Stop Loss. Recommended Settings: Pair: BTCUSDT (Binance) Time frame: 7min Initial Capital: 10 Base Currency: Default Order Size: 10 USDT Pyramiding: 1 order Commission: 0.1 % Each pair of token has different threshold, suitable time frame, TP and SL. Aa a matter of fact, Even different CEX may produce result for the same coin. You have to test one by one to get the best result. Do share your best strategy setting in the comment.  *credit to  BLACKCAT1404     // @version= 4 strategy ( "WHALE pump signal [www.capayam.com, credit to Blackcat1404]" , overlay =false, commission_type = strategy.commission.percent , commission_value = 0.1 ) // Desc: Best setting ETH TF7min Thres 30 TP6 SL3 Sc...

New Script: VWAP strategy

This strategy uses VWAP with period 7. The success rate about 50%, and one huge drawback is the huge drawdown. I do not set up stop loss for this strategy. Strategy Description: It buys when the price crosses up VWAP line. Exit when EMA50 crosses down SMA100. Potential ROI Monthly (in bullish trend): 0-10% Recommended Settings: Pair: BTCUSDT, TIAUSDT Time frame: 5mins Initial Capital: 100 Base Currency: Default Order Size: 98% of equity Pyramiding: 1 order Commission: 0.1 % // @version= 4 strategy ( "VWAP+MA[www.capayam.com]" , overlay =true ) // Input for the VWAP period cumulativePeriod = input ( 7 , title = "VWAP Period" ) // Calculate VWAP typicalPrice = ( high + low + close ) / 3 typicalPriceVolume = typicalPrice * volume cumulativeTypicalPriceVolume = sum ( typicalPriceVolume , cumulativePeriod ) cumulativeVolume = sum ( volume , cumulativePeriod ) vwapValue = cumulativeTypicalPriceVolume / cumulativeVolume // Plot VWAP plot ( vwapValu...

New Pine Script Published: EMA RSI Momentum Strategy

 This is a momentum strategy that strikes while its hot and exits before the momentum ended. It is actually quite by using only 2 indicators which Exponential Moving Average (EMA) and Relative Strength Index (RSI).  Strategy Technical Description: It place Buy order when price crosses up EMA line and RSI is above BUY threshold. It exits when the RSI reaches SELL threshold. Recommended setting: Pair: RNDR (Binance) Timeframe: 5 minutes Order Size: 100% equity Pyramiding: 1 order Commission: 0.1 % // @version= 5 strategy ( "EMA RSI Momentum Strategy TF5min [capayam.com]" , overlay = false , initial_capital = 10 , default_qty_type = strategy.percent_of_equity , default_qty_value = 100 , commission_type = strategy.commission.percent , commission_value = 0.1 ) //Desc: Buys when price crosses above long EMA line and above RSI Buy threshold. Exits when RSI above Sell threshold. //Recomended pair: RNDRUSDT TF5min (Binance) // Adjustable Inputs emaLength = input.int ( 450 ,...