Crypto bot - $30 max project budget

Job ID: 40309678

Budget: £10 – £30 GBP

Fee Structure: Leveraging MEXC’s 0% spot fee promotion for both Maker and Taker orders.
Infrastructure: Python-based bot using the CCXT library hosted on a Tokyo-based AWS/cloud server for minimum latency to MEXC's matching engine.

Trade Execution Logic
Entry (The Breakout):
Order Type: Stop-Limit Buy.
Trigger: Price rises +4 points from start (e.g., ).
Price Guarantee: Limit price is set exactly at the trigger () to avoid buying higher.
Monitoring & Safety:
Gap Protection: If the market price exceeds the limit without filling, the bot cancels the order immediately to avoid "chasing."
Partial Fill Handling: If only a portion fills, the bot cancels the remainder and adjusts the exit size to match the filled amount.
Exit (The Scalp):
Take Profit: Limit Sell at +2 points from entry ().
Stop Loss: Stop-Limit Sell at -2 points from entry ().


Technical Implementation
Connection: Use MEXC WebSockets for real-time price streaming instead of REST API polling to reduce latency.
Rate Limits: Ensure the bot stays within MEXC's limit of 5 orders per second to avoid API bans.
Order Sync: Use the post Only parameter for Limit Sells to ensure they stay on the book as Maker orders, further protecting against unexpected fee changes.

import ccxt
import time

exchange = ccxt.mexc({'apiKey': 'YOUR_KEY', 'secret': 'YOUR_SECRET'})
symbol = 'XRP/USDT'
tick = 0.0001 # 1 point

def run_scalp():
# 1. Place Stop-Limit Entry (+4 points)
params = {'stopPrice': trigger_price, 'type': 'STOP_LIMIT'}
order = exchange.create_order(symbol, 'limit', 'buy', 680, trigger_price, params)

# 2. Gap & Partial Fill Monitor
while True:
order_info = exchange.fetch_order(order['id'], symbol)
current_price = exchange.fetch_ticker(symbol)['last']

if order_info['status'] == 'closed':
place_exits(order_info['amount'], order_info['price'])
break

# If price gaps +2 points past limit, cancel
if current_price > (trigger_price + (2 * tick)):
exchange.cancel_order(order['id'], symbol)
if order_info['filled'] > 0:
place_exits(order_info['filled'], trigger_price)
break
time.sleep(0.1) # Fast Tokyo polling



CAN ONLY PAY 30 USD.