import ccxt
import datetime
import time
# Настройка API
api_key = 'your_api_key'
api_secret = 'your_api_secret'
client = ccxt.dydx({'apiKey': api_key, 'secret': api_secret})
def monitor_funding_rate():
# Получение текущей ставки финансирования
funding_rate = client.fetchFundingRate('BTC/USD')
return funding_rate
def exit_position(symbol):
# Закрытие позиций
positions = client.private_get_positions({'market': symbol, 'status': 'open'})
for position in positions:
amount = position['size']
direction = position['side']
client.private_post_order({'market': symbol, 'side': 'sell' if direction == 'buy' else 'buy', 'size': amount})
def calculate_reentry_price(current_price, direction):
# Расчет точки повторного входа
if direction == 'long':
return current_price * 0.99
else:
return current_price * 1.01
def reenter_position(symbol, price, direction):
# Исполнение повторного входа
client.private_post_order({'market': symbol, 'side': direction, 'price': price, 'size': 1})
def log_action(action):
with open('trading_log.txt', 'a') as log_file:
log_file.write(f"{datetime.datetime.now()} - {action}\n")
try:
while True:
# Задача запуска каждые 57 минут
if datetime.datetime.now().minute == 57:
symbol = 'BTC/USD'
funding_rate = monitor_funding_rate()
log_action(f"Funding Rate: {funding_rate}")
# Стратегия выхода
exit_position(symbol)
log_action(f"Exited position for {symbol}")
# Небольшая пауза и повторный вход
time.sleep(180)
current_price = client.fetchTicker(symbol)['last']
direction = 'buy' # или sell, в зависимости от стратегии
reentry_price = calculate_reentry_price(current_price, direction)
reenter_position(symbol, reentry_price, direction)
log_action(f"Re-entered position for {symbol} at price {reentry_price}")
# Сон на короткий промежуток времени
time.sleep(10)
except Exception as e:
log_action(f"Error: {str(e)}")