AUTOMATED TRADING

Make Waves with Market Making

Make the markets more efficient and stable
							    -- Simple Market Maker by pshai
     
    EnableHighSpeedUpdates(true)
    HideOrderSettings()
    HideTradeAmountSettings()
     
    -- inputs
    local slotCount = Input('01. Slot Count', 5, 'How many orders are constantly kept open on both long and short side')
    local slotSize = Input('02. Slot Size', 10, 'Trade amount per slot')
    local slotSpread = Input('03. Slot Spread %', 0.1, 'Percentage based spread value between each slot')
    local slotCancel = Input('04. Cancel Distance %', 0.1, 'How much price can move to the opposite direction before orders are cancelled and replaced')
    local minSpread = Input('05. Minimum Spread %', 0.1, 'Minimum spread percentage between the first long and short entries. This setting only works when bot has no position.')
    local maxSize = Input('06. Max. Open Contracts', 12000, 'Maximum open contracts at any given time. After exceeding this value, the bot will dump a portion of position at a loss')
    local reduceSize = Input('07. Size Reduction %', 25, 'How big of a portion the bot will dump once Max. Open Contracts is exceeded')
    local reduceOrderType = InputOrderType('08. Reduction Order Type', MarketOrderType, 'The order type for size reduction dump')
    local takeProfit = Input('09. Take-Profit %', 0.2, 'Fixed take-profit value, based on price change')
    local tpOrderType = InputOrderType('10. TP Order Type', MakerOrCancelOrderType, 'The order type for take-profit')
    local hedgeMode = Input('11. Hedge Mode', false, 'Hedge Mode works on exchanges like OKEX and Binance Futures with hedge mode enabled (need to set that via Binance Futrues website!). Changing this setting while bot is running will cause unwanted behavior!!')
    local hedgeRoi = Input('12. Hedge Minimum ROI %', 10, 'The ROI % the current open position needs to have before we enable the opposite side')
    local allowLong = Input('13. Allow Long Positions', true, 'Set to false to disable Long Positions during a down trend.')
    local allowShort = Input('13. Allow Short Positions', true, 'Set to false to disable Short Positions during an up trend.')
     
    --
    minSpread = minSpread / 2.0
     
     
    -- regular single-position logic
    if not hedgeMode then
      -- price and data
        local cp = CurrentPrice()
        local aep = GetPositionEnterPrice()
        local pamt = GetPositionAmount()
        local proi = GetPositionROI()
     
        Log('position ROI: '..Round(proi, 4)..'%')
     
      -- not using spread if we have a position
        if pamt > 0 then
          minSpread = 0
        end
     
      -- slot function
        local slot = function(isLong, index, amount, spread, cancelDist)
          local prefix = isLong and 'L' or 'S'
          local name = prefix .. index
          local cmd = isLong and PlaceExitShortOrder or PlaceExitLongOrder -- a little hack...
          local priceBase = isLong
              and cp.bid
              or cp.ask
          local spr = minSpread + spread * index
     
          -- if we have average entry price
          if aep > 0 then
            priceBase = isLong
                and Min(aep, priceBase)
                or Max(aep, priceBase)
          end
     
          -- get price
          local price = isLong
              and SubPerc(priceBase, spr)
              or AddPerc(priceBase, spr)
     
          local oid = Load(name..'oid', '') -- order id
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(AddPerc(order.price, spr), priceBase)
                  or Delta(priceBase, SubPerc(order.price, spr))
     
              if delta >= cancelDist then
                CancelOrder(oid)
                oid = '' -- reset id immediately, otherwise need 2 updates to get new order
                LogWarning('Delta cancelled '..name)
              end
            else
              oid = ''
            end
          else
            SetFee(Abs(MakersFee())*-1)
            oid = cmd(price, amount, {type = MakerOrCancelOrderType, note = name, timeout = 3600})
          end
     
          Save(name..'oid', oid)
        end
     
      -- update take-profit
        local updateTakeProfit = function(entryPrice, targetRoi, cancelDist)
          local name = 'Take-Profit'
          local oid = Load('tp_oid', '')
          local isLong = GetPositionDirection() == PositionLong
          local timer = Load('tp_timer', Time())
          local tp_delta = isLong and Delta(entryPrice, cp.bid) or Delta(cp.ask, entryPrice)
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(order.price, cp.close)
                  or Delta(cp.close, order.price)
     
              if delta >= cancelDist then
                CancelOrder(oid)
                LogWarning('Delta cancelled '..name)
              end
            else
              oid = ''
            end
          else
            if tp_delta >= targetRoi and Time() >= timer then
              SetFee(tpOrderType == MarketOrderType and TakersFee() or Abs(MakersFee())*-1)
              oid = PlaceExitPositionOrder({type = tpOrderType, note = name, timeout = 3600})
              timer = Time() + 60 -- 1min
            end
          end
     
          Save('tp_oid', oid)
          Save('tp_timer', timer)
        end
     
     
      -- update position size
        local updatePositionManagement = function(currentSize, sizeLimit, cancelDist)
          local name = 'Size Reduction'
          local oid = Load('pos_oid', '')
          local isLong = GetPositionDirection() == PositionLong
          local amount = SubPerc(currentSize, 100 - reduceSize) -- take X% of position
          local price = isLong
              and cp.ask
              or cp.bid
          local cmd = isLong
              and PlaceExitLongOrder
              or PlaceExitShortOrder
          local timer = Load('pos_timer', Time())
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(order.price, cp.close)
                  or Delta(cp.close, order.price)
     
              if delta >= cancelDist then
                CancelOrder(oid)
                LogWarning('Delta cancelled '..name)
              end
            else
              oid = ''
            end
          else
            if currentSize > sizeLimit and Time() >= timer then
              SetFee(reduceOrderType == MarketOrderType and TakersFee() or Abs(MakersFee())*-1)
              oid = cmd(price, amount, {type = reduceOrderType, note = name, timeout = 6000})
              timer = Time() + 60 -- 1min
            end
          end
     
          Save('pos_oid', oid)
          Save('pos_timer', timer)
        end
     
     
      -- da logica
     
        -- take profit
        updateTakeProfit(aep, takeProfit, slotCancel)
     
        -- risk management
        updatePositionManagement(pamt, maxSize, slotCancel)
     
     
        if allowLong then
          -- update slots
          for i = 1, slotCount do
            slot(true, i, slotSize, slotSpread, slotCancel) -- long slot
          end
        end
     
        if allowShort then
          for i = 1, slotCount do
            slot(false, i, slotSize, slotSpread, slotCancel) -- short slot
          end
        end
     
        if aep > 0 then
          local posId = PositionContainer().positionId
          Plot(0, 'AvgEP', aep, {c=Purple, id=posId, w=2})
        end
     
     
     
    --------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------
    -- hedge it!
    else
      -- price and data
        local cp = CurrentPrice()
        local c = ClosePrices()
        local rsi = RSI(c, 9) -- RSI is used to determine which side to start off with. this is to eliminate ghost positions.
        local signal = rsi > 52 and -1 or rsi < 48 and 1 or 0
     
      -- positions
        local hedge_longPosId = Load('hedge_longPosId', NewGuid())
        local hedge_shortPosId = Load('hedge_shortPosId', NewGuid())
     
        local dir_l = GetPositionDirection(hedge_longPosId)
        local aep_l = GetPositionEnterPrice(hedge_longPosId)
        local pamt_l = GetPositionAmount(hedge_longPosId)
        local proi_l = GetPositionROI(hedge_longPosId)
        local dir_s = GetPositionDirection(hedge_shortPosId)
        local aep_s = GetPositionEnterPrice(hedge_shortPosId)
        local pamt_s = GetPositionAmount(hedge_shortPosId)
        local proi_s = GetPositionROI(hedge_shortPosId)
     
        Log('LONG position ROI: '..Round(proi_l, 4)..'%')
        Log('SHORT position ROI: '..Round(proi_s, 4)..'%')
     
      -- not using spread if we have a position
        if pamt_l > 0 or pamt_s > 0 then
          minSpread = 0
        end
     
      -- manage position ids
        if pamt_l == 0 and IsPositionClosed(hedge_longPosId) then
          if IsAnyOrderOpen(hedge_longPosId) then
            CancelAllOrders(hedge_longPosId)
          else
            hedge_longPosId = NewGuid()
            dir_l = GetPositionDirection(hedge_longPosId)
            aep_l = GetPositionEnterPrice(hedge_longPosId)
            pamt_l = GetPositionAmount(hedge_longPosId)
            proi_l = GetPositionROI(hedge_longPosId)
          end
        end
     
        if pamt_s == 0 and IsPositionClosed(hedge_shortPosId) then
          if IsAnyOrderOpen(hedge_shortPosId) then
            CancelAllOrders(hedge_shortPosId)
          else
            hedge_shortPosId = NewGuid()
            dir_s = GetPositionDirection(hedge_shortPosId)
            aep_s = GetPositionEnterPrice(hedge_shortPosId)
            pamt_s = GetPositionAmount(hedge_shortPosId)
            proi_s = GetPositionROI(hedge_shortPosId)
          end
        end
     
      -- get pos id
        local getPositionId = function(isLong)
          return isLong and hedge_longPosId or hedge_shortPosId
        end
     
      -- slot function
        local slot = function(isLong, index, amount, spread, cancelDist, canPlace)
          local prefix = isLong and 'L' or 'S'
          local name = prefix .. index
          local cmd = isLong and PlaceGoLongOrder or PlaceGoShortOrder
          local priceBase = isLong
              and cp.bid
              or cp.ask
          local spr = minSpread + spread * index
          local posId = getPositionId(isLong)
          local aep = isLong and aep_l or aep_s
     
          -- if we have average entry price
          if aep > 0 then
            priceBase = isLong
                and Min(aep, priceBase)
                or Max(aep, priceBase)
          end
     
          -- get price
          local price = isLong
              and SubPerc(priceBase, spr)
              or AddPerc(priceBase, spr)
     
          local oid = Load(name..'oid', '') -- order id
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(AddPerc(order.price, spr), priceBase)
                  or Delta(priceBase, SubPerc(order.price, spr))
     
              if delta >= cancelDist then
                CancelOrder(oid)
                LogWarning('Delta cancelled '..name)
              elseif not canPlace then
                CancelOrder(oid)
                LogWarning('Not allowed right now '..name)
              end
            else
              oid = ''
            end
          else
            if canPlace then
              SetFee(Abs(MakersFee())*-1)
              oid = cmd(price, amount, {type = MakerOrCancelOrderType, note = name, timeout = 3600, positionId = posId})
            end
          end
     
          Save(name..'oid', oid)
        end
     
      -- update take-profit
        local updateTakeProfit = function(isLong, entryPrice, targetRoi, cancelDist)
          local prefix = isLong and 'Long' or 'Short'
          local name = prefix .. ' Take-Profit'
          local oid = Load(prefix .. 'tp_oid', '')
          local timer = Load(prefix .. 'tp_timer', 0)
          local posId = getPositionId(isLong)
          local tp_delta = isLong and Delta(entryPrice, cp.bid) or Delta(cp.ask, entryPrice)
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(order.price, cp.close)
                  or Delta(cp.close, order.price)
     
              if delta >= cancelDist then
                CancelOrder(oid)
                LogWarning('Delta cancelled '..name)
              end
            else
              if order.isCancelled then
                timer = 0
              end
     
              oid = ''
            end
          else
            if tp_delta >= targetRoi and Time() >= timer then
              SetFee(tpOrderType == MarketOrderType and TakersFee() or Abs(MakersFee())*-1)
              oid = PlaceExitPositionOrder({type = tpOrderType, note = name, timeout = 3600, positionId = posId})
              timer = Time() + 60 -- 1min
            end
          end
     
          Save(prefix .. 'tp_oid', oid)
          Save(prefix .. 'tp_timer', timer)
        end
     
     
      -- update position size
        local updatePositionManagement = function(isLong, currentSize, sizeLimit, cancelDist)
          local prefix = isLong and 'Long' or 'Short'
          local name = prefix .. ' Size Reduction'
          local oid = Load(prefix .. 'pos_oid', '')
          local posId = getPositionId(isLong)
          local amount = SubPerc(currentSize, 100 - reduceSize) -- take X% of position
          local price = isLong
              and cp.ask
              or cp.bid
          local cmd = isLong
              and PlaceExitLongOrder
              or PlaceExitShortOrder
          local timer = Load(prefix .. 'pos_timer', Time())
     
          if oid != '' then
            local order = OrderContainer(oid)
     
            if order.isOpen then
              local delta = isLong
                  and Delta(order.price, cp.close)
                  or Delta(cp.close, order.price)
     
              if delta >= cancelDist then
                CancelOrder(oid)
                LogWarning('Delta cancelled '..name)
              end
            else
              oid = ''
            end
          else
            if currentSize > sizeLimit and Time() >= timer then
              SetFee(reduceOrderType == MarketOrderType and TakersFee() or Abs(MakersFee())*-1)
              oid = cmd(price, amount, {type = reduceOrderType, note = name, timeout = 6000, positionId = posId})
              timer = Time() + 60 -- 1min
            end
          end
     
          Save(prefix .. 'pos_oid', oid)
          Save(prefix .. 'pos_timer', timer)
        end
     
     
      -- da logica
     
        -- take profit
        if allowLong then
          updateTakeProfit(true, aep_l, takeProfit, slotCancel)
        end
        if allowShort then
          updateTakeProfit(false, aep_s, takeProfit, slotCancel)
        end
     
        -- risk management
        if allowLong then
          updatePositionManagement(true, pamt_l, maxSize, slotCancel)
        end
        if allowShort then
          updatePositionManagement(false, pamt_s, maxSize, slotCancel)
        end
     
     
        -- update slots
        if allowLong then
          for i = 1, slotCount do
            slot(true, i, slotSize, slotSpread, slotCancel, (pamt_s == 0 and signal == 1) or proi_s >= hedgeRoi) -- long slot
          end
        end
     
        if allowShort then
          for i = 1, slotCount do
            slot(false, i, slotSize, slotSpread, slotCancel, (pamt_l == 0 and signal == -1) or proi_l >= hedgeRoi) -- short slot
          end
        end
     
        if aep_l > 0 then
          local posId = getPositionId(true)
          Plot(0, 'AvgEP Long', aep_l, {c=Teal, id=posId, w=2})
        end
     
        if aep_s > 0 then
          local posId = getPositionId(false)
          Plot(0, 'AvgEP Short', aep_s, {c=Purple, id=posId, w=2})
        end
     
     
     
        Save('hedge_longPosId', hedge_longPosId)
        Save('hedge_shortPosId', hedge_shortPosId)
    end
								
						
