import bybit
import pandas as pd
import time
import utils

# APIキーとシークレットの設定
# api_key = 'YOUR_API_KEY'
# api_secret = 'YOUR_API_SECRET'

config = utils.get_config()
api_key = config['bybit_api_key']
api_secret = config['bybit_api_secret']

# Bybitのクライアントを作成
client = bybit.bybit(test=False, api_key=api_key, api_secret=api_secret)

# テクニカル指標の計算
def calculate_indicators(data):
    data['SMA_50'] = data['close'].rolling(window=50).mean()
    data['SMA_200'] = data['close'].rolling(window=200).mean()
    return data

# 市場データの取得関数
def fetch_market_data(symbol, interval='1'):
    response = client.Kline.Kline_get(symbol=symbol, interval=interval).result()
    data = response[0]['result']
    df = pd.DataFrame(data)
    df['open_time'] = pd.to_datetime(df['open_time'], unit='s')
    df['close'] = df['close'].astype(float)
    return df

# 注文を作成する関数
def create_order(symbol, side, qty):
    client.Order.Order_new(symbol=symbol, side=side, order_type='Market', qty=qty, time_in_force='GoodTillCancel').result()

# ボットの主なループ
while True:
    # 市場データの取得
    symbol = 'BTCUSD'
    df = fetch_market_data(symbol)

    # テクニカル指標の計算
    df = calculate_indicators(df)

    # 取引戦略の適用
    if df['SMA_50'].iloc[-1] > df['SMA_200'].iloc[-1]:
        # 買いシグナル
        create_order(symbol, 'Buy', 1)
        print(f"Buy Order Executed at {df['close'].iloc[-1]}")
    elif df['SMA_50'].iloc[-1] < df['SMA_200'].iloc[-1]:
        # 売りシグナル
        create_order(symbol, 'Sell', 1)
        print(f"Sell Order Executed at {df['close'].iloc[-1]}")

    # 一定時間待機
    time.sleep(60)
