-
Notifications
You must be signed in to change notification settings - Fork 1
/
Trigger on time (seconds)
41 lines (37 loc) · 2.02 KB
/
Trigger on time (seconds)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import ccxt import time
class TimeBasedMarketMakingBot: def init(self, exchanges, trading_pairs, spread=0.01, interval=10): self.exchanges = {name: ccxt.getattribute(name)() for name in exchanges} self.trading_pairs = trading_pairs self.spread = spread self.interval = interval self.last_trigger_time = time.time()
def fetch_prices(self):
prices = {}
for name, exchange in self.exchanges.items():
prices[name] = {}
for pair in self.trading_pairs:
try:
ticker = exchange.fetch_ticker(pair)
prices[name][pair] = ticker['last']
except Exception as e:
print(f"Error fetching price from {name} for {pair}: {e}")
return prices
def place_orders(self, prices):
for name, pairs in prices.items():
exchange = self.exchanges[name]
for pair, price in pairs.items():
try:
# Calculate buy and sell prices based on the spread
buy_price = price * (1 - self.spread)
sell_price = price * (1 + self.spread)
# Place buy and sell orders
exchange.create_limit_buy_order(pair, 1, buy_price)
exchange.create_limit_sell_order(pair, 1, sell_price)
print(f"Placed orders on {name} for {pair}: Buy at {buy_price}, Sell at {sell_price}")
except Exception as e:
print(f"Error placing orders on {name} for {pair}: {e}")
def run(self):
while True:
current_time = time.time()
if current_time - self.last_trigger_time >= self.interval:
prices = self.fetch_prices()
if prices:
self.place_orders(prices)
self.last_trigger_time = current_time # Update last trigger time
time.sleep(1) # Sleep briefly to avoid busy waiting
if name == "main": exchanges = ['binance', 'kraken'] # List of exchanges to support trading_pairs = ['BTC/USDT', 'ETH/USDT', 'LTC/USDT'] # List of trading pairs bot = TimeBasedMarketMakingBot(exchanges, trading_pairs) bot.run()