বহুমুখী মুভিং এভারেজ টু-ওয়ে ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2024-01-15 14:50:32 অবশেষে সংশোধন করুন: 2024-01-15 14:50:32
অনুলিপি: 1 ক্লিকের সংখ্যা: 607
1
ফোকাস
1617
অনুসারী

বহুমুখী মুভিং এভারেজ টু-ওয়ে ট্রেডিং কৌশল

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল সূচক হ’ল গুণিত চলমান গড়। সূচক প্যারামিটারগুলির মধ্যে রয়েছেঃ এটিআর চক্রের দৈর্ঘ্য, এটিআর গুণিতক, চলমান গড়ের ধরণ এবং দৈর্ঘ্য। এটিআর মান প্রতিনিধিত্ব করে সময়ের মধ্যে ওঠানামার মাত্রা। গুণিত চলমান গড়টি সময়ের দামের গড় মূল্যের যোগ / বিয়োগ এটিআর গুণিত এবং এটিআর এর গুণিত সমান। দাম যখন গুণিত চলমান গড়ের চেয়ে বেশি হয় তখন এটি একটি উত্সাহী সংকেত; যখন দাম গুণিত চলমান গড়ের চেয়ে কম হয় তখন এটি একটি উত্সাহী সংকেত।

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

যখন দাম পিএমএক্স সূচকের সাথে ঊর্ধ্বমুখী ক্রস হয় তখন একটি প্লাস সিগন্যাল হিসাবে; যখন দাম পিএমএক্স সূচকের সাথে ঊর্ধ্বমুখী ক্রস হয় তখন একটি শূন্য সিগন্যাল হিসাবে। কৌশলটি এইভাবে প্রবেশ করে, প্রবণতা ঊর্ধ্বমুখী, প্রবণতা নীচে শূন্য, গতিশীল ট্র্যাকিং স্টপ লস ক্যাপ।

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

এই কৌশলটির সুবিধাগুলো হলঃ

  1. লং-ফ্রন্ট, দ্বি-মুখী লেনদেনের পদ্ধতি, সমগ্র বাজারে লেনদেনের ক্ষমতা, এবং ব্যাপকতা।

  2. ট্রেডিং সিগন্যাল স্থিতিশীল এবং নির্ভরযোগ্য।

  3. PMax সূচকের সাথে স্টপ-অফ-লস ব্যবহার করে ঝুঁকি নিয়ন্ত্রণ করা যায়।

  4. গণনা চক্র এবং গুণিতক প্যারামিটারগুলি সামঞ্জস্যযোগ্য এবং বহুমুখী।

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

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. Whipsaw-এর ট্রেডিং ক্ষতির কারণ হতে পারে যদি প্যারামিটারগুলি ভুলভাবে সেট করা হয়।

  2. খালি হাতে লেনদেনের ক্ষেত্রে লিভারেজ সীমাবদ্ধতার ঝুঁকি সম্পর্কে সতর্ক থাকতে হবে।

  3. এদিকে, বাজারে বড় ধরনের অস্থিরতার ঝুঁকি এড়ানো কঠিন।

সমাধানঃ

  1. Whipsaw এর সম্ভাব্যতা কমানোর জন্য প্যারামিটার অপ্টিমাইজ করুন।

  2. পজিশনের ঝুঁকি বিচ্ছিন্ন করার জন্য লিভারেজ সীমা যথাযথভাবে নিয়ন্ত্রণ করুন

  3. এটিআর গুণক বৃদ্ধি করুন এবং স্টপ লস ব্যাপ্তি প্রসারিত করুন।

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

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ

  1. বিভিন্ন বাজার ও চক্রের ধারাবাহিকতা পরীক্ষা করা।

  2. মেশিন লার্নিং অ্যালগরিদম প্রয়োগ করে স্বয়ংক্রিয়ভাবে প্যারামিটারগুলিকে অনুকূলিতকরণ করুন।

  3. ডিপ লার্নিং এবং অন্যান্য প্রযুক্তির সাহায্যে বাজারের কাঠামো নির্ধারণ করা।

  4. তথ্যের আরও উৎসকে একত্রিত করে সিদ্ধান্তের কার্যকারিতা বাড়ানো।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna
//developer: @KivancOzbilgic
//author: @KivancOzbilgic
//stretegy converter: @crypto_melih
//@version=4

strategy("Profit Maximizer Strategy Long-Short", shorttitle="PMax-Strategy", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0, commission_type=strategy.commission.percent)

src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
condition = input(title="Signal Type", defval="Only Crossing Signals", options=["Only Crossing Signals", "Only Price/Pmax Crossing Signals"])
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
//showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
//showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
long_short = input(defval = false, title = "Long-Short", type=input.bool)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(src, length)
longStop = MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = crossover(MAvg, PMax)
//plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, PMax)
//plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
buySignalc = crossover(src, PMax)
//plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, PMax)
//plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

if(condition=="Only Crossing Signals")
    strategy.entry("BUY", strategy.long, when = buySignalk)
else
    strategy.entry("BUY", strategy.long, when = buySignalc)

if(long_short)
    if(condition=="Only Crossing Signals")
        strategy.entry("SELL", strategy.short, when = sellSignallk)
    else
        strategy.entry("SELL", strategy.short, when = sellSignallc)
else
    if(condition=="Only Crossing Signals")
        strategy.close("BUY", when = sellSignallk)
    else
        strategy.close("BUY", when = sellSignallc)