Bitcoin اور Ethereum Bullish Trend Strategy


تخلیق کی تاریخ: 2023-10-07 10:16:09 آخر میں ترمیم کریں: 2023-10-07 10:16:09
کاپی: 5 کلکس کی تعداد: 704
1
پر توجہ دیں
1617
پیروکار

جائزہ

یہ حکمت عملی ایک تکنیکی اشارے پر مبنی ایک سادہ خود کار طریقے سے ملٹی ہیڈ ٹرینڈ حکمت عملی ہے جو بٹ کوائن اور ایتھروئن جیسے کریپٹو کارنسیس پر لاگو ہوتی ہے ، جس کا مقصد بڑے عروج کے رجحان کو پکڑنا اور بار بار تجارت سے ہونے والے فیس کے نقصان کو کم کرنا ہے۔

حکمت عملی کا اصول

  1. MACD کا استعمال کرتے ہوئے رجحان کی سمت کا تعین کرنے کے لئے، MACD اوپر کی طرف سے کراسنگ میں زیادہ دیکھتا ہے؛

  2. 20 سائیکل ای ایم اے ، 100 سائیکل ایس ایم اے اور 200 سائیکل ایس ایم اے کا حساب لگائیں ، ای ایم اے اور ایس ایم اے اوپر کی طرف بڑھتے وقت زیادہ نظر آتے ہیں۔

  3. جب EMA SMA سے اوپر ہو تو زیادہ خریدیں اور جب SMA SMA سے اوپر ہو تو زیادہ خریدیں؛

  4. اسٹاپ نقصان کی حد طے کریں ، اور جب قیمت اسٹاپ نقصان کی حد سے نیچے آجائے تو اسٹاپ نقصان سے باہر نکلیں۔

  5. جب قیمت گرتی ہے تو ای ایم اے کے نیچے ایس ایم اے کو توڑنے پر بیلی پوزیشن سے باہر نکلیں۔

اس حکمت عملی میں رجحانات کا تعین کرنے کے لئے متعدد اشارے شامل ہیں اور اس میں داخل ہونے کا وقت بھی شامل ہے ، جس میں اہم عروج کے رجحانات کا سراغ لگانے سے منافع حاصل کیا جاتا ہے۔

اسٹریٹجک فوائد

  1. اس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس طرح کے فیصلے کے ساتھ ، غلط سگنل کو فلٹر کیا جاسکتا ہے ، جیسے جعلی توڑنا۔

  2. غیر ضروری تجارت کو کم کرنے اور تجارت کی کثرت کو کم کرنے کے لئے صرف رجحانات کے واضح ہونے پر ہی داخل ہوں۔

  3. اسٹاپ نقصان کی حکمت عملی ایک ہی تجارت میں زیادہ سے زیادہ نقصان کو مؤثر طریقے سے کنٹرول کرتی ہے۔

  4. ریٹائرمنٹ کے اعداد و شمار سے پتہ چلتا ہے کہ بٹ کوائن اور ایتھرئم میں بہتر منافع حاصل کیا جاسکتا ہے۔

  5. حکمت عملی کی منطق سادہ اور واضح ہے ، اس پر عمل درآمد آسان ہے ، اور ابتدائی سیکھنے کے لئے موزوں ہے۔

  6. توسیع پذیر، زیادہ سے زیادہ معیار کو بہتر بنانے کے لئے متعارف کرایا جا سکتا ہے.

اسٹریٹجک رسک

  1. مارکیٹ میں بے ترتیب ہونے کی وجہ سے ، غلط فہمی کا خطرہ ہے۔

  2. ایک ہی پوزیشن رکھنے سے سسٹم کے خطرے سے بچنے کا کوئی طریقہ نہیں ہے۔

  3. غیر مناسب اسٹاپ نقصان کی ترتیب سے زیادہ نقصان ہوسکتا ہے۔

  4. ریٹائرمنٹ کے اعداد و شمار ریئل ڈسک پرفارمنس کی نمائندگی نہیں کرتے ہیں ، اور ریئل ڈسک کی کارکردگی کی تصدیق کی جا رہی ہے۔

  5. ٹرانزیکشن فیس کے اثرات کو مدنظر نہ رکھتے ہوئے ، لائیو ڈسک کے اثرات مختلف ہوسکتے ہیں۔

  6. اس کے علاوہ، یہ مختلف نسلوں کی خصوصیات کو نظر انداز کرنے کے لئے بہتر بنانے کے لئے ضروری ہے.

حکمت عملی کی اصلاح کی سمت

  1. مختلف پیرامیٹرز کے امتزاج کی جانچ اور اشارے کے پیرامیٹرز کو بہتر بنانا؛

  2. KDJ جیسے اشارے کو فلٹر کرنے کے لئے داخل ہونے کے سگنل شامل کریں؛

  3. متحرک اسٹاپ نقصان کی حکمت عملی کو بہتر بنانا۔

  4. اکاؤنٹس کی رقم کے انتظام پر غور کریں اور پوزیشن کی مقدار کو ایڈجسٹ کریں؛

  5. مختلف قسم کی خصوصیات اور ایڈجسٹمنٹ پیرامیٹرز؛

  6. اس کے علاوہ، یہ بھی کہا گیا ہے کہ:

  7. مختلف اقسام کی جانچ پڑتال کریں اور بہترین تلاش کریں.

خلاصہ کریں۔

اس حکمت عملی کا مجموعی نظریہ واضح اور سمجھنے میں آسان ہے ، کثیر اشارے کے فیصلے کا استعمال غلط سگنل کو مؤثر طریقے سے فلٹر کرنے کے لئے کیا جاسکتا ہے۔ تاہم ، پیرامیٹرز ، رسک کنٹرول وغیرہ کو مزید بہتر بنانے کی ضرورت ہے ، پھر اس کے ساتھ مل کر ریئل اسٹیٹ کی توثیق ، عملی طور پر قابل اطلاق ہے۔ اگر اس کو مزید بہتر بنایا جائے تو ، یہ ایک بہت ہی عملی cryptocurrency رجحانات کی پیروی کرنے والی حکمت عملی بن سکتی ہے۔

حکمت عملی کا ماخذ کوڈ
/*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