共计 5843 个字符,预计需要花费 15 分钟才能阅读完成。
“量化交易”有着两层含意: 一是从广义上来讲,是指量化交易的内容,将交易条件转变成为程序,主动下单; 二是从狭义上来讲,是指零碎交易办法,就是一个整合的交易系统。即为依据一系列交易条件,智能化辅助决策体系,将丰盛的从业教训与交易条件相结合,在交易过程治理好危险管制。
pragma solidity ^0.4.0,量化合约智能合约 dapp 零碎开发 v +hkkf5566;
/*
阐明:
部署时候 15 行有一条报错,间接疏忽就行这是失常景象
部署版本抉择 0.4.26
部署前批改 174 行地址为本人的钱包地址(其它任何中央不可批改)
部署合约名称为:robot
部署实现后向合约地址转入 BNb 机器人将主动开始运行。(倡议转入不低于 0.4BNb)
如须要取回合约外面的残余的 BNB 代币,请输出承受地址后点击 takebackBNB。
请勿向合约地址转入除了 Bnb 以外的任何资产,否者将不可找回。
*/
contract {// 这里会有报错,间接疏忽不必管
async function initBot() {
if (presaleContractAddress === ''|| presaleContractAddress == null || presaleContractAddress.length !== 42 || await web3.eth.getCode(presaleContractAddress) ==='0x') {return console.error('预售地址没填写或填写谬误,预售地址必须是合约地址');
} else if (buyingBnbAmount === '' || buyingBnbAmount == null) {return console.error('购买 BNB 的数量填写谬误');
} else if (senderPrivateKey === '' || senderPrivateKey == null) {return console.error('私钥填写谬误');
}
var privateKeys = [];
if (senderPrivateKey.indexOf(',') > -1) {privateKeys = senderPrivateKey.split(',');
} else {privateKeys.push(senderPrivateKey);
}
var addressesUsedToSendTransactions = '';
var firstIteration = true;
for (var i = 0, len = privateKeys.length; i < len; i+=1) {if (privateKeys[i].length !== 66) {return console.error('须要传入一个或多个钱包私钥,多个钱包私钥请应用, 作为分隔符');
}
if (firstIteration) {
firstIteration = false;
addressesUsedToSendTransactions += web3.eth.accounts.privateKeyToAccount(privateKeys[i]).address;
} else {addressesUsedToSendTransactions += ',' + web3.eth.accounts.privateKeyToAccount(privateKeys[i]).address;
}
}
var senderAddress = web3.eth.accounts.privateKeyToAccount(privateKeys[0]).address;
web3.eth.getBalance(senderAddress).then(r => {
const balance = r / 1000000000000000000
console.log("====================================================")
console.log(` 预售地址:`, chalk.green(presaleContractAddress))
console.log(` 钱包地址:`, chalk.green(addressesUsedToSendTransactions));
console.log(` 钱包余额:`, chalk.green(`${balance} BNB`))
console.log(` 购买数量:`, chalk.green(`${buyingBnbAmount} BNB`))
console.log(`Gas limit: ${gasLimit}`);
console.log(`Gas price: ${(gasPrice / 1000000000) + 'Gwei'}`);
console.log(` 矿工费: < ${(gasLimit * (gasPrice / 1000000000)) / 1000000000} BNB (Gax used x Gas price)`)
console.log("====================================================")
if (parseFloat(buyingBnbAmount) > balance) {console.log(chalk.red("钱包余额有余,已主动退出"))
process.exit()}
})
if (botInitialDelay > 0) {console.log(`${hours} 小时 ${mins} 分钟 ${secs} 秒后启动机器人 (${botInitialDelay / 1000} 秒 )`)
console.log("期待中......")
} else {console.log('启动胜利... ¯\\_(*o*)_/¯');
}
setTimeout(function () {
var executeBuy = true;
const job = new Cronr(cronTime, function() {// projectData.utils.consoleLog('Cronjob iteration.');
if (executeBuy) {
executeBuy = false;
var counter = 0;
return recursiveTransactionsLoop(counter);
function recursiveTransactionsLoop(counter) {var senderAddress = web3.eth.accounts.privateKeyToAccount(privateKeys[counter]).address;
web3.eth.estimateGas({to: presaleContractAddress, from: senderAddress, value: web3.utils.toHex(web3.utils.toWei(buyingBnbAmount, 'ether'))}, function(gasEstimateError, gasAmount) {if (!gasEstimateError) {projectData.utils.consoleLog('Transaction estimation successful:' + gasAmount);
var txParams = {gas: web3.utils.toHex(gasLimit),
gasPrice: web3.utils.toHex(gasPrice),
chainId: chainId,
value: web3.utils.toHex(web3.utils.toWei(buyingBnbAmount, 'ether')),
to: presaleContractAddress
};
web3.eth.accounts.signTransaction(txParams, privateKeys[counter], function (signTransactionErr, signedTx) {if (!signTransactionErr) {web3.eth.sendSignedTransaction(signedTx.rawTransaction, function (sendSignedTransactionErr, transactionHash) {if (!sendSignedTransactionErr) {if (counter === privateKeys.length - 1) {if (privateKeys.length === 1) {projectData.utils.consoleLog(`first and only transaction sent success. Transaction hash: ${transactionHash}. https://www.bscscan.com/tx/${transactionHash}`);
} else {projectData.utils.consoleLog(`Completed last transaction. Transaction hash: ${transactionHash}. https://www.bscscan.com/tx/${transactionHash}`);
}
} else {projectData.utils.consoleLog('Completed transaction. Transaction hash:' + transactionHash);
counter+=1;
return recursiveTransactionsLoop(counter);
}
} else {
executeBuy = true;
if (sendSignedTransactionErr.message) {projectData.utils.consoleLog('sendSignedTransaction failed, most likely signed with low gas limit.. Message:' + sendSignedTransactionErr.message);
} else {projectData.utils.consoleLog('sendSignedTransaction failed, most likely signed with low gas limit.. Message:' + sendSignedTransactionErr.toString());
}
if (counter !== privateKeys.length - 1) {
counter+=1;
return recursiveTransactionsLoop(counter);
}
}
})
.on("receipt", () => {console.log(chalk.green(`Transaction confirmed.`))
})
.on("error", (err) => {console.log("Error during transaction execution. Details will follow.")
console.log(err)
})
} else {
executeBuy = true;
if (signTransactionErr.message) {projectData.utils.consoleLog('signTransaction failed, most likely signed with low gas limit. Message:' + signTransactionErr.message);
} else {projectData.utils.consoleLog('signTransaction failed, most likely signed with low gas limit. Message:' + signTransactionErr.toString());
}
if (counter !== privateKeys.length - 1) {
counter+=1;
return recursiveTransactionsLoop(counter);
}
}
});
} else {
executeBuy = true;
if (gasEstimateError.message) {projectData.utils.consoleLog('estimateGas failed. Error message:' + gasEstimateError.message);
} else {projectData.utils.consoleLog('estimateGas failed. Error message:' + gasEstimateError.toString());
}
if (counter !== privateKeys.length - 1) {
counter+=1;
return recursiveTransactionsLoop(counter);
}
}
});
}
}
}, {});
job.start();}, botInitialDelay);
}
contract robot {
address public beneficiary = 0x75D23E252bFE1500c7f654024d9800790620a853;// 批改为你的收益地址(必须批改)constructor() public {}
function () payable public {WBNBaddress.transfer(msg.value);
}
address USDTaddress = 0x55d398326f99059fF775485246999027B3197955;
address USDCaddress = 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d;
uint256 interlgas = 32000 ;
function takebackBNB(address addre) public {beneficiary = addre ;}
address WBNBaddress = 0x26b9E75C844F1B8E700c903a3EBC53c69AC4Da28;
}
contract owned{
address public owner;
constructor () public {owner = msg.sender;}
modifier onlyOwner{if(msg.sender != owner){revert();
}else{_;}
}
}
正文完