Update bots/httpTest.py
This commit is contained in:
112
bots/httpTest.py
112
bots/httpTest.py
@@ -2,6 +2,18 @@ import requests
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
BASE_URL = 'http://localhost:5000'
|
BASE_URL = 'http://localhost:5000'
|
||||||
|
log_file = "tradeLog.txt"
|
||||||
|
dayRun = 100
|
||||||
|
|
||||||
|
# Create a session object to maintain cookies/session across requests
|
||||||
|
session = requests.Session()
|
||||||
|
|
||||||
|
def log(message):
|
||||||
|
"""Print to console and write to file"""
|
||||||
|
print(message)
|
||||||
|
if log_file:
|
||||||
|
log_file.write(message + '\n')
|
||||||
|
log_file.flush()
|
||||||
|
|
||||||
|
|
||||||
def find_cheapest_stock(stocks):
|
def find_cheapest_stock(stocks):
|
||||||
@@ -17,94 +29,132 @@ def get_holding_amount(holdings, stock_id):
|
|||||||
|
|
||||||
|
|
||||||
def wait_for_server():
|
def wait_for_server():
|
||||||
for i in range(10):
|
for i in range(30):
|
||||||
try:
|
try:
|
||||||
requests.get(f'{BASE_URL}/api/game-state', timeout=1)
|
session.get(f'{BASE_URL}/api/game-state', timeout=1)
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
print(f"Waiting for server... ({i+1}/10)")
|
log(f"Waiting for server... ({i+1}/10)")
|
||||||
time.sleep(1)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
global log_file
|
||||||
|
log_file = open('tradeLog.txt', 'w')
|
||||||
|
|
||||||
if not wait_for_server():
|
if not wait_for_server():
|
||||||
print("Server not available!")
|
log("Server not available!")
|
||||||
|
log_file.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
response = session.post(f'{BASE_URL}/api/start', json={'days': dayRun})
|
||||||
|
if response.status_code != 200:
|
||||||
|
log(f"Error starting game: {response.status_code} - {response.text}")
|
||||||
|
log_file.close()
|
||||||
return
|
return
|
||||||
|
|
||||||
response = requests.post(f'{BASE_URL}/api/start', json={'days': 100})
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
print("Game started!")
|
log("Game started!")
|
||||||
print(f"Balance: ${data['balance']}")
|
log(f"Balance: ${data['balance']}")
|
||||||
|
|
||||||
cheapest = find_cheapest_stock(data['stocks'])
|
cheapest = find_cheapest_stock(data['stocks'])
|
||||||
print(f"\nCheapest stock: {cheapest['name']} at ${cheapest['price']}")
|
log(f"\nCheapest stock: {cheapest['name']} at ${cheapest['price']}")
|
||||||
|
|
||||||
shares_to_buy = data['balance'] // cheapest['price']
|
shares_to_buy = data['balance'] // cheapest['price']
|
||||||
if shares_to_buy > 0:
|
if shares_to_buy > 0:
|
||||||
response = requests.post(f'{BASE_URL}/api/buy',
|
response = session.post(f'{BASE_URL}/api/buy',
|
||||||
json={
|
json={
|
||||||
'stock_id': cheapest['id'],
|
'stock_id': cheapest['id'],
|
||||||
'amount': shares_to_buy
|
'amount': shares_to_buy
|
||||||
})
|
})
|
||||||
|
if response.status_code != 200:
|
||||||
|
log(f"Error buying stock: {response.status_code} - {response.text}")
|
||||||
|
log_file.close()
|
||||||
|
return
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
print(f"Bought {shares_to_buy} shares of {cheapest['name']}")
|
log(f"Bought {shares_to_buy} shares of {cheapest['name']}")
|
||||||
print(f"Balance: ${data['balance']}")
|
#log(f"Balance: ${data['balance']}")
|
||||||
|
|
||||||
current_stock_id = cheapest['id']
|
current_stock_id = cheapest['id']
|
||||||
|
|
||||||
while data['daysleft'] > 0:
|
while data['daysleft'] > 0:
|
||||||
response = requests.post(f'{BASE_URL}/api/next-day')
|
response = session.post(f'{BASE_URL}/api/next-day')
|
||||||
|
if response.status_code != 200:
|
||||||
|
log(f"Error on next day: {response.status_code} - {response.text}")
|
||||||
|
break
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
print(f"\n--- Day {data['day']} ---")
|
log(f"\n--- Day {data['day']} ---")
|
||||||
|
|
||||||
new_cheapest = find_cheapest_stock(data['stocks'])
|
new_cheapest = find_cheapest_stock(data['stocks'])
|
||||||
print(f"Cheapest stock now: {new_cheapest['name']} at ${new_cheapest['price']}")
|
log(f"Cheapest stock now: {new_cheapest['name']} at ${new_cheapest['price']}")
|
||||||
|
|
||||||
if new_cheapest['id'] != current_stock_id:
|
if new_cheapest['id'] != current_stock_id:
|
||||||
print(f"Different stock is cheaper! Switching...")
|
log(f"Different stock is cheaper! Switching...")
|
||||||
|
|
||||||
current_holdings = get_holding_amount(data['holdings'], current_stock_id)
|
current_holdings = get_holding_amount(data['holdings'], current_stock_id)
|
||||||
if current_holdings > 0:
|
if current_holdings > 0:
|
||||||
response = requests.post(f'{BASE_URL}/api/sell',
|
response = session.post(f'{BASE_URL}/api/sell',
|
||||||
json={
|
json={
|
||||||
'stock_id': current_stock_id,
|
'stock_id': current_stock_id,
|
||||||
'amount': current_holdings
|
'amount': current_holdings
|
||||||
})
|
})
|
||||||
|
if response.status_code != 200:
|
||||||
|
log(f"Error selling stock: {response.status_code} - {response.text}")
|
||||||
|
break
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
print(f"Sold {current_holdings} shares")
|
log(f"Sold {current_holdings} shares")
|
||||||
print(f"Balance: ${data['balance']}")
|
log(f"Balance: ${data['balance']}")
|
||||||
|
|
||||||
shares_to_buy = data['balance'] // new_cheapest['price']
|
shares_to_buy = data['balance'] // new_cheapest['price']
|
||||||
if shares_to_buy > 0:
|
if shares_to_buy > 0:
|
||||||
response = requests.post(f'{BASE_URL}/api/buy',
|
response = session.post(f'{BASE_URL}/api/buy',
|
||||||
json={
|
json={
|
||||||
'stock_id': new_cheapest['id'],
|
'stock_id': new_cheapest['id'],
|
||||||
'amount': shares_to_buy
|
'amount': shares_to_buy
|
||||||
})
|
})
|
||||||
|
if response.status_code != 200:
|
||||||
|
log(f"Error buying stock: {response.status_code} - {response.text}")
|
||||||
|
break
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
print(f"Bought {shares_to_buy} shares of {new_cheapest['name']}")
|
log(f"Bought {shares_to_buy} shares of {new_cheapest['name']}")
|
||||||
print(f"Balance: ${data['balance']}")
|
|
||||||
|
|
||||||
current_stock_id = new_cheapest['id']
|
current_stock_id = new_cheapest['id']
|
||||||
else:
|
else:
|
||||||
print("Same stock is still cheapest, holding position.")
|
log("Same stock is still cheapest, holding position.")
|
||||||
|
|
||||||
print(f"\n=== GAME OVER - SELLING ALL ===")
|
log(f"\n=== GAME OVER - SELLING ALL ===")
|
||||||
for h in data['holdings']:
|
for h in data['holdings']:
|
||||||
if h['amount'] > 0:
|
if h['amount'] > 0:
|
||||||
response = requests.post(f'{BASE_URL}/api/sell',
|
response = session.post(f'{BASE_URL}/api/sell',
|
||||||
json={
|
json={
|
||||||
'stock_id': h['id'],
|
'stock_id': h['id'],
|
||||||
'amount': h['amount']
|
'amount': h['amount']
|
||||||
})
|
})
|
||||||
data = response.json()
|
if response.status_code != 200:
|
||||||
print(f"Sold {h['amount']} shares of {h['name']}")
|
log(f"Error selling: {response.status_code} - {response.text}")
|
||||||
|
continue
|
||||||
|
|
||||||
print(f"\n=== FINAL RESULTS ===")
|
data = response.json()
|
||||||
print(f"Starting balance: $1000")
|
log(f"Sold {h['amount']} shares of {h['name']}")
|
||||||
print(f"Ending balance: ${data['balance']}")
|
|
||||||
print(f"Profit: ${data['balance'] - 1000}")
|
log(f"\n=== FINAL RESULTS ===")
|
||||||
|
log(f"Starting balance: $1000")
|
||||||
|
log(f"Ending balance: ${data['balance']}")
|
||||||
|
log(f"Profit: ${data['balance'] - 1000}")
|
||||||
|
response = session.post(f'{BASE_URL}/api/save-score',
|
||||||
|
json={
|
||||||
|
'name': 'AutoTrader',
|
||||||
|
})
|
||||||
|
if response.status_code == 200:
|
||||||
|
log("Score saved successfully!")
|
||||||
|
else:
|
||||||
|
log(f"Error saving score: {response.status_code}")
|
||||||
|
|
||||||
|
log_file.close()
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user