metaforecast/src/backend/platforms/kalshi.ts

82 lines
2.7 KiB
TypeScript
Raw Normal View History

/* Imports */
import axios from "axios";
2022-03-29 01:34:27 +00:00
import { calculateStars } from "../utils/stars";
import { Platform } from "./";
/* Definitions */
const platformName = "kalshi";
let jsonEndpoint = "https://trading-api.kalshi.com/v1/cached/markets/"; //"https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket"//"https://subgraph-backup.poly.market/subgraphs/name/TokenUnion/polymarket"//'https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket3'
async function fetchAllMarkets() {
// for info which the polymarket graphql API
let response = await axios
.get(jsonEndpoint)
.then((response) => response.data.markets);
// console.log(response)
return response;
}
async function processMarkets(markets) {
let dateNow = new Date().toISOString();
// console.log(markets)
markets = markets.filter((market) => market.close_date > dateNow);
let results = await markets.map((market) => {
let probability = market.last_price / 100;
let options = [
{
name: "Yes",
probability: probability,
type: "PROBABILITY",
},
{
name: "No",
probability: 1 - probability,
type: "PROBABILITY",
},
];
let id = `${platformName}-${market.id}`;
let result = {
id: id,
title: market.title.replaceAll("*", ""),
url: `https://kalshi.com/markets/${market.ticker_name}`,
platform: platformName,
description: `${market.settle_details}. The resolution source is: ${market.ranged_group_name} (${market.settle_source_url})`,
options: options,
timestamp: new Date().toISOString(),
qualityindicators: {
stars: calculateStars(platformName, {
shares_volume: market.volume,
interest: market.open_interest,
}),
yes_bid: market.yes_bid,
yes_ask: market.yes_ask,
spread: Math.abs(market.yes_bid - market.yes_ask),
shares_volume: market.volume, // Assuming that half of all buys are for yes and half for no, which is a big if.
// "open_interest": market.open_interest, also in shares
},
};
return result;
});
//console.log(results.length)
// console.log(results.map(result => result.title))
// console.log(results.map(result => result.title).length)
console.log([...new Set(results.map((result) => result.title))]);
console.log(
"Number of unique questions: ",
[...new Set(results.map((result) => result.title))].length
);
// console.log([...new Set(results.map(result => result.title))].length)
return results; //resultsProcessed
}
export const kalshi: Platform = {
name: platformName,
label: "Kalshi",
color: "#615691",
fetcher: async function () {
let markets = await fetchAllMarkets();
return await processMarkets(markets);
},
2022-03-29 01:34:27 +00:00
};