Bullischer Trend bei Bitcoin und Ethereum


Erstellungsdatum: 2023-10-07 10:16:09 zuletzt geändert: 2023-10-07 10:16:09
Kopie: 5 Klicks: 704
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie ist eine einfache, automatische, auf technischen Kennzahlen basierende Mehrkopftrendstrategie für Kryptowährungen wie Bitcoin und Ethereum, die darauf abzielt, wichtige Aufwärtstrends zu erfassen und die Verluste durch Gebühren aufgrund häufiger Transaktionen zu reduzieren.

Strategieprinzip

  1. Der MACD wird verwendet, um die Richtung des Trends zu bestimmen, wobei der MACD bei Aufwärtskreuzungen zu hoch ist.

  2. Berechnen Sie die 20-Zyklus-EMA, 100-Zyklus-SMA und 200-Zyklus-SMA, wobei die EMA und die SMA nach oben betrachtet werden.

  3. Die EMA überschreitet die SMA und die SMA überschreitet die SMA.

  4. Setzen Sie eine Stop-Loss-Linie, und wenn der Preis die Stop-Loss-Linie überschreitet, beenden Sie den Stop-Loss.

  5. Wenn der Preis sinkt, brechen Sie den EMA unter dem SMA aus.

Die Strategie kombiniert mehrere Indikatoren, um Trends und Einstiegsmomente zu bestimmen und Profite zu erzielen, indem die wichtigsten Aufwärtstrends verfolgt werden.

Strategische Vorteile

  1. Die Mehrfachdurchmesser-Kombination kann Fehlsignale wie falsche Durchbrüche wirksam filtern.

  2. Es ist wichtig, dass die Anbieter von Online-Handelsgeschäften, die sich auf die Entwicklung von Online-Handelsgeschäften konzentrieren, sich auf die Entwicklung von Online-Handelsgeschäften konzentrieren und sich auf die Entwicklung von Online-Handelsgeschäften konzentrieren.

  3. Die Stop-Loss-Strategie kann den maximalen Verlust eines einzelnen Geschäfts effektiv kontrollieren.

  4. Die Rückmeldung zeigt, dass Bitcoin und Ethereum bessere Erträge bringen können.

  5. Die Strategie ist einfach, klar und verständlich und für Anfänger geeignet.

  6. Es ist skalierbar und kann mit weiteren Kennzahlen optimiert werden.

Strategisches Risiko

  1. Es gibt eine große Wahrscheinlichkeit, dass die Märkte zufällig verlaufen, und es besteht die Gefahr von Fehleinschätzungen.

  2. Ein einziger Haltungsansatz ist nicht geeignet, um Systemrisiken zu vermeiden.

  3. Die falsche Einstellung der Stopps kann zu übermäßigen Stopps führen.

  4. Die Rücklaufdaten sind nicht repräsentativ für die reale Leistung, die Wirksamkeit muss noch verifiziert werden.

  5. Die Effektivität der Festplatte kann ohne Berücksichtigung der Auswirkungen der Transaktionsgebühren variieren.

  6. Es gibt keine spezifischen Merkmale der verschiedenen Sorten, die es zu optimieren gilt.

Richtung der Strategieoptimierung

  1. Verschiedene Parameterkombinationen zu testen und die Parameter für die Kennzahlen zu optimieren;

  2. Ein zusätzliches Filtersystem für Eingangssignale wie KDJ;

  3. Optimierung der Stop-Loss-Strategie und Einführung von dynamischen Stop-Losses;

  4. Erwägung der Verwaltung der Konten und Anpassung der Positionsgröße;

  5. Das Projekt wurde von der Universität von München mit dem Ziel unterstützt, die Entwicklung von Züchtungen zu fördern.

  6. Das ist eine sehr wichtige Frage, die wir uns stellen müssen.

  7. Verschiedene Sorten werden getestet, um die besten zu finden.

Zusammenfassen

Die Gesamtkonzeption der Strategie ist klar und verständlich, und die Verwendung von mehreren Indikatoren kann die Fehlsignale wirksam filtern. Es sind jedoch weitere Optimierungen der Parameter, Risikokontrollen usw. erforderlich, die in Kombination mit der Live-Verifizierung praktisch angewendet werden können.

Strategiequellcode
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BTC Long strategy", overlay=true, max_bars_back=3000, initial_capital=1000, commission_value=0.075)

//////////// !!!!!!!!!!!!!!!! WORK BEST IN 2 HOURS for BTC, ETH and ETHXBT !!!!!!!!!!!!!!!!!!! /////////////////////


[macdLine, macdSignalLine, macdHist] = macd(close, 12, 26, 7)  

//_rsi_len = input(14, title="RSI length")
_rsi_len = 14 
 
NewValue = 0
PreviousValue = 0
leverage = 1

