The Basics of Technical Analysis: Crypto Guide 2026
Master the basics of technical analysis for crypto. This 2026 guide covers trends, indicators, chart patterns, and combining TA with on-chain data.

June 19, 2026
Wallet Finder

June 13, 2026

You close a trade, check the realized gain, and feel good about the exit. Then the annoying question hits: how long did you hold that position?
For a clean spot buy and sell, the answer sounds easy. In a real DeFi wallet, it usually isn't. You might have scaled in across several swaps, sold only part of the bag, restaked rewards, bridged the asset, or received a replacement token after a migration. Your PnL dashboard can still look neat while your holding period calculation is a mess.
That gap matters. A position's return tells you whether the trade worked. Its holding period tells you how the trade should be classified, compared, and reported. Experienced traders need both.
A common mistake among active traders is treating realized PnL as the final answer. It isn't. It's only the price outcome.
Take a familiar sequence. You buy a token, add on weakness, trim into strength, then rotate the rest into another asset on a DEX. Weeks later, your wallet tracker shows a profitable series of trades. But once you try to classify each disposal, the easy story breaks. Which lot did that partial sale come from? Did the swap reset the clock? Did the staking rewards start a separate holding period?
Calculating the holding period marks a shift for traders from casual record-keeping to a professional process. If you only measure gain and loss, you're missing the time dimension of the trade. That time dimension often decides whether a disposal belongs in one reporting bucket or another, and it changes how you evaluate your own execution discipline.
A lot of performance review frameworks ignore this. They focus on attribution, entry timing, and exit efficiency. Those are useful, especially if you're already reviewing portfolio performance attribution methods. But a trade log that doesn't preserve holding periods is incomplete.
The problem usually shows up after the fact:
Practical rule: If your wallet history includes more than a simple buy and full sale, your holding period calculation is already a lot-level problem, not a wallet-level one.
The traders who handle this well don't wait until reporting season. They record acquisition events, disposal events, and lot changes while the strategy is still fresh.
A trader buys ETH, stakes it, receives rewards, swaps part of the position into stETH, then sells only a slice weeks later. The PnL may look straightforward in a dashboard. The holding period and the return math usually are not.
Holding period measures how long a specific lot was owned. Holding Period Return, or HPR, measures what that lot produced over that ownership window, including price change and any cash flow or in-kind income tied to it.

Traders often blur those concepts because both show up in the same position review. They should stay separate. One answers a timing question. The other answers a performance question.
A clean way to frame it:
| Concept | What it measures | Why traders use it |
|---|---|---|
| Holding period | Time between acquisition and disposal of a lot | Tax treatment, lot matching, strategy discipline |
| HPR | Total economic return during that period | Comparing outcomes across trades, wallets, and strategies |
HPR is broader than price appreciation. If a position earns staking rewards, lending interest, liquidity fees, or other token distributions while you hold it, those proceeds belong in the return calculation. In crypto, that distinction matters because many positions generate value before the final exit.
Basic guides usually assume one purchase, one sale, one asset, one timeline. Real wallets do not behave that way.
A single trade idea can produce several separate lots. Buy ETH on Arbitrum. Bridge it to mainnet. Stake it. Receive a liquid staking token. Sell part of that derivative. Claim rewards later. Economically, the trader may view that as one continuous position. From a holding period perspective, it may be several acquisition and disposal events that need separate treatment.
That is the point advanced traders miss when they rely on exchange exports or wallet summaries. Wallet-level reporting compresses activity. Holding period analysis needs lot-level history.
Use three layers in the ledger:
This separation prevents a common reporting error. A strategy can have strong aggregate returns while the underlying lots have very different holding periods, cost bases, and tax outcomes.
Holding period asks: how long did I own this lot?
HPR asks: what did this lot earn while I owned it?
That sounds simple. It stays simple only if the ledger preserves each event in the right layer from the start.
For crypto traders, that means treating swaps, reward claims, rebases, wrappers, and partial disposals as accounting events, not just portfolio activity. Once you do that, holding period calculation stops being a vague date count and becomes a usable input for execution review, tax treatment, and on-chain strategy analysis.
At the simplest level, holding period calculation is just disposal date minus acquisition date. That sounds trivial, but traders still trip over the same issue: what exactly counts as the start and end of ownership?
Most basic explanations treat it as purchase date to sale date using a straight day count, often excluding the purchase day. That convention is fine for simple examples. It starts to fail when you assume it will also solve lot splits and DeFi events.
Start with a plain stock trade because the mechanics are easy to see.
You buy shares on Monday. You sell the full position later. To calculate the holding period, you identify the acquisition date, identify the disposal date, then count the elapsed time according to the method your reporting framework uses.
A clean workflow looks like this:
If you bought once and sold once, you can usually calculate the answer directly from the trade records without much debate.
Now use the same logic for a spot ETH trade on a centralized venue or through a single on-chain buy.
You acquire ETH in one transaction and later dispose of all of it in one separate transaction. The steps are still straightforward:
| Step | What to check | Why it matters |
|---|---|---|
| Acquisition | The transaction where ETH entered your wallet or account | Establishes the starting lot |
| Disposition | The transaction where that ETH was sold or swapped out | Establishes the end of ownership |
| Quantity match | Full disposal vs partial disposal | Tells you whether one lot or multiple lots are involved |
| Timestamp source | Exchange record or block timestamp | Gives you an auditable event time |
The mistake isn't the math. It's assuming every crypto trade stays this clean.
What works:
What doesn't:
A basic holding period calculation is simple only when the trade history is simple. The moment quantity, source, or ownership path changes, you need lot accounting.
A wallet buys 12 ETH in January, stakes part of it in March, swaps 4 ETH into stETH in April, sells 3 ETH in June, receives staking rewards every few days, and later gets a token from a protocol migration. PnL is easy to summarize. Holding period is not.

