بی ٹی سی اور ای ٹی ایچ لانگ ٹرینڈ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-07 10:16:09
ٹیگز:

جائزہ

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

حکمت عملی منطق

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

  2. 20 پیریڈ EMA، 100 پیریڈ SMA اور 200 پیریڈ SMA کا حساب لگائیں، جب EMA اور SMA ایک ساتھ اوپر کی طرف اشارہ کرتے ہیں تو طویل عرصے تک جائیں؛

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

  4. سٹاپ نقصان لائن مقرر کریں، جب قیمت ٹوٹ جاتی ہے تو سٹاپ نقصان کو روکیں.

  5. بند پوزیشن جب قیمت گرتی ہے اور EMA SMA سے نیچے گزر جاتا ہے۔

اس حکمت عملی میں متعدد اشارے شامل ہیں تاکہ رجحان اور انٹری ٹائمنگ کا تعین کیا جاسکے تاکہ بڑے اپ ٹرینڈز سے فائدہ اٹھایا جاسکے۔

فوائد

  1. متعدد اشارے کا مجموعہ غلط بریک آؤٹ اور غلط سگنل کو فلٹر کرنے میں مدد کرسکتا ہے۔

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

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

  4. بیک ٹسٹ میں بی ٹی سی اور ای ٹی ایچ میں مناسب منافع دکھایا گیا ہے۔

  5. سادہ اور واضح منطق، سمجھنے اور لاگو کرنے میں آسان، beginners کے لئے اچھا ہے.

  6. اصلاح کے لئے زیادہ اشارے شامل کرنے کے لئے اعلی توسیع.

خطرات

  1. مارکیٹ کی بے ترتیبیت، غلط فیصلے کا خطرہ

  2. واحد پوزیشن نقطہ نظر منظم خطرات کو ہیج نہیں کر سکتا.

  3. غلط سٹاپ نقصان کی ترتیب overstoploss کا سبب بن سکتی ہے.

  4. بیک ٹیسٹ زندہ نتائج کی نمائندگی نہیں کرتا، اصل کارکردگی ابھی تک توثیق نہیں کی گئی ہے۔

  5. ٹریڈنگ لاگت کے اثرات پر غور نہیں کیا جاتا، براہ راست کارکردگی سے مختلف ہو سکتا ہے.

  6. پروڈکٹ کی خصوصیات پر غور نہیں کیا، پیرامیٹر ٹوننگ کی ضرورت ہے.

اصلاح کی ہدایات

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

  2. داخلہ سگنل فلٹر کرنے کے لئے KDJ کی طرح فلٹرز شامل کریں.

  3. سٹاپ نقصان کی حکمت عملی کو بہتر بنائیں، جیسے متحرک سٹاپ نقصان شامل کرنا.

  4. اکاؤنٹ کے سائز پر مبنی پوزیشن سائزنگ پر غور کریں۔

  5. مصنوعات کی خصوصیات کو ممتاز کریں، اس کے مطابق پیرامیٹرز کو ایڈجسٹ کریں.

  6. تجزیہ کے لیے مزید ٹائم فریم شامل کریں۔

  7. مختلف مصنوعات آزمائیں اور ان میں سے بہترین تلاش کریں۔

نتیجہ

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


/*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
        


مزید