逆転キャンドルスタイクバックテスト戦略

作者: リン・ハーンチャオチャン開催日:2024年1月26日 16:04:26
タグ:

img

概要

戦略の論理

  1. ロング/ショート: 逆転のキャンドルスタイルのパターンが特定された場合,前回の閉店が2日前のより高ければロング,前回の閉店が2日前のより低い場合はショート.

利点

  1. キャンドルスタイク逆転パターンは,価格の転換点を効果的に捉え,取引信号の有効性を高めます.

  2. 利益/ストップ損失のメカニズムは リスクを効果的に制御し 利益を固定し 損失を拡大するのを防ぎます

  3. 手動の介入なしで自動化された取引は,取引コストを削減し,効率を向上させます.

リスク

  1. 誤った取利益/ストップ損失点設定は,より大きなトレンドを見逃したり,早めにストップ損失を起こす可能性があります.

  2. 戦略パラメータは 絶えずテストと最適化が必要で 過剰に適している

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

  1. 精度を高めるためにより多くの指標でキャンドルスタイルの識別条件を最適化します.

  2. より多くの取引信号を識別するためのアルゴリズムを追加することで戦略論理を豊かにします.

  3. 参照指標に基づいて位置を動的に調整するための位置サイズ化モジュールを追加します.

結論

この戦略は,キャンドルスティックパターンを介して逆転信号を識別し,自動取引のための利益/ストップ損失ルールを設定します. 戦略は単純で,ある程度実践的です. しかし,識別精度とパラメータ最適化に関して改善の余地があります. ライブ取引に適用する前にさらなるテストと最適化が推奨されます.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/01/2019
//   This is a candlestick where the open and close are the same. 
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title = "Doji Backtest", overlay = true)
input_takeprofit = input(10, title="Take Profit pip", step=0.01)
input_stoploss = input(10, title="Stop Loss pip", step=0.01)
input_minsizebody = input(0.5, title="Min. Size Body pip", step=0.01)
barcolor(abs(close - open) <= input_minsizebody ? open == close ? yellow : na : na)
possell = 0.0
posbuy = 0.0
pospricebuy = 0.0
pospricesell = 0.0
barcolornow = blue
pospricesell := close< close[2] ? abs(close - open) <= input_minsizebody ? open == close ? close : nz(pospricesell[1], 0) : nz(pospricesell[1], 0) : nz(pospricesell[1], 0) 
possell := iff(pospricesell > 0 , -1, 0)
barcolornow := possell == -1 ? red: posbuy == 1 ? green : blue 
pospricesell := iff(low <= pospricesell - input_takeprofit and pospricesell > 0, 0 ,  nz(pospricesell, 0))
pospricesell := iff(high >= pospricesell + input_stoploss and pospricesell > 0, 0 ,  nz(pospricesell, 0))
pospricebuy := close > close[2] ? abs(close - open) <= input_minsizebody ? open == close ? close : nz(pospricebuy[1], 0) : nz(pospricebuy[1], 0) : nz(pospricebuy[1], 0) 
posbuy := iff(pospricebuy > 0 , 1, 0)
barcolornow := posbuy == 1 ? green: barcolornow
pospricebuy := iff(high >= pospricebuy + input_takeprofit and pospricebuy > 0, 0 ,  nz(pospricebuy, 0))
pospricebuy := iff(low <= pospricebuy - input_stoploss and pospricebuy > 0, 0 ,  nz(pospricebuy, 0))
barcolor(barcolornow)
if (posbuy == 0 and possell == 0) 
    strategy.close_all()
if (posbuy == 1)
    strategy.entry("Long", strategy.long)
if (possell == -1)
    strategy.entry("Short", strategy.short)	   	    
pospricebuy := iff(high <= pospricebuy + input_takeprofit and pospricebuy > 0, 0 ,  nz(pospricebuy, 0))
pospricebuy := iff(low >= pospricebuy - input_stoploss and pospricebuy > 0, 0 ,  nz(pospricebuy, 0))
pospricesell := iff(low <= pospricesell - input_takeprofit and pospricesell > 0, 0 ,  nz(pospricesell, 0))
pospricesell := iff(high >= pospricesell + input_stoploss and pospricesell > 0, 0 ,  nz(pospricesell, 0))


もっと