ভলিউম ফ্লো ইন্ডিকেটরের উপর ভিত্তি করে ট্রেন্ড অনুসরণকারী কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১০-১০ 14:51:13
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি ভলিউম ফ্লো ইন্ডিকেটর (ভিএফআই) এর উপর ভিত্তি করে ট্রেডিংয়ের পরে ট্রেন্ড বাস্তবায়ন করে। এটি মূল্যের ওঠানামা এবং ভলিউম পরিবর্তনগুলি গণনা করে বাজারের প্রবণতার দিকনির্দেশনা বিচার করে এবং কম কেনা এবং উচ্চ বিক্রয় উপলব্ধি করে।

কৌশল নীতি

  1. ভিএফআই সূচক গণনা করুনঃ লোগারিদমিক মূল্য পরিবর্তন এবং ভলিউমের উপর ভিত্তি করে ভিএফআই মান গণনা করুন এবং মসৃণীকরণ কৌশলগুলির মাধ্যমে দোলগুলি মসৃণ করুন।

  2. প্রবণতার দিকনির্দেশনা নির্ধারণ করুন: ভিএফআই-র ০-এর ঊর্ধ্বে অতিক্রম করা একটি উত্থান সংকেত, যখন ০-এর নিচে অতিক্রম করা একটি হ্রাস সংকেত।

  3. ট্রেডিং সিগন্যালঃ যখন দ্রুত EMA ধীর EMA এর উপরে এবং ভিএফআই ক্রস ক্রস ক্রয় লাইনের উপরে, তখন লম্বা হয়ে যান; যখন ভিএফআই বিক্রয় লাইনের নীচে ক্রস করে তখন অবস্থান বন্ধ করুন।

  4. স্টপ লসঃ স্টপ লসের নির্দিষ্ট শতাংশ সেট করুন।

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

সুবিধা

  1. ভিএফআই একক মূল্য সূচকগুলির তুলনায় প্রবণতা নির্ধারণ করে, কার্যকরভাবে সংহতকরণ এবং মিথ্যা ব্রেকআউটগুলি ফিল্টার করে।

  2. চলমান গড়গুলি পরিপূরক রায় প্রদান করে, যা ব্যাপ্তি বাজারে ভিএফআই থেকে ভুল সংকেত এড়ায়।

  3. স্থির স্টপ লস ঝুঁকি নিয়ন্ত্রণ করে এবং ঝুঁকি ব্যবস্থাপনা সহজ করে।

  4. প্রবণতা অনুসরণকারী মোড বিপরীতমুখী পূর্বাভাস না দিয়ে অতিরিক্ত রিটার্ন উৎপন্ন করে।

  5. নমনীয় প্যারামিটার মিটিং বিভিন্ন সময় এবং পণ্যের সাথে মানিয়ে নেয়।

ঝুঁকি

  1. VFI উল্লেখযোগ্য ওঠানামা সময় ভুল সংকেত উৎপন্ন করতে পারে।

  2. স্থির স্টপ লস খুব বড় বা খুব ছোট হতে পারে।

  3. ভুল কনফিগার করা এন্ট্রি এবং আউটপুট সেটিংস ওভার-ট্রেডিং বা অনুপস্থিত ট্রেডিংয়ের দিকে পরিচালিত করে।

  4. প্রবণতা অনুসরণ করে বিপরীতমুখী ঘটনা ধরা যায় না এবং সময়মত স্টপ লস প্রয়োজন।

  5. ভুল প্যারামিটারগুলি অকাল বা বিলম্বিত প্রবেশের কারণ হয়।

