Skip to content
All hypotheses

Hypotheses

Chaos TqSdk RSI(6) 35/65 Re-Cross Reversal, Completed-Bar Port on DOT Hyperliquid (DOTUSD.HYPERLIQUID 1-DAY, long-short, 1% close stop, RSI take-profit, 10-day time stop)

Port of "RSI" by Chaos (shinnytech/tqsdk-python demo, Apache-2.0, commit 78c9922), an RSI overbought/oversold re-cross reversal. The strategy and its parameters are the author's; no performance claim is verified.…

Hypothesis

Port of "RSI" by Chaos (shinnytech/tqsdk-python demo, Apache-2.0, commit 78c9922), an RSI overbought/oversold re-cross reversal. The strategy and its parameters are the author's; no performance claim is verified. Platform adaptations: DCE.a2101 (soybean futures, a venue we cannot trade) is replaced with DOTUSD.HYPERLIQUID 1-DAY, the market this seed was already assigned to. The 500-contract fixed size becomes equity-relative sizing. Fills are market orders at the signal bar's close, which is the registry's……Show moreShow less

Port of "RSI" by Chaos (shinnytech/tqsdk-python demo, Apache-2.0, commit 78c9922), an RSI overbought/oversold re-cross reversal. The strategy and its parameters are the author's; no performance claim is verified. Platform adaptations: DCE.a2101 (soybean futures, a venue we cannot trade) is replaced with DOTUSD.HYPERLIQUID 1-DAY, the market this seed was already assigned to. The 500-contract fixed size becomes equity-relative sizing. Fills are market orders at the signal bar's close, which is the registry's equivalent of a next-bar-open fill on a 24/7 venue. TWO LABELLED CHANGES FROM THE LITERAL CODE, both needed so the rules can fire at all. (1) Evaluation timing: TqSdk runs its logic when a NEW daily candle appears. At that moment the last candle has only just opened, so 'current_rsi' is read off that forming candle and 'previous_rsi' off the candle that just completed. On a 24/7 market the forming candle's first price equals the previous close. A zero-change bar shrinks both the up and down averages of TqSdk's SMA(x,N,1) RSI by the same factor, so current_rsi always equals previous_rsi and neither cross can ever happen. The previous attempt reproduced this literally and recorded zero trades. This port evaluates on each COMPLETED daily bar instead: current_rsi = RSI at bar N's close, previous_rsi = RSI at bar N-1's close. That is the evident intent of the code (a cross from below 35 to above 35, or from above 65 to below 65, between consecutive daily RSIs). (2) Time stop: the source divides a nanosecond timestamp difference by 86,400. The result therefore passes 10 after about 0.9 ms, and the 'time stop' closes every trade at the next evaluation. The constant name and comment say 10 days, so this port measures holding time in days from position.ts_opened (time_stop_days = 10). The literal one-bar behaviour is still inside the tuning range (time_stop_days = 1). Every other rule is kept exactly as written: RSI period 6, thresholds 35/65, the was_oversold/was_overbought flags with their reset on entry, a 1% stop checked on the bar CLOSE (not intrabar, as in the source), the opposite-zone RSI take-profit, the exit-check order stop -> take-profit -> time, and no re-entry on the bar that exits. Risk-control route (b): signal/stop/time exits with capped sizing at 50% of equity notional, unlevered. DOT's ~4.5% daily std gives about 43% annualised position volatility. Because the stop is checked on the close, a 30% daily gap would cost about 15% of equity, which is the profile's trade-loss cap.

Analysis

RSI

Backtest and paper results are hypothetical. Trading involves risk of loss.