Basic crypto guides often falter, as they assume one acquisition, one disposal, one clean timestamp trail. DeFi trading produces lot fragmentation, contract-level transformations, and assets that appear through rewards, claims, and protocol actions. If you want defensible holding periods, treat each wallet event as a potential lot event first, then decide whether it starts, continues, splits, or ends a holding clock.
A partial sale has no single holding period unless the sold quantity is tied to specific acquisition lots.
If a wallet accumulated the same token across multiple buys, LP withdrawals, or bridge receipts, then sold only part of the balance, the answer depends on the matching rule. FIFO, LIFO, and specific identification can all produce different holding periods for the same disposal. The trade-off is practical, not theoretical. FIFO is easier to audit. Specific ID gives more control, but only if records are clean enough to defend the match.
Use a lot-level decision process:
| Scenario | What you need to determine | What changes |
|---|---|---|
| One buy, one partial sale | Whether the disposal comes only from that original lot | Unsold units keep the original acquisition date |
| Multiple buys, one partial sale | Which acquisition lots were matched to the sale | Each matched lot can have a different holding period |
| Repeated trims over time | Whether each trim was matched at the time of disposal | Late matching creates avoidable reconciliation work |
Wallet balance charts are not enough here. The calculation has to follow matched units.
On-chain traders rotate exposure constantly. ETH becomes stETH, stETH becomes wstETH, one stablecoin becomes another, or a governance token gets swapped into a perp margin asset. The market thesis may be continuous, but the asset history usually is not.
For holding period purposes, a swap commonly ends the clock on the asset sent out and starts a new clock on the asset received. That default is conservative and easier to audit. It also prevents a common mistake in DeFi reporting, where traders treat every rotation as one uninterrupted position because capital never left the market.
Correlated assets create the most confusion. Swapping cbETH for rETH may leave the portfolio with similar staking exposure, but similarity is not the same thing as lot continuity. If the token identifier changed, start by assuming you have a disposal and a new acquisition, then document any exception clearly.
Assets that arrive without a straightforward buy ticket need a policy before you calculate anything.
A workable framework looks like this:
One practical test helps. If the contract changed, the ticker changed, or the protocol created a new claim right, stop and classify the event before assigning any holding period.
Experienced traders do not start with the formula. They start with event taxonomy.
Before calculating a single holding period, label each transaction as one of these:
That step removes a large share of downstream errors. A bridge deposit should not reset a holding clock if it is only an internal transfer. A migration contract interaction might reset it. A staking reward definitely should not inherit the acquisition date of the principal asset without an explicit rule.
For active wallets, manual review does not scale. Pull the transaction set, classify events, then verify the ambiguous ones against the chain. A good starting point is to verify wallet activity directly on-chain before assigning lots or export rules. That extra step saves time later, especially when a single wallet has swaps, claims, and transfers that look identical in a portfolio app but represent different holding-period outcomes.
If your source data is wrong, the calculation will be wrong too. For on-chain traders, the blockchain explorer is the final audit trail.

