improve getting data from alpaca
This commit is contained in:
@@ -33,6 +33,7 @@ secrets.properties
|
||||
captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
setAlpacaEnv.sh
|
||||
|
||||
# Databases (Local/Testing)
|
||||
*.db
|
||||
|
||||
@@ -36,7 +36,7 @@ dependencies {
|
||||
}
|
||||
|
||||
allprojects {
|
||||
version = "1.0.1"
|
||||
version = "1.1.0"
|
||||
}
|
||||
|
||||
tasks.register<Exec>("serverDockerBuild") {
|
||||
|
||||
@@ -13,13 +13,14 @@ import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
@Serializable
|
||||
data class AlpacaAssetBar(
|
||||
val c: Float
|
||||
data class AlpacaQuote(
|
||||
val ap: Float,
|
||||
val bp: Float,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class AlpacaBars(
|
||||
val bars: Map<String, AlpacaAssetBar>
|
||||
data class AlpacaSnapshot(
|
||||
val latestQuote: AlpacaQuote
|
||||
)
|
||||
|
||||
@Serializable
|
||||
@@ -87,17 +88,18 @@ class AlpacaAPI(val apiKey: String, val apiSecret: String) {
|
||||
if (assets.isEmpty()) {
|
||||
return Result.success(emptyMap())
|
||||
}
|
||||
val result = safeApiCall<AlpacaBars>(
|
||||
"https://data.alpaca.markets/v2/stocks/bars/latest",
|
||||
val result = safeApiCall<Map<String, AlpacaSnapshot>>(
|
||||
"https://data.alpaca.markets/v2/stocks/snapshots",
|
||||
mapOf(
|
||||
"symbols" to assets.joinToString(",") { it.symbol },
|
||||
"symbols" to assets.joinToString(",") { it.symbol.trim().uppercase() },
|
||||
"feed" to "delayed_sip"
|
||||
)
|
||||
)
|
||||
return result.map { bars ->
|
||||
bars.bars.mapNotNull { (key, value) ->
|
||||
val asset = assets.find { it.symbol == key } ?: return@mapNotNull null
|
||||
asset to Cash.fromFloat(value.c)
|
||||
return result.map { data ->
|
||||
data.mapNotNull { (assetSymbol, snapshot) ->
|
||||
val asset = assets.find { it.symbol.equals(assetSymbol, ignoreCase = true) } ?: return@mapNotNull null
|
||||
println("${snapshot.latestQuote.ap} + ${snapshot.latestQuote.bp}")
|
||||
asset to Cash.fromFloat((snapshot.latestQuote.ap + snapshot.latestQuote.bp) / 2)
|
||||
}.toMap()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,15 @@ fun Application.module() {
|
||||
}
|
||||
}
|
||||
launch {
|
||||
val assets = alpacaAPI.getTradableAssets()
|
||||
assets.onSuccess { assets ->
|
||||
val prices = alpacaAPI.getPrices(assets.filterIndexed { index, asset -> index < 20 }
|
||||
.map { asset -> asset.toAsset(0) })
|
||||
prices.onSuccess { prices ->
|
||||
prices.forEach { (asset, cash) -> println("${asset.name}: ${cash.toString()}") }
|
||||
}
|
||||
}
|
||||
return@launch
|
||||
while (true) {
|
||||
updateAssets(database = database, api = alpacaAPI)
|
||||
delay(1.days)
|
||||
|
||||
Reference in New Issue
Block a user