最後のNキャンドル逆論理戦略

作者: リン・ハーンチャオチャン開催日:2023年12月26日11時29分
タグ:

img

概要

この戦略の主なアイデアは,最後のNのキャンドルの色に基づいて長または短を決定することです.最後のNのキャンドルが緑である場合は,長い;最後のNのキャンドルが赤である場合は,短い.ユニークな部分は,元のロジックを逆転させることができる"逆論理"パラメータを追加することです. "逆論理"パラメータが真実であるとき,最後のNの緑のキャンドルは短になり,最後のNの赤いキャンドルは長くなります.

戦略原則

この戦略は主に以下の重要なパラメータに基づいています

  1. numCandlesToCheck: チェックするキャンドルの数を指定するために使用されます
  2. numCandlesToExit: 開封後,終了する必要があるキャンドルの数を指定します.
  3. inverseLogic:逆論理パラメータ.trueの場合,元の長と短い論理が逆になる.

キーロジックは,最後のnumCandlesToCheckキャンドルを forループを通過し,連続した緑と赤のキャンドルをリアルタイムで数える.連続した赤いキャンドルがnumCandlesToCheck ≥なら, lastNCandlesRed を true とマークする.連続した緑のキャンドルがnumCandlesToCheck ≥なら, lastNCandlesGreen を true とマークする.

lastNCandlesGreen が true ならば,inverseLogic が false ならば,long になる.そうでなければ,short になる.逆に,lastNCandlesRed が true ならば,short になる.inverseLogic が false ならば,long になる.

長いか短いかに関わらず, barsSinceEntryカウンターは開設位置後に0にリセットされます. barsSinceEntryがnumCandlesToExitより大きくまたは等しい場合,現在のポジションは閉鎖されます.

利点分析

これは,決定を行うためにキャンドルカラーを使用する興味深い戦略であり,長と短の論理を柔軟に調整できる"逆論理"パラメータがあります.主な利点は:

  1. このアイデアは新しいもので,市場の常識に反する逆投資を形作ることができる.
  2. コードが明確で簡潔で 分かりやすく 変更も簡単です
  3. パラメータを調整して最適なパラメータの組み合わせを見つけることができます
  4. この戦略は 市場の状況に関係なく 継続して実行し 信号を生成することができます

リスク分析

この戦略には注意すべきリスクもあります.

  1. ランプの色は市場の状況を完全に表現できないので,間違った信号を追跡する危険性があります.
  2. numCandlesToCheck の最適値を決定できない
  3. numCandlesToExit の最適値を決定できない
  4. 不適切な逆論理パラメータは損失を増幅する可能性があります
  5. 単止損失を効果的に制御できない

これらのリスクに対処するために,以下のような制御と最適化措置が可決されます.

  1. 誤った信号を避けるために他のフィルターを増やす,例えば,より長い時間枠でトレンドを決定
  2. 異なるパラメータ値を横断して最適なパラメータ組み合わせを見つける
  3. 単一の損失を制御するストップ損失メカニズムを追加
  4. 逆論理パラメータの有効性を確認する

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

この戦略の主要な最適化方向は以下の通りである.

  1. 閉じ込められないようにオーダーブック状態を増加させる
  2. numCandlesToCheck と numCandlesToExit の値を最適化する
  3. 誤った信号をフィルタリングするために,より高いタイムフレームに傾向指標を追加
  4. ストップ・ロスを追加し,利益を取ります.
  5. 効果を検証するための異なる製品でのバックテスト
  6. 元の論理と逆の論理との間のリターンを比較する

結論

この戦略の全体的な考え方は,明瞭で理解しやすいもので,キャンドル色の決定に基づいて単に取引信号を生成する.パラメータを調整することで,さまざまな市場環境や製品をターゲットとした最適化のための豊富な組み合わせの変異を形成することができます.また,いくつかの潜在的なリスクに注意を払い,それらを制御するために必要な措置をとる必要があります. 戦略のコンテンツを継続的に豊かにすることで,この戦略は長期的な取引のために最適化し続けるために価値のあるものになることができます.


/*backtest
start: 2022-12-25 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Last Number of  Candles", overlay=true)

// Define the condition for a green candle
isGreenCandle(candle) =>
    close[candle] > open[candle]

// Define the condition for a red candle
isRedCandle(candle) =>
    close[candle] < open[candle]

// Input to specify the number of candles to check
numCandlesToCheck = input(5, title="Number of Candles to Check")
numCandlesToExit = input(2, title="Number of Candles To Exit")  // Corrected the input title

// Initialize variables to count consecutive green and red candles
var int consecutiveGreenCandles = 0
var int consecutiveRedCandles = 0

// Initialize barsSinceEntry outside the loop
var int barsSinceEntry = 0

// Loop through the last "numCandlesToCheck" candles
for i = 0 to numCandlesToCheck - 1
    if isGreenCandle(i)
        consecutiveGreenCandles := consecutiveGreenCandles + 1
        consecutiveRedCandles := 0 // Reset the count for consecutive red candles
    else if isRedCandle(i)
        consecutiveRedCandles := consecutiveRedCandles + 1
        consecutiveGreenCandles := 0 // Reset the count for consecutive green candles

// Check if the last "numCandlesToCheck" candles are green or red
lastNCandlesGreen = consecutiveGreenCandles >= numCandlesToCheck
lastNCandlesRed = consecutiveRedCandles >= numCandlesToCheck

// Calculate the quantity based on the investment value and current asset price
investmentValue = input(10000, title="Investment Value")
var assetPrice = close
var quantity = investmentValue / assetPrice


inverseLogic = input(false, title="inverseLogic")

// Entry condition: Open a buy order if the last "numCandlesToCheck" candles are green
if lastNCandlesGreen
    if inverseLogic
        strategy.entry("Short", strategy.long, qty = quantity)
    else 
        strategy.entry("Buy", strategy.long, qty = quantity)// Reset barsSinceEntry when entering a trade
    barsSinceEntry := 0

// Entry condition: Open a short order if the last "numCandlesToCheck" candles are red
if lastNCandlesRed
    if inverseLogic
        strategy.entry("Buy", strategy.long, qty = quantity)

    else 
        strategy.entry("Short", strategy.short, qty = quantity)
    // Reset barsSinceEntry when entering a trade
    barsSinceEntry := 0

// Increment barsSinceEntry
barsSinceEntry := barsSinceEntry + 1

// Exit condition: Close the position after 2 bars
if barsSinceEntry >= numCandlesToExit
    strategy.close("Buy")
    strategy.close("Short")


もっと