+2.4%
+1.2%
-0.6%
Unlock the full power of HaasOnline
Start a free trial and enjoy 7-days free. We'll help you make better trades using Market Making Bot.
Start free 7-day trial
May 07, 24, 22:41:48 Bot deactivated
May 07, 24, 22:41:48 Backtest start date: 05/07/24 22:41:48 GTM+0
May 07, 24, 22:41:48 Backtest end date: 05/07/24 22:41:48 GTM+0
May 07, 24, 22:41:48 Backtest took: 00:00:01.6642358ms
May 07, 24, 22:41:48 ----- Custom Report -----
May 07, 24, 22:41:48 Estimated Profit: 0.01 BTC
May 07, 24, 22:41:48 ----- Backtest report BINANCE_BNB_BTC_ -----
May 07, 24, 22:41:48 Gross profits: 100.00000000 BNB
May 07, 24, 22:41:48 Fee costs: 10.00000000 BNB
May 07, 24, 22:41:48 Realized profits: 90.00000000 BNB
May 07, 24, 22:41:48 Return on investment: 10.0000 %
May 07, 24, 22:41:48 Price change: 0.0306%
May 07, 24, 22:41:48 Closed positions: 100x
May 07, 24, 22:41:48 Profitable positions: 60x (90.00%)
May 07, 24, 22:41:48 Losing positions: 40x (10.00%)
May 07, 24, 22:41:48 Average margin: 5.00000000 BNB
May 07, 24, 22:41:48 Average realized profits: 10.00000000 BNB
May 07, 24, 22:41:48 Executed orders: 100x
May 07, 24, 22:41:48 Completed order: 100x
May 07, 24, 22:41:48 Average open time: 10 seconds
May 07, 24, 22:41:48 ----- Performance report BINANCE_BNB_BTC_ -----
May 07, 24, 22:41:48 Max. DrawDown: 1.00% / 40.00000000 BNB
May 07, 24, 22:41:48 Sharpe Ratio: 1.00
May 07, 24, 22:41:48 Sortino Ratio: 1.00
May 07, 24, 22:41:48 Win %: 3.00 %
May 07, 24, 22:41:48 Profit Ratio: 3.00
May 07, 24, 22:41:48 Profit Factor: 3.00
May 07, 24, 22:41:48 CPC Index: 1.00
May 07, 24, 22:41:48 Tail Ratio: 2.00
May 07, 24, 22:41:48 Common Sense Ratio: 2.00
May 07, 24, 22:41:48 Outlier Win Ratio: 3.00
May 07, 24, 22:41:48 Outlier Loss Ratio: 1.00
May 07, 24, 22:41:48 Profit Margin Ratio: 54.00
May 07, 24, 22:41:48 Biggest Win: 100.00000000
May 07, 24, 22:41:48 Biggest Loss: -100.00000000
May 07, 24, 22:41:48 Highest Point in PNL: 5.00000000
May 07, 24, 22:41:48 Lowest Point in PNL: -5.00000000

