最後のN本のローソク足に対する逆ロジック戦略


作成日: 2023-12-26 11:00:29 最終変更日: 2023-12-26 11:00:29
コピー: 1 クリック数: 696
1
フォロー
1623
フォロワー

最後のN本のローソク足に対する逆ロジック戦略

概要

この戦略の主要な考えは,最後のN個のK線の色に基づいて空にするか空にするかを決定することである.最後のN個のK線がすべて緑であるなら空にする.最後のN個のK線がすべて赤であるなら空にする.その特徴は,逆の論理のパラメータを追加することで,元の論理を反転させることができる.逆の論理のパラメータが真であるとき,最後のN個の緑のK線が空になり,最後のN個の赤のK線だけが空になる.

戦略原則

この戦略は,以下の重要なパラメータに依存しています.

  1. numCandlesToCheck: チェックするK行の数を指定する
  2. numCandlesToExit: ポジションを保持した後にポジションを退出する K 行の数を指定します.
  3. inverseLogic: リバースロジックのパラメータで,リアルタイムで元の多空論理に逆行する

鍵となる論理は,forのループを介して最近のnumCandlesToCheckのみのK線を走行し,連続した緑のK線と赤のK線の数をリアルタイムで統計する。連続した赤のK線≥numCandlesToCheckならlastNCandlesRedを真とマークする。連続した緑のK線≥numCandlesToCheckならlastNCandlesGreenを真とマークする。

lastNCandlesGreenが真であるとき,inverseLogicの参数が偽であるなら多行する.真であるなら空にする.反対に,lastNCandlesRedが真であるとき,inverseLogicの参数が偽であるなら空にする.真であるなら多行する.

余分な空白をしても,barsSinceEntryのカウンターは,ポジション開設後に0にリセットされます.barsSinceEntryがnumCandlesToExitよりも大きい場合は,現在のポジションを平らにする。

優位分析

これは,K線色決定を利用した面白い戦略で,逆転論理のパラメータを追加し,多空の論理を柔軟に調整できます. 主要なメリット:

  1. 市場における一般的な論理に反して投資する新しい考え方
  2. コードが明確で簡潔で,理解し,修正しやすい.
  3. この関数では,関数関数を調整して,最適の関数组合を見つけることができます.
  4. この戦略は,状況がどうであれ,継続的に信号を発信します.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. K線の色は,誤った信号の確率を完全に表しているわけではない.
  2. numCandlesToCheck の最大値が指定されていません.
  3. numCandlesToExit の最大値が指定されていません.
  4. リバースロジックパラメータの不適切な設定は,損失を増加させる可能性があります.
  5. 単一ストップを効果的に制御できない問題

上記のリスクに対して,以下の措置を講じることで制御・最適化することができます.

  1. 他のフィルターを追加して,拡大レベルのトレンド判断のような誤った信号を回避します.
  2. 異なるパラメータの値を取って,最適なパラメータの組み合わせを探します.
  3. 単一損失をコントロールする ストップ・スローズ・メカニズムへの加入
  4. リバースロジックパラメータの有効性を検証

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 追加した口コミパラメータの判定で,入札を避ける
  2. numCandlesToCheckとnumCandlesToExitの最適化パラメータの値について
  3. 大周期トレンド指数と組み合わせた誤差信号のフィルター
  4. ストップ・ロスト・ストップ・ストップ・ストラテジー
  5. 様々な品種の検証戦略の有効性を再評価する
  6. 原論理と逆論理の収益率を比較する

要約する

この戦略の全体的な構想は,わかりやすく,単純なK線色を用いて判断して取引信号を形成する.戦略のパラメータの調整は,豊富な組み合わせの変化を形成し,異なる市場環境と品種に対して最適化調整を行う.同時に,いくつかの潜在的リスクに注意し,リスクを制御するために必要な措置を講じることも必要である.戦略の内容を継続的に豊かにすることで,この戦略は,長期にわたって実戦に値し,継続的に最適化して向上する価値ある戦略になることができる.

ストラテジーソースコード
/*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")