CryptoPump is a free, open source cryptocurrency trading tool that focuses on high speed and flexibility. The algorithms utilize Go Language and WebSockets to react in real-time to market movements based on Bollinger statistical analysis and pre-defined profit margins.
(Known Issue: Previous profit calculations won't show up in total profit)
This new release requires a database update if you are already running Cryptopump in production. If you are deploying for the first time, simply use cryptopump.sql.
CREATE DEFINER=`root`@`%` PROCEDURE `GetProfit`()
BEGIN
SELECT
SUM(`source`.`Profit`) AS `sum`,
AVG(`source`.`Percentage`) AS `avg`
FROM
(SELECT
`orders`.`Side` AS `Side`,
`Orders`.`Side` AS `Orders__Side`,
`orders`.`Status` AS `Status`,
`Orders`.`Status` AS `Orders__Status`,
`orders`.`ThreadID` AS `ThreadID`,
`Orders`.`CummulativeQuoteQty` AS `Orders__CummulativeQuoteQty`,
`orders`.`CummulativeQuoteQty` AS `CummulativeQuoteQty`,
(`Orders`.`CummulativeQuoteQty` - `orders`.`CummulativeQuoteQty`) AS `Profit`,
((`Orders`.`CummulativeQuoteQty` - `orders`.`CummulativeQuoteQty`) / CASE
WHEN `Orders`.`CummulativeQuoteQty` = 0 THEN NULL
ELSE `Orders`.`CummulativeQuoteQty`
END) AS `Percentage`
FROM
`orders`
INNER JOIN `orders` `Orders` ON `orders`.`OrderID` = `Orders`.`OrderIDSource`) `source`
WHERE
(`source`.`Side` = 'BUY'
AND `source`.`Orders__Side` = 'SELL'
AND `source`.`Status` = 'FILLED'
AND `source`.`Orders__Status` = 'FILLED');
END
CREATE DEFINER=`root`@`%` PROCEDURE `GetProfitByThreadID`(IN in_param_ThreadID varchar(45))
BEGIN
DECLARE declared_in_param_ThreadID CHAR(50);
SET declared_in_param_ThreadID = in_param_ThreadID;
SELECT
SUM(`source`.`Profit`) AS `sum`,
AVG(`source`.`Percentage`) AS `avg`
FROM
(SELECT
`orders`.`Side` AS `Side`,
`Orders`.`Side` AS `Orders__Side`,
`orders`.`Status` AS `Status`,
`Orders`.`Status` AS `Orders__Status`,
`orders`.`ThreadID` AS `ThreadID`,
`Orders`.`CummulativeQuoteQty` AS `Orders__CummulativeQuoteQty`,
`orders`.`CummulativeQuoteQty` AS `CummulativeQuoteQty`,
(`Orders`.`CummulativeQuoteQty` - `orders`.`CummulativeQuoteQty`) AS `Profit`,
((`Orders`.`CummulativeQuoteQty` - `orders`.`CummulativeQuoteQty`) / CASE
WHEN `Orders`.`CummulativeQuoteQty` = 0 THEN NULL
ELSE `Orders`.`CummulativeQuoteQty`
END) AS `Percentage`
FROM
`orders`
INNER JOIN `orders` `Orders` ON `orders`.`OrderID` = `Orders`.`OrderIDSource`) `source`
WHERE
(`source`.`Side` = 'BUY'
AND `source`.`Orders__Side` = 'SELL'
AND `source`.`Status` = 'FILLED'
AND `source`.`Orders__Status` = 'FILLED'
AND `source`.`ThreadID` = declared_in_param_ThreadID);
END
CREATE DEFINER=`root`@`%` PROCEDURE `GetThreadTransactionByPriceHigher`(IN in_param_ThreadID varchar(45), IN in_param_Price float)
BEGIN
DECLARE declared_in_param_ThreadID CHAR(50);
DECLARE declared_in_param_Price FLOAT;
SET declared_in_param_ThreadID = in_param_ThreadID;
SET declared_in_param_Price = in_param_Price;
SELECT
`thread`.`CummulativeQuoteQty` AS `CummulativeQuoteQty`,
`thread`.`OrderID` AS `OrderID`,
`thread`.`Price` AS `Price`,
`thread`.`ExecutedQuantity` AS `ExecutedQuantity`,
`Orders`.`TransactTime` AS `TransactTime`
FROM
`thread`
LEFT JOIN
`orders` `Orders` ON `thread`.`OrderID` = `Orders`.`OrderID`
WHERE
(`thread`.`ThreadID` = declared_in_param_ThreadID
AND `thread`.`Price` > declared_in_param_Price)
ORDER BY `thread`.`Price` DESC
LIMIT 1;
END
This new release requires a database update if you are already running Cryptopump in production. If you are deploying for the first time, simply use cryptopump.sql.
ALTER TABLE `cryptopump`.`session`
ADD COLUMN `Status` TINYINT(1) NOT NULL AFTER `FiatFunds`;
CREATE DEFINER=`root`@`%` PROCEDURE `UpdateSession`(in_ThreadID varchar(45), in_ThreadIDSession varchar(45), in_Exchange varchar(45), in_FiatSymbol varchar(45), in_FiatFunds float, in_Status tinyint(1))
BEGIN
SET SQL_SAFE_UPDATES = 0;
UPDATE `session`
SET `session`.`FiatFunds` = in_FiatFunds,
`session`.`Status` = in_Status
WHERE `session`.`ThreadID` = in_ThreadID;
SET SQL_SAFE_UPDATES = 1;
END
CREATE DEFINER=`root`@`%` PROCEDURE `SaveSession`(in_ThreadID varchar(45), in_ThreadIDSession varchar(45), in_Exchange varchar(45), in_FiatSymbol varchar(45), in_FiatFunds float, in_Status tinyint(1))
BEGIN
INSERT INTO session (ThreadID, ThreadIDSession, Exchange, FiatSymbol, FiatFunds, Status)
VALUES (in_ThreadID, in_ThreadIDSession, in_Exchange, in_FiatSymbol, in_FiatFunds, in_Status);
END
CREATE DEFINER=`root`@`%` PROCEDURE `GetSessionStatus`()
BEGIN
SELECT `session`.`ThreadID` AS `ThreadID`, `session`.`Status` AS `Status`
FROM cryptopump.session
WHERE `session`.`Status` = 1;
END
This new release requires a small database update if you are already running Cryptopump in production. Open the GetThreadTransactionByThreadID Stored Procedure ans replace its content with:
CREATE DEFINER=
root@
%PROCEDURE
GetThreadTransactionByThreadID(IN in_param_ThreadID varchar(45)) BEGIN DECLARE declared_in_param_ThreadID CHAR(50); SET declared_in_param_ThreadID = in_param_ThreadID; SELECT
thread.
OrderIDAS
OrderID,
thread.
CummulativeQuoteQtyAS
CummulativeQuoteQty,
thread.
PriceAS
Price,
thread.
ExecutedQuantityAS
ExecutedQuantityFROM
threadLEFT JOIN
orders
OrdersON
thread.
OrderID=
Orders.
OrderIDWHERE
thread.
ThreadID= declared_in_param_ThreadID ORDER BY
thread.
PriceASC; END
This new release requires a small database update if you are already running in production. Execute the following SQL:
ALTER TABLE `cryptopump`.`orders`
ADD COLUMN `OrderIDSource` BIGINT NOT NULL AFTER `OrderID`;
Open the SaveOrder Stored Procedure ans replace its content with:
CREATE DEFINER=`root`@`%` PROCEDURE `SaveOrder`(ClientOrderId varchar(45), CummulativeQuoteQty float, ExecutedQuantity float, OrderID bigint, OrderIDSource bigint, Price float, Side varchar(45), Status varchar(45), Symbol varchar(45), TransactTime bigint, ThreadID varchar(45), ThreadIDSession varchar(45))
BEGIN
INSERT INTO orders (ClientOrderId, CummulativeQuoteQty, ExecutedQuantity, OrderID, OrderIDSource, Price, Side, Status, Symbol, TransactTime, ThreadID, ThreadIDSession)
VALUES (ClientOrderId, CummulativeQuoteQty, ExecutedQuantity, OrderID, OrderIDSource, Price, Side, Status, Symbol, TransactTime, ThreadID, ThreadIDSession);
END
Binance API error handling
WebSockets error handling for uncommon errors that stall CryptoPump.
Lot's of improvements in this release:
Important: This version include changes to config.yml and default_config.yml. Please, verify your configuration files upon updating to this release.
1.1 GA Release