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

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

img

সারসংক্ষেপ

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

কৌশল নীতি

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

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

সুবিধা বিশ্লেষণ

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

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

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

ঝুঁকি নিয়ন্ত্রণের জন্য, পরামিতিগুলি যথাযথভাবে সামঞ্জস্য করা যেতে পারে এবং সহায়ক বিচারের জন্য অন্যান্য সূচকগুলির সাথে একত্রিত করা যেতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

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

সংক্ষিপ্তসার

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


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=3
strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating=input(defval=true, type=bool, title="Oscillating")
normalize=input(defval=false, type=bool, title="Normalize")
vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close/methodvalue

currclose = na
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = na
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol/barcount : vol


x=isOscillating and directionIsDown ? -res : res

TP = input(0) * 10
SL = input(0) * 10
TS = input(1) * 10
TO = input(3) * 10
CQ = 100

TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na

longCondition = crossover(x,0)
if (longCondition)
    strategy.entry("Long", strategy.long)


shortCondition = crossunder(x,0)
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)

আরো