ランダムな入国と出出出戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月11日 15:17:28
タグ:

概要

ランダムエントリー&エクシット戦略は,取引中にエントリー&エクシットタイミングをランダムに決定する戦略である.エントリー&エクシット決定をシミュレートするためにランダムナンバージェネレータを使用する.

戦略の論理

この戦略の基本的な論理は

  1. ランダムに 0 から 100 までの数字を生成します

  2. ランダム数値が設定されたエントリー限界値より低い場合,ポジションが開かれます.デフォルトエントリー確率は10%です.

  3. ランダム数値が設定された出口値を下回る場合は,ポジションは閉鎖されます.デフォルト出口確率は3%です.

  4. 3つの方向選択があります. 長いだけ,短いだけ,またはランダムな方向. デフォルトは長いだけです.

  5. 市場変動が大きい年を避けるように スタート年を設定することもできます

異なるタイプのトレーダーのランダムな取引行動をシミュレートし 異なる市場でのランダムな取引のパフォーマンスを調べることができます

利点分析

  • リアルな市場状況に近い リアルなトレーダーのランダムな意思決定をシミュレートします

  • ランダムな取引のパフォーマンス差を様々な市場でテストすることができます.

  • ランダムな取引でも ポジティブなリターンを生み出すことができる市場を見つけることができます

  • ランダムな取引をベンチマーク戦略として他の戦略の優位性をテストすることができます.

リスク分析

  • 市場動向から利益を得られず 最適なエントリータイミングを決められず

  • ランダムな出口は,不利なレベルでの損失を停止する可能性があります.

  • 明らかに方向性のある市場では 業績が悪い.

  • 過剰な取引や持有期間不足を避けるために,入入/出出確率を最適化する必要がある.

  • ストップ・ロスを追加すると,損失が拡大しないようにする.

オプティマイゼーションの方向性

  • 異なる市場に適した組み合わせを見つけるために入口/出口確率を調整する.

  • ストップ・ロスの戦略を追加し,単一の取引損失を制御します.

  • ポジションのサイズを最適化し,単一の取引リスクを下げる.

  • トレンドが明確になったときに 傾向をたどる戦略に切り替える

  • ランダムな取引を好む市場を見つけるために 統計分析を使用します

概要

ランダムエントリー&エグジット戦略は,シミュレーションされたランダムトレーダー決定の下で異なる市場のパフォーマンスをテストする. 戦略論理は単純で,他の戦略を調査するための基準として機能することができます. しかし,トレンドを把握できず,適切なストップ損失管理の欠如などの欠陥があります. 戦略を調整して,パラメータの組み合わせ,ストップを追加し,ポジションサイジングを最適化して,実行可能な量子トレード戦略に変えることができます.


/*backtest
start: 2022-10-04 00:00:00
end: 2023-10-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",2]]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gregoirejohnb
//
// "tHe MaRkEtS aRe RaNdOm", say moron academics.
//
// The purpose of this study is to show that most markets are NOT random! Most markets show a clear bias where we can make such easy money, that a random number generator can do it.
// 
// === HOW THE INDICATOR WORKS ===
// 
// -The study will randomly enter the market
// -The study will randomly exit the market if in a trade
// -You can choose a Long Only, Short Only, or Bidirectional strategy
//
// === DEFAULT VALUES AND THEIR LOGIC ===
// 
// Percent Chance to Enter Per Bar: 10%
// Percent Chance to Exit Per Bar: 1%
// Direction: Long Only
// Commission: 0
//
// Each bar has a 10% chance to enter the market. Each bar has a 1% to exit the market [if in a trade]. It will only enter long.
//
// I included zero commission for simplication. It's a good exercise to include a commission/slippage to see just how much trading fees take from you.
// 
// === TIPS ===
//
// -Increasing "Percent Chance to Exit" will shorten the time in a trade. You can see the "Avg # Bars In Trade" go down as you increase. If "Percent Chance to Exit" is too high, the study won't be in the market long enough to catch any movement, possibly exiting on the same bar most of the time.
// -If you're getting the red screen, that means the strategy lost so much money it went broke. Try reducing the percent equity on the Properties tab.
// -Switch the start year to avoid black swan events like the covid drop in 2020.
// -
// === FINDINGS ===
//
// Most markets lose money with a "Random" direction strategy.
// Most markets lose ALL money with a "Short Only" strategy.
// Most markets make money with a "Long Only" strategy.
// 
// Try this strategy on: Bitcoin (BTCUSD) and the NASDAQ (QQQ).
//
// There are two popular memes right now: "Bitcoin to the moon" and "Stocks only go up". Both are seemingly true. Bitcoin was the best performing asset of the 2010's, gaining several billion percent in gains. The stock market is on a 100 year long uptrend. Why? BECAUSE FIAT CURRENCIES ALWAYS GO DOWN! This is inflation. If we measure the market in terms of others assets instead of fiat, the Long Only strategy doesn't work anymore.
// Try this strategy on: Bitcoin/GLD (BTCUSD/GLD), the Eurodollar (EURUSD), and the S&P 500 measured in gold (SPY/GLD).
// 
// Bitcoin measured in gold (BTCUSD/GLD) still works with a Long Only strategy because Bitcoin increased in value over both USD and gold.
// The Eurodollar (EURUSD) generally loses money no matter what, especially if you add any commission. This makes sense as they are both fiat currencies with similar inflation schedules.
// Gold and the S&P 500 have gained roughly the same amount since ~2000. Some years will show better results for a long strategy, while others will favor a short strategy. Now look at just SPY or GLD (which are both measured in USD by default!) and you'll see the same trend again: a Long Only strategy crushes even when entering and exiting randomly.
//
// === "JUST TELL ME WHAT TO DO, YOU NERD!" ===
//
// Bulls always win and Bears always lose because fiat currencies go to zero.
//
strategy(title="Random Entries Work", shorttitle="REW", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD,commission_type=strategy.commission.percent,commission_value=0)

// === GENERAL INPUTS ===
strategy = input(defval="Long Only",title="Direction",options=["Long Only", "Short Only", "Random"])
enter_frequency = input(defval=10,minval=1,maxval=100,title="Percent Chance to Enter")
exit_frequency = input(defval=3, minval=0,maxval=100,title="Percent Chance to Exit",tooltip="This should be much lower than Percent Chance to Enter. Higher values decrease time in market. Lower values increase time in market.")
start_year = input(defval=2020, title="Start Year")


// === LOGIC ===
r = random(0,100)
enter = enter_frequency > r[0]
exit = exit_frequency > r[0]
direction = random(0,100) >= 50

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() =>
    strategy.opentrades == 0 and enter and (strategy == "Long Only" or (strategy == "Random") and direction) and 
       time > timestamp(start_year, 01, 01, 01, 01)
exitLong() =>
    exit
strategy.entry(id="Long", long=strategy.long, when=enterLong())
strategy.close(id="Long", when=exitLong())
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() =>
    strategy.opentrades == 0 and enter and (strategy == "Short Only" or (strategy == "Random" and not direction)) and 
       time > timestamp(start_year, 01, 01, 01, 01)
exitShort() =>
    exit
strategy.entry(id="Short", long=strategy.short, when=enterShort())
strategy.close(id="Short", when=exitShort())

もっと