今回は、YouTubeで紹介されていた「10回中9回勝ち」と紹介されていた手法について、オリジナルインジケーターをつくり、ストラテジーでバックテストを行ったので検証結果を皆さんにお伝えします。
元動画はどんな手法を紹介していたか
今回検証のベースにしたのは、こちらのYouTubeの動画です。
タイトルは「(9 Wins Out of 10)… This 90% WIN RATE Scalping Strategy Should Be Illegal」。
勝率90%なんて自信満々なタイトル。驚きました。

ですが、内容自体はシンプルでした。
動画の主張をまとめると、こうです。
📌 動画の主張
スイングトレードは、損小利大のリスクリワードで勝負できます。
でも、スキャルピングは違います。
スキャルピングでは「勝率」こそが戦略の土台。
エンジンであり、骨格そのものだと動画では説明されていました。
そして、1回のプルバック(戻り)の中で、どこまで利益を伸ばそうとするか。
それによって勝率が大きく変わる、というのが動画の核心でした。
動画内で示されていた勝率の数字がこちらです。
| 目標(リトレースメントの戻り幅) | 勝率(動画の主張) |
|---|---|
| 100%まで狙う | 10% |
| 75%まで狙う | 20% |
| 50%まで狙う | 60% |
| 25%だけ狙う | 90% |
※あくまで動画側の主張です。根拠となるデータは示されていません。
つまり、こういうことです。
欲張って戻りの全部を獲ろうとするほど、勝てなくなる。
逆に、戻りのうち4分の1だけサクッと獲るを繰り返す方が、圧倒的に勝率が上がる。
これが動画の考え方です。
手法自体は、以下の3つのツールだけで構成されていました。
1. ノンリペイント・トレンド指標
赤なら売りだけ、緑なら買いだけを狙います。
一度色が決まったら、価格が一時的に逆方向へ飛び出しても色は変わりません。
2. 20期間EMA(1本だけ)
複数本のEMAは使いません。
20EMA1本だけで、トレンド方向と「価格が離れすぎていないか」を判断します。
3. ストキャスティクス(K期間8・スローイング3・D期間5)
最後の確認フィルターとして、クロスの有無を見ます。
エントリーのルールはシンプルです。
トレンド指標が赤(下降)のとき。
価格が20EMAを一旦上に抜けてから、下に戻って閉じたら売り。
緑(上昇)のときは、その逆で買いです。
このタイミングで、ストキャスのクロスも同時に出ていれば、エントリー確定という流れです。
動画では「この組み合わせなら、相場が荒れている時でも機能する」とされていました。
実際の検証チャートでは、買い3回・売り4回のシグナルが紹介されています。
でもまぁここだけ見ても…って感じですよね。
インジケーターを作って検証
90%勝率という数字がどう計算されたのか。
その元になるバックテストデータは、一切示されていませんでした。
なのでこの動画が事実なのかを調べるためにもサインの出るインジケーターを作ってストラテジーテストしました。
すると…

コチラGOLDの1分足

コチラBTC1時間足。
時間足によって波はありますが、実際にバックテストした結果右肩上がりに上昇する通貨と足がありました。
特にGOLDの1分足など、短い時間足で右肩上がりになるインジケーターはかなり珍しいので、これを見た時、

