asian-session-scalper — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited asian-session-scalper (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
import pandas as pd, numpy as np
class AsianSessionScalper:
@staticmethod
def range_fade(df: pd.DataFrame) -> dict:
"""Fade the range during Tokyo session — buy lows, sell highs of the range."""
df = df.copy()
df["hour"] = df.index.hour
asian = df[(df["hour"] >= 0) & (df["hour"] < 7)]
if len(asian) < 10: return {"error": "Insufficient Asian data"}
range_high = asian["high"].rolling(20).max().iloc[-1]
range_low = asian["low"].rolling(20).min().iloc[-1]
mid = (range_high + range_low) / 2
current = df.iloc[-1]["close"]
atr = (asian["high"] - asian["low"]).mean()
return {
"strategy": "asian_range_fade",
"range_high": round(range_high, 5), "range_low": round(range_low, 5),
"midpoint": round(mid, 5),
"signal": "BUY (near range low)" if current < range_low + atr * 0.3 else
"SELL (near range high)" if current > range_high - atr * 0.3 else "WAIT (mid-range)",
"stop_pips": round(atr * 10000 * 1.5, 1),
"target_pips": round(atr * 10000 * 1.0, 1),
"best_pairs": ["USDJPY", "EURJPY", "AUDJPY", "AUDNZD"],
"avoid": ["GBPUSD", "EURUSD (low liquidity in Asia)"],
} @staticmethod
def asian_breakout(df: pd.DataFrame, buffer_pips: float = 3.0) -> dict:
"""Trade the breakout of the Asian range during London open."""
df = df.copy()
df["hour"] = df.index.hour
asian = df[(df["hour"] >= 0) & (df["hour"] < 7)]
if len(asian) < 10: return {"error": "Insufficient Asian data"}
range_high = asian["high"].max()
range_low = asian["low"].min()
range_size = range_high - range_low
pip_size = 0.0001 if range_size < 1 else 0.01
buffer = buffer_pips * pip_size
return {
"strategy": "asian_breakout",
"buy_stop": round(range_high + buffer, 5),
"sell_stop": round(range_low - buffer, 5),
"stop_loss_pips": round(range_size / pip_size * 0.5, 1),
"tp1_pips": round(range_size / pip_size * 1.0, 1),
"tp2_pips": round(range_size / pip_size * 1.5, 1),
"range_size_pips": round(range_size / pip_size, 1),
"valid": range_size / pip_size < 40, # Skip if range too wide
"best_time": "07:00-09:00 UTC (London open)",
"best_pairs": ["GBPJPY", "EURJPY", "USDJPY", "GBPUSD"],
}| Session | UTC Hours | Characteristics |
|---|---|---|
| Tokyo | 00:00-07:00 | Low volatility, range-bound, JPY pairs active |
| London Open | 07:00-09:00 | Breakout of Asian range, highest volatility spike |
| London | 07:00-16:00 | Trend development, EUR/GBP pairs active |
| NY Overlap | 12:00-16:00 | Highest liquidity, major reversals |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.