উন্নতি

  1. প্যারামিটার সামঞ্জস্য করে ভিএফআই গণনা অপ্টিমাইজ করুন।

  2. সিগন্যাল টাইমিং ভালো করার জন্য চলমান গড় সময়ের সূক্ষ্ম-সমন্বয়।

  3. স্থির স্টপ লসের পরিবর্তে ডায়নামিক স্টপ লস ব্যবহার করুন।

  4. সিগন্যাল ফিল্টার করার জন্য অন্যান্য সূচক যোগ করুন।

  5. সময়সীমার উপর ভিত্তি করে পৃথকভাবে পরামিতি অপ্টিমাইজ করুন।

  6. বিভিন্ন প্রোডাক্টের মধ্যে স্থিতিশীলতা পরীক্ষা করুন।

সিদ্ধান্ত

এই কৌশলটি ভিএফআই দিয়ে প্রবণতার দিক নির্ধারণ করে এবং ভুল সংকেতগুলি ফিল্টার করতে চলমান গড় ব্যবহার করে। এটি বিপরীতমুখী পূর্বাভাস না দিয়ে প্রবণতা অনুসরণ করে কম কেনা / উচ্চ বিক্রয় উপলব্ধি করে। সুবিধাগুলি একক মূল্য সূচকগুলির তুলনায় এর উচ্চতর প্রবণতা সনাক্তকরণ এবং একীকরণের ফিল্টার করার ক্ষমতাতে রয়েছে। প্রধান ঝুঁকি হ'ল ওঠানামা চলাকালীন ভুল সংকেত উত্পন্ন করা। প্যারামিটারগুলি অনুকূলিতকরণ, অতিরিক্ত সূচক যুক্ত করা এবং স্টপ লস কৌশলগুলি এর স্থায়িত্ব উন্নত করতে পারে। সামগ্রিকভাবে, প্যারামিটার টিউনিং এবং স্টপ লস অপ্টিমাইজেশনের মাধ্যমে, এই ভিএফআই ভিত্তিক কৌশলটি একটি নির্ভরযোগ্য প্রবণতা অনুসরণকারী সিস্টেমে পরিণত হতে পারে।


/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-06 21:00:00
period: 3m
basePeriod: 1m
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/
// © mohanee
//This strategy is based on VFI indicator published by  UTS.  
//more details of VFI indicator can be found at  [url=http://mkatsanos.com/VFI.html]http://mkatsanos.com/VFI.html[/url] 
// I have added buy line and sell line to the indicator  and tested  SPY stock/index on one hour chart

