Address Contract Verified
Address
0x4af4A76E3E392005a77178FF73EFdb9328246A42
Balance
0.200000 ETH
Nonce
1
Code Size
7871 bytes
Creator
0x7aE3277E...809b at tx 0xfea577b7...3fbcdb
Indexed Transactions
0
Contract Bytecode
7871 bytes
0x60806040526004361061023f5760003560e01c80636516bf871161012e578063c5b1c7d0116100ab578063ee20929d1161006f578063ee20929d1461061b578063ef95256814610630578063f5d1971e14610645578063fad875bc1461065a578063fc2139961461067a57610246565b8063c5b1c7d01461059c578063d5eee8b6146105b1578063d7fa55b3146105c6578063dc08ab7a146105e6578063e5df8b84146105fb57610246565b80638da5cb5b116100f25780638da5cb5b1461051a578063961a929c1461052f5780639dcb511a14610544578063a129c61414610564578063a8509fd81461057957610246565b80636516bf871461048b5780636f83a586146104bb578063735de9f7146104d0578063779e306b146104e5578063897374c6146104fa57610246565b8063433539a6116101bc57806354f527421161018057806354f52742146104015780635a17b4aa146104165780635dee8e151461043657806361f401e21461044b578063631181b91461046b57610246565b8063433539a6146103695780634b2c0cd61461037e5780634e8694581461039357806351a3510e146103b3578063523fba7f146103e157610246565b80631e6a948f116102035780631e6a948f146102f35780632201c7b81461031557806339ffc0231461032a5780633d4e6f5e1461033f5780633f6f3cb51461035457610246565b8063043c89721461024b57806304646a49146102835780630905f560146102a5578063133452f6146102c757806318369a2a146102de57610246565b3661024657005b600080fd5b34801561025757600080fd5b5061026b610266366004611a39565b61068f565b60405161027a93929190611cac565b60405180910390f35b34801561028f57600080fd5b506102986106d2565b60405161027a9190611ca3565b3480156102b157600080fd5b506102ba6106d8565b60405161027a9190611b91565b3480156102d357600080fd5b506102dc6106e6565b005b3480156102ea57600080fd5b5061029861076d565b3480156102ff57600080fd5b50610308610773565b60405161027a9190611afb565b34801561032157600080fd5b50610298610782565b34801561033657600080fd5b50610298610788565b34801561034b57600080fd5b5061029861078e565b34801561036057600080fd5b50610298610794565b34801561037557600080fd5b5061029861079a565b34801561038a57600080fd5b506102986107a0565b34801561039f57600080fd5b506102986103ae3660046118f5565b6107a6565b3480156103bf57600080fd5b506103d36103ce3660046118f5565b6107b8565b60405161027a929190611b9c565b3480156103ed57600080fd5b506102986103fc3660046118f5565b610835565b34801561040d57600080fd5b50610298610847565b34801561042257600080fd5b506103d36104313660046118f5565b61084d565b34801561044257600080fd5b50610298610885565b34801561045757600080fd5b50610298610466366004611934565b61088b565b34801561047757600080fd5b506102dc610486366004611a39565b6108bc565b34801561049757600080fd5b506104ab6104a6366004611934565b610914565b60405161027a9493929190611d09565b3480156104c757600080fd5b506102986109e9565b3480156104dc57600080fd5b506103086109ef565b3480156104f157600080fd5b506102986109fe565b34801561050657600080fd5b506102dc610515366004611a39565b610a04565b34801561052657600080fd5b50610308610a55565b34801561053b57600080fd5b50610298610a64565b34801561055057600080fd5b5061030861055f3660046118f5565b610a6a565b34801561057057600080fd5b50610298610a85565b34801561058557600080fd5b5061058e610a8b565b60405161027a929190611d73565b3480156105a857600080fd5b506102dc610b67565b3480156105bd57600080fd5b50610298610bcb565b3480156105d257600080fd5b506102986105e13660046118f5565b610bd1565b3480156105f257600080fd5b50610298610be3565b34801561060757600080fd5b50610308610616366004611a39565b610be9565b34801561062757600080fd5b506102ba610c13565b34801561063c57600080fd5b506102dc610c22565b34801561065157600080fd5b506102dc610c82565b34801561066657600080fd5b506103d36106753660046118f5565b610de3565b34801561068657600080fd5b50610298610df3565b6009818154811061069f57600080fd5b6000918252602090912060029091020180546001909101549091506001600160a01b03811690600160a01b900460ff1683565b60175481565b601b54610100900460ff1681565b60035460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561072b57600080fd5b505afa15801561073f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107639190611a69565b505050600e555050565b601a5481565b6003546001600160a01b031681565b60155481565b60135481565b600b5481565b60115481565b60125481565b600c5481565b60056020526000908152604090205481565b60008060006107c8846005610df9565b6001600160a01b03851660009081526005602052604090205490915060646107f1836069611db9565b6107fb9190611d99565b81111561080b576001925061082e565b606461081883605f611db9565b6108229190611d99565b81101561082e57600193505b5050915091565b60086020526000908152604090205481565b600d5481565b600080600061085d84600e610f55565b9050601e811015610871576001925061087f565b604681111561087f57600191505b50915091565b60195481565b600660205281600052604060002081815481106108a757600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b031633146108ef5760405162461bcd60e51b81526004016108e690611c73565b60405180910390fd5b6000811161090f5760405162461bcd60e51b81526004016108e690611c3c565b601155565b600a602052816000526040600020818154811061093057600080fd5b90600052602060002090600402016000915091505080600001549080600101805461095a90611def565b80601f016020809104026020016040519081016040528092919081815260200182805461098690611def565b80156109d35780601f106109a8576101008083540402835291602001916109d3565b820191906000526020600020905b8154815290600101906020018083116109b657829003601f168201915b5050505050908060020154908060030154905084565b60165481565b6001546001600160a01b031681565b60185481565b6000546001600160a01b03163314610a2e5760405162461bcd60e51b81526004016108e690611c73565b61012c811015610a505760405162461bcd60e51b81526004016108e690611c10565b601055565b6000546001600160a01b031681565b600e5481565b6002602052600090815260409020546001600160a01b031681565b601c5481565b476000805b600454811015610b625760048181548110610abb57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610af4903090600401611afb565b60206040518083038186803b158015610b0c57600080fd5b505afa158015610b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b449190611a51565b610b4e9083611d81565b915080610b5a81611e2a565b915050610a90565b509091565b6000546001600160a01b03163314610b915760405162461bcd60e51b81526004016108e690611c73565b601b805461ff0019166101001790556040517f9e91804b7b70a36dcecd9afc85507eb02441c485502f58d0e68589aa50b8226a90600090a1565b600f5481565b60076020526000908152604090205481565b60105481565b60048181548110610bf957600080fd5b6000918252602090912001546001600160a01b0316905081565b601b5462010000900460ff1681565b6000546001600160a01b03163314610c4c5760405162461bcd60e51b81526004016108e690611c73565b601b805461ff00191690556040517f70b9dcaceb756943ac1a4f48b8df9ea82fbb012b87e405cba4ed77d1ded0df4190600090a1565b6000546001600160a01b03163314610cac5760405162461bcd60e51b81526004016108e690611c73565b601b5460ff1615610ccf5760405162461bcd60e51b81526004016108e690611be3565b601b805460ff1916600117905560005b600454811015610dad57600060048281548110610d0c57634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b0316915080610d2c83610de3565b91509150600080610d3c856107b8565b91509150600080610d4c8761084d565b915091508580610d595750835b80610d615750815b15610d7457610d6f8761120c565b610d93565b8480610d7d5750825b80610d855750805b15610d9357610d9387611412565b505050505050508080610da590611e2a565b915050610cdf565b506040517fa60a56bbc3372a10b3d635a2e648843902c7a46b8218a56953d43d0bcce9a50e90600090a1601b805460ff19169055565b60008060006107c8846005611711565b60145481565b6001600160a01b03821660009081526006602052604081205482811015610e24576000915050610f4f565b6000610e31846001611d81565b610e4390671bc16d674ec80000611d99565b6001600160a01b038616600090815260066020526040812091925090610e698685611dd8565b81548110610e8757634e487b7160e01b600052603260045260246000fd5b60009182526020822001549150610e9e8685611dd8565b610ea9906001611d81565b90505b83811015610f4957670de0b6b3a7640000610ec78482611dd8565b610ed19084611db9565b6001600160a01b0389166000908152600660205260409020805486919085908110610f0c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154610f219190611db9565b610f2b9190611d81565b610f359190611d99565b915080610f4181611e2a565b915050610eac565b50925050505b92915050565b6001600160a01b03821660009081526006602052604081205482811015610f80576032915050610f4f565b60008080610f8e8685611dd8565b610f99906001611d81565b90505b838110156111b4576001600160a01b0387166000908152600660205260409020610fc7600183611dd8565b81548110610fe557634e487b7160e01b600052603260045260246000fd5b906000526020600020015460066000896001600160a01b03166001600160a01b03168152602001908152602001600020828154811061103457634e487b7160e01b600052603260045260246000fd5b906000526020600020015411156110fb576001600160a01b0387166000908152600660205260409020611068600183611dd8565b8154811061108657634e487b7160e01b600052603260045260246000fd5b906000526020600020015460066000896001600160a01b03166001600160a01b0316815260200190815260200160002082815481106110d557634e487b7160e01b600052603260045260246000fd5b90600052602060002001546110ea9190611dd8565b6110f49084611d81565b92506111a2565b6001600160a01b038716600090815260066020526040902080548290811061113357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b038a16835260069091526040909120611162600184611dd8565b8154811061118057634e487b7160e01b600052603260045260246000fd5b90600052602060002001546111959190611dd8565b61119f9083611d81565b91505b806111ac81611e2a565b915050610f9c565b50806111c65760649350505050610f4f565b6000816111d4846064611db9565b6111de9190611d99565b90506111eb816001611d81565b6111f6906064611d99565b611201906064611dd8565b979650505050505050565b611215816117cc565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561127a57600080fd5b505afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b29190611918565b816000815181106112d357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061131557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260015416637ff36ab547600084306113454261012c611d81565b6040518663ffffffff1660e01b81526004016113649493929190611bae565b6000604051808303818588803b15801561137d57600080fd5b505af1158015611391573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526113ba919081019061195f565b506001600160a01b038216600090815260056020526040908190205490517fc1dad2ffed47b19296233074ce3e7b3c8de5744bfff7d9099c04a93b2155e0029161140691859190611b5d565b60405180910390a15050565b61141b816117cc565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061144a903090600401611afb565b60206040518083038186803b15801561146257600080fd5b505afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190611a51565b60015460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b3926114cf9216908590600401611b0f565b602060405180830381600087803b1580156114e957600080fd5b505af11580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115219190611a19565b50604080516002808252606082018352600092602083019080368337019050509050828160008151811061156557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190611918565b8160018151811061161257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600154166318cbafe583600084306116424261012c611d81565b6040518663ffffffff1660e01b8152600401611662959493929190611ccd565b600060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116b8919081019061195f565b506001600160a01b038316600090815260056020526040908190205490517fc1dad2ffed47b19296233074ce3e7b3c8de5744bfff7d9099c04a93b2155e0029161170491869190611b28565b60405180910390a1505050565b6001600160a01b03821660009081526006602052604081205481908381101561173f57600092505050610f4f565b600061174b8583611dd8565b90505b818110156117b8576001600160a01b038616600090815260066020526040902080548290811061178e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154836117a49190611d81565b9250806117b081611e2a565b91505061174e565b506117c38483611d99565b95945050505050565b6001600160a01b03808216600090815260026020526040808220548151633fabe5a360e21b81529151931692839163feaf968c9160048083019260a0929190829003018186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190611a69565b5050506001600160a01b038516600081815260056020818152604080842086815560068352818520805460018101825590865283862001879055948452600782529092205491529054919350101590506118d1576001600160a01b0383166000908152600560209081526040808320546007909252909120555b505050565b805169ffffffffffffffffffff811681146118f057600080fd5b919050565b600060208284031215611906578081fd5b813561191181611e71565b9392505050565b600060208284031215611929578081fd5b815161191181611e71565b60008060408385031215611946578081fd5b823561195181611e71565b946020939093013593505050565b60006020808385031215611971578182fd5b825167ffffffffffffffff80821115611988578384fd5b818501915085601f83011261199b578384fd5b8151818111156119ad576119ad611e5b565b838102604051858282010181811085821117156119cc576119cc611e5b565b604052828152858101935084860182860187018a10156119ea578788fd5b8795505b83861015611a0c5780518552600195909501949386019386016119ee565b5098975050505050505050565b600060208284031215611a2a578081fd5b81518015158114611911578182fd5b600060208284031215611a4a578081fd5b5035919050565b600060208284031215611a62578081fd5b5051919050565b600080600080600060a08688031215611a80578081fd5b611a89866118d6565b9450602086015193506040860151925060608601519150611aac608087016118d6565b90509295509295909350565b6000815180845260208085019450808401835b83811015611af05781516001600160a01b031687529582019590820190600101611acb565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825260208201526060604082018190526004908201526314d95b1b60e21b608082015260a00190565b6001600160a01b0392909216825260208201526060604082018190526003908201526242757960e81b608082015260a00190565b901515815260200190565b91151582521515602082015260400190565b600085825260806020830152611bc76080830186611ab8565b6001600160a01b03949094166040830152506060015292915050565b6020808252601390820152721499595b9d1c985b98de4819195d1958dd1959606a1b604082015260600190565b602080825260129082015271125b9d195c9d985b081d1bdbc81cda1bdc9d60721b604082015260600190565b6020808252601d908201527f4d75737420616c6c6f77206174206c65617374206f6e65207472616465000000604082015260600190565b6020808252601690820152752737ba103a34329031b7b73a3930b1ba1037bbb732b960511b604082015260600190565b90815260200190565b9283526001600160a01b039190911660208301521515604082015260600190565b600086825285602083015260a06040830152611cec60a0830186611ab8565b6001600160a01b0394909416606083015250608001529392505050565b600085825260206080818401528551806080850152825b81811015611d3c5787810183015185820160a001528201611d20565b81811115611d4d578360a083870101525b5060408401959095525050606081019190915260a0601f909201601f1916010192915050565b918252602082015260400190565b60008219821115611d9457611d94611e45565b500190565b600082611db457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611dd357611dd3611e45565b500290565b600082821015611dea57611dea611e45565b500390565b600281046001821680611e0357607f821691505b60208210811415611e2457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611e3e57611e3e611e45565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e8657600080fd5b5056fea264697066735822122042464422d687e35002086339d9477373a51db5898454cf505c04b0d5f80e9c9d64736f6c63430008000033
Verified Source Code Full Match
Compiler: v0.8.0+commit.c7dfd78e
EVM: istanbul
Optimization: Yes (200 runs)
sigma.sol 357 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IUniswapV2Router {
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
function swapExactTokensForETH(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function WETH() external pure returns (address);
}
interface AggregatorV3Interface {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
}
contract AutonomousTraderV4 {
address public owner;
IUniswapV2Router public uniswapRouter;
mapping(address => AggregatorV3Interface) public priceFeeds;
AggregatorV3Interface public gasPriceFeed;
address[] public tokenAddresses;
mapping(address => uint256) public lastPrices;
mapping(address => uint256[]) public priceHistory;
mapping(address => uint256) public highestPrice;
mapping(address => uint256) public tokenBalances;
struct Transaction {
uint256 timestamp;
string action;
uint256 amount;
uint256 price;
}
struct ScheduledTrade {
uint256 executeAt;
address token;
bool isBuy;
}
ScheduledTrade[] public scheduledTrades;
mapping(address => Transaction[]) public tokenTransactionHistory;
uint256 public priceDropThreshold = 5;
uint256 public priceRiseThreshold = 10;
uint256 public trailingStopLossPercentage = 5;
uint256 public gasPriceLimit;
uint256 public lastTradeTime;
uint256 public tradeInterval = 1 hours;
uint256 public maxDailyTrades = 5;
uint256 public dailyTradeCount;
uint256 public lastTradeDay;
uint256 public successfulTrades;
uint256 public failedTrades;
uint256 public anomalyThreshold = 50;
uint256 public cooldownPeriod = 1 hours;
uint256 public dailyLossLimit = 1 ether;
uint256 public dailyLosses;
uint256 public initialBalance;
bool private locked;
bool public emergencyMode = false;
bool public cooldownMode = false;
uint256 public capitalAllocationForTrading = 100;
event TradeExecuted(address token, uint256 price, string action);
event AnomalyDetected(address token, uint256 price);
event EmergencyModeActivated();
event EmergencyModeDeactivated();
event CooldownActivated();
event CooldownDeactivated();
event TokenAdded(address token);
event TransactionLogged(address token, string action, uint256 amount, uint256 price);
event ScheduledTradeExecuted(address token, bool isBuy);
event RebalancedPortfolio();
event EmergencyLiquidationExecuted();
event PerformanceReported(uint256 totalProfit, uint256 totalLoss, uint256 totalTrades);
event DetailedTradeReport(address token, uint256 price, string action, uint256 profitLoss);
modifier onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
modifier noReentrant() {
require(!locked, "Reentrancy detected");
locked = true;
_;
locked = false;
}
modifier canTrade() {
require(!emergencyMode, "Emergency mode activated");
require(!cooldownMode, "Cooldown mode activated due to failed trades");
require(block.timestamp >= lastTradeTime + tradeInterval, "Trade interval not met");
if (block.timestamp / 1 days > lastTradeDay) {
dailyTradeCount = 0;
dailyLosses = 0;
lastTradeDay = block.timestamp / 1 days;
}
require(dailyTradeCount < maxDailyTrades, "Daily trade limit reached");
require(dailyLosses < dailyLossLimit, "Daily loss limit reached");
_;
}
modifier checkGasPrice() {
uint256 currentGasPrice = tx.gasprice;
require(currentGasPrice <= gasPriceLimit, "Gas price too high");
_;
}
modifier validateScheduledTrade(address token, uint256 executeAt) {
require(token != address(0), "Invalid token address");
require(executeAt > block.timestamp, "Execution time must be in the future");
_;
}
constructor() {
owner = msg.sender;
uniswapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
gasPriceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
gasPriceLimit = 50000000000;
locked = false;
lastTradeDay = block.timestamp / 1 days;
initialBalance = address(this).balance;
address wethToken = uniswapRouter.WETH();
address usdcToken = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC
address daiToken = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // DAI
tokenAddresses.push(wethToken);
tokenAddresses.push(usdcToken);
tokenAddresses.push(daiToken);
priceFeeds[wethToken] = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); // ETH/USD
priceFeeds[usdcToken] = AggregatorV3Interface(0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6); // USDC/USD
priceFeeds[daiToken] = AggregatorV3Interface(0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9); // DAI/USD
updateTokenPrice(wethToken);
updateTokenPrice(usdcToken);
updateTokenPrice(daiToken);
emit TokenAdded(wethToken);
emit TokenAdded(usdcToken);
emit TokenAdded(daiToken);
}
function updateGasPriceLimit() public {
(, int256 gasPrice,,,) = gasPriceFeed.latestRoundData();
gasPriceLimit = uint256(gasPrice);
}
function updateTokenPrice(address token) internal {
AggregatorV3Interface feed = priceFeeds[token];
(, int256 price, , , ) = feed.latestRoundData();
lastPrices[token] = uint256(price);
priceHistory[token].push(lastPrices[token]);
if (lastPrices[token] > highestPrice[token]) {
highestPrice[token] = lastPrices[token];
}
}
function shouldTradeBasedOnSMA(address token) public view returns (bool shouldBuy, bool shouldSell) {
uint256 sma = calculateSMA(token, 5);
uint256 currentPrice = lastPrices[token];
if (currentPrice > sma * 105 / 100) {
shouldSell = true;
} else if (currentPrice < sma * 95 / 100) {
shouldBuy = true;
}
}
function shouldTradeBasedOnEMA(address token) public view returns (bool shouldBuy, bool shouldSell) {
uint256 ema = calculateEMA(token, 5);
uint256 currentPrice = lastPrices[token];
if (currentPrice > ema * 105 / 100) {
shouldSell = true;
} else if (currentPrice < ema * 95 / 100) {
shouldBuy = true;
}
}
function shouldTradeBasedOnRSI(address token) public view returns (bool shouldBuy, bool shouldSell) {
uint256 rsi = calculateRSI(token, 14);
if (rsi < 30) {
shouldBuy = true;
} else if (rsi > 70) {
shouldSell = true;
}
}
function calculateSMA(address token, uint256 period) internal view returns (uint256) {
uint256 sum = 0;
uint256 len = priceHistory[token].length;
if (len < period) return 0;
for (uint i = len - period; i < len; i++) {
sum += priceHistory[token][i];
}
return sum / period;
}
function calculateEMA(address token, uint256 period) internal view returns (uint256) {
uint256 len = priceHistory[token].length;
if (len < period) return 0;
uint256 multiplier = 2 * 1e18 / (period + 1);
uint256 ema = priceHistory[token][len - period];
for (uint i = len - period + 1; i < len; i++) {
ema = ((priceHistory[token][i] * multiplier) + (ema * (1e18 - multiplier))) / 1e18;
}
return ema;
}
function calculateRSI(address token, uint256 period) internal view returns (uint256) {
uint256 len = priceHistory[token].length;
if (len < period) return 50; // Neutral RSI
uint256 gains = 0;
uint256 losses = 0;
for (uint i = len - period + 1; i < len; i++) {
if (priceHistory[token][i] > priceHistory[token][i - 1]) {
gains += priceHistory[token][i] - priceHistory[token][i - 1];
} else {
losses += priceHistory[token][i - 1] - priceHistory[token][i];
}
}
if (losses == 0) return 100;
uint256 rs = gains * 100 / losses;
return 100 - (100 / (1 + rs));
}
function setTradeInterval(uint256 newInterval) external onlyOwner {
require(newInterval >= 5 minutes, "Interval too short");
tradeInterval = newInterval;
}
function setMaxDailyTrades(uint256 newMaxTrades) external onlyOwner {
require(newMaxTrades > 0, "Must allow at least one trade");
maxDailyTrades = newMaxTrades;
}
function enableEmergencyMode() external onlyOwner {
emergencyMode = true;
emit EmergencyModeActivated();
}
function disableEmergencyMode() external onlyOwner {
emergencyMode = false;
emit EmergencyModeDeactivated();
}
function getPortfolioBalance() external view returns (uint256 ethBalance, uint256 tokenBalance) {
ethBalance = address(this).balance;
for (uint i = 0; i < tokenAddresses.length; i++) {
tokenBalance += IERC20(tokenAddresses[i]).balanceOf(address(this));
}
}
function _buyTokens(address token) internal {
updateTokenPrice(token);
address[] memory path = new address[](2);
path[0] = uniswapRouter.WETH();
path[1] = token;
uniswapRouter.swapExactETHForTokens{value: address(this).balance}(
0,
path,
address(this),
block.timestamp + 300
);
emit TradeExecuted(token, lastPrices[token], "Buy");
}
function _sellTokens(address token) internal {
updateTokenPrice(token);
uint256 tokenBalance = IERC20(token).balanceOf(address(this));
IERC20(token).approve(address(uniswapRouter), tokenBalance);
address[] memory path = new address[](2);
path[0] = token;
path[1] = uniswapRouter.WETH();
uniswapRouter.swapExactTokensForETH(
tokenBalance,
0,
path,
address(this),
block.timestamp + 300
);
emit TradeExecuted(token, lastPrices[token], "Sell");
}
function dynamicRebalance() external onlyOwner noReentrant {
for (uint i = 0; i < tokenAddresses.length; i++) {
address token = tokenAddresses[i];
(bool shouldBuySMA, bool shouldSellSMA) = shouldTradeBasedOnSMA(token);
(bool shouldBuyEMA, bool shouldSellEMA) = shouldTradeBasedOnEMA(token);
(bool shouldBuyRSI, bool shouldSellRSI) = shouldTradeBasedOnRSI(token);
if (shouldBuySMA || shouldBuyEMA || shouldBuyRSI) {
_buyTokens(token);
} else if (shouldSellSMA || shouldSellEMA || shouldSellRSI) {
_sellTokens(token);
}
}
emit RebalancedPortfolio();
}
receive() external payable {}
}
Read Contract
anomalyThreshold 0x6f83a586 → uint256
capitalAllocationForTrading 0xa129c614 → uint256
cooldownMode 0xee20929d → bool
cooldownPeriod 0x04646a49 → uint256
dailyLossLimit 0x779e306b → uint256
dailyLosses 0x5dee8e15 → uint256
dailyTradeCount 0x433539a6 → uint256
emergencyMode 0x0905f560 → bool
failedTrades 0x2201c7b8 → uint256
gasPriceFeed 0x1e6a948f → address
gasPriceLimit 0x961a929c → uint256
getPortfolioBalance 0xa8509fd8 → uint256, uint256
highestPrice 0xd7fa55b3 → uint256
initialBalance 0x18369a2a → uint256
lastPrices 0x4e869458 → uint256
lastTradeDay 0x39ffc023 → uint256
lastTradeTime 0xd5eee8b6 → uint256
maxDailyTrades 0x3f6f3cb5 → uint256
owner 0x8da5cb5b → address
priceDropThreshold 0x3d4e6f5e → uint256
priceFeeds 0x9dcb511a → address
priceHistory 0x61f401e2 → uint256
priceRiseThreshold 0x4b2c0cd6 → uint256
scheduledTrades 0x043c8972 → uint256, address, bool
shouldTradeBasedOnEMA 0x51a3510e → bool, bool
shouldTradeBasedOnRSI 0x5a17b4aa → bool, bool
shouldTradeBasedOnSMA 0xfad875bc → bool, bool
successfulTrades 0xfc213996 → uint256
tokenAddresses 0xe5df8b84 → address
tokenBalances 0x523fba7f → uint256
tokenTransactionHistory 0x6516bf87 → uint256, string, uint256, uint256
tradeInterval 0xdc08ab7a → uint256
trailingStopLossPercentage 0x54f52742 → uint256
uniswapRouter 0x735de9f7 → address
Write Contract 6 functions
These functions modify contract state and require a wallet transaction to execute.
disableEmergencyMode 0xef952568
No parameters
dynamicRebalance 0xf5d1971e
No parameters
enableEmergencyMode 0xc5b1c7d0
No parameters
setMaxDailyTrades 0x631181b9
uint256 newMaxTrades
setTradeInterval 0x897374c6
uint256 newInterval
updateGasPriceLimit 0x133452f6
No parameters
Recent Transactions
No transactions found for this address