smaPercentageIncrease = 0.0
SMA_PERCENT_INCREASE = 0.0
float atrValue = 0
bool bPositionOpened = false
float stockPositionSize = 0 
float volatilityPercentage = 0.0
bool bDisplayArrow = false 
bool bEMAIsRising = false
bool bSMAIsRising = false
bool bSMASlowIsRising = false
bool bMACDIsRising = false
bool bMACDHistIsRising = false
bool bMACDSignalIsRising = false

float stopLoss = input (1.5, "StopLoss in %", type=input.float) //StopLoss associated with the order 
//positionSize = input (1000, "in $")
float positionSize = 1000
float currentPrice = close 
float stopLossPrice = 0
float entryPrice = 0



//-----------------------------------------------------------



// === INPUT BACKTEST RANGE ONE YEAR 
//FromDay   = input(defval = 01, title = "From Day", minval = 1, maxval = 31)
//FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12)
//FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
FromDay   = 01
FromMonth = 01
FromYear  = 2019


//ToDay     = input(defval = 01, title = "To Day", minval = 1, maxval = 31)
//ToMonth   = input(defval = 01, title = "To Month", minval = 1, maxval = 12)
//ToYear    = input(defval = 2023, title = "To Year", minval = 2017)
ToDay     = 31
ToMonth   = 12
ToYear    = 2099

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"



//emaLength = input(20, "EMA Length")
//smaLength = input(100, "SMA Length")
//smaSlowLength = input(200, "SMA Length") 
emaLength = 20
smaLength = 100
smaSlowLength = 200
 
ema = ema(close, emaLength) 
sma = sma(close, smaLength)
smaSlow = sma(close, smaSlowLength)

plot(sma, color=color.green)
plot(smaSlow, color=color.orange)
plot(ema, color=color.yellow)

//reload previous values
stopLossPrice := na(stopLossPrice[1]) ? 0.0 : stopLossPrice[1]
entryPrice := na(entryPrice[1]) ? 0.0 : entryPrice[1]
bPositionOpened := na(bPositionOpened[1]) ? false : bPositionOpened[1]
positionSize := na(positionSize[1]) ? 50000 : positionSize[1]
stockPositionSize := na(stockPositionSize[1]) ? 0 : stockPositionSize[1]
//leverage := na(leverage[1]) ? 1 : leverage[1]
 
//ReEvaluate the direction of indicators
bEMAIsRising := rising(ema, 2) 
bSMAIsRising := rising(sma, 3)
bMACDIsRising := rising(macdLine, 3)
bMACDHistIsRising := rising(macdHist, 1)
bSMASlowIsRising := rising(smaSlow, 10)
bMACDSignalIsRising := rising(macdSignalLine, 3)

atrValue := atr(14)
volatilityPercentage := (atrValue/currentPrice)*100 //calcute the volatility. Percentage of the actual price


//There is too many signal in tranding market, to avoid this we need to make sure that the smaSlow has a mininal increase
//THIS DOES NOT WORK AT ALL!!!!!
//if bSMASlowIsRising == true
//    //calculate the percentegage difference over the last 10 bars
//    smaPercentageIncrease := ((smaSlow[0]/sma[10])-1)*100
//    if smaPercentageIncrease < SMA_PERCENT_INCREASE
//        //Not enough increase we reset the flag 
//        bSMASlowIsRising := false 
        
 
if (window()) 
    //Check if we can open a LONG
//sma > smaSlow and
    if ( volatilityPercentage < 2 and bPositionOpened == false and bSMASlowIsRising == true and bMACDIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[0] > sma[0] and sma[0] < currentPrice)
    // add comparaison between macd and macd signal line
    //if (bPositionOpened == false and macdSignalLine < macdLine and bMACDIsRising == true and bMACDHistIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[1] > sma[1] and sma[1] < currentPrice)
   
        //Enter in short position 
        stockPositionSize := (positionSize*leverage)/currentPrice //Calculate the position size based on the actual price and the position Size (in $) configured.
        
        //calculate exit values
        stopLossPrice := currentPrice*(1-stopLoss/100) 
        strategy.entry("myPosition", strategy.long, qty=stockPositionSize, comment="BUY at " + tostring(currentPrice))
        entryPrice := currentPrice //store the entry price
        bPositionOpened := true  
        bDisplayArrow := true 
        
    
    //if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1]) or currentPrice < sma[1]))  
    if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1])))
        strategy.close("myPosition", comment="" + tostring(currentPrice) ) //Stop
        //uncomment the below line to make the bot investing the full portfolio amount to test compounding effect.
        //positionSize := positionSize + ((stockPositionSize * currentPrice) - (positionSize*leverage)) 
        //reset some flags 
        bPositionOpened := false 
        bDisplayArrow := true 
        entryPrice := 0.0