Yapp analyserar marknaden dygnet runt och exekverar trades automatiskt via ditt eget konto, baserat på teknisk analys, nyhetssentiment och makrodata.
Yapp kombinerar fem informationslager och fattar självständiga beslut baserade på konvergerande signaler, med samma logik som ett kvantteam, men utan känslor, utan pauser och utan fördröjning.
Yapp handlar aldrig på en enda indikator. Varje position kräver konvergens över teknisk analys, flertidsrams-trend, volymbekräftelse, nyhetssentiment och makroregim, precis som ett disciplinerat kvantteam.
Boten identifierar konsolideringszoner och signalerar när priset bryter ut med samstämmiga tekniska faktorer. Varje setup poängsätts automatiskt och exekveras bara om signalstyrkan överstiger tröskeln. Aldrig baserat på ett enda lager.
def score_breakout(symbol, data) -> float:
score = 0.0
rsi = data['rsi_14']
adx = data['adx_14']
rvol = data['rvol']
level = data['high_20d'] # 20d breakout level
# Breakout confirmation (+3.0 pts)
if data['close'] > level * 1.002:
score += 3.0
# RSI gate — hard veto if extreme
if rsi > 88: return -99
score += (75 - rsi) / 25 * 1.5
# ADX trend strength ≥ 20
if adx > 20:
score += min((adx - 20) / 15, 2.0)
# Relative volume confirmation
if rvol >= 1.5: score += 2.0
elif rvol >= 1.2: score += 0.8
# Historical library (−5 … +10 pts)
sim = find_similar_setups(symbol, data)
score += sim.edge_score
return score
Yapp handlar aldrig mot den överordnade trenden. Innan en position öppnas verifieras riktningen på både daglig och veckovis tidsram. Boten väntar tålmodigt tills båda tidsramarna pekar i samma riktning.
def check_mtf_trend(symbol) -> TrendResult:
daily = get_candles(symbol, '1D', 60)
weekly = get_candles(symbol, '1W', 26)
sma20_d = sma(daily.close, 20)
sma50_d = sma(daily.close, 50)
sma20_w = sma(weekly.close, 20)
# Both timeframes must align
bull_d = (daily.close[-1] > sma20_d
and sma20_d > sma50_d
and slope(sma20_d, 5) > 0.0)
bull_w = weekly.close[-1] > sma20_w
# Momentum gap → aggressive signal mode
gap = (daily.open[-1] - daily.close[-2]) \
/ daily.close[-2]
gap_mode = gap >= 0.05 and rvol >= 1.8
return TrendResult(
confirmed = bull_d and bull_w,
gap_mode = gap_mode,
score = (2.0 if bull_d else 0)
+ (1.5 if bull_w else 0)
+ (3.0 if gap_mode else 0)
)
Marknadsregimen avgör botens aggressivitet. VIX, marknadsbredd och benchmark-volatilitet analyseras kontinuerligt. Vid risk-off-läge pausas handel automatiskt och positionsstorlekar skalas ned dynamiskt.
def get_market_regime() -> RegimeResult:
vix = fetch_vix()
breadth = market_breadth_score() # 0 … 1
atr_sp = atr(sp500_candles, 14)
# Hard risk-off gate
if vix > 30:
return RegimeResult(
regime=Regime.RISK_OFF, scale=0.0, max_pos=0
)
if vix < 18 and breadth > 0.60:
regime, max_pos = Regime.RISK_ON, 8
elif vix > 22 or breadth < 0.35:
regime, max_pos = Regime.CAUTION, 4
else:
regime, max_pos = Regime.NEUTRAL, 6
# Volatility-scaled position factor
scale = min(20 / atr_sp, 1.2)
return RegimeResult(
regime=regime, scale=scale, max_pos=max_pos
)
Nyheter kan stärka eller direkt blockera en annars stark teknisk signal. Yapp bevakar nyhetsflöden per instrument i realtid och blockerar automatiskt köppositioner vid negativt nyhetsläge.
def score_news(symbol, window_h=24) -> SentimentResult:
articles = fetch_news(symbol, hours=window_h)
if not articles:
return SentimentResult(score=0.0, buzz=0.0)
# Recency-weighted NLP scoring
scores = [nlp_score(a.headline) for a in articles]
weights = [exp(-i * 0.3) for i in range(len(scores))]
sent = np.average(scores, weights=weights)
# Hard veto on strongly negative coverage
if sent < -0.4:
raise NegativeNewsVeto(symbol)
buzz = log1p(len(articles)) * abs(sent)
return SentimentResult(
score = sent, # –1.0 … +1.0
buzz = buzz, # 0.0 … ~3.5
count = len(articles)
)
Avancerad tradinglogik, konfigurerad av experter och tillgänglig via ett enkelt abonnemang. Fullt automatiserat. Inga dolda avgifter. Inga kompromisser.