-
General Statistics
-
Total Topics22,102
-
Total Posts92,961
-
Total Members42,483
-
Most Online7,522
10/06/21 10:53
-
-
Posts
-
The US debt ceiling deal has cleared the second and last hurdle, with the Senate passing the bill to raise the ceiling. President Biden can now sign it into law, staving off a US default. Stocks in Asia rallied, and futures are pointing higher in Europe and the US. Meanwhile, a much stronger-than-expected ADP private payrolls report led to a sharp rise in the probability of another rate hike being seen in June, despite the US ISM manufacturing prices paid index coming in lower-than-expected which is supportive of a Fed pause. Softer Eurozone headline and core inflation have seen ECB tightening expectations drop. All eyes are now on today's US Non-Farm Payrolls and hourly earnings data, out at 1.30pm.
-
Good Morning, Please could the [LOUP] Innovator Deepwater Frontier Tech ETF be listed and made available for the ISA tax wrapper, pretty please? Many thanks, Sam
-
By tradinglounge · Posted
Okta Inc., Elliott Wave Technical Analysis Okta Inc., (OKTA:NYSE): Daily Chart, 2 June 23, OKTA Stock Market Analysis: Okta has been moving as expected, looking for further upside into wave {iii} despite the sharp correction we had with yesterday’s session. OKTA Elliott Wave Count: Wave {ii} of 3. OKTA Technical Indicators: Below all averages. OKTA Trading Strategy: Looking for upside resumption into wave {ii}. TradingLounge Analyst: Alessio Barretta Source : Tradinglounge.com get trial here! Okta Inc., OKTA: 1-hour Chart, 2 June 23 Okta Inc., Elliott Wave Technical Analysis OKTA Stock Market Analysis: Looking for the correction in wave {ii} to be nearly completed, as we might resume lower into wave (c) to complete the correction, knowing we are very close to invalidation level. Should we break the red line we could then have been in a flat correction in wave 2. OKTA Elliott Wave count: Wave (c) of {ii}. OKTA Technical Indicators: Below all averages. OKTA Trading Strategy: Looking for support at 66.7 to hold.
-
Question
lukeTradingLearner
Hi im new to ig and automation . im interested in the trading API and making automated scripts. I am interested in making sculping scripts. I have a few questions that i cant find.
I am working on the foundation to all my trading strategies. i want to download historical data and store it to a csv file. every 5 min it will add new data to the end of the file. also it checks if market is open so does not waste api requests. Im very new to coding and automation and there hardly anything online. if anyone has suggestions/tips to deploy trading strategies would be very helpful.
Here is my foundation of my script that i made so far so you can see my approach of using the api:
import requests
import pandas as pd
import json
from datetime import datetime
import time
from datetime import time as dt_time
api_key = 'api_key'
ig_username = 'usename'
ig_password = 'password'
base_url = 'https://demo-api.ig.com/gateway/deal' #change for live
headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Accept': 'application/json; charset=UTF-8',
'X-IG-API-KEY': api_key,
'Version': '2'
}
def authenticate():
data = {
"identifier": ig_username,
"password": ig_password
}
response = requests.post(f"{base_url}/session", headers=headers, json=data)
if response.status_code == 200:
if 'CST' in response.headers and 'X-SECURITY-TOKEN' in response.headers:
return response.headers['CST'], response.headers['X-SECURITY-TOKEN']
else:
raise ValueError(f"Error: 'CST' or 'X-SECURITY-TOKEN' not found in response headers. Response: {response.text}")
else:
raise ValueError(f"Error {response.status_code}: {response.text}")
def get_eur_usd_data(cst, x_security_token, start_date, end_date):
headers_with_token = headers.copy()
headers_with_token['CST'] = cst
headers_with_token['X-SECURITY-TOKEN'] = x_security_token
resolution = 'MINUTE_5'
params = {
'resolution': resolution,
'from': start_date,
'to': end_date
}
request_url = f"{base_url}/prices/CS.D.EURUSD.MINI.IP"
response = requests.get(f"{base_url}/prices/CS.D.EURUSD.MINI.IP/"+resolution+"/"+start_date+"/"+end_date,headers=headers_with_token)
if response.status_code == 200:
data = json.loads(response.text)
return data['prices']
else:
raise ValueError(f"Error {response.status_code}: {response.text}")
def is_market_open_manual():
# Define market hours (e.g., 5 PM Sunday to 5 PM Friday EST)
open_time = dt_time(17, 0, 0)
close_time = dt_time(17, 0, 0)
start_of_week = 6 # Sunday
end_of_week = 4 # Friday
now = datetime.utcnow()
now_time = now.time()
now_weekday = now.weekday()
if start_of_week <= now_weekday <= end_of_week:
if start_of_week == now_weekday:
return now_time >= open_time
elif end_of_week == now_weekday:
return now_time < close_time
else:
return True
else:
return False
def is_market_open(cst, x_security_token): #Note uses api request have not uses yet
headers_with_token = headers.copy()
headers_with_token['CST'] = cst
headers_with_token['X-SECURITY-TOKEN'] = x_security_token
epic = 'CS.D.EURUSD.MINI.IP'
request_url = f"{base_url}/markets/{epic}"
response = requests.get(request_url, headers=headers_with_token)
if response.status_code == 200:
data = json.loads(response.text)
return data['snapshot']['marketStatus'] == 'TRADEABLE'
else:
raise ValueError(f"Error {response.status_code}: {response.text}")
def update_csv(filename, data):
df = pd.DataFrame(data)
df['datetime'] = pd.to_datetime(df['snapshotTime'], unit='ms')
df.set_index('datetime', inplace=True)
if not df.empty:
try:
existing_df = pd.read_csv(filename, index_col='datetime', parse_dates=True)
df = existing_df.append(df)
df.to_csv(filename)
except FileNotFoundError:
df.to_csv(filename)
def main():
filename = 'eur_usd_5min_data.csv'
retry_limit = 3
retry_delay = 60 # Time in seconds between retries
while True:
try:
cst, x_security_token = authenticate()
if is_market_open_manual():
try:
existing_df = pd.read_csv(filename, index_col='datetime', parse_dates=True)
start_date = existing_df.index[-1].strftime('%Y-%m-%d %H:%M:%S')
except FileNotFoundError:
start_date = '2023-03-01 00:00:00'
end_date = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
data = get_eur_usd_data(cst, x_security_token, start_date, end_date)
update_csv(filename, data)
print("Data updated.")
else:
print("Market is closed, no data is retrieved.")
# Sleep for 5 minutes (300 seconds)
time.sleep(300)
except (ValueError, requests.exceptions.RequestException) as e:
print(f"An error occurred: {e}")
retry_limit -= 1
if retry_limit > 0:
print(f"Retrying... {retry_limit} attempts remaining.")
time.sleep(retry_delay)
else:
print("Retry limit reached. Exiting.")
break
if __name__ == '__main__':
main()
Link to comment
4 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now