ヤバイもの見つけてしまった!!!
と思いましたが、実は大事なものが一つ抜けてて、それは動画でも紹介されていなかったのです。
それは「手数料」や「スプレッド」です。
それも込みこみで詳しく説明します。
再現にあたって自分で定義した部分
動画では、細かい計算式までは説明されていませんでした。
なので、再現する上でいくつかの部分は、自分で解釈・実装しています。
検証結果の信頼性に関わる部分なので、先に明記しておきます。
ノンリペイント・トレンド指標について
具体的な計算式が、動画では示されていませんでした。
そのため、確定後に色が変わらない代表的な非リペイント・トレンド指標を採用しました。
具体的には「Supertrend」です。
ストップロスの置き方について
動画には記載がありませんでした。
そのため、直近の平均的な値動きの大きさを基準にして、少し余裕を持たせた位置にストップロスを置くという設定を独自に追加しています。
つまり動画で説明されていた考え方を、欠けている部分は妥当な方法で補完して実装したもの。
そういう前提で見てもらえればと思います。
検証ロジックの解説
実際に組んだロジックの流れはこうです。
1. トレンド方向を決める
ノンリペイント・トレンド指標で、売り買いの方向を決めます。
赤なら売りのみ、緑なら買いのみです。
2. エントリーポイントを探す
価格が20EMAを一旦抜けてから、戻ってきたタイミング。
そこがエントリーポイントになります。
3. 最終確認をする
同じタイミングで、ストキャスのクロスが出ているか確認します。
出ていれば、エントリーを確定します。
4. 利確のルール
「動きの25%」まで戻ったところで、半分決済します。
残りは「50%」まで伸ばすか、ストップで撤退します。

実際にインジケーターを導入するとこんな感じに、バックテスト環境と、ストキャスティクスが表示されます。
検証結果(GOLD/XAUUSD)手数料アリ
1分足

さきほど右肩上がりだったGOLDの1分足。
手数料を片道0.05%で設定したところ、一気に右肩下がりに。
とてもキレイに真っ逆さまです。手数料負けの典型。
その他の時間足でも+に転じたものはありませんでした。
検証結果(BTC)
1時間足

