import ccxt
import pandas as pd
import time
from datetime import datetime
Binance API bağlantısı
exchange = ccxt.binance({
‘apiKey’: ‘xxxx’,
‘secret’: ‘xxxxx’,
‘enableRateLimit’: True,
})
Parametreler
symbol = ‘PEPE/USDT’
timeframe = ‘1m’
rsi_period = 14 # RSI periyodu
order_amount = 10 # 10 USDT’lik işlem yapacak
stop_loss_pct = 0.99 # %1 stop-loss
check_interval = 20 # 20 saniyede bir kontrol
RSI hesaplama
def calculate_rsi(df, period):
delta = df[‘close’].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
RSI Divergence tespiti
def detect_rsi_divergence(df):
df[‘rsi’] = calculate_rsi(df, rsi_period)
df[‘price_diff’] = df[‘close’].diff()
df[‘rsi_diff’] = df[‘rsi’].diff()
bullish_divergence = (df[‘price_diff’] < 0) & (df[‘rsi_diff’] > 0)
bearish_divergence = (df[‘price_diff’] > 0) & (df[‘rsi_diff’] < 0)
return bullish_divergence.iloc[-14], bearish_divergence.iloc[-14]
Bakiye kontrolü
def check_balance():
balance = exchange.fetch_balance()
return balance[‘total’].get(‘USDT’, 0), balance[‘total’].get(symbol.split(‘/’)[0], 0)
Alım işlemi
def place_buy_order():
usdt_balance, _ = check_balance()
if usdt_balance < order_amount:
print(“Yeterli bakiye yok.”)
return None, None
ticker = exchange.fetch_ticker(symbol)
price = ticker[‘last’]
amount = order_amount / price
order = exchange.create_market_buy_order(symbol, amount)
print(f"Alım yapıldı: {order}")
return order, price
Stop Loss emri girme
def place_stop_loss(order, buy_price, stop_loss_pct):
stop_price = buy_price * stop_loss_pct
try:
stop_order = exchange.create_order(
symbol,
‘stop_limit’,
‘sell’,
order[‘amount’],
stop_price
)
print(f"Stop emri girildi: {stop_order}“)
return stop_order
except Exception as e:
print(f"Stop emri girilemedi: {e}”)
return None
Satış işlemi (mevcut tüm bakiyeyi sat)
def place_sell_order(stop_order):
try:
_, asset_balance = check_balance()
if asset_balance > 0:
sell_order = exchange.create_market_sell_order(symbol, asset_balance)
print(f"Satış yapıldı: {sell_order}“)
if stop_order:
exchange.cancel_order(stop_order[‘id’], symbol)
print(“Stop emri iptal edildi.”)
return sell_order
else:
print(“Satılacak varlık bulunamadı.”)
return None
except Exception as e:
print(f"Satış işlemi başarısız: {e}”)
return None
Ana döngü
def main_loop():
stop_order = None
order = None
buy_price = None
while True:
try:
ohlcv = exchange.fetch_ohlcv(symbol, timeframe)
df = pd.DataFrame(ohlcv, columns=[‘timestamp’, ‘open’, ‘high’, ‘low’, ‘close’, ‘volume’])
bullish_divergence, bearish_divergence = detect_rsi_divergence(df)
if bullish_divergence and order is None:
print(f"{datetime.now()} - Alım sinyali tespit edildi.")
order, buy_price = place_buy_order()
if order and buy_price:
stop_order = place_stop_loss(order, buy_price, stop_loss_pct)
if bearish_divergence and order:
print(f"{datetime.now()} - Satış sinyali tespit edildi.")
place_sell_order(stop_order)
order = None
stop_order = None
buy_price = None
time.sleep(check_interval)
except KeyboardInterrupt:
print("Program manuel olarak durduruldu.")
break
except Exception as e:
print(f"Hata oluştu: {e}")
time.sleep(check_interval)
if name == “main”:
main_loop()