-
Notifications
You must be signed in to change notification settings - Fork 317
Description
'import time\nimport requests\nimport pandas as pd\nimport numpy as np\n\n# Replace with your Deriv API credentials\nAPI_URL = "https://api.deriv.com/api"\nAPI_TOKEN = "ewul"\nACCOUNT_ID = "***********"\n\n# Global variables for trading parameters\nSYMBOL = "R_100" # Example: Volatility 100 Index\nTRADE_AMOUNT = 10 # Trade amount in USD\nSTOP_LOSS = 10 # Stop loss in pips\nTAKE_PROFIT = 20 # Take profit in pips\nFAST_MA_PERIOD = 10 # Fast moving average period\nSLOW_MA_PERIOD = 20 # Slow moving average period\n\n# Function to fetch historical data\ndef get_historical_data(symbol, count=100):\n endpoint = f"{API_URL}/ticks_history"\n params = {\n "ticks_history": symbol,\n "count": count,\n "end": "latest",\n "style": "candles",\n "granularity": 60, # 1-minute candles\n }\n headers = {\n "Authorization": f"Bearer {***********ewul}",\n "Content-Type": "application/json",\n }\n response = requests.post(endpoint, json=params, headers=headers)\n data = response.json()\n if "candles" in data["history"]:\n df = pd.DataFrame(data["history"]["candles"])\n df["epoch"] = pd.to_datetime(df["epoch"], unit="s")\n df.set_index("epoch", inplace=True)\n return df\n else:\n raise Exception("Failed to fetch historical data")\n\n# Function to calculate moving averages\ndef calculate_moving_averages(df):\n df["fast_ma"] = df["close"].rolling(window=FAST_MA_PERIOD).mean()\n df["slow_ma"] = df["close"].rolling(window=SLOW_MA_PERIOD).mean()\n return df\n\n# Function to detect trading signals\ndef detect_signals(df):\n signals = []\n for i in range(1, len(df)):\n if df["fast_ma"].iloc[i] > df["slow_ma"].iloc[i] and df["fast_ma"].iloc[i - 1] <= df["slow_ma"].iloc[i - 1]:\n signals.append("buy")\n elif df["fast_ma"].iloc[i] < df["slow_ma"].iloc[i] and df["fast_ma"].iloc[i - 1] >= df["slow_ma"].iloc[i - 1]:\n signals.append("sell")\n else:\n signals.append("hold")\n df["signal"] = signals\n return df\n\n# Function to place a trade\ndef place_trade(signal):\n endpoint = f"{API_URL}/buy"\n params = {\n "buy": TRADE_AMOUNT,\n "contract_type": "CALL" if signal == "buy" else "PUT",\n "currency": "USD",\n "symbol": SYMBOL,\n "duration": 60, # 1 minute\n "duration_unit": "s",\n "stop_loss": STOP_LOSS,\n "take_profit": TAKE_PROFIT,\n }\n headers = {\n "Authorization": f"Bearer {***********ewul}",\n "Content-Type": "application/json",\n }\n response = requests.post(endpoint, json=params, headers=headers)\n if response.status_code == 200:\n print(f"Trade placed: {signal}")\n else:\n print(f"Failed to place trade: {response.text}")\n\n# Main trading loop\ndef trading_bot():\n while True:\n try:\n # Fetch historical data\n df = get_historical_data(SYMBOL)\n df = calculate_moving_averages(df)\n df = detect_signals(df)\n\n # Get the latest signal\n latest_signal = df["signal"].iloc[-1]\n\n # Place a trade based on the signal\n if latest_signal in ["buy", "sell"]:\n place_trade(latest_signal)\n\n # Wait before the next iteration\n time.sleep(60) # Wait for 1 minute\n except Exception as e:\n print(f"Error: {e}")\n time.sleep(60) # Wait before retrying\n\n# Run the trading bot'