mirror of
https://github.com/fdundjer/solana-sniper-bot.git
synced 2025-11-09 20:12:06 +10:00
feat: improve exit position logic
This commit is contained in:
36
index.ts
36
index.ts
@ -14,17 +14,12 @@ import {
|
||||
RPC_WEBSOCKET_ENDPOINT,
|
||||
PRE_LOAD_EXISTING_MARKETS,
|
||||
LOG_LEVEL,
|
||||
CHECK_IF_MUTABLE,
|
||||
CHECK_IF_MINT_IS_RENOUNCED,
|
||||
CHECK_IF_FREEZABLE,
|
||||
CHECK_IF_BURNED,
|
||||
QUOTE_MINT,
|
||||
MAX_POOL_SIZE,
|
||||
MIN_POOL_SIZE,
|
||||
QUOTE_AMOUNT,
|
||||
PRIVATE_KEY,
|
||||
USE_SNIPE_LIST,
|
||||
ONE_TOKEN_AT_A_TIME,
|
||||
AUTO_SELL_DELAY,
|
||||
MAX_SELL_RETRIES,
|
||||
AUTO_SELL,
|
||||
@ -45,6 +40,14 @@ import {
|
||||
FILTER_CHECK_INTERVAL,
|
||||
FILTER_CHECK_DURATION,
|
||||
CONSECUTIVE_FILTER_MATCHES,
|
||||
MAX_TOKENS_AT_THE_TIME,
|
||||
CHECK_IF_MINT_IS_RENOUNCED,
|
||||
CHECK_IF_FREEZABLE,
|
||||
CHECK_IF_BURNED,
|
||||
CHECK_IF_MUTABLE,
|
||||
CHECK_IF_SOCIALS,
|
||||
TRAILING_STOP_LOSS,
|
||||
SKIP_SELLING_IF_LOST_MORE_THAN,
|
||||
} from './helpers';
|
||||
import { version } from './package.json';
|
||||
import { WarpTransactionExecutor } from './transactions/warp-transaction-executor';
|
||||
@ -80,10 +83,8 @@ function printDetails(wallet: Keypair, quoteToken: Token, bot: Bot) {
|
||||
logger.info(`Wallet: ${wallet.publicKey.toString()}`);
|
||||
|
||||
logger.info('- Bot -');
|
||||
logger.info(`Using transaction executor: ${TRANSACTION_EXECUTOR}`);
|
||||
|
||||
logger.info(
|
||||
`Using ${TRANSACTION_EXECUTOR} executer: ${bot.isWarp || bot.isJito || (TRANSACTION_EXECUTOR === 'default' ? true : false)}`,
|
||||
);
|
||||
if (bot.isWarp || bot.isJito) {
|
||||
logger.info(`${TRANSACTION_EXECUTOR} fee: ${CUSTOM_FEE}`);
|
||||
} else {
|
||||
@ -91,7 +92,7 @@ function printDetails(wallet: Keypair, quoteToken: Token, bot: Bot) {
|
||||
logger.info(`Compute Unit price (micro lamports): ${botConfig.unitPrice}`);
|
||||
}
|
||||
|
||||
logger.info(`Single token at the time: ${botConfig.oneTokenAtATime}`);
|
||||
logger.info(`Max tokens at the time: ${botConfig.maxTokensAtTheTime}`);
|
||||
logger.info(`Pre load existing markets: ${PRE_LOAD_EXISTING_MARKETS}`);
|
||||
logger.info(`Cache new markets: ${CACHE_NEW_MARKETS}`);
|
||||
logger.info(`Log level: ${LOG_LEVEL}`);
|
||||
@ -112,6 +113,8 @@ function printDetails(wallet: Keypair, quoteToken: Token, bot: Bot) {
|
||||
logger.info(`Price check duration: ${botConfig.priceCheckDuration} ms`);
|
||||
logger.info(`Take profit: ${botConfig.takeProfit}%`);
|
||||
logger.info(`Stop loss: ${botConfig.stopLoss}%`);
|
||||
logger.info(`Trailing stop loss: ${botConfig.trailingStopLoss}`);
|
||||
logger.info(`Skip selling if lost more than: ${botConfig.skipSellingIfLostMoreThan}%`);
|
||||
|
||||
logger.info('- Snipe list -');
|
||||
logger.info(`Snipe list: ${botConfig.useSnipeList}`);
|
||||
@ -125,9 +128,11 @@ function printDetails(wallet: Keypair, quoteToken: Token, bot: Bot) {
|
||||
logger.info(`Filter check interval: ${botConfig.filterCheckInterval} ms`);
|
||||
logger.info(`Filter check duration: ${botConfig.filterCheckDuration} ms`);
|
||||
logger.info(`Consecutive filter matches: ${botConfig.consecutiveMatchCount}`);
|
||||
logger.info(`Check renounced: ${botConfig.checkRenounced}`);
|
||||
logger.info(`Check freezable: ${botConfig.checkFreezable}`);
|
||||
logger.info(`Check burned: ${botConfig.checkBurned}`);
|
||||
logger.info(`Check renounced: ${CHECK_IF_MINT_IS_RENOUNCED}`);
|
||||
logger.info(`Check freezable: ${CHECK_IF_FREEZABLE}`);
|
||||
logger.info(`Check burned: ${CHECK_IF_BURNED}`);
|
||||
logger.info(`Check mutable: ${CHECK_IF_MUTABLE}`);
|
||||
logger.info(`Check socials: ${CHECK_IF_SOCIALS}`);
|
||||
logger.info(`Min pool size: ${botConfig.minPoolSize.toFixed()}`);
|
||||
logger.info(`Max pool size: ${botConfig.maxPoolSize.toFixed()}`);
|
||||
}
|
||||
@ -165,14 +170,11 @@ const runListener = async () => {
|
||||
const botConfig = <BotConfig>{
|
||||
wallet,
|
||||
quoteAta: getAssociatedTokenAddressSync(quoteToken.mint, wallet.publicKey),
|
||||
checkRenounced: CHECK_IF_MINT_IS_RENOUNCED,
|
||||
checkFreezable: CHECK_IF_FREEZABLE,
|
||||
checkBurned: CHECK_IF_BURNED,
|
||||
minPoolSize: new TokenAmount(quoteToken, MIN_POOL_SIZE, false),
|
||||
maxPoolSize: new TokenAmount(quoteToken, MAX_POOL_SIZE, false),
|
||||
quoteToken,
|
||||
quoteAmount: new TokenAmount(quoteToken, QUOTE_AMOUNT, false),
|
||||
oneTokenAtATime: ONE_TOKEN_AT_A_TIME,
|
||||
maxTokensAtTheTime: MAX_TOKENS_AT_THE_TIME,
|
||||
useSnipeList: USE_SNIPE_LIST,
|
||||
autoSell: AUTO_SELL,
|
||||
autoSellDelay: AUTO_SELL_DELAY,
|
||||
@ -183,6 +185,8 @@ const runListener = async () => {
|
||||
unitPrice: COMPUTE_UNIT_PRICE,
|
||||
takeProfit: TAKE_PROFIT,
|
||||
stopLoss: STOP_LOSS,
|
||||
trailingStopLoss: TRAILING_STOP_LOSS,
|
||||
skipSellingIfLostMoreThan: SKIP_SELLING_IF_LOST_MORE_THAN,
|
||||
buySlippage: BUY_SLIPPAGE,
|
||||
sellSlippage: SELL_SLIPPAGE,
|
||||
priceCheckInterval: PRICE_CHECK_INTERVAL,
|
||||
|
||||
Reference in New Issue
Block a user