*These numbers are for illustration only and do not reflect past or future performance.

The Market Making Bot will create two limit orders at a predetermined percentage away from the current price. When both orders are completed, the bot will again create two limit orders. The bot can maintain two sets of orders. A larger spread will result in fewer trades.

Crypto market making is a strategy where you simultaneously place buy and sell orders for a specific asset in order to profit from the bid-ask spread. As a market maker, you can benefit from this trading approach in several ways.

Market making can provide you with consistent profits, as you can earn from the spreads even in a sideways market. This can be a lucrative strategy in the long run, especially if you can manage your risks effectively and execute trades with precision.

Using this strategy improves liquidity in cryptocurrency markets. By placing both buy and sell orders, you contribute to the overall market depth, making it easier for other traders to execute their trades. This increased liquidity can result in tighter spreads and more efficient markets, which can benefit all market participants.

Additionally, as a market maker, you may qualify for fee rebates or discounts offered by some exchanges. These incentives can further enhance your profitability by reducing your overall trading costs.

Trading bots, such as those available on TradeServer Cloud, can play a crucial role in executing market making strategies effectively. These automated tools can monitor the markets in real-time and place buy and sell orders according to your predefined parameters. By utilizing trading bots, you can benefit from speed, accuracy, and consistency, which are essential components of a successful market making strategy.

