Preisvolumen-Trendstrategie

Schriftsteller:ChaoZhang, Datum: 23.12.2023
Tags:

img

Übersicht

Diese Strategie verwendet Dynamikindikatoren, um kurzfristige Preisbewegungen zu verfolgen und Markttrendrichtungen für Kauf- und Verkaufsgeschäfte zu bestimmen.

Grundsätze

Die Strategie berechnet zunächst den Kursschwung. Durch die Berechnung der Differenz zwischen dem aktuellen und dem vorhergehenden Preis kann sie die absolute Preisänderung im letzten Zeitraum widerspiegeln. Ein positiver Wert zeigt einen Preisanstieg an und ein negativer Wert einen Preisrückgang an. Dann wird der gleitende Durchschnitt dieses Unterschiedswerts für das Filtern berechnet, um den durchschnittlichen Kursschwungindikator zu erhalten.

Wenn der letzte Preis größer als die durchschnittliche Dynamik ist, zeigt dies an, dass der Preis steigt. Wenn der letzte Preis kleiner als die durchschnittliche Dynamik ist, zeigt dies an, dass der Preis sinkt. Bestimmen Sie die Kursentwicklungsrichtung auf der Grundlage dieses Indikators. In Kombination mit dem Volumenverstärkungsfilter werden im tatsächlichen Handel nur Signale mit relativ großen Handelsvolumina ausgewählt.

Entsprechend den festgestellten Kursentwicklungen werden entsprechende Kauf- und Verkaufsgeschäfte durchgeführt.

Analyse der Vorteile

  • Die Strategie beurteilt Trends schnell und kann kurzfristige Kursbewegungen schnell erfassen, was für kurzfristige Operationen geeignet ist.
  • Vermeiden Sie, sich durch falsche Ausbrüche durch Volumenfilterung irrezuführen
  • Die Logik der Verfolgung von Steigen und Tötung von Stürzen implementiert
  • Hohe Handelsfrequenz, geeignet für aggressive Anleger

Risikoanalyse

  • Anfällig für die Auswirkungen von abnormalen Marktschwankungen mit bestimmten Falschsignalrisiken
  • Aus häufigen Handelsgeschäften resultierende Verschiebungsrisiken
  • Kann mittelfristige und langfristige Trends verpassen, und die langfristige Rentabilität muss überprüft werden

Optimierungsrichtlinien

  • Anpassung der Parameter der Impulsindikatoren zur Optimierung der Urteileffekte
  • Optimierung der Volumenfilterparameter zur Verbesserung der Signalqualität
  • Steigerung der Stop-Loss-Mechanismen zur Kontrolle einzelner Verluste
  • Einbeziehung mehrer Faktoren, um eine mehrfache

Schlussfolgerung

Die Strategie verfolgt insgesamt kurzfristige Preisänderungstrends durch Momentum-Indikatoren und bestimmt schnell den Ein- und Ausstiegszeitpunkt. Die Vorteile sind schneller Betrieb, Verfolgung von Steigerungen und Absturz. Die Nachteile sind die Signalkwalizität und die langfristige Rentabilität müssen untersucht werden. Durch Parameteranpassungen und verbesserte Risikokontrollmechanismen kann die Strategie zu einem wichtigen Bestandteil von Hochfrequenzstrategien werden, kombiniert mit anderen Niedrigfrequenzstrategien.