Public explorers like Etherscan, Solscan, and BaseScan let you inspect the exact transaction that created or disposed of a lot. If a portfolio tool's timestamps look odd, check the chain yourself. That's also the fastest way to verify wallet activity directly on-chain.
For each acquisition or disposal event, extract:
Don't start by scrolling your entire history. Work from a candidate disposal backward.
This is tedious the first time. After a few sessions, it becomes a repeatable control process.
The explorer gives you facts. It doesn't always give you classification.
| Explorer output | What it tells you | What you still need to decide |
|---|---|---|
| Token transfer in | Asset entered the wallet | Purchase, reward, bridge receipt, or airdrop |
| Token transfer out | Asset left the wallet | Sale, swap, internal transfer, or contract deposit |
| Contract call | Wallet interacted with protocol logic | Whether ownership changed in a way that starts or ends a holding period |
That's why a good ledger has both raw chain data and human-readable event labels. The timestamp is objective. The accounting treatment still needs a rule set.
Manual reconciliation works for a handful of trades. It breaks once you actively trade across chains, rotate fast, or farm rewards. At that point, you need an export pipeline and a deterministic matching process.

The basic workflow is simple. Export transaction history into CSV, normalize the event types, sort by timestamp, then run a lot-matching engine. If you're enriching market values alongside transaction history, it helps to understand external data pipelines like the CoinGecko API documentation guide.
Before writing code, define the fields your process needs.
A practical schema usually includes:
| Field | Why you need it |
|---|---|
| timestamp | Orders all acquisition and disposal events |
| wallet | Separates ownership entities |
| asset | Defines the lot bucket |
| quantity | Sizes the lot or disposal |
| event_type | Buy, sell, swap, reward, bridge, claim, transfer |
| tx_hash | Auditable reference |
| source_chain | Needed for cross-chain reconciliation |
| counter_asset | Important for swaps and LP events |
If your exports don't contain a clean event type, create one as a preprocessing step. That classification layer is where most automation projects succeed or fail.
A simple FIFO engine can be expressed like this:
lots = {}for tx in transactions_sorted_by_time:key = (tx.wallet, tx.asset)if tx.event_type in ["buy", "reward", "claim", "airdrop_receipt"]:lots.setdefault(key, []).append({"acquired_at": tx.timestamp,"quantity_remaining": tx.quantity,"tx_hash": tx.tx_hash})elif tx.event_type in ["sell", "swap_out", "disposal"]:qty_to_match = tx.quantitywhile qty_to_match > 0 and lots.get(key):oldest_lot = lots[key][0]matched_qty = min(qty_to_match, oldest_lot["quantity_remaining"])record_disposal_match(wallet=tx.wallet,asset=tx.asset,acquired_at=oldest_lot["acquired_at"],disposed_at=tx.timestamp,quantity=matched_qty,acquisition_tx=oldest_lot["tx_hash"],disposal_tx=tx.tx_hash)oldest_lot["quantity_remaining"] -= matched_qtyqty_to_match -= matched_qtyif oldest_lot["quantity_remaining"] == 0:lots[key].pop(0)This won't solve every DeFi edge case, but it gives you the right core behavior. Every disposal is matched against prior lots in a defined order, and every matched fragment gets its own holding period.
After the base engine works, layer in rules:
A visual walkthrough helps if you're building this process into a repeatable research stack.
Automation doesn't remove judgment. It moves judgment upstream into explicit rules, which is exactly where it belongs.
Once those rules are written down, the calculation becomes scalable and reviewable. That's what you want if multiple wallets, analysts, or reporting periods are involved.
Holding period calculation isn't bookkeeping theater. It affects compliance, reporting quality, and trading decisions.
In many jurisdictions, the classification of a gain depends in part on how long the asset was held. That's why a disposal that happens just before or just after a threshold can lead to materially different treatment. I won't give jurisdiction-specific numbers here. The point is simpler: if your timestamps and lot matching are sloppy, your reporting can be wrong even when your gross PnL is correct.
Advanced traders already manage entry timing, exits, and position sizing. Holding period should sit inside that same discipline.
Good records help you answer questions like:
They don't wait until the end of the year and hope a dashboard sorts it out.
They maintain:
| Practice | Benefit |
|---|---|
| Lot-level records | Makes partial disposals auditable |
| Written event rules | Keeps treatment consistent across rewards, bridges, and migrations |
| Explorer-based verification | Confirms disputed timestamps |
| Periodic reconciliation | Prevents a backlog of unresolved exceptions |
Accurate holding period calculation is part of risk management. It reduces the chance that a profitable strategy turns into a reporting problem.
None of this is legal or tax advice. If you trade actively, especially across DeFi protocols and multiple chains, work with a qualified crypto-aware tax professional and bring them organized records, not screenshots and guesses.
If you want a faster way to turn raw wallet activity into something you can analyze, Wallet Finder.ai helps you inspect wallet histories, trades, timing, and exports in a format that's much easier to audit and work with offline. For traders who track smart money and need cleaner on-chain records, it's a practical starting point.