Python Integration
Ensure you use your personal API key. You can set your API key in the cycle.tools console.
Replace YOUR_API_KEY in the examples with your personal key.
CycleExplorer Endpoint
Use this endpoint to post raw data series array to the endpoint. The example will pull eod data from yahoo api first and send to the cycle analsis api to get current dominant cycle:
import requests
import json
import yfinance as yf
#put your cycle.tools API key
cycleAPIkey = 'YOUR_API_KEY'
#set cycle.tools API url endpoint
url = f"https://api.cycle.tools/api/cycles/CycleExplorer?dynamicInSampleMethod=true&api_key={cycleAPIkey}";
# set the yahoo ticker symbol, eg SP500=^GSPC
tickerSymbol = "^GSPC";
#get data on this ticker
tickerData = yf.Ticker(tickerSymbol)
#get the historical prices for this ticker
tickerDf = tickerData.history(interval="1d", period="5y")
#get close data as json doubele array
jsondata = tickerDf['Close'].to_json(orient='records')
#call CycleExplorer endpoint to get current dominant cycle
r= requests.post(url, data=jsondata,
headers={'Content-Type':'application/json'})
#get the dominant cycle return data
dominantCycle = r.json()
dominantCycleLength = dominantCycle['length']
#print the current dominant cycle length
print(f"Dominant Cycle Length: {dominantCycleLength}")
#print the json the results
print()
print(json.dumps(r.json(), indent=4, sort_keys=True))
Example output:
Dominant Cycle Length: 165.0
JSON response:
{
"amplitude": 146.00174004966559,
"analysisEndDate": "2020-05-03T17:02:20.6771012+00:00",
"analysisStartDate": "0001-01-01T00:00:00",
"barsAvailable": 0,
"barsused": 750,
"currentPrice": 2830.71,
"cycleProfitability": 0.75,
"lastlow": -5.6668009766674174,
"lasttop": -88.16680097666742,
"length": 165.0,
"license": "api.cycle.tools :You agree to the API usage terms and conditions from host ",
"minbaroffset": 170.66680097666742,
"nextlow": 159.33319902333258,
"nexttop": 76.83319902333258,
"phase": -1.3169251392646713,
"phase_score": -100,
"phase_status": "BOTTOM_Departure",
"phasingScore": 135,
"statusCode": null,
"symbol": "manual",
"timeSeries": []
}
MarketCycles Endpoint
Use this endpoint for known symbols IDs. The example will use the integrated crypto datafeed to get the current dominant cycle in Bitcoin:
import requests
import json
#put your cycle.tools API key
cycleAPIkey = 'YOUR_API_KEY'
symbol="BTC" # Bitcoin
market="CDS" # Crypto
#set cycle.tools API url endpoint
url = f"https://api.cycle.tools/api/cycles/MarketCycles/{symbol}?marketType={market}&api_key={cycleAPIkey}"
#call MarketCycles endpoint to get current dominant cycle
r= requests.get(url)
#get the dominant cycle return data
marketCycle = r.json()
marketCycleLength = marketCycle['length']
#print the current dominant cycle length
print(f"Dominant Cycle Length: {marketCycleLength}")
#print the json the results
print()
print(json.dumps(r.json(), indent=4, sort_keys=True))
Example output:
Dominant Cycle Length: 39.0
JSON response:
{
"amplitude": 418.6291962393411,
"analysisEndDate": "2020-05-01T00:00:00",
"analysisStartDate": "2016-11-28T00:00:00Z",
"barsAvailable": 750,
"barsused": 750,
"currentPrice": 8728.58,
"cycleProfitability": 0.7105263157894737,
"lastlow": -7.758826601781372,
"lasttop": -27.258826601781372,
"length": 39.0,
"license": "****** : You agree to the API usage terms and conditions from api.cycle.tools",
"minbaroffset": 46.75882660178137,
"nextlow": 31.241173398218628,
"nexttop": 11.741173398218628,
"phase": -0.15968528545011673,
"phase_score": 40,
"phase_status": "Uptrend_Neutral",
"phasingScore": 0,
"statusCode": "OK",
"symbol": "BTC",
"timeSeries": []
}