Alım yapıyor stop emri giremiyorum

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()

Stop emri verirken order ve buy_price ı kontrol ediyorsun. Bunları kontrol etmen gerekiyor ilk olarak koşullar sağlanıyor mu diye.

Bunlar doğru geliyorsa ve stop emri veremiyorsan exchange.create_order() fonksiyonunu kontrol etmen gerekiyor.

Bu ikisini kontrol ettiğinde sanırım sonuca ulaşırsın