コチラもさきほど右肩上がりだったビットコイン1時間足。
どうにか現状+ではありますが、かろうじての状態ですね。
他の時間足も右肩下がりかギザギザでした。
その他にも人気の高い通貨、
- EUR/USD
- USD/JPY
- GBP/USD
- AUD/USD
- USD/CAD
で検証しましたが軒並み右肩下がり。ほとんど手数料負けばかりでしたね。
検証してみて分かったこと
右肩上がりになった事実があるので、90%は大げさだと思いますが高勝率なのは確かなのかなと。
ただ、利確までの距離が短いので+に対しての手数料負担割合も多くなってしまう。
あまり現実的な手法じゃないのかなという感想でした。
検証の条件付けが多少違う可能性もあるので、興味がある方はインジケーターストラテジーのコードを置いておくのでご自身で調べてみてください。
//@version=6
strategy("ノンリペイント・スキャルピング戦略 EMA20+Stoch [25%/50%段階利確]", shorttitle="NRP-Scalp-Strat", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=10, max_labels_count=200, calc_on_every_tick=false, commission_type=strategy.commission.percent, commission_value=0.05, slippage=1)
// ============================================================
// 入力
// ============================================================
grpTrend = "トレンド(ノンリペイント / Supertrendベース)"
atrPeriod = input.int(10, "ATR期間", group=grpTrend)
atrMult = input.float(3.0, "ATR倍率", step=0.1, group=grpTrend)
grpEma = "20期間EMA"
emaLen = input.int(20, "EMA期間", group=grpEma)
grpStoch = "ストキャスティクス"
kLength = input.int(8, "%K期間", group=grpStoch)
kSmooth = input.int(3, "スローイング(%K平滑化)", group=grpStoch)
dSmooth = input.int(5, "%D期間", group=grpStoch)
grpSig = "シグナル条件"
confirmWindow = input.int(3, "ストキャス・クロス確認の許容バー数", group=grpSig)
waitForClose = input.bool(true, "確定足でのみシグナル確定(厳格な非リペイント)", group=grpSig)
grpTarget = "25%リトレースメント・ターゲット"
swingLookback = input.int(20, "値動きの伸びしろ算出期間(高値安値レンジ)", group=grpTarget)
grpRisk = "リスク管理"
atrStopMult = input.float(1.5, "ストップ用ATR倍率(スイング超えバッファ)", step=0.1, group=grpRisk)
tp1Percent = input.int(50, "25%到達時点での決済比率(%)", minval=1, maxval=100, group=grpRisk)
grpDate = "テスト期間"
startDate = input.time(timestamp("2023-01-01"), "開始日", group=grpDate)
endDate = input.time(timestamp("2030-01-01"), "終了日", group=grpDate)
inDateRange = time >= startDate and time <= endDate
// ============================================================
// ノンリペイント・トレンド(Supertrend)
// ============================================================
[st, dir] = ta.supertrend(atrMult, atrPeriod)
trendUp = dir < 0
trendDn = dir > 0
trendColor = trendUp ? color.new(color.green, 0) : color.new(color.red, 0)
plot(st, "非リペイント・トレンドライン", color=trendColor, linewidth=2, force_overlay=true)
// ============================================================
// 20EMA
// ============================================================
ema20 = ta.ema(close, emaLen)
plot(ema20, "20EMA", color=color.white, linewidth=2, force_overlay=true)
// ============================================================
// ストキャスティクス
// ============================================================
kRaw = ta.stoch(close, high, low, kLength)
k = ta.sma(kRaw, kSmooth)
d = ta.sma(k, dSmooth)
plot(k, "%K", color=color.yellow)
plot(d, "%D", color=color.blue)
bearCross = ta.crossunder(k, d)
bullCross = ta.crossover(k, d)
bearCrossRecent = ta.barssince(bearCross) <= confirmWindow
bullCrossRecent = ta.barssince(bullCross) <= confirmWindow
// ============================================================
// 20EMAブレイク&リターン
// ============================================================
crossUnderEma = ta.crossunder(close, ema20)
crossOverEma = ta.crossover(close, ema20)
rawSell = trendDn and crossUnderEma and bearCrossRecent
rawBuy = trendUp and crossOverEma and bullCrossRecent
sellSignal = (waitForClose ? (rawSell and barstate.isconfirmed) : rawSell) and inDateRange
buySignal = (waitForClose ? (rawBuy and barstate.isconfirmed) : rawBuy) and inDateRange
// ============================================================
// 値動きの伸びしろ(25%/50%ターゲット)
// ============================================================
swingHigh = ta.highest(high, swingLookback)
swingLow = ta.lowest(low, swingLookback)
techRange = swingHigh - swingLow
atrStop = ta.atr(atrPeriod) * atrStopMult
sellTP25 = close - techRange * 0.25
sellTP50 = close - techRange * 0.50
buyTP25 = close + techRange * 0.25
buyTP50 = close + techRange * 0.50
// ============================================================
// エントリー・レベル保持(エントリー時点のレベルを固定)
// ============================================================
var float longStop = na
var float longTP25 = na
var float longTP50 = na
var float shortStop = na
var float shortTP25 = na
var float shortTP50 = na
if buySignal
longStop := swingLow - atrStop
longTP25 := buyTP25
longTP50 := buyTP50
strategy.entry("Buy", strategy.long)
if sellSignal
shortStop := swingHigh + atrStop
shortTP25 := sellTP25
shortTP50 := sellTP50
strategy.entry("Sell", strategy.short)
// 25%到達で半分決済(tp1Percent%)、残りは50%到達 or ストップで決済
strategy.exit("LongExit25", "Buy", qty_percent=tp1Percent, limit=longTP25, stop=longStop)
strategy.exit("LongExit50", "Buy", qty_percent=100, limit=longTP50, stop=longStop)
strategy.exit("ShortExit25", "Sell", qty_percent=tp1Percent, limit=shortTP25, stop=shortStop)
strategy.exit("ShortExit50", "Sell", qty_percent=100, limit=shortTP50, stop=shortStop)
// ============================================================
// シグナル表示
// ============================================================
plotshape(sellSignal, "売りシグナル", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, force_overlay=true)
plotshape(buySignal, "買いシグナル", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, force_overlay=true)
「ノンリペイント・スキャルピング戦略 EMA20+Stoch」という名前のインジケーターです。
もし今現在MT4やMT5などでチャートを見ている方はぜひ一度TradingViewを見てみてください。
まとめ
手数料さえ度外視してしまえばとてもいい手法だとは思う。でも現実的じゃないかな…
という感想です。
まだまだ他にも手法を色々調べていきます!



コメント