My Portfolio
Update Portfolio
Assets included in the default examples / demo list DO NOT indicate ANY endorsement OR recommendation of these assets (AND removal indicates NO anti-endorsement / anti-recommendation). These crypto-assets are only used as examples for demoing usage of features in this application, before you install it on your Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 device or website server, and change the list to your favorite assets.
Consult a financial advisor and / or do your own due diligence, to evaluate investment risk / reward of ANY cryptocurrencies, based on THEIR / YOUR OWN determinations before buying. Even AFTER buying ANY cryptocurrency, ALWAYS CONTINUE to do your due diligence, investigating whether you are engaging in trading within acceptable risk levels for your NET worth.
*ALWAYS* CONSULT A FINIANCIAL ADVISOR, IF YOU ARE UNAWARE OF WHAT RISKS ARE PRESENT, *AND* YOU ARE INVESTING *SIGNIFICANT* AMOUNTS OF MONEY!
- NEVER invest more than you can afford to lose.
- ALWAYS AVOID #pumpndump / #fomo / #shxtcoin trading.
- REMEMBER, the Barbell Portfolio Strategy works VERY WELL for MANY investors that use it!
- LITERALLY nearly 99.9% of all tokens (including NFTs) are either scams, garbage, or dead ends.
- NEVER buy an asset because of somebody's opinion of it (only buy based on YOUR opinion of it).
- ALWAYS fully research your planned investment beforehand (fundamentals are just as important as long term chart TA, and any short term chart TA is pure BS to be ignored).
- ALWAYS diversify / balance your portfolio with mostly largest AND oldest marketcaps (which are relatively less volatile) / HIGHEST ON-CHAIN ACTIVITY assets, for you and yours safety and sanity.
- Hang on tight until you can't stand fully holding anymore / want to or must make a position exit percentage OFFICIAL. (YOU HAVEN'T "LOST" OR "MADE" ANYTHING UNTIL YOU SELL A PERCENTAGE OF IT!)
- DOLLAR-COST-AVERAGE (DCA) into investments weekly OR monthly, NEVER GO "ALL-IN" with 100% of your cash / savings at once! You *WILL NOT* be able to handle the stress if it goes down LONG TERM!
- Leverage trading is EXTREMELY RISKY (and even more so in crypto markets). NEVER put more than ~5% of your total investment worth into ALL your leverage trades COMBINED, or you will RISK LOSING EVERYTHING!
- The biggest investment you will EVER make (and NEVER regret) is ALWAYS value your health and happiness more than ALL THE MONEY IN THE WORLD. NEVER let chasing after ANY AMOUNT of wealth take that from you, EVER.
- ALWAYS buy low AND sell high. (NOT the other way around!), *UNLESS* you CAREFULLY decide you've accidentally bought an asset that will probably go nowhere in value long term, relative to other assets you are interested in.
- WATCH OUT FOR "Pig Butchering" / "Catfishing" scams, and NEVER tell ANYBODY about your investment portfolio details. You would be surprised at how many people will take advantage of others for money. 😮 KEEP THIS INFORMATION PRIVATE!
- "Fully research" does NOT include *BLINDLY* believing some CEO / founder / influencer sweet talking their own token, telling you how competing systems suck and their system is better, or explaining how them owning over 50% of the total coin supply is not out of greed.
- ALWAYS have a future plan in place, of what you will buy / sell: 1) Around a certain future date in time. 2) If a certain price target has been met or exceeded. This doesn't need to be "all in" or "all out". For instance, you may want to split your capital gains between 2 tax years within a tight time period, in late December / early the following January, to avoid higher tax brackets.
- Speculating on popular "meme coins" (dog / cat / ape / frog coins, etc) is EXTREMELY RISKY. NEVER put more than ~5% of your total investment worth into ALL your meme coin assets COMBINED (AKA small "moon bags"), or you will RISK LOSING EVERYTHING! They are EXTREMELY VOLITILE because they are HEAVILY SPECULATED ON (NOT long term investments for many traders).
- ALWAYS AVOID copycat coins (that copy / mimick already-popular networks BUT HAVE NO SIGNIFICANT FEATURE IMPROVEMENTS), coins with high inflation rates (creating too many new coins infinitely), coins that are NOT on a fully decentralized network (small groups control everything), and coins with very little on-chain transaction activity (indicating low REAL WORLD user adoption).
- FOOD FOR THOUGHT: NEARLY ALL crypto tokens that are either 'liquid staking', 'wrapped', 'bridged' (*WITHOUT* 'burn-and-mint' bridging security), or are a 'stable coin', ARE ONLY EQUIVELENT TO 'IOUs', TO SWAP LATER FOR THE *REAL* UNDERLYING ASSET(S). So THINK TWICE before putting more than a relatively small percentage of your NET worth in these types of tokens, as they are higher risk than holding the underlying asset(s) they are pegged to.
- The "grass on the other side looks greener" MORE OFTEN THAN NOT will always be in your head, when you see other assets performing better than the ones you currently are holding. That's why it's SO IMPORTANT TO DO YOUR REASEARCH FULLY! If you KNOW you didn't buy garbage, AND you didn't over-extend your position (you CAN afford to hold it for a few years without selling any), just RELAX AND DON'T BE GREEDY...otherwise you are living for money (not ENJOYING life itself) AND YOU WILL END UP FLIPPING YOURSELF OUT, WHICH IS A CRAPPY WAY TO LIVE!
- If you insist on buying LONG SHOT (#VERY# high risk) SMALL marketcap or NEWER assets (requiring #A TON# OF DILIGENCE / PATIENCE), *HIGHLY* consider getting #NO MORE THAN# a 'moon bag' worth (#NO MORE THAN# between 1% and 5% of your portfolio PER-ASSET, AND A TOTAL OF #NO MORE THAN# 10% of your portfolio). If it goes down 50% in value and keeps going down, sell it and you don't lose much. If it goes up between 200% and 500% in value (3x to 6x original value) or higher, REBALANCE it to not be more than between 1% and 10% of your portfolio again (by selling a significant portion of it). CAREFULLY TRACK YOUR SUCCESS RATE. If you are no good at picking long shots, stick to the largest AND oldest marketcaps / HIGHEST ON-CHAIN ACTIVITY assets instead.
- Best of luck, be careful out there in this cryptoland frontier full of dead-end coins, garbage coins, scam coins, and greedy glorified (and NOT so glorified) crooks and their silver tongues (wolves in sheep's clothing)! 😮
How is my data stored by this app?
Random Tip: Show Another Tip
User Settings
Theme:
Sort Portfolio Data By:
Primary Currency Market: BTC / @ Stand-Alone Mode (WON'T automatically change Bitcoin market on "Update" page)
Price Change Visual / Audio Alerts:
Show Crypto Value Of ENTIRE Portfolio In: BTC / ETH / JUP / MKR / SOL / UNI
Show Secondary Trade / Holdings Values In:
Use cookies to save data: (un-checking this box deletes ALL previously-saved cookie data permanently)
Price Charts
Did you just install this app? If you would like to bootstrap the demo price chart data (get many months of spot price data already pre-populated), download it from github. Just replace your existing /cache/charts/spot_price_24hr_volume/archival folder with the one inside this download archive, and wait until the next background task runs fully (the app will detect the change and rebuild the [light] time period charts with the new chart data). It may take a few additional cron job / scheduled task runs (a couple hours for slower machines), for a full rebuild of all (light) time period charts.
Charts are only available to show for each asset properly configured in the Admin Config CHARTS AND ALERTS section. Charts (and price alerts) must be setup as a cron job or scheduled task on your app server (if you are running the "Server Edition"), or they will not work. The chart's tab / page, and chart data caching can be disabled in the Admin Config "Price Alerts / Charts" section, if you choose to not setup a cron job.
A few crypto exchanges only provide asset volume data (with no pair volume data included). If 24 hour pair volume is NOT available for a market, it will be emulated via the asset volume multiplied by the current asset market value (which gives us the rough pair volume for a better chart user experience).
The administrator has set the price charts primary currency market (in the Admin Config GENERAL section) to: USD @ Kraken (enables additional "USD Value" charts)
USD-paired BTC exchanges supported in this app are:
BitFinex / BitFlyer / Bitmex / BitStamp / Cex / CoinBase / CoinGecko.com USD / Gemini / HitBTC / Kraken / OkCoin
47 primary currency pairs are supported for conversion charts (in the Admin Config GENERAL section, using the "bitcoin_primary_currency_pair" setting):
AED / ARS / AUD / BDT / BRL / CAD / CHF / CLP / CZK / DAI / DKK / ETH / EUR / GBP / GEL / HKD / HUF / IDR / INR / JPY / KRW / KWD / LKR / MXN / MYR / NGN / NIS / NOK / NZD / PHP / PKR / PLN / RMB / RUB / SAR / SEK / SGD / SOL / THB / TRY / TWD / UAH / USD / USDC / USDT / VND / ZAR
!NOT! ALL EXCHANGES SUPPORT ALL CURRENCY PAIRS, double check any setting changes you make (and check the error log at /cache/logs/app_log.log for any reported issues).
v4.03.0 and higher charts are NOT backwards-compatible, as the 24 hour volume format was completely changed over to always be based off pair volume data only (24 hour asset volume is no longer supported).
- Setting this page as the 'start page' (top left) will save your vertical scroll position during reloads.
- If your web browser freezes on this page for a long time, try selecting fewer charts.
- Charts may take awhile to update with the latest data.
Default Chart Time Period:
Select Charts
*Charts are not activated by default to increase page loading speed / responsiveness. It's recommended to avoid activating too many charts at the same time, to keep your page load times quick.
Low memory devices (Raspberry Pi / Pine64 / etc) MAY CRASH #IF YOU SHOW TOO MANY CHARTS#.
You can enable "Use cookies to save data" on the Settings page before activating your charts, if you want them to stay activated between browser sessions.
Select / Unselect All (if "loading charts" notice freezes, check / uncheck this box, then click "Update Selected Charts")
Click the "Select Charts" button (top left) to add charts.
News Feeds
- Setting this page as the 'start page' (top left) will save your vertical scroll position during reloads.
- RSS feed data is cached (randomly) between 100 / 200 minutes for quicker load times.
- To see the date / time an entry was published, hover over it.
- Entries are sorted newest to oldest.
Select News Feeds
*News feeds are not activated by default to increase page loading speed / responsiveness. It's recommended to avoid activating too many news feeds at the same time, to keep your page load times quick.
Low memory devices (Raspberry Pi / Pine64 / etc) MAY CRASH #IF YOU SHOW TOO MANY NEWS FEEDS#.
You can enable "Use cookies to save data" on the Settings page before activating your news feeds, if you want them to stay activated between browser sessions.
Select / Unselect All (if "loading news feeds" notice freezes, check / uncheck this box, then click "Update Selected News Feeds")
Click the "Select News Feeds" button (top left) to add news feeds.
Tools
Using tools on this page that submit data for processing may need to set this page as the start page (to display the results on page reload), which you can reset afterwards at top left. If you have portfolio data you don't want to lose, be sure you have enabled "Use cookies to save data" on the Settings page before using these tools.
Staking / Mining
- Chain data (block height, difficulty, etc) is cached for 60 minute(s).
- *CUSTOM* POW mining calculators can be added in the file "dynamic-config.php" (in the app's main directory).
*Using these mining calculators will set this page as the start page, which you can reset afterwards at top left. If you have portfolio data you don't want to lose, be sure you have enabled "Use cookies to save data" on the Settings page before using these mining calculators.
Other Resources
Back To Top || Show Appreciation || Running Server Edition
Please show your appreciation for my crypto apps, IF you enjoy using them. Buying me a coffee / beer means WAY MORE to me than large donations. It's about letting me know you appreciate them / find them useful, NOT about me making money. Think of it as a PRIVATE app usage survey anon! :) All crypto addresses are bot-monitored (for balance changes) on active / well-secured / backed-up HD wallets...
so please let me know you appreciate my time spent, and buy me a coffee or beer! :)
Bitcoin:
3Nw6cvSgnLEFmQ1V4e8RSBG23G7pDjF3hW
Ethereum:
0x644343e8D0A4cF33eee3E54fE5d5B8BFD0285EF8
Solana:
GvX4AU4V9atTBof9dT9oBnLPmPiz3mhoXBdqcxyRuQnU
Github:
https://github.com/sponsors/taoteh1221
PayPal:
https://www.paypal.me/dragonfrugal
Patreon:
https://www.patreon.com/dragonfrugal
Venmo:
https://account.venmo.com/u/taoteh1221
Cash App:
https://cash.app/$taoteh1221
Help? / FAQ
Web server setup / install (for Server Edition) is available for $30 hourly if needed (see 'Manual Install' section for managed hosting, or try the auto-install bash script for self-hosted). PM me on Twitter / Skype / Telegram @ taoteh1221, or get a hold of me using the below-listed contact methods.
NOTES FOR BLACKHATS: P̵̫̊h̴̪̑ì̶̯s̵̫̀h̸̠̆i̶̔͜n̸̞͒g̶̳̏ ̸̺͐a̴͎̓n̷̜̕d̴̻͆ ̵̙̕b̶͓͝ř̵̗u̵̼̔t̷͖͐e̴̢͑ ̵̦͊f̸̱̃ö̶̦́r̷͉͌c̴̍͜ê̸͈ ̶̬̍l̴̙̾ō̸̗g̵̫̿ḯ̴̱ṅ̸̖ ̴̘́/̴̣̅ ̸̳̈d̶̡̃ẹ̶̈c̸̲͂r̶̰̋ỹ̵̨p̶̥͂t̷͍̎i̶̮̕o̸̝̎n̸̟͑ ̴͎͑/̶̹̑ ̶͉̎O̵̦̿T̵̜̄H̶̗̓Ę̶͗R̸̪̋ ̸̦̾ȃ̷̰t̸̪̂ṯ̸̐ä̶͈́c̸̫̈k̶͈̍s̴̳̀ ̸͇̎w̸̢͝i̶͕̍l̵̦͗l̵̗̽ ̷̱̀Ň̴͍Ō̶͓T̶̙́ ̸̺̆w̶̖̓o̸̠͝r̴̪̃k̵̞͠ ̴̪̎o̴͎̽n̸͎͘ ̸̗͘m̴̖͗ẽ̸̠,̴̨̆ ̴͙̇G̵̬̿Ĭ̴͍V̶͉̇E̸̳̐ ̴̯̾U̸̺͂P̶̩̀ ̴̨͌A̵͋͜L̴̤̎R̷̖͘Ē̸͕Â̸͍D̸̨̒Ÿ̶͜!̶͖͛
Have a question, feature you'd like to see added, or an issue to report? You can do that at the following URLs...
Issue Reporting (Features / Issues / Help): https://github.com/taoteh1221/Open_Crypto_Tracker/issues
Discord: https://discord.gg/WZVK2nm
Telegram: https://t.me/dragonfrugal
Twitter: https://twitter.com/taoteh1221
Private Contact: https://dragonfrugal.com/contact
Please show your appreciation for my crypto apps, IF you enjoy using them. Buying me a coffee / beer means WAY MORE to me than large donations. It's about letting me know you appreciate them / find them useful, NOT about me making money. Think of it as a PRIVATE app usage survey anon! :) All crypto addresses are bot-monitored (for balance changes) on active / well-secured / backed-up HD wallets...
Bitcoin: 3Nw6cvSgnLEFmQ1V4e8RSBG23G7pDjF3hW
Ethereum: 0x644343e8D0A4cF33eee3E54fE5d5B8BFD0285EF8
Solana: GvX4AU4V9atTBof9dT9oBnLPmPiz3mhoXBdqcxyRuQnU
Github Sponsors: https://github.com/sponsors/taoteh1221
Patreon: https://www.patreon.com/dragonfrugal
PayPal: https://www.paypal.me/dragonfrugal
Venmo: https://account.venmo.com/u/taoteh1221
Cash App: https://cash.app/$taoteh1221
https://github.com/taoteh1221/Open_Crypto_Tracker/releases
After downloading, unzip the contents of the download to your desktop or other preferred file location (it doesn't matter, put it wherever you want to). Now use your operating system's file browser to enter the app's main directory, and click on "RUN_CRYPTO_TRACKER" to launch the app (in Windows Desktop Edition, click "INSTALL_WEB_SERVER_FIRST" beforehand). TO USE PRICE CHARTS AND PRICE ALERTS TO EMAIL / TEXT / ALEXA / TELEGRAM, YOU #MUST# LEAVE THE APP RUNNING UNLESS YOU MANUALLY SETUP A CRON JOB / SCHEDULED TASK! (see: "Setting Up Price Charts And Email / Text / Telegram / Alexa Price Alerts")
IMPORTANT NOTES FOR WINDOWS USERS:
YOU NEED "7 ZIP" INSTALLED, TO OPEN AND EXTRACT THE DOWNLOAD ARCHIVE:
https://www.geeksforgeeks.org/how-to-download-and-install-7-zip-on-windows
IMPORTANT NOTES FOR LINUX USERS:
IF YOU GET THE ERROR: "CGI program sent malformed or too big", YOU LIKELY NEED TO BUILD A PHP BINARY THAT IS COMPATIBLE WITH YOUR UNIQUE SYSTEM SETUP. Try running the script "FIX-LINUX-DESKTOP.bash" (compatible with Debian / Fedora) in the Desktop Edition main folder, which should fix things automatically for you. Just make sure it's file permissions are set to "executable" (chmod +x, OR chmod 755 should do that). IMPORTANT STEP: YOU *MUST* SHUT DOWN THE DESKTOP EDITION OF THIS APP *BEFOREHAND*, OTHERWISE THIS SCRIPT *CANNOT* INSTALL THE CREATED PHP BINARY IT BUILDS!
Recommended MINIMUM system specs: 1 Gigahertz CPU / 512 Megabytes RAM / HIGH QUALITY 16 Gigabyte MicroSD card (running Nginx or Apache headless with PHP v7.2+)
Compatible With Raspberry Pi Zero W
To install / upgrade everything automatically on Debian / Ubuntu / RaspberryPi OS / DietPi OS / Armbian, copy => paste => run the command below in a terminal program (using the 'Terminal' app in the system menu, or over remote SSH), while logged in AS THE USER THAT WILL RUN THE APP (user must have sudo privileges):
wget --no-cache -O FOLIO-INSTALL.bash https://tinyurl.com/install-crypto-tracker;chmod +x FOLIO-INSTALL.bash;sudo ./FOLIO-INSTALL.bash
Follow the prompts. This automated script gives you the options to: install / uninstall a PHP app server automatically, download / install / configure / uninstall the latest version of the Open Crypto Tracker app automatically, setup a cron job automatically (for price alerts / price charts), and setup SSH (to update / install web site files remotely to the app server via SFTP) automatically.
When the auto-install is completed, it will display addresses / logins to access the app (write these down / save them for future use).
SEE DOCUMENTATION-ETC/RASPBERRY-PI for additional information on securing and setting up Raspberry Pi OS (disabling bluetooth, firewall setup, remote login, hostname, etc).
Your web host must have CURL modules activated on your HTTP server. Most web hosting companies provide this "out-of-the-box" already. This app will detect whether or not CURL is setup on your website server (and also alert you to any other missing required system components / configurations).
WINDOWS 10 / 11 USERS WHO ARE USING XAMPP WILL NEED TO ENABLE GD FOR PHP (FOR THE ADMIN LOGIN CAPTCHA SECURITY) BEFORE USING THIS APP. PLEASE SEE THE SCREENSHOT LOCATED AT /DOCUMENTATION-ETC/XAMPP-ENABLE-GD.png FOR A VISUAL ON SETTING THIS UP EASILY.
See "Setting Up Price Charts And Email / Text / Telegram / Alexa Price Alerts", for how to setup a cron job / scheduled task for additional features.
You can setup price charts or price alerts in your app install. Price alerts can be sent to email, mobile phone text, Telegram, and Alexa notifications. You will be alerted when the [configured default primary currency] price of an asset goes up or down a certain percent or more (whatever percent you choose in the settings), for specific exchange / base pair combinations for that asset. You can even setup alerts and charts for multiple exchanges / base pairs for the same asset.
Running price charts or price alerts requires setting up a cron job or scheduled task on the Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 machine or website server (this is automated for Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian users using the automated FOLIO-INSTALL.bash script / Windows 10 users who run the ADD-WIN10-SCHEDULER-JOB.bat file), otherwise charts / alerts will not work. Also see the related settings in Admin Config for charts / alerts.
Once a cron job or scheduled task is setup ON YOUR APP SERVER, there is no need to keep your PC / Laptop turned on (UNLESS you are running the app server on the same device). The price charts and price alerts run automatically from your Open Crypto Tracker app server installation. If you encounter errors or the charts / alerts don't work during setup, check the app logs file at /cache/logs/app_log.log for errors in your configuration setup. Basic checks are performed and errors are reported there, and on the Settings page.
If you decide to turn on cron job / scheduled task based features, then the file cron.php (located in the primary directory of this app) must be setup as a cron job or scheduled task on your Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 / website server device.
As mentioned previously, if you run the automated setup / install script for Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows 10 devices on home / internal networks, automatic cron job / scheduled task setup is offered as an option during this process. If you are using a full stack website host for hosting a TLD website domain name remotely, consult your app server host's documentation or help desk for their particular method of setting up a cron job.
Note that you should have the cron job run every 5, 10, 15, 20, or 30 minutes 24/7, based on how often you want chart data points / alerts / any other cron based features to run. Setting up the cron job to run every 20 minutes is the RECOMMENDED lowest time interval. IF SET BELOW 20 MINUTES, light (time period) chart disk writes may be excessive for lower end hardware (Raspberry PI MicroSD cards etc). IF SET #VERY LOW# (5 / 10 minutes), the free exchange APIs may throttle / block your data requests temporarily on occasion for requesting data too frequently (negatively affecting your alerts / charts).
FOR WINDOWS 10 / 11 USERS, just click and run the file 'ADD-WIN10-SCHEDULER-JOB.bat' found in the main directory of the app, follow the prompts, and everything will be automatically setup for you (if PHP-CLI isn't auto-detected, it allows you to manually enter the path to it). As long as you login into THE SAME Windows account after system startup, the scheduled task will run until your computer is shut off OR you logout of that user account (SO YOU *NO LONGER* NEED TO LEAVE THE *DESKTOP EDITION* APP RUNNING ANYMORE FOR SCHEDULED TASKS [if you use that edition]). ADDITIONALLY, IF YOU ARE RUNNING THE *DESKTOP EDITION*, YOU'LL *ALSO* NEED TO SET 'desktop_cron_interval' TO ZERO (IN THE ADMIN CONFIG "POWER USER" SECTION), AND RESTART / RELOAD THE DESKTOP APP.
FOR LINUX / MAC USERS, here is an example cron job command line for reference below (NOT including any cron parameters your host interface may require), to setup as the "command" within a cron job. Replace system paths in the example with the correct ones for your server (TIP - A very common path to PHP on a server is /usr/bin/php):
/path/to/php -q /home/username/path/to/website/this_app/cron.php
FOR LINUX (if you have systemd), here is another example of a COMPLETE cron command that can be added by creating the following file (you'll need sudo/root permissions): /etc/cron.d/cryptocoin on a linux-based machine with systemd (to run every 20 minutes 24/7)...play it safe and add a newline after it as well if you install examples like these (must be owned by "root" / chmod permission set to 644):
*/20 * * * * WEBSITE_USERNAME_GOES_HERE /usr/bin/php -q /var/www/html/cron.php > /dev/null 2>&1
FOR LINUX / MAC, if your system DOES NOT have the directory /etc/cron.d/ on it, then NEARLY the same format (minus the username) can be installed via the legacy 'crontab -e' command (YOU MUST BE logged in as the user you want running the cron job):
*/20 * * * * /usr/bin/php -q /var/www/html/cron.php > /dev/null 2>&1
Important Cron Job Notes:
MAKE SURE YOU ONLY USE EITHER /etc/cron.d/, or 'crontab -e', NOT BOTH...ANY OLD DUPLICATE CRONTAB ENTRIES WILL RUN YOUR CRON JOB TOO OFTEN. If everything is setup properly, and the cron job still does NOT run, your particular server MAY require the cron.php file permissions to be set as 'executable' ('750' chmod on unix / linux systems) to allow running it.
Below is an example for editing your assets / markets in the file config.php (located in the primary directory of this app), within the PORTFOLIO ASSETS section. It's very quick / easy to do (after you get the hang of it, lol). Also see the text file DOCUMENTATION-ETC/CONFIG-EXAMPLE.txt, for a pre-configured set of default settings and example assets / markets.
Contact any supported exchange's help desk if you are unaware of the correct formatting of the trading pair naming you are adding in the configuration file (examples: Kraken has arbitrary Xs inserted in SOME older pair names, HitBTC sometimes has tether pairs without the "T" in the symbol name, and bybit can prepend "1000" to low-unit-value coin's market IDs).
Support for over 50 trading pairs (country fiat currency or secondary crypto, contact me to request more):
AED / ARS / AUD / BDT / BRL / BTC / CAD / CHF / CLP / CZK / DAI / DKK / ETH / EUR / GBP / GEL / HKD / HUF / IDR / INR / JPY / JUP / KRW / KWD / LKR / MKR / MXN / MYR / NGN / NIS / NOK / NZD / PHP / PKR / PLN / RMB / RUB / SAR / SEK / SGD / SOL / THB / TRY / TWD / UAH / UNI / USD / USDC / USDT / VND / ZAR
Support for over 70 exchanges (contact me to request more):
aevo_futures / alphavantage_stock / binance / binance_us / bit2c / bitbns / bitfinex / bitflyer / bitmart / bitmex / bitmex_u20 / bitmex_z20 / bitso / bitstamp / btcmarkets / btcturk / buyucoin / bybit / cex / coinbase / coindcx / coinex / coingecko_aed / coingecko_ars / coingecko_bdt / coingecko_btc / coingecko_clp / coingecko_czk / coingecko_dkk / coingecko_eth / coingecko_gel / coingecko_hkd / coingecko_huf / coingecko_idr / coingecko_inr / coingecko_kwd / coingecko_lkr / coingecko_myr / coingecko_ngn / coingecko_nis / coingecko_nok / coingecko_nzd / coingecko_php / coingecko_pkr / coingecko_pln / coingecko_rmb / coingecko_rub / coingecko_sar / coingecko_sek / coingecko_sgd / coingecko_terminal / coingecko_thb / coingecko_twd / coingecko_uah / coingecko_usd / coingecko_vnd / coinspot / crypto.com / gateio / gemini / hitbtc / huobi / idex / jupiter_ag / korbit / kraken / kucoin / loopring_amm / luno / okcoin / okex / poloniex / presale_usd_value / unocoin / upbit / wazirx / zebpay
Nearly Unlimited Assets Supported (whatever assets exist on supported exchanges).
Ethereum ICO subtoken support (pre-exchange listing) has been built in (values are static ICO values in ETH).
USAGE (ADDING / UPDATING COINS):
// UPPERCASE_COIN_TICKER_HERE
'UPPERCASE_COIN_TICKER_HERE' => array(
'name' => 'COIN_NAME_HERE',
// Website slug (URL data) on coinmarketcap / coingecko, leave blank if not listed there
'mcap_slug' => 'WEBSITE_SLUG_HERE',
// MARKET IDS ARE CASE-SENSITIVE!
'pair' => array(
'lowercase_pair_abrv' => array(
'lowercase_exchange1' => 'MARKETIDHERE',
'lowercase_exchange2' => 'ASSET/PAIR',
'lowercase_exchange3' => 'ASSET-PAIR',
'lowercase_exchange4' => 'ASSET_PAIR',
'lowercase_exchange5' => 'ASSETPAIR',
// GENERIC PAIR PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
// LOWERCASE_PAIR_ABRV MUST BE SUPPORTED BY COINGECKO'S 'vs_currencies' API PARAMETER!
'coingecko_LOWERCASE_PAIR_ABRV' => 'coingecko_api_id_here',
),
'eth' => array(
'lowercase_exchange1' => 'MARKETIDHERE',
'lowercase_exchange2' => 'ASSET/ETH',
'lowercase_exchange3' => 'ASSET-ETH',
'lowercase_exchange4' => 'ASSET_ETH',
'lowercase_exchange5' => 'ASSETETH',
// GENERIC ETH PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
'coingecko_eth' => 'coingecko_api_id_here',
),
'btc' => array(
// GENERIC BTC PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE SET COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
'coingecko_btc' => 'coingecko_api_id_here',
),
'usd' => array(
// GENERIC USD PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
'coingecko_usd' => 'coingecko_api_id_here',
// GENERIC *DEX* USD PRICE (IF NOT LISTED *ANYWHERE* BESIDES DEXS [DECENTRALIZED EXCHANGES])
'coingecko_terminal' => 'network_name_here||pool_address_here',
// Token Presales IN USD...TOKENNAME MUST be defined in 'token_presales_usd' (Admin Config CURRENCY SUPPORT section)
'presale_usd_value' => 'TICKER_HERE',
),
'eur' => array(
// GENERIC EUR PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
'coingecko_eur' => 'coingecko_api_id_here',
),
'gbp' => array(
// GENERIC GBP PRICE (IF NO EXHANGE APIs AVAILABLE)
// USE COINGECKO'S API ID FOR THIS ASSET (SEE COINGECKO ASSET PAGE'S INFO SECTION)
'coingecko_gbp' => 'coingecko_api_id_here',
),
) // pair END
), // Asset END
// UPPERCASE_STOCK_TICKER_HERESTOCK
// (*ALWAYS* APPEND WORD "STOCK" TO THE TICKER HERE, to designate as a stock [NOT crypto / fiat])
'UPPERCASE_STOCK_TICKER_HERESTOCK' => array(
'name' => 'STOCK_NAME_HERE',
// Website slug (URL data) on Google Finance, leave blank if not listed there
'mcap_slug' => 'UPPERCASE_STOCK_TICKER_HERE:EXCHANGE_NAME_HERE',
// MARKET IDS ARE CASE-SENSITIVE!
'pair' => array(
'usd' => array(
'alphavantage_stock' => 'ALPHAVANTAGE_TICKER_ID_HERE',
),
/*
///////////////////////////////////////////////////
'ALPHAVANTAGE_TICKER_ID_HERE' EXAMPLES FOR STOCKS...
(SEE EXAMPLES IN CONFIG.PHP FOR MORE DETAILS ON ADDING STOCKS)
///////////////////////////////////////////////////
IBM (United States):
IBM
Tesco PLC (UK - London Stock Exchange):
TSCO.LON
Shopify Inc (Canada - Toronto Stock Exchange):
SHOP.TRT
GreenPower Motor Company Inc (Canada - Toronto Venture Exchange):
GPV.TRV
Daimler Truck Holding AG (Germany - XETRA):
DTG.DEX
Reliance Industries Limited (India - BSE):
RELIANCE.BSE
SAIC Motor Corporation (China - Shanghai Stock Exchange):
600104.SHH
China Vanke Company Ltd (China - Shenzhen Stock Exchange):
000002.SHZ
///////////////////////////////////////////////////
*/
) // pair END
), // Asset END
SEE DOCUMENTATION-ETC/CONFIG-EXAMPLE.txt FOR A FULL EXAMPLE OF THE DEFAULT CONFIGURATION (ESPECIALLY IF YOU MESS UP config.php, lol)
If you recently upgraded to a newer version of this app, and layout or features don't work properly anymore, you may need to clear your browser cache (temporary files) and restart you browser / refresh the page afterwards. This will assure your browser is loading any newly-updated layout styling or javascript-based features.
If your problems still persist even after clearing your browser cache (temporary files) and restarting your browser, your config.php setup may be corrupt IF YOU EDITED IT BY HAND. If you did edit it by hand, try backing up you old config.php file, and replacing it with the default config.php file included with the latest release. This will ensure your configuration setup is not corrupt from messed up file formatting.
If none of the above solutions work, your last resort (before contacting me for support) is to wipe out all data in your cache directory folder within the app. THIS WILL ERASE YOUR CHART DATA, SO YOU MAY WANT TO BE SURE YOU HAVE A BACKUP FIRST. After your chart data is backed up, delete the folder named 'cache' in the main directory of this app. Reloading the app web page should re-create the cache folder, with new / clean cache files.
If you are still having issues after trying everything, file an issue here at the github project account, and I will help you troubleshoot the problems: https://github.com/taoteh1221/Open_Crypto_Tracker/issues
If you are sure your username / password / host:port setup are valid, try disabling SMTP email sending by blanking out your username / password / host:port (in the Admin Config COMMUNICATIONS section), and see if PHP's built-in mail function sends emails OK (no setup required, other than SMTP settings must be blanked out).
Important Note:
SMTP email sending is REQUIRED if you are running this app on a home network, or if reverse DNS hasn't been properly setup for the TLD domain hosted on this device (servers receiving email from this machine would likely blackhole it, or mark it as junk email).
If everything runs great AFTER disabling proxies, you probably have either a bad / misconfigured / low quality proxy, or an API server / endpoint address is not responding properly when routed through proxies (example: HTTP used instead of HTTPS can cause this error). If you are absolutely sure your proxy setup is ok / high quality, and that an API connection built-in to this app is the issue, please report it.
ADDITIONAL NOTES: Recieving alerts by email / text / Alexa / Telegram when a proxy connection FAILS is available in the Admin Config PROXIES section. When a proxy connection fails, this app will run a checkup on that proxy, and send you the results.
If you already have plenty of disk space quota freed up / your cache folder permissions are readable / writable, and you still have file write issues on linux-based operating systems, you MAY need to setup a higher "open files" limit for your website user account (ESPECIALLY if your app server is running MUTIPLE APPS SIMULTANEOUSLY). If you have shell access you can login and run this command to check your current limits:
ulimit -n
If it's a low number like 1024, this MAY be the cause of your file write error issue (especially if you run multiple web apps that write a lot of data on the same account). If you are running a dedicated or VPS server, you can easily change this limit.
Running a google search for "set permanently ulimit -n linux", you'll find tons of articles on permanently upping your user's open files limit:
https://www.google.com/search?q=set+permanently+ulimit+-n+linux
To adjust the API timeout, go to the Admin Config EXTERNAL APIS section. Adjust the 'remote_api_timeout' setting much higher, save the setup in the app, and run the app again to see if this fixes the issue. Adjust higher again if the issue still occurs frequently. DON'T SET 'remote_api_timeout' TOO HIGH though, or any unresponsive connections may cause the app to take a very long time to load / reload.
Luckily EVEN ON SHARED HOSTING some web host companies allow you to set the PHP sessions directory location. See the screenshot in /DOCUMENTATION-ETC/PHP-SESSIONS-DIRECTORY-SETTING.png in the main directory of this app, for details on using your own directory (AFTER YOU CREATE IT IN A FILE MANAGER) on the correct php.ini setting.
./php-cgi-custom INSTALL_CRYPTO_TRACKER_HERE/index.php
If you see an error like this below, you system is NOT compatible with the included "php-cgi-custom" PHP binary, and you'll need to build a new one for your system:
./php-cgi-custom: error while loading shared libraries: XXXXX.so.X: cannot open shared object file: No such file or directory
Try running the script "FIX-LINUX-DESKTOP.bash" (compatible with Debian / Fedora) in the Desktop Edition main folder, which should fix things automatically for you. Just make sure it's file permissions are set to "executable" (chmod +x, OR chmod 755 should do that). IMPORTANT NOTE: YOU *MUST* SHUT DOWN THE DESKTOP EDITION OF THIS APP *BEFOREHAND*, OTHERWISE THIS SCRIPT *CANNOT* INSTALL THE CREATED PHP BINARY IT BUILDS!
Open a terminal and use the "cd" (change directory) command to go to the main directory of the Desktop Edition, and then type this command:
./FIX-LINUX-DESKTOP.bash
If this automated script gives you issues, see manual PHP build instructions below...
Documentation for manually building custom PHP binaries on linux can be found here (as well as the source code to download to build it with):
https://github.com/php/php-src/blob/master/README.md
Here is the SPECIFIC "./configure" command (mentioned in the above documentation link) you will need to build PHP with the REQUIRED extensions that the Desktop Edition of this crypto tracker app NEEDS:
./configure \
--enable-bcmath \
--enable-gd \
--enable-calendar \
--enable-dba \
--enable-exif \
--enable-ftp \
--enable-fpm \
--enable-mbstring \
--enable-shmop \
--enable-sigchild \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--with-libdir=lib64 \
--with-zip \
--with-bz2 \
--with-curl \
--with-gettext \
--with-openssl \
--with-pdo-mysql \
--with-zlib \
--with-libxml \
--with-freetype \
--prefix=$HOME/customphp
After using the above configuration, and then running "make", when you then run "make install" AFTERWARDS, your custom PHP binaries with be installed to a new directory in your home folder called "customphp". Inside this folder you will find a subdirectory named "bin". Inside this subdirectory you'll find the custom PHP binary named "php-cgi". Copy this file "php-cgi" over into the main directory of your linux Desktop Edition of the crypto tracker app. Now delete the old "php-cgi-custom" file in there, and rename the new "php-cgi" file to be named "php-cgi-custom" instead. The linux Desktop Edition of this crypto tracker app should now work fine, if it was indeed a shared library problem.
Take advantage of this app's built-in functions / classes, and your config settings (alert comm channels setup, etc) to create your own custom plugins WITH MINIMAL CODING REQUIRED, to add features to this app.
STEPS TO CREATE YOUR OWN PLUGIN...
1) Create a new subdirectory inside the main /plugins/ directory of this app, and name it after your plugin name.
Example: "/plugins/my-app-plugin/" (must be lowercase)
2) Create a new subdirectory inside the new plugin directory created in step #1, named "plug-lib".
Example: "/plugins/my-app-plugin/plug-lib/" (must be lowercase)
3) Create a blank INIT file (plugin runtime starts here) inside the new "plug-lib" directory created in step #2, with the name "plug-init.php".
Example: "/plugins/my-app-plugin/plug-lib/plug-init.php" (must be lowercase)
4) OPTIONALLY create a blank CLASS file (custom class logic goes here), inside the new "plug-lib" directory created in step #2, with the name "plug-class.php".
Example: "/plugins/my-app-plugin/plug-lib/plug-class.php" (must be lowercase)
5) All ADDED LOGIC in this "plug-class.php" file is AUTO-INCLUDED IN A NEW CLASS NAMED "$plug['class'][$this_plug]" USING THIS FORMAT BELOW...
CREATES THIS PLUGIN'S CLASS OBJECT DYNAMICALLY AS:
$plug['class'][$this_plug] = new class() {
var my_var_1 = 'Testing 123';
var my_var_2 = 'World';
function my_function_1($var) {
return ' Hello ' . $var . '! ';
}
};
// END class
Examples of calling plugin class objects (ANYWHERE FROM WITHIN "plug-init.php" ONWARDS):
echo $plug['class'][$this_plug]->my_var_1;
echo $plug['class'][$this_plug]->my_function_1( $plug['class'][$this_plug]->my_var_2 );
echo $plug['class'][$this_plug]->my_function_1('Kitty');
ADDING USER-INPUT VALIDATION FOR THE PLUGIN'S ADMIN SETTINGS PAGE:
To AUTOMATICALLY INCLUDE your custom user-input validation logic for your plugin's admin settings page (created in step 14 below), add the EXACT function name "admin_input_validation" into your class file mentioned above:
$plug['class'][$this_plug] = new class() {
// Validating user input in the admin interface
function admin_input_validation() {
global $ct, $plug, $this_plug;
// Logic here
$ct['update_config_error'] = ''; // No input errors
$ct['update_config_error'] = 'Input error description goes here'; // An error has ocurred
return $ct['update_config_error'];
}
};
// END class
If
$plug['class'][$this_plug]->admin_input_validation()
returns false / null / '' (set blank), then the app will consider the user-input VALIDATED. OTHERWISE, it will halt updating of your plugin's settings, and show the end-user your error message in the user interface.
6) Create a blank CONFIG file (plugin configs go here) inside the new plugin directory created in step #1, with the name "plug-conf.php".
Example: "/plugins/my-app-plugin/plug-conf.php" (must be lowercase)
NOTES: plug-conf.php MUST only contain STATIC VALUES (dynamic values are NOT allowed), as all configs are saved to / run from cache file: /cache/secured/ct_conf_XXXXXXXXX.dat That said, you CAN create a "placeholder" (empty) configuration value / array in plug-conf.php (for clean / reviewable code), and then dynamically populate it AT THE TOP OF your plug-init.php logic (BEFORE your plugin needs to use that config setting).
7) All "plug-conf.php" PLUGIN CONFIG settings MUST BE INSIDE THE ARRAY "$plug['conf'][$this_plug]" (sub-arrays are allowed).
$plug['conf'][$this_plug]['SETTING_NAME_HERE'] = 'mysetting';
$plug['conf'][$this_plug]['SETTING_NAME_HERE'] = array('mysetting1', 'mysetting2');
8) The "plug-conf.php" PLUGIN CONFIG SETTING 'runtime_mode' IS MANDATORY (plugin WILL NOT be allowed to activate if invalid / blank), to determine WHEN the plugin should run (as a webhook / during cron jobs / user interface loading / all runtimes / etc).
$plug['conf'][$this_plug]['runtime_mode'] = 'cron'; // 'cron', 'webhook', 'ui', 'all'
When 'runtime_mode' is set to 'webhook', you can pass ADDITIONAL parameters (forwardslash-delimited) *AFTER* THE WEBHOOK KEY in the webhook URL:
https://mydomain.com/hook/WEBHOOK_KEY/PARAM1/PARAM2/PARAM3/ETC
These parameters are then automatically put into a PHP array named: $webhook_params
The webhook key is also available, in the auto-created variable: $webhook_key
9) The "plug-conf.php" PLUGIN CONFIG SETTING 'ui_location' IS OPTIONAL, to determine WHERE the plugin should run (on the tools page, in the 'more stats' section, etc...defaults to 'tools' if not set).
$plug['conf'][$this_plug]['ui_location'] = 'tools'; // 'tools', 'more_stats'
10) The "plug-conf.php" PLUGIN CONFIG SETTING 'ui_name' IS OPTIONAL, to determine THE NAME the plugin should show as to end-users (defaults to $this_plug if not set).
$plug['conf'][$this_plug]['ui_name'] = 'My Plugin Name';
11) ADDITIONALLY, if you wish to trigger a RESET on any particular plugin settings during config upgrades (for ACTIVATED plugins), include an array named $ct['dev']['plugin_allow_resets'][$this_plug] *ABOVE* YOUR PLUGIN CONFIG SETTINGS.
$ct['dev']['plugin_allow_resets'][$this_plug] = array('plugin-setting-key-1', 'plugin-setting-key-2');
This will COMPLETELY RESET these plugin settings, using the DEFAULT settings in the currently-installed version of the plugin, during upgrade checks on the cached config.
12) OPTIONALLY, create a new subdirectory inside the new plugin directory created in step #1, named "plug-assets".
Example: "/plugins/my-app-plugin/plug-assets/" (must be lowercase)
THIS IS #REQUIRED TO BYPASS THE USUAL SECURITY# OF OTHER-NAMED DIRECTORIES, SO IMAGES / JAVASCRIPT / CSS / ETC CAN BE LOADED #ONLY FROM HERE#...OTHERWISE ANY DIFFERENT-NAMED ASSETS DIRECTORY #WILL BE DENIED ACCESS# OVER HTTP / HTTPS!
13) OPTIONALLY, create a new subdirectory inside the new plugin directory created in step #1, named "plug-templates".
Example: "/plugins/my-app-plugin/plug-templates/" (must be lowercase)
14) OPTIONALLY create a blank ADMIN TEMPLATE file (admin interface settings go here), inside the new "plug-templates" directory created in step #13, with the name "plug-admin.php".
Example: "/plugins/my-app-plugin/plug-templates/plug-admin.php" (must be lowercase)
IMPORTANT NOTES: Since
'runtime_mode'
/ 'ui_location'
/ 'ui_name'
(mentioned further up in steps 8, 9, and 10) are DEVELOPER settings, THEY ARE *AUTOMATICALLY* HIDDEN IN THIS ADMIN INTERFACE YOU CREATE (they are rendered as HIDDEN fields in the admin page's form data). See the bundled plugins for examples on choosing different HTML form field types to render your specific settings. All form field types are available to AUTOMATICALLY RENDER your settings for end-user updating, via this admin interface template.
15) OPTIONALLY create a blank DOCUMENTATION TEMPLATE file (usage / documentation for end-user goes here [and is automatically linked at the top of this plugin's admin page]), inside the new "plug-templates" directory created in step #13, with the name "plug-docs.php".
Example: "/plugins/my-app-plugin/plug-templates/plug-docs.php" (must be lowercase)
16) We are done setting up the plugin files / folders, so now we need to activate the new plugin. IN THE "Admin Config" PLUGINS section, locate the plugins list.
17) To add / activate your new plugin IN CONFIG.PHP (only required in high security admin mode), add your plugin MAIN FOLDER name (example: 'my-app-plugin') as a new value within the plugins list, and set to 'on'...ALSO INCLUDE A COMMA AT THE END.
'my-app-plugin' => 'on',
Otherwise, your new plugin should automatically show in the admin 'Plugins' section, defaulted to 'off'. Just enable it there.
Now you are ready to write your custom plugin code in PHP, inside the new plugin files you created. See the example code in the included plugins inside the /plugins/ directory, for useful code snippets to speed up your plugin development.
IMPORTANT NOTES:
!!NEVER ADD A PLUGIN SOMEBODY ELSE WROTE, UNLESS YOU OR SOMEONE YOU TRUST HAVE REVIEWED THE CODE AND ARE ABSOLUTELY SURE IT IS NOT MALICIOUS!!
"plug-conf.php" files are loaded on main app initiation, so they can be included in the GLOBAL cached app config (allowing the editing of these config settings in the admin interface, etc).
"plug-init.php" files are where plugins first start loading from, so you edit these files like you would the first file containing the programming logic for your plugin. You are free to add and include more files / folders inside your plugin main folder, in the same way you would build an ordinary application. Any config settings / class functions and variables you have in "plug-conf.php" and "plug-lib/plug-class.php" are automatically available to use in "plug-init.php", and in any other plugin files you create that run within / after the initial "plug-init.php" logic.
CRON-DESIGNATED PLUGINS (PLUGINS FLAGGED TO RUN DURING CRON JOBS) DO RUN #LAST# WITHIN THE CRON RUNTIME (AND THEREFORE ARE #NOT# INCLUDED IN RUNTIME STATS DATA LIKE HOW MANY SECONDS IT RAN / SYSTEM LOAD), SO EVEN IF YOUR CUSTOM PLUGIN CRASHES, #EVERYTHING ELSE# IMPORTANT RAN BEFOREHAND ANYWAY.
ALWAYS TEST YOUR CODE, TO MAKE SURE IT DOESN'T CRASH THE APP.
The primary goal of the Open Crypto Tracker project is to provide a 100% FREE / PRIVATE / Open Source cryptocurrency tracker to the crypto community, that 'just works', is easy to use, AND maintains a high level of user privacy / security. Previously known as 'DFD Cryptocoin Values', Open Crypto Tracker has been in active development since August of 2014. The source code was released on github.com later in September of 2015, under the "Open Source" GPL (version 3) license.
Anybody can FULLY audit the security of this app's codebase (or hire someone to do so for them), and report or fix any issues found, or contribute new features. You can even 'fork' your own version of the codebase, as long as you leave licensing / attribution in place within your fork. More information on project ethos and contributing to this project can be found in CONTRIBUTING.txt (in the app's main directory).
Runtime: 0.858 seconds