si, altas posibilidades de que este haciendo preguntas sin sentido porque no ubico bien los conceptos aun. Pero me he leido mil cosas, cada una cuenta "su libro" y es estropeado ensamblar las piezas para darle sentido
porque usais solana y no BSC u otra blockchain? podriais hacer eso mismo que quereis hacer en cualquier otra blockchain, o sea, son conceptos comunes y ecosistemas analogos?
BSC tiene mucha morralla. Solana tiene dapps muy potentes y tiene una gran proyección. Otros como Polka o ADA no tienen LPs en donde se estén dando fácil >40% APY, suelen tener mucha cosa rara donde te dan un 5% o un 10%, es bastante deprimente en comparación con Orca o Raydium con TVL de decenas de millones de dólares o incluso centenares y dando a pelo >40 APR + rewards. No hay tonalidad.
o sea, te recorres las tras*acciones para calcular algo asi como un precio del token y con ese precio decides cuando lanzar tus operaciones de compra venta. Y ese precio que representaria, seria un precio "agregado" en todos sus exchanges y LPs?
No. Recorro mis tras*acciones, para saber a qué precio hice, por ejemplo, un swap SRM vs RAY, para calcular cuanto me costó ese swap, cuanto valían en USD en su día cada uno de esos dos tokens y cuánto valen ahora. en el caso de que los metiera en un LP, calcular con la fórmula cómo evolucionó la cantidad, qué impermanent loss sufrí y cual es el cambio cuando deshice el LP y si era correcto (el esperable).
En caso de poner el LP en stake (farming) quiero saber si la cosecha real es mejor que en otros posibles LPs con esas monedas o con otras.
Se trata de analizar lo que yo he hecho, para detectar si estoy perdiendo. No es lo mismo un reward de Orca cuando el precio de Orca está ahostiando contra USDC, que el mismo precio y token, en un LP contra Solana y SOL subiendo.
Es muy complicado saber si estás ganando o perdiendo cuando haces varias operaciones al día y tienes estrategias a corto, medio y largo plazo. Tener esta información te hace comprender mejor el mercado.
uhm, tambien, en vez de hacer un bid yo mismo, podria aceptar con mi bot un bid ya existente creado por otro usuario, no? de tal forma la tras*accion seria automatica y no tendria que esperar
No entiendo qué quieres decir. Si quieres comprar SRM en un DEX en el mercado SRM/USD, le pones un precio a lo que quieres comprar (cantidad de SRM y total de USDC que pagarás) y depositas los USDC (bid). Si esa operación se ejecuta, porque entras en precio con un ask, acabas teniendo tus SRM y puede que un pequeño cambio de USDC, que quedan depositados (settle). Para volverlos a tu cartera, haces un unsettle.
Por supuesto que es automática, y además puedes poner stop loss, comprar a mercado, etc.. no necesitas ningún bot, eso funciona matcheando bids con asks.
si claro, lo que quiero es:
1. poder estimar y monitorizar el precio de un token, o de muchos tokens, con mi bot
2. cuando el precio supere umbrales (o sea market maker), aceptar un bid ya existente de....... uhm, de donde?
de un LP? de un exchange? alguna otra opcion?
(porque segun os entiendo necesito un pool de liquidez para aceptar un bid, dado que el smart contract, en si, es solo una operacion logica y no tiene pool de liquidez propio). No vendria mal un diagrama de dependencias basico, carajo. Parece que lo complican ad infinitum para hacerse los listos
1. El precio del token te lo puede dar coingecko.
Instálate (composer) la librería de coingecko.
Codenixsv\CoinGeckoApi para PHP. Puedes integrarlo en un MVC, como CakePHP o Laravel. No se en Java si hay algún MVC que domines.
Tendría un aspecto de éste tipo:
Código:
use Codenixsv\CoinGeckoApi\CoinGeckoClient;
const HTTP_OK = 200;
const HTTP_NO_CONTENT = 204;
/**************************************************************************/
// Actualiza datos de un asociado con los datos de la API de Coingecko
private function actualizaConCoingecko($asoc){
$this->loadModel('Tradecoins');
$client = new CoinGeckoClient();
$data = $client->coins()->getCoin($asoc->tradecoin->geckoname, ['tickers' => 'false', 'market_data' => 'true']);
$asoc->tradecoin->symbol = strtoupper($data['symbol']);
$asoc->tradecoin->name = $data['name'];
$asoc->tradecoin->valorusd = $data['market_data']['current_price']['usd'];
$asoc->tradecoin->acumusd = round($asoc->tradecoin->valorusd*$asoc->tradecoin->balance,2);
if( is_null($asoc->tradecoin->small_image) ){
$asoc->tradecoin->small_image = $data['image']['small'];
}
$asoc->tradecoin->inc24h = round($data['market_data']['price_change_percentage_24h'],2);
$asoc->tradecoin->inc7d = round($data['market_data']['price_change_percentage_7d'],2);
$asoc->tradecoin->inc14d = round($data['market_data']['price_change_percentage_14d'],2);
$asoc->tradecoin->inc30d = round($data['market_data']['price_change_percentage_30d'],2);
$asoc->tradecoin->inc60d = round($data['market_data']['price_change_percentage_60d'],2);
if(!is_null($data['market_data']['max_supply'])) $asoc->tradecoin->max_supply = round($data['market_data']['max_supply']/1e6,2);
if(!is_null($data['market_data']['total_supply'])) $asoc->tradecoin->total_supply = round($data['market_data']['total_supply']/1e6,2);
if(!is_null($data['market_data']['circulating_supply'])) $asoc->tradecoin->circulating_supply = round($data['market_data']['circulating_supply']/1e6,2);
$this->Tradecoins->save($asoc->tradecoin);
$this->set('data', $data);
}
2. Cuando el precio te cuadre, debes usar otra API, por ejemplo las de Serum-DEX y crear el bid si compras o el ask si vendes y esperar a que se ejecute solito y si lo quieres allí lo dejas y si lo quieres en tu cartera, unsettle. El resto de cosas que dices, te lo estás inventando, complicándote la vida.
Otro tema es que quisieras hacer carry-trade entre dos pools, pero es imposible ser más rápido que los bots que correrían en ambos LPs.
3. En total, para hacer lo que quieres en Solana necesitas tres API,
3a. La API de solana para enterarte de qué es lo que tienes (tokens, LPs, Delegates) con el comando:
JSON RPC API | Solana Docs
Creas la operación en array, creas el json (json_encode) y la respuesta la devuelves a array o a StdObject con json_decode(). Es el mecanismo de un chupete.
Necesitas saber cuales son las direcciones de tus tokens asociados, también con esta API y el comando que lo hace (getaccountinfo).
3b. La API de coingecko, te dará muchas estadisticas y el valor casi en tiempo real.
3c. La API del mercado, en este ejemplo, es Serum Dex.
la actualizacion del libro de ordenes no la hace el smart contract?
(de lo contrario, como se asegura el emisor del token - creador del smart contract - de que no le inscriben operaciones erroneas?)
No existe el concepto de "orden errónea". Si quieres pagar 100 SOL por un chucho-token que en realidad vale 0.000000001, es tu problema.
El programa tiene unas entradas y unas salidas, si se ponen mal las direcciones, Solana rechaza la operación (y la comisión la pagas), pero si todo es correcto y el signer (tu dirección principal) firma correctamente, eso va palante.
Una vez que lanzas la tras*acción, ya no hay vuelta atrás y aparece en el libro de órdenes.
¿Cuándo se ejecuta? Cuando el bot de trading encuentra el bid y el ask que cuadran, ahí no pintas nada tú.