More Alpha. Less Noise.

See if these exclusive offers can help your trading strategies, claim these rewards while they last!

Promotions offered by third-parties and are subject to availability, terms, and conditions. Other restrictions may apply. Individual results may vary and are not typical.
  • Capitalize on Volatility

    Crypto is notoriously volatile, make them an attractive asset for traders looking to make a quick profit.

  • Create Liquidity

    Market makers help to solve liquidity issues by providing a constant stream of buying and selling orders.

  • Reduce Risk

    Market making can be a lower-risk strategy compared to other strategies because it involves buying and selling at the same time.

Discover alternatives to the Market Making Bot

Simplified Copy Bots

Copy top-tier trade bots and capitalize on their performance.
HaasScript Name Market Runtime ROI
SMMDH v3.3 XRP/USD 179 days +22683.073% Copy Bot
SMMDH v3.3 XRP/USDT 153 days +21841.1672% Copy Bot
SMMD v2.51 BTC/USDT 35 days +11329.7437% Copy Bot
SMMD v2.51 DOGE/USD 300 days +9663.776% Copy Bot
SMMD v2.51 ADA/USD 285 days +7088.395% Copy Bot
Haasonline Original - Market Making Bot BTC/USDT 316 days +5970.9857% Copy Bot
SMMD v2.51 BTC/USD 300 days +5831.3415% Copy Bot
SMMD v2.51 XRP/USDT 300 days +4573.0656% Copy Bot
SMMD v2.51 XRP/USD 285 days +3998.3069% Copy Bot
SMMDH v3.3 BTC/USD 124 days +2568.739% Copy Bot
SMMDH v3.3 BTC/USD 180 days +2326.3045% Copy Bot
Spot-SMMDv2 MTVT/USDT 144 days +1278.0459% Copy Bot
SMMDH v3.3 XRP/USDT 131 days +1267.7955% Copy Bot
[pshaiBot] Simple Market Maker v2.6-c XRP/USDT 187 days +939.2105% Copy Bot
Haasonline Original - Market Making Bot XRP/USDT 317 days +909.5094% Copy Bot
SMMDH v3.3 BTC/USDT 179 days +879.6578% Copy Bot
Haasonline Original - Flash Crash Bot XRP/USDT 317 days +779.7938% Copy Bot
[pshaiBot] Simple Market Maker v2.6-c ARK/USDT 187 days +713.3251% Copy Bot
SMMD v2.51 ETH/USD 300 days +707.065% Copy Bot
Haasonline Original - Flash Crash Bot XRP/USDT 216 days +700.1103% Copy Bot
Haasonline Original - Flash Crash Bot XRP/USDT 211 days +565.2231% Copy Bot
Haasonline Original - Flash Crash Bot DOGE/USDT 317 days +530.6804% Copy Bot
Haasonline Original - Flash Crash Bot ADA/USDT 317 days +468.2344% Copy Bot
Spot-SMMDv2 LINK/USDT 150 days +413.0834% Copy Bot
Haasonline Original - Scalper Bot XRP/USDT 317 days +396.0012% Copy Bot
Haasonline Original - Flash Crash Bot XBT/USDT 313 days +343.8214% Copy Bot
Spot-SMMDv2 XRP/USDT 150 days +306.9311% Copy Bot
Spot-SMMDv2 BTC/USDT 150 days +280.3948% Copy Bot
Haasonline Original - Flash Crash Bot ETH/USDT 317 days +266.0818% Copy Bot
Spot-SMMDv2 B2M/USDT 109 days +224.0408% Copy Bot
Haasonline Original - Flash Crash Bot BTC/USDT 317 days +190.0414% Copy Bot
Spot-SMMDv2 BTC/USDT 150 days +186.0323% Copy Bot
Spot-SMMDv2 ETH/USDT 144 days +129.95% Copy Bot
Haasonline Original - Flash Crash Bot ADA/USDT 216 days +113.2466% Copy Bot
Spot-SMMDv2 ETH/USDT 150 days +97.0914% Copy Bot
Spot-SMMDv2 BTC/USDT 109 days +81.1937% Copy Bot
Haasonline Original - Flash Crash Bot ADA/USDT 211 days +65.7307% Copy Bot
Enhanced RSI bot (spot) BTC/USDT 321 days +28.6975% Copy Bot
Spot-SMMDv2 BTC/USDT 144 days +22.2661% Copy Bot
Spot-SMMDv2 LINK/USDT 144 days +18.0107% Copy Bot
Enhanced RSI bot (spot) ETH/USDT 321 days +17.0245% Copy Bot
Haasonline Original - Flash Crash Bot BTC/USDT 211 days +14.2077% Copy Bot
Haasonline Original - Flash Crash Bot BTC/USDT 211 days +13.5317% Copy Bot
[pshaiBot] Some Trend Trader (STT) DOGE/USDT 305 days +13.1914% Copy Bot
Spot-SMMDv2 XRP/USDT 144 days +12.635% Copy Bot
Haasonline Original - Intelli Alice Bot BTC/USDT 321 days +12.2624% Copy Bot
Simple Zero-lag EMA Bot ETH/USDT 317 days +8.8261% Copy Bot
Simple Zero-lag EMA Bot BTC/USDT 317 days +6.3177% Copy Bot
Haasonline Original - MadHatter Bot BTC/USDT 321 days +5.5713% Copy Bot
* Please note that while our platform provides the tools to replicate the strategies of top-performing trading bots, individual results may vary. Success in financial markets is influenced by a variety of factors, many of which are beyond our control. Past performance is not indicative of future results, and there is always the potential for loss as well as gain. Always conduct your own research and consider your financial circumstances before making investment decisions.
Show more trade bots

Pro Upgrade1. Completely Free2. Unrestricted Trial3.

Embark on your journey to smarter, faster, and more effective trading with HaasOnline. Sign up now for a free trial and gain immediate access to our advanced trading bots.

Are you looking to optimize your trading strategy, reduce risks, or explore automated crypto trading? HaasOnline is your ideal partner. Experience firsthand how our customizable bots can enhance your trading efficiency and accuracy.

Start free 3-day trial ›
1 TradeServer Cloud Pro offers a 3-day trial of our premium subscription.
2 During the 3-day TradeServer Cloud Pro trial you will not be required to pay to access Pro plan features. Subscription automatically renews unless auto-renewal is disabled or if you opt for manual payments.
3 Access to premium features within TradeServer Cloud does not include third-party restrictions or unforeseen issues.