/*backtest
start: 2022-12-18 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © russtic

//@version=2

strategy("HA smoothed eliminator v2  ",pyramiding=1, slippage=10, default_qty_type=strategy.percent_of_equity, 
     commission_type=strategy.commission.percent, commission_value=0.075, overlay=true, 
     default_qty_value=100, initial_capital=1000)

FromMonth1 = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay1 = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear1 = input(defval=2019, title="From Year", minval=2010)
ToMonth1 = input(defval=12, title="To Month", minval=1, maxval=12)
ToDay1 = input(defval=31, title="To Day", minval=1, maxval=31)
ToYear1 = input(defval=2020, title="To Year", minval=2010)
start1 = timestamp(FromYear1, FromMonth1, FromDay1, 00, 00)
finish1 = timestamp(ToYear1, ToMonth1, ToDay1, 23, 59)
window1() => true
    
t1 = time(timeframe.period, "0300-1200")
t2 = time(timeframe.period, "0930-1700")
London = na(t1) ? na : green
NY = na(t2) ? na : red

bgcolor(London, title="London")
bgcolor(NY, title="New York")
///////////////////////////
// HA smoothed

len=(1 )
o=ema(open,len)
c=ema(close,len)
h=ema(high,len)
l=ema(low,len)

haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))

len2=(len)
o2=ema(haopen, len2)
c2=ema(haclose, len2)
h2=ema(hahigh, len2)
l2=ema(halow, len2)

buy= (o2<c2) 

closebuy= (o2>c2)

sell= (o2>c2)

closesell= (o2<c2)

//
/// END NEW SCRIPT 

//
//
//                  MERGE SCRIPTS
a1= o2<c2
b1=o2>c2
is_uptrend = (a1)// and (p> 0)
is_downtrend =  (b1)// and (p <0)
barcolor(b1 ? red: a1 ? lime : blue)

//end


// =========================start     PVT -GIVES EACH BAR A VALUE
facton = (true)//, title="arrow elimination (factor) on ")
Length1 = 2//input(2, title="PVT Length", minval=1)

xPrice = close//input(title="Source", type=source, defval=close)
xsma = wma(xPrice, Length1) 
nRes = xPrice - xsma  
pos = iff(nRes > 0, 1,
	     iff(nRes < 0, -1, nz(pos[1], 0))) 
forex= input(true, title = 'strength toggle ')
forexyes = (forex == true)? 10000 : (forex == false)? 1: na

plot(nRes*forexyes , color=aqua, title="strength", transp=100)
// =========================         end pvt
//
//=============================     start factor // ELIMINATES  weak signals
//                  start trend
//
factor = input(600.00, title = "strength elimination") 
factor1 = factor - (factor*2)//input(-100.00, title = "sell strength elimination ") 
facton1 = (facton == true) and is_uptrend == 1 and nRes*forexyes>factor ? 1 : (facton == true) and is_downtrend == 1 and nRes*forexyes<factor1 ? -1 : (facton == false)
// ==================== =====
// 
//===========================    end factor
nRestrend = (nRes*forexyes)
//=========================== plot arrows 
plot1 = iff(is_uptrend[1] == 1, 0 , 1)  
plot2 = iff(is_downtrend[1]  == 1, 0 , 1)
uparrowcond =  is_downtrend ? false : nz(uparrowcond[1], false) == true ? uparrowcond[1] : (facton1 and is_uptrend and nRes*forexyes>factor)
downarrowcond =  is_uptrend ? false : nz(downarrowcond[1], false) == true ? downarrowcond[1] : (facton1 and is_downtrend and nRes*forexyes<factor1)
//prevarrowstate = uparrowcond  ? 1 : downarrowcond ? -1 : nz(prevarrowstate[1], 0)


candledir = (open < close)? 1: (open>close)? -1 : na // ONLY OPENS ON SAME BAR DIRECTION AS SIGNAL



up=nz(uparrowcond[1], false) == false and ( is_uptrend and nRes*forexyes>factor) and candledir ? 1:na
dn=nz(downarrowcond[1], false) == false and ( is_downtrend and nRes*forexyes<factor1) and candledir? -1:na



sig=0
if up==1 
    sig:=1
else
    if dn==-1
        sig:=-1
    else
        sig:=sig[1]
plotarrow(sig[1]!=1 and sig==1?1:na, title="BUY ARROW", colorup=lime, maxheight=80, minheight=50, transp=0)// up arrow 
plotarrow(sig[1]!=-1 and sig==-1?-1:na, title="SELL ARROW", colordown=red, maxheight=80, minheight=50, transp=0)// down arrow

//========================= alert condition
alertcondition(sig[1]!=1 and sig==1?1:na, title="BUY eliminator", message="BUY " ) 
alertcondition(sig[1]!=-1 and sig==-1?-1:na, title="SELL eliminator",  message="SELL ") 


strategy.entry("B", true, when=(sig[1]!=1 and sig==1?1:na) and window1())
strategy.entry("S", false,when=(sig[1]!=-1 and sig==-1?-1:na) and window1())








Mehr