//@version=4
strategy(title="VFI  strategy [based on VFI indicator published by  UTS]", overlay=false,pyramiding=2, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


// Const
kMaColor = color.aqua
kNeutralColor = color.gray
kBearColor = color.red
kBullColor = color.green

kAlma = "ALMA"
kEma = "EMA"
kSma = "SMA"
kWma = "WMA"


// Input

vfi_length = input(8, title="Length", minval=1)  //default 130
vfi_coef = input(0.2, title="Coef", minval=0.1)
vfi_volCutoff = input(2.5, title="Volume Cutoff", minval=0.1)
vfi_smoothLen = input(3, title="Smoothing Period", minval=1)
vfi_smoothType = input(kEma, title="Smoothing Type", options=[kAlma, kEma, kSma, kWma])

//These are adde by me for the strategy purpose  BEGIN
vfi_buyLine = input(-4, title="Buy Line", minval=-10)
vfi_sellLine = input(5, title="Sell Line", minval=-10)
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
//These are adde by me for the strategy purpose  END

vfi_longEMA = input(200, title="Long EMA", minval=1)
vfi_shortEMA1 = input(50, title="short EMA1", minval=1)
vfi_shortEMA2 = input(9, title="short EM2A", minval=1)

vfi_showTrend = input(false, title="Visualize Trend")
vfi_showFill = input(true, title="Apply Filling")
vfi_showMa = input(true, title="Show Moving Average")
vfi_maType = input(kSma, title="Moving Average Type", options=[kAlma, kEma, kSma, kWma])
vfi_maLength = input(30, title="Moving Average Length", minval=1)
vfi_almaOffset = input(0.85, title="• ALMA - Offset (global setting)", minval=0.0, maxval=1.0, step=0.05) // more smoothness (closer to 1) vs. more responsiveness (closer to 0)
vfi_almaSigma = input(6.0, title="• ALMA - Sigma (global setting)", minval=0.0, step=0.05) // the larger sigma the smoother ALMA


// Functionality

isRising(sig) =>
    sig > sig[1]
    
isFlat(sig) =>
    sig == sig[1]

vfi_trendColor(sig) =>
    isFlat(sig) ? kNeutralColor : isRising(sig) ? kBullColor : kBearColor
    
vfi_color(sig) =>
    isFlat(sig) ? kNeutralColor : sig > 0 ? kBullColor : kBearColor
    
osc_color(sig) =>
    sig == 0 ? kNeutralColor : sig > 0 ? kBullColor : kBearColor

smooth(t, sig, len) =>
    ma = float(sig)         // None
    if t == kSma            // Simple
        ma := sma(sig, len)
    if t == kEma            // Exponential
        ma := ema(sig, len)
    if t == kWma            // Weighted
        ma := wma(sig, len)
    if t == kAlma           // Arnaud Legoux
        ma := alma(sig, len, vfi_almaOffset, vfi_almaSigma)
    ma

calc_vfi(fviPeriod, smoothType, smoothLen, coef, vCoef) =>
    avg = nz(hlc3)
    inter = log(avg) - log(avg[1])
    vInter = stdev(inter, 30)
    cutOff = coef * vInter * close
    vAve = smooth(kSma, volume[1], fviPeriod)
    vMax = vAve * vCoef
    vC = min(volume, vMax)
    mf = avg - avg[1]
    vCp = iff(mf > cutOff, vC, iff(mf < -cutOff, -vC, 0))
    sVfi = sum(vCp, fviPeriod) / vAve
    vfi = smooth(smoothType, sVfi, smoothLen)
    
value_vfi = calc_vfi(vfi_length, vfi_smoothType, vfi_smoothLen, vfi_coef, vfi_volCutoff)
value_ma = smooth(vfi_maType, value_vfi, vfi_maLength)

longEMAval= ema(close, vfi_longEMA)
shortEMAval1= ema(close, vfi_shortEMA1)
shortEMAval2= ema(close, vfi_shortEMA2)

color_vfi = vfi_showTrend ? vfi_trendColor(value_vfi) : vfi_color(value_vfi)
color_osc = vfi_showFill ? osc_color(value_vfi) : na
color_ma = vfi_showMa ? kMaColor : na


// Drawings

plot_vfi = plot(value_vfi, title="VFI", color=color_vfi, linewidth=1)
plot_fill = plot(0, color=color_vfi, editable=false)
fill(plot_vfi, plot_fill, title="Oscillator Fill", color=color_osc, transp=75) 
hline(vfi_buyLine, color=color.green, title="Buy Line", linewidth=2, linestyle=hline.style_dashed)
hline(vfi_sellLine, color=color.purple, title="Sell Line", linewidth=2, linestyle=hline.style_dashed)
plot(value_ma, title="MA", color=color_ma, linewidth=2)

strategy.entry(id="VFI LE", long=true,  when=crossover(value_vfi,vfi_buyLine)  and ( shortEMAval1 >= longEMAval  ))

//strategy.close(id="VFI LE", comment="Exit",   when=crossunder(value_vfi,vfi_sellLine))
strategy.close(id="VFI LE", comment="TP Exit",   when=crossunder(value_vfi,vfi_sellLine) and close>strategy.position_avg_price)
//strategy.close(id="VFI LE", comment="Exit",   when=  (shortEMAval1 > shortEMAval2 )  and crossunder(close, shortEMAval2))

//stoploss
stopLossVal =   strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01) 
strategy.close(id="VFI LE", comment="SL Exit",   when=crossunder(value_vfi,vfi_sellLine) and close < stopLossVal)




আরো