পরিমাণগত চলমান গড়ের উপর ভিত্তি করে ট্রেন্ড ট্র্যাকিং কৌশল


সৃষ্টির তারিখ: 2023-09-18 13:23:52 অবশেষে সংশোধন করুন: 2023-09-18 13:23:52
অনুলিপি: 0 ক্লিকের সংখ্যা: 637
1
ফোকাস
1617
অনুসারী

ওভারভিউ

এই কৌশলটি ট্রেডিং ভলিউমের উপর ভিত্তি করে দুটি চলমান গড় গণনা করে এবং তাদের পার্থক্যের দিকের উপর ভিত্তি করে বর্তমান প্রবণতার দিকটি বিচার করে, তারপরে দীর্ঘ অবস্থান বা সংক্ষিপ্ত অবস্থান অপারেশন করে। কৌশলটি সহজ এবং কার্যকরভাবে বাজারের প্রবণতা অনুসরণ করতে পারে।

কৌশল নীতি

  1. হিসাব দ্রুত লাইন এবং ধীর লাইন. দ্রুত লাইন হল ব্যবহারকারীর সংজ্ঞায়িত দ্রুত লাইন সময়কালের উপর ভিত্তি করে একটি পরিমাণগত চলমান গড়, এবং ধীর লাইন হল ধীর লাইন সময়কালের উপর ভিত্তি করে একটি পরিমাণগত চলমান গড়।

  2. দুই লাইনের পার্থক্য গণনা করুন। দ্রুত লাইন বিয়োগ ধীর লাইন একটি পার্থক্য মান কার্ভ পায়।

  3. ট্রেন্ডের দিকনির্দেশনা নির্ধারণ করুন। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে, তখন একটি উত্সাহী সংকেত হিসাবে, আরও বেশি করুন; যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে তখন একটি পতনশীল সংকেত হিসাবে, খালি করুন।

  4. ট্রেডিং সিগন্যাল জারি করা। মুনাফা বাড়ার সময় মাল্টি সিগন্যাল জারি করা হয়; মুনাফা হ্রাসের সময় শূন্য সিগন্যাল জারি করা হয়।

  5. স্টপ সেট করুন। স্টপ অবস্থানটি ব্যবহারকারীর দ্বারা সংজ্ঞায়িত স্থির স্টপ শতাংশ বা এটিআর-ভিত্তিক গতিশীল স্টপ দ্বারা সেট করুন।

  6. বিদায়ের শর্ত যদি পজিশন ধরে রাখার সময় স্টপ লস বা বিপরীত সিগন্যাল ট্রিগার করা হয়, তাহলে পজিশনটি বিদায় দেওয়া হবে

সামর্থ্য বিশ্লেষণ

  1. প্রবণতা সনাক্ত করতে কোয়ান্টামাইজড সূচক ব্যবহার করুন, যাতে ভুয়া ব্রেকথ্রু দ্বারা বিভ্রান্ত না হন।

  2. দ্রুত ও ধীর গতির লাইনগুলি বাজার শব্দকে ফিল্টার করে এবং ঘন ঘন লেনদেন এড়ায়।

  3. স্টপ লস সেটিং ক্ষতির ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করে।

  4. এই কৌশলটি সহজ, সুস্পষ্ট এবং সহজেই বোঝা যায়।

  5. বিভিন্ন জাতের এবং সময়কালের চাহিদা পূরণের জন্য কাস্টমাইজযোগ্য প্যারামিটারগুলি।

ঝুঁকি বিশ্লেষণ

  1. ভুল প্যারামিটার সেটিং ট্রেডিং ফ্রিকোয়েন্সি বা ট্রেন্ড মিস করতে পারে।

  2. ফিক্সড স্টপ লস খুব যান্ত্রিক হতে পারে এবং বাজারের পরিবর্তনের সাথে মানিয়ে নিতে পারে না।

  3. মূল্য-মানের সম্পর্কের পরিবর্তনের ফলে পরিমাপের কার্যকারিতা প্রভাবিত হতে পারে।

  • ঝুঁকি ১ঃ অপ্টিমাইজেশান প্যারামিটার দ্বারা সর্বোত্তম সমন্বয় খুঁজে পাওয়া যায়।

  • ঝুঁকি 2 স্থির ক্ষতির পরিবর্তে ডায়নামিক এটিআর স্টপ ব্যবহার করতে পারে।

  • ঝুঁকি ৩ঃ ট্র্যাফিকের পরিবর্তনের প্রভাবের উপর নজর দেওয়া।

অপ্টিমাইজেশান দিক

  1. বিভিন্ন ফাস্টলাইন এবং স্লো লাইন প্যারামিটার সমন্বয় পরীক্ষা করুন।

  2. অন্যান্য পরিমাপযোগ্য সূচক যেমন OBV, উইলিয়াম সূচক ইত্যাদি ব্যবহার করে দেখুন।

  3. ক্রমবর্ধমান স্টপ লস।

  4. অন্যান্য সূচক সমন্বয়ে ব্যবহারের প্রভাব মূল্যায়ন করা।

  5. বিভিন্ন ধরণের লেনদেনের প্রভাব মূল্যায়ন করা।

সারসংক্ষেপ

এই কৌশলটি প্রবণতা অনুসরণ করে, ট্রেডিং লজিকটি সহজ এবং পরিষ্কার, এবং প্যারামিটারগুলিকে অনুকূলিতকরণ করা যায়। স্টপ লস সেটিংটি ঝুঁকি নিয়ন্ত্রণে সহায়তা করে। পরবর্তী সময়ে অন্যান্য সূচক সমন্বয়গুলির সাথে ব্যবহারের প্রভাবটি মূল্যায়ন করা যেতে পারে।

কৌশল সোর্স কোড
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EVWMA 6HR", overlay=false, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
// Credit to QuantNomad for the main idea behind this code
/////////////// Time Frame ///////////////
_1 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// EVWMA /////////////
_2 = input(false,  "════════ EVMA ═══════")

fast_sum_length = input(5, title = "Fast Sum Length",  type = input.integer)
slow_sum_length = input(11, title = "Slow Sum Length",  type = input.integer)

fast_vol_period = sum(volume, fast_sum_length)
slow_vol_period = sum(volume, slow_sum_length)

fast_evwma = 0.0
fast_evwma := ((fast_vol_period - volume) * nz(fast_evwma[1], close) + volume * close) / (fast_vol_period)
slow_evwma = 0.0
slow_evwma := ((slow_vol_period - volume) * nz(slow_evwma[1], close) + volume * close) / (slow_vol_period)

diff = fast_evwma - slow_evwma

///////////////  Strategy  /////////////// 
long = fast_evwma > slow_evwma 
short = fast_evwma < slow_evwma 

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(9.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

_5 = input(false,  "══════ Longs or Shorts ═════")
useLongs = input(true, title="Use Longs")
useShorts = input(true, title="Use Shorts")

/////////////// Execution ///////////////
if testPeriod()
    if useLongs
        strategy.entry("L", strategy.long, when=long)
        strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > -1)
    if useShorts
        strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > -1)
        strategy.entry("S", strategy.short, when=short)
    if not useShorts
        strategy.close("L", when=short)
    if not useLongs
        strategy.close("S", when=long)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
p1 = plot(diff, title = "Delta", color = long ? color.lime : short ? color.red : na, transp=0)
p2 = plot(0, color = color.white)
fill(p1, p2, color = long ? color.lime : short ? color.red : na, transp=60)