시간과 공간을 여행하는 머피 지표 전략


생성 날짜: 2024-01-23 14:46:55 마지막으로 수정됨: 2024-01-23 14:46:55
복사: 0 클릭수: 756
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

시간과 공간을 여행하는 머피 지표 전략

개요

이것은 5분 시간 프레임에 적용되며, 주로 암호화폐 거래에 사용됩니다.

전략 원칙

이 전략은 길이 3의 모피 지수를 사용하여 100로 초과 구매 라인을 설정하고 0으로 초과 판매 라인을 설정합니다. 전략은 모피 지수가 초과 구매 수준에 도달 할 때까지 기다립니다. 이것은 시장에 큰 갈매기가 있음을 나타냅니다.

모피 지수 = 100이고 하위 K 선이 대일선일 때 더 많은 입장을 한다. 스톱로스 선은 해당 거래 날의 최저점으로 설정되어 입장 후 60분 이내에 정지한다.

코어 측면에서는 거울 논리를 사용할 수 있다. 즉, 모피 지표가 초매출을 달성했을 때, 하위 K 선이 큰 음선일 때, 코어 입시한다.

전략적 이점

  1. 모피 지표를 사용하면 시장에서 큰 고래이 잠재적인 주식을 축적하는 행동을 효과적으로 식별할 수 있으며, 이러한 주식은 계속 상승할 가능성이 있다.

  2. K선 엔티티를 식별하는 강력한 돌파구를 사용하여 많은 가짜 돌파구를 필터링 할 수 있습니다.

  3. SMA 필터와 결합하여, 추세가 하락하는 주식을 사지 않는 것은 거래 위험을 효과적으로 줄일 수 있다.

  4. 일일 초단계 운영 방식을 사용하면 60 분 정지 시 수익을 빠르게 고정하고 철회 확률을 줄일 수 있습니다.

전략적 위험

  1. 모피 지표는 가짜 신호를 생성하여 불필요한 손실을 초래할 수 있다. 적절한 변수를 조정하거나 필터링을 위해 다른 지표를 추가할 수 있다.

  2. 60분 초단계 METHOD 과잉 급진적일 수 있으며, 높은 변동률의 주식에는 적합하지 않다. 정지 시간을 적절히 조정하거나 이동한 정지를 사용하여 최적화 할 수 있다.

  3. 중요한 거시경제적 사건이 발생했을 때 시장 충격 위험을 고려하지 않습니다. 이 경우 전략을 일시 중단하고 시장이 안정 될 때까지 거래를 계속해야합니다.

전략 최적화 방향

  1. 다양한 파라미터 조합을 테스트할 수 있습니다. 예를 들어 모피 지표 길이를 조정하거나 SMA 주기 파라미터를 최적화할 수 있습니다.

  2. BOLL 채널, KD 지표 등과 같은 다른 지표를 조합하여 신호의 정확성을 향상시킬 수 있는지 확인하십시오.

  3. 더 큰 단위 수익을 얻을 수 있는지 확인하기 위해 적절한 스톱 손실을 허용하십시오.

  4. 15분 또는 30분 버전과 같은 다른 주기에 적용되는 버전을 개발하기 위해 이 정책 프레임워크를 기반으로 시도하십시오.

요약하다

이 전략은 전체적으로 매우 간결하고 이해하기 쉬운데, 기본 아이디어는 고전적인 추적을 하는 큰 고래 낚시 아이디어와 일치한다. 모피 지표의 과매매 과매매의 핵심점을 식별하여 K선 엔티티 필터링과 함께 많은 잡음을 필터링 할 수 있다. SMA 필터의 추가도 전략의 안정성을 더욱 높였다.

60분 초단계 운영 방식은 빠른 수익을 얻을 수 있지만 높은 운영 위험을 초래합니다. 전체적으로 볼 때, 이것은 실제 전투에서 매우 가치있는 정량화 전략 템플릿이며, 깊이 연구하고 최적화할 가치가 있으며, 우리에게 귀중한 전략 개발 아이디어를 제공합니다.

전략 소스 코드
/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// From "Crypto Day Trading Strategy" PDF file.

// * I'm using a SMA filter to avoid buying when the price is declining. Time frame was better at 15 min according to my test.

// 1 - Apply the 3 period Money Flow Index indicator to the 5 minute chart, using 0 and 100 as our oversold and overbought boundaries
// 2 - Wait for the MFI to reach overbought levels, that indicates the presence of "big sharks" in the market. Price needs to hold up
// the first two MFI overbought occurrences of the day to be considered as a bullish entry signal.*
// 3 - We buy when the MFI = 100 and the next candle is a bullish candle with short wicks.
// 4 - We place our Stop Loss below the low of the trading day and we Take Profit during the first 60 minutes after taking the trade. 

// The logic above can be used in a mirrored fashion to take short entries, this is a custom parameter that can be modified from
// the strategy Inputs panel.

// © tweakerID

//@version=4
strategy("Money Flow Index 5 min Strategy", 
     overlay=true )

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_MFI = input(3, title="MFI Length")
OB=input(100, title="Overbought Level")
OS=input(0, title="Oversold Level")
barsizeThreshold=input(.5, step=.05, minval=.1, maxval=1, title="Bar Body Size, 1=No Wicks")
i_MAFilter = input(true, title="Use MA Trend Filter")
i_MALen = input(80, title="MA Length")
i_timedexit=input(false, title="Use 60 minutes exit rule")
short=input(true, title="Use Mirrored logic for Shorts")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="Strategy Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=3, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(5, step=.1, title="ATR Multiple")
i_TPRRR = input(2.2, step=.1, title="Take Profit Risk Reward Ratio")
TS=input(false, title="Trailing Stop")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR


// Strategy Stop
DayStart = time == timestamp("UTC", year, month, dayofmonth, 0, 0, 0)
plot(DayStart ? 1e9 : na, style=plot.style_columns, color=color.silver, transp=80, title="Trade Day Start")
float LongStop = valuewhen(DayStart,low,0)*(1-i_PercIncrement)
float ShortStop = valuewhen(DayStart,high,0)*(1+i_PercIncrement)
float StratTP = strategy.position_avg_price + (strategy.position_avg_price - LongStop)*i_TPRRR
float StratSTP = strategy.position_avg_price - (ShortStop - strategy.position_avg_price)*i_TPRRR

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

MFI=mfi(close,i_MFI)
barsize=high-low
barbodysize=close>open?(open-close)*-1:(open-close)
shortwicksbar=barbodysize>barsize*barsizeThreshold
SMA=sma(close, i_MALen)
MAFilter=close > SMA
timesinceentry=(time - valuewhen(bought, time, 0)) / 60000
timedexit=timesinceentry == 60

BUY = MFI[1] == OB and close > open and shortwicksbar and (i_MAFilter ? MAFilter : true)
bool SELL = na
if short
    SELL := MFI[1] == OS and close < open and shortwicksbar and (i_MAFilter ? not MAFilter : true)

//Debugging Plots
plot(timesinceentry, transp=100, title="Time Since Entry")

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)
if i_timedexit
    strategy.close_all(when=timedexit)

SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - SL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na

strategy.exit("TP & SL", "long", limit=TP, stop=TS? tstop : SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=TS? Ststop : SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(i_SL and strategy.position_size > 0 and not TS ? SL : i_SL and strategy.position_size > 0 and TS ? tstop : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 and not TS ? SSL : i_SL and strategy.position_size < 0 and TS ? Ststop : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)