পরিমাণগত ট্রেডিং থেকে সম্পদ ব্যবস্থাপনা - পরম রিটার্নের জন্য সিটিএ কৌশল বিকাশ

লেখক:এফএমজেড-লিডিয়া, তৈরিঃ 2023-02-07 09:58:41, আপডেটঃ 2023-09-18 20:25:11

, [nowTime, this.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update ((চার্ট); }

### 4. In the entry function main(), execute the pre-transaction pre-processing code, which will only run once after the program is started, including:

- ```SetErrorFilter ( )``` to filter the unimportant information in the console
- ```exchange.IO ( )``` to set the digital currency to be traded
- ```ObjChart.reset ( )``` to clear the previous chart drawn before starting the program
- ```LogProfitReset ( )``` to clear the status bar information before starting the program

After the above pre-transaction pre-processing is defined, the next step is to enter the polling mode and execute the onTick() function repeatedly. It also sets the sleep time for Sleep () polling, because the API of some digital currency exchanges has built-in access limit for a certain period of time.

ফাংশন main() { // কনসোলে অপ্রয়োজনীয় তথ্য ফিল্টার করুন SetErrorFilter ((429 GetRecords: GetOrders: GetDepth: GetAccount: Buy Selltimeout Futures_OP); exchange.IO ((currency, name + _USDT); // ট্রেড করার জন্য ডিজিটাল মুদ্রা সেট করুন ObjChart.reset(); // প্রোগ্রাম শুরু করার আগে আঁকা পূর্ববর্তী চার্ট সাফ করুন LogProfitReset ((); // প্রোগ্রাম শুরু করার আগে অবস্থা বার তথ্য মুছে দিন while (true) { // পোলিং মোডে প্রবেশ করুন onTick(); // onTick ফাংশন চালান ঘুম ((500); // ০.৫ সেকেন্ড ঘুম } }

## II. Get and calculate data

1. Obtain basic data object, account balance, and boll indicator data for use in the trading logic.

ফাংশন চালু চিহ্নিত করুন (() { var data = new Data ((tradeTypeA, tradeTypeB); // একটি মৌলিক তথ্য বস্তু তৈরি করুন var accountStocks = data.accountData.Stocks; // অ্যাকাউন্ট ব্যালেন্স var boll = data.boll ((dataLength, timeCycle); // boll সূচক তথ্য পান if (!boll) return; // boll ডেটা না থাকলে রিটার্ন }

## III. Place an order and handle the follow-up

1. Execute the buying and selling operation according to the above strategic logic. First, judge whether the price and indicator conditions are valid, then judge whether the position conditions are valid, and finally execute the trade () order function.

// দামের পার্থক্যের ব্যাখ্যা // basb = (কন্ট্রাক্ট A এর একটি মূল্য বিক্রি করুন - কন্ট্রাক্ট B এর একটি মূল্য কিনুন) // sabb = (কন্ট্রাক্ট A এর একটি মূল্য কিনুন - কন্ট্রাক্ট B এর একটি মূল্য বিক্রি করুন) যদি (data.sabb > boll.middle && data.sabb < boll.up) { // যদি sabb মধ্য ট্র্যাকের চেয়ে বেশি হয় if (data.mp(tradeTypeA, 0)) { // অর্ডার দেওয়ার আগে A চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, closebuy); // চুক্তি A দীর্ঘ অবস্থান বন্ধ করে } if (data.mp(tradeTypeB, 1)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, closesell); // চুক্তি বি শর্ট পজিশন বন্ধ করে } } else if (data.basb < boll.middle && data.basb > boll.down) { // যদি basb মধ্য ট্র্যাকের চেয়ে কম হয় if (data.mp(tradeTypeA, 1)) { // অর্ডার দেওয়ার আগে A চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, closesell); // চুক্তি A শর্ট পজিশন বন্ধ করে } if (data.mp(tradeTypeB, 0)) { // অর্ডার দেওয়ার আগে B চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, closebuy); // বি চুক্তি দীর্ঘ পজিশন বন্ধ করে } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // যদি একাউন্টে ব্যালেন্স থাকে if (data.basb < boll.down) { // If basb price difference is lower than the down track যদি বাসবের দামের পার্থক্য ডাউন ট্র্যাকের চেয়ে কম হয় if (!data.mp(tradeTypeA, 0)) { // অর্ডার দেওয়ার আগে A চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade(tradeTypeA, buy); // চুক্তি A লং পজিশন খোলে } if (!data.mp(tradeTypeB, 1)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, sell); // চুক্তি বি শর্ট পজিশন খোলে } } else if (data.sabb > boll.up) { // If sabb price difference is higher than the upper track যদি sabb দামের পার্থক্য উপরের ট্র্যাকের চেয়ে বেশি হয় if (!data.mp(tradeTypeA, 1)) { // অর্ডার দেওয়ার আগে A চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, sell); // চুক্তি A শর্ট পজিশন খোলে } if (!data.mp(tradeTypeB, 0)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, buy); // চুক্তি বি লং পজিশন খোলে } } }

2. After the order is placed, it is necessary to deal with the abnormal situations such as the unsettled order and the holding of a single contract. And draw the chart.

data.cancelOrders(); // অর্ডার বাতিল করুন তথ্য.অঙ্কনচার্ট ((বোল); // অঙ্কন data.isEven(); // পৃথক চুক্তির হ্যান্ডলিং

As above, we have created a simple cross-period arbitrage strategy of digital currency completely through more than 200 lines code. The complete code is as follows:

// গ্লোবাল ভেরিয়েবল // কনফিগারেশন চার্টের জন্য একটি চার্ট বস্তু ঘোষণা করুন var চার্ট = { __isStock: সত্য, টুল টিপ: { xDateFormat: %Y-%m-%d %H:%M:%S, %A }, শিরোনাম: { টেক্সটঃ ট্রানজেকশন লাভ ও ক্ষতি কার্ভ (বিস্তারিত) }, rangeSelector: { বোতামঃ [{ টাইপঃ ঘন্টা, গণনাঃ ১ পাঠ্যঃ 1h }, { টাইপঃ ঘন্টা, সংখ্যাঃ ২, পাঠ্যঃ 3h }, { টাইপঃ ঘন্টা, সংখ্যাঃ ৮ পাঠ্যঃ 8h }, { প্রকারঃ সমস্ত, পাঠ্যঃ সব ]] নির্বাচিতঃ 0, ইনপুট সক্রিয়ঃ মিথ্যা }, xAxis: { টাইপঃ তারিখ-সময় }, yAxis: { শিরোনাম: { পাঠ্যঃ মূল্যের পার্থক্য }, বিপরীতঃ মিথ্যা, }, সিরিজঃ [{ নামঃ উপরের ট্র্যাক, id: line1,up, তথ্যঃ [] }, { নামঃ মিডল ট্র্যাক id: line2,middle, তথ্যঃ [] }, { নামঃ ডাউন ট্র্যাক, id: line3,down, তথ্যঃ [] }, { নামঃ বাসব, id: line4,basb, তথ্যঃ [] }, { নামঃ সাব, id: line5,sabb, তথ্যঃ [] }] }; var ObjChart = Chart(chart); // অঙ্কন বস্তু var bars = []; // স্টোরেজ মূল্য পার্থক্য সিরিজ var oldTime = 0; // ইতিহাসের ডেটা টাইমস্ট্যাম্প রেকর্ড করুন

// পরামিতি var tradeTypeA = this_week; // Arbitrage একটি চুক্তি var tradeTypeB = quarter; // Arbitrage B চুক্তি var dataLength = 10; // সূচক সময়ের দৈর্ঘ্য var timeCycle = 1; // কে-লাইন সময়কাল var নাম = ETC; // মুদ্রা var ইউনিট = 1; // অর্ডার পরিমাণ

// বেসিক ডেটা ফাংশন ডেটা ((tradeTypeA, tradeTypeB) { // মধ্যস্থতা A চুক্তি এবং মধ্যস্থতা বি চুক্তিতে পাস this.accountData = _C(exchange.GetAccount); // অ্যাকাউন্ট তথ্য পান this.positionData = _C(exchange.GetPosition); // অবস্থান তথ্য পান var recordsData = _C(exchange.GetRecords); // K-লাইন ডেটা পান exchange.SetContractType(tradeTypeA); // একটি চুক্তি সালিশ সাবস্ক্রাইব var depthDataA = _C(exchange.GetDepth); // Arbitrage একটি চুক্তি গভীরতা তথ্য exchange.SetContractType(tradeTypeB); // সালিশ বি চুক্তিতে সাবস্ক্রাইব var depthDataB = _C(exchange.GetDepth); // Arbitrage B চুক্তি গভীরতা তথ্য this.time = recordsData[recordsData.length - 1].Time; // সর্বশেষ তথ্য পেতে সময় this.askA = depthDataA.Asks[0].Price; // একটি চুক্তির একটি মূল্য বিক্রি this.bidA = depthDataA.Bids[0].Price; // Arbitrage এর একটি মূল্য কিনুন একটি চুক্তি this.askB = depthDataB.Aks[0].Price; // Arbitrage B চুক্তির একটি মূল্য বিক্রি করুন this.bidB = depthDataB.Bids[0].Price; // Arbitrage B চুক্তির একটি মূল্য কিনুন // পজিটিভ আরবিট্রেজ মূল্য পার্থক্য (একটি চুক্তির মূল্য বিক্রি A - চুক্তির একটি মূল্য কিনতে B) this.basb = depthDataA.Aks[0].Price - depthDataB.Bids[0].Price; // নেতিবাচক সালিশ মূল্য পার্থক্য (কন্ট্রাক্ট A এর একটি মূল্য কিনুন - চুক্তি B এর একটি মূল্য বিক্রি) this.sabb = depthDataA.Bids[0].Price - depthDataB.Aks[0].Price; }

// অবস্থান পান Data.prototype.mp = ফাংশন (tradeType, type) { var positionData = this.positionData; // অবস্থান তথ্য পান for (var i = 0; i < positionData.length; i++) { যদি (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { রিটার্ন পজিশনData[i].amount; } } } } false রিটার্ন করুন; }

// নতুন কে-লাইন ডেটা এবং বোল ইন্ডিকেটর ডেটার সংমিশ্রণ ডেটা.প্রোটোটাইপ.বোল = ফাংশন (সংখ্যা, সময়চক্র) { var self = {}; // অস্থায়ী বস্তু // ইতিবাচক আরবিট্রেজ মূল্য পার্থক্য এবং নেতিবাচক আরবিট্রেজ মূল্য পার্থক্যের মধ্যম মান self.Close = (this.basb + this.sabb) / 2; যদি (this.timeA == this.timeB) { self.time = this.time; } // দুই গভীরতা তথ্য সময় স্ট্যাম্প তুলনা if (this.time - oldTime > timeCycle * 60000) { বার.পশ ((স্ব); oldTime = this.time; } // নির্দিষ্ট সময়কাল অনুযায়ী কে-লাইন অ্যারেতে মূল্য পার্থক্য তথ্য বস্তু পাস করুন if (bars.length > num * 2) { bars.shift(); // K-line অ্যারের দৈর্ঘ্য নিয়ন্ত্রণ করুন } অন্য { ফেরত; } var boll = TA.BOLL(বার, নং, 2); // তালিব লাইব্রেরিতে বোল সূচক কল করুন রিটার্ন { উপরেঃ বোল[0][বোল[0].দৈর্ঘ্য - 1], // বোল সূচক উপরের ট্র্যাক মাঝারিঃ বোল [1][বোল [1]]দৈর্ঘ্য - 1], // বোল সূচক মধ্য ট্র্যাক নিচেঃ বোল[2][বোল[2].দৈর্ঘ্য - 1] // বোল সূচক নিচে ট্র্যাক } // একটি প্রক্রিয়াকৃত বোল সূচক তথ্য ফেরত }

// অর্ডার দিন Data.prototype.trade = ফাংশন (tradeType, type) { exchange.SetContractType(tradeType); // অর্ডার দেওয়ার আগে একটি চুক্তিতে পুনরায় সাবস্ক্রাইব করুন var askPrice, bidPrice; if (tradeType == tradeTypeA) { // যদি অর্ডারটি চুক্তি A তে স্থাপন করা হয় askPrice = this.askA; // askPrice সেট করুন bidPrice = this.bidA; // bidPrice সেট করুন } অন্যথায় যদি (tradeType == tradeTypeB) { // যদি অর্ডারটি চুক্তি B তে স্থাপন করা হয় askPrice = this.askB; // askPrice সেট করুন bidPrice = this.bidB; // bidPrice সেট করুন } স্যুইচ (টাইপ) { // ম্যাচ অর্ডার প্লেসমেন্ট মোড কেস buy: exchange.SetDirection(type); // অর্ডার স্থাপন মোড সেট করুন রিটার্ন এক্সচেঞ্জ.কুপন ((অ্যাপস প্রাইস, ইউনিট); কেস বিক্রয় : exchange.SetDirection(type); // অর্ডার স্থাপন মোড সেট করুন রিটার্ন এক্সচেঞ্জ. বিক্রয় ((বিতান) মূল্য, ইউনিট); কেস closebuy: exchange.SetDirection(type); // অর্ডার স্থাপন মোড সেট করুন রিটার্ন এক্সচেঞ্জ. বিক্রয় ((বিতান) মূল্য, ইউনিট); কেস ক্লোজসেল: exchange.SetDirection(type); // অর্ডার স্থাপন মোড সেট করুন রিটার্ন এক্সচেঞ্জ.কুপন ((অ্যাপস প্রাইস, ইউনিট); ডিফল্টঃ false রিটার্ন করুন; } }

// অর্ডার বাতিল করুন ডেটা.প্রোটোটাইপ.বাতিল করুনOrders = ফাংশন () { ঘুম ((500); // বিলম্ব আগে বাতিল, কারণ কিছু বিনিময়, আপনি কি বোঝাতে চাইছেন var অর্ডার = _C(exchange.GetOrders); // অপরিপূর্ণ অর্ডার একটি অ্যারে পান if (orders.length > 0) { // যদি অপ্রাপ্ত অর্ডার থাকে for (var i = 0; i < orders.length; i++) { // unfilled orders এর অ্যারে জুড়ে পুনরাবৃত্তি করুন exchange.CancelOrder ((অর্ডার[i].Id); // একের পর এক অর্ডার বাতিল করুন ঘুম ((500); // ০.৫ সেকেন্ড ঘুম } return false; // যদি একটি পূরণ না করা অর্ডার বাতিল করা হয় তাহলে false ফেরত দিন } return true; // যদি কোন অর্ডার না থাকে তাহলে true ফেরত দিন }

// পৃথক চুক্তি রাখা পরিচালনা ডেটা.প্রোটোটাইপ.আইস ইভেন = ফাংশন () { var positionData = this.positionData; // অবস্থান তথ্য পান var type = null; // অবস্থান দিক পরিবর্তন করুন // যদি অবস্থান অ্যারে দৈর্ঘ্য অবশিষ্ট 2 0 সমান নয় বা অবস্থান অ্যারে দৈর্ঘ্য 2 সমান নয় যদি (positionData.length % 2!= 0 তাহলে positionData.length!= 2) { for (var i = 0; i < positionData.length; i++) { // অবস্থান অ্যারে মাধ্যমে পুনরাবৃত্তি if (positionData[i].Type == 0) { // যদি এটি একটি দীর্ঘ অর্ডার হয় type = 10; // অর্ডার প্যারামিটার সেট করুন } else if (positionData[i].Type == 1) { // যদি এটি একটি সংক্ষিপ্ত অর্ডার হয় type = -10; // অর্ডার প্যারামিটার সেট করুন } // সব অবস্থান বন্ধ করুন this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } }

// অঙ্কন ডেটা.প্রোটোটাইপ.অঙ্কনগ্রাফ = ফাংশন (বোল) { var nowTime = new Date().getTime(); ObjChart.add (([0, [nowTime, boll.up]]); ObjChart.add (([1, [nowTime, boll.middle]]); ObjChart.add (([2, [nowTime, boll.down]]); ObjChart.add (([3, [nowTime, this.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update ((চার্ট); }

// ট্রেডিং শর্তাবলী ফাংশন চালু চিহ্নিত করুন (() { var data = new Data ((tradeTypeA, tradeTypeB); // একটি মৌলিক তথ্য বস্তু তৈরি করুন var accountStocks = data.accountData.Stocks; // অ্যাকাউন্ট ব্যালেন্স var boll = data.boll ((dataLength, timeCycle); // boll সূচক তথ্য পান if (!boll) return; // boll ডেটা না থাকলে রিটার্ন // দামের পার্থক্যের ব্যাখ্যা // basb = (কন্ট্রাক্ট A এর একটি মূল্য বিক্রি করুন - কন্ট্রাক্ট B এর একটি মূল্য কিনুন) // sabb = (কন্ট্রাক্ট A এর একটি মূল্য কিনুন - কন্ট্রাক্ট B এর একটি মূল্য বিক্রি করুন) যদি (data.sabb > boll.middle && data.sabb < boll.up) { // যদি sabb মধ্য ট্র্যাকের চেয়ে বেশি হয় if (data.mp(tradeTypeA, 0)) { // অর্ডার দেওয়ার আগে A চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, closebuy); // চুক্তি A দীর্ঘ অবস্থান বন্ধ করে } if (data.mp(tradeTypeB, 1)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, closesell); // চুক্তি বি শর্ট পজিশন বন্ধ করে } } else if (data.basb < boll.middle && data.basb > boll.down) { // যদি basb মধ্য ট্র্যাকের চেয়ে কম হয় if (data.mp(tradeTypeA, 1)) { // অর্ডার দেওয়ার আগে A চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, closesell); // চুক্তি A শর্ট পজিশন বন্ধ করে } if (data.mp(tradeTypeB, 0)) { // অর্ডার দেওয়ার আগে B চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, closebuy); // বি চুক্তি দীর্ঘ পজিশন বন্ধ করে } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // যদি একাউন্টে ব্যালেন্স থাকে if (data.basb < boll.down) { // If basb price difference is lower than the down track যদি বাসবের দামের পার্থক্য ডাউন ট্র্যাকের চেয়ে কম হয় if (!data.mp(tradeTypeA, 0)) { // অর্ডার দেওয়ার আগে A চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade(tradeTypeA, buy); // চুক্তি A লং পজিশন খোলে } if (!data.mp(tradeTypeB, 1)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, sell); // চুক্তি বি শর্ট পজিশন খোলে } } else if (data.sabb > boll.up) { // If sabb price difference is higher than the upper track যদি sabb দামের পার্থক্য উপরের ট্র্যাকের চেয়ে বেশি হয় if (!data.mp(tradeTypeA, 1)) { // অর্ডার দেওয়ার আগে A চুক্তিতে শর্ট অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeA, sell); // চুক্তি A শর্ট পজিশন খোলে } if (!data.mp(tradeTypeB, 0)) { // অর্ডার দেওয়ার আগে বি চুক্তিতে দীর্ঘ অর্ডার আছে কিনা তা পরীক্ষা করুন data.trade ((tradeTypeB, buy); // চুক্তি বি লং পজিশন খোলে } } } data.cancelOrders(); // অর্ডার বাতিল করুন তথ্য.অঙ্কনচার্ট ((বোল); // অঙ্কন data.isEven(); // পৃথক চুক্তির হোল্ডিং হ্যান্ডেল }

// এন্ট্রি ফাংশন ফাংশন main() { // কনসোলে অপ্রয়োজনীয় তথ্য ফিল্টার করুন SetErrorFilter ((429 GetRecords: GetOrders: GetDepth: GetAccount: Buy: Selltimeout Futures_OP); exchange.IO ((currency, name + _USDT); //বাণিজ্য করার জন্য ডিজিটাল মুদ্রা সেট করুন ObjChart.reset(); // প্রোগ্রাম শুরু করার আগে আঁকা পূর্ববর্তী চার্ট সাফ করুন LogProfitReset(); // প্রোগ্রাম শুরু করার আগে অবস্থা বার তথ্য মুছে দিন while (true) { // পোলিং মোড প্রবেশ করান onTick(); // onTick ফাংশনটি চালান ঘুম ((500); // ০.৫ সেকেন্ড ঘুম } } ` আর্বিট্রেজ ট্রেডিং মূলত মর্গান স্ট্যানলির স্টক ট্রেডিং কৌশল থেকে উদ্ভূত। এর ধারণাটি হ'ল দুটি অত্যন্ত সম্পর্কিত জাতের দামের পার্থক্য পপকর্ন প্রক্রিয়া এর সাথে সামঞ্জস্যপূর্ণ, অর্থাৎ, মূল্যের পার্থক্যটি ঐতিহাসিক গড় থেকে বিচ্যুত অবস্থান থেকে গড়ের দিকে ফিরে যায় এবং তারপরে আবার গড় থেকে বিচ্যুত হয়।

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

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

৪. সিটিএ কৌশল বিকাশের উন্নত পুনরাবৃত্তি

৪.১ ফিউচার সিটিএ কৌশল থেকে দূরে থাকুন

গত দুই ক্লাসে, আমরা মাইল্যাঙ্গুয়েজে একটি ট্রেন্ড কৌশল এবং জাভাস্ক্রিপ্টে একটি আরবিট্রেজ কৌশল লিখেছি। আমরা কৌশল ব্যাকটেস্টে কোনও সমস্যা দেখিনি। তবে, পরিমাণগত ট্রেডিং এমন একটি প্রোগ্রাম নয়, যার ব্যাকটেস্ট সরাসরি কোনও সমস্যা ছাড়াই করা যেতে পারে।

প্রকৃতপক্ষে, ব্যাকটেস্টটি কেবল কৌশলটির একটি সিমুলেশন। এটি কেবল ঐতিহাসিক ডেটাতে কৌশলটির পারফরম্যান্স মূল্যায়নের জন্য ব্যবহৃত হয়। এটি ব্যবসায়ীদের কিছু ট্রেডিং কৌশল দ্রুত মূল্যায়ন এবং বাতিল করার অনুমতি দেয়।

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

স্ট্যাটিক ডেটা এবং ডাইনামিক ডেটা

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

ভবিষ্যতের কাজ

ভবিষ্যত ফাংশন কি? আসুন প্রথমে বাইডু এনসাইক্লোপিডিয়া এর ব্যাখ্যাটি একবার দেখে নিইঃ একটি পরিমাণ অন্য পরিমাণের উপর নির্ভর করে, যেমন পরিমাণ A এবং পরিমাণ B। যদি B পরিবর্তন হয়, A পরিবর্তন হয়, তাহলে A হল B এর একটি ফাংশন। যদি B একটি পরবর্তী পরিমাণ হয়, A হল একটি পূর্ববর্তী পরিমাণ, A B এর সাথে পরিবর্তিত হয়, এবং A হল B এর একটি ভবিষ্যত ফাংশন। আপনি বিভ্রান্ত হতে পারেন।

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

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

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

অতীত মূল্য

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

ব্যাকটেস্টে, কৌশলটি স্বাভাবিক, কারণ স্ট্যাটিক ডেটার উপর ভিত্তি করে ব্যাকটেস্ট ইঞ্জিনটি কেবলমাত্র একটি ক্রয় সংকেত থাকলে 100% বন্ধ করা যেতে পারে। তবে, যখন খোলার 1 ঘন্টার মধ্যে সর্বোচ্চ মূল্য সর্বোচ্চ মূল্যের চেয়ে বেশি হয়, তখন এটি নিশ্চিত যে অর্ডারটি পূর্ববর্তী মূল্য খোলার মূল্যে জারি করা যাবে না।

মূল্য ফাঁকা

তথাকথিত মূল্য শূন্যতা হ'ল কে-লাইন চার্টে প্রদর্শিত দামগুলি, তবে প্রকৃত বাজারে যে দামগুলি বাণিজ্য করা যায় না সেগুলি মূলত নিম্নলিখিত ক্ষেত্রে বিভক্তঃ

  • 1. যে কেউ ট্রেডিং করেছে সে জানে যে দাম বাড়লে কেনা কঠিন এবং দাম কমলে বিক্রি করা কঠিন। তবে এটি ব্যাকটেস্টে উপসংহারে আসতে পারে।
  • 2. এক্সচেঞ্জের মেলেজিং প্রক্রিয়া হল মূল্য অগ্রাধিকার এবং সময় অগ্রাধিকার। কিছু জাতের প্রায়শই বাজারে প্রচুর পরিমাণে অর্ডার থাকে। যদি আপনি বাস্তব বাজারে অর্ডার দিয়ে ট্রেড করছেন, তবে আপনাকে অন্যদের অর্ডারগুলির পিছনে র্যাঙ্ক করতে হবে। আপনি কেবল অন্যদের অর্ডারগুলি ট্রেড করার পরে ট্রেড করতে পারেন। এমনকি দামটি ট্রেড করার আগেও দামটি পরিবর্তিত হয়েছে। তবে, ব্যাকটেস্টে, যদি আপনার কৌশলটি অর্ডারটি মোকাবেলা করা হয় তবে আপনি সময়মতো মোকাবেলা করবেন, যা বাস্তব বাজারের পরিবেশের থেকে আলাদা।
  • ৩. আপনি যদি একটি সালিশ কৌশল ব্যবহার করেন, তবে ব্যাকটেস্টের মুনাফা খুব বেশি, কারণ এটি অনুমান করা হয় যে আপনি প্রতিবার এই মূল্য পার্থক্যগুলি ক্যাপচার করেছেন। বাস্তবে, অনেক মূল্য পার্থক্যকে ধরে রাখতে পারবেন না, বা কেবল একটি পা ধরে রাখতে পারবেন। সাধারণভাবে বলতে গেলে, এটি অবশ্যই আপনার দিকের পক্ষে অনুকূল নয়। তারপরে আপনাকে অবিলম্বে অন্য পাটি পূরণ করতে হবে। এই সময়ে, স্লাইডিং পয়েন্টটি 1 বা 2 পয়েন্ট আর নয়, এবং সালিশ কৌশলটি নিজেই এই পয়েন্টগুলির মূল্য পার্থক্য অর্জনের লক্ষ্য রাখে। এই পরিস্থিতি ব্যাকটেস্টে সিমুলেট করা যায় না। প্রকৃত মুনাফা ব্যাকটেস্টের মতো ভাল নয়।
  • ৪. যদিও ব্ল্যাক সোয়ান ইভেন্টটি সাধারণত ব্যবহৃত হয় না, তবুও এটি পরিমাণগত ব্যবসায়ের উপর দুর্দান্ত প্রভাব ফেলে। নীচের চার্টে দেখানো হয়েছে, বৈদেশিক মুদ্রা সুইস ফ্রাঙ্কের ব্ল্যাক সোয়ান ইভেন্টের ক্ষেত্রে, চার্ট থেকে উচ্চ এবং নিম্ন উভয় দামই দেখা যায়। প্রকৃতপক্ষে, দিনের চরম বাজারে, মধ্যম মূল্যটি শূন্য, এবং বিপুল সংখ্যক স্টপ লস অর্ডার স্টাম্পেড ইভেন্টের কারণ হয়। তরলতা শূন্য, এবং এটি মোকাবেলা করা খুব কঠিন, তবে এটি ব্যাকটেস্টে ক্ষতি বন্ধ করতে পারে।

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

অতিরিক্ত ফিটিং

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

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

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

যাইহোক, ভবিষ্যতে বাস্তব বাজারে, মূল্য পরিবর্তন আপনার কৌশল সীমা অতিক্রম করতে পারে। প্রকৃতপক্ষে, পরিমাণগত ট্রেডিং কৌশল বিকাশের সারমর্ম একটি বড় সংখ্যক আপাতদৃষ্টিতে এলোমেলো তথ্য থেকে স্থানীয় অ-এলোমেলো ডেটা মিলানোর প্রক্রিয়া। অতএব, ফাঁদ এড়াতে আমাদের পরিসংখ্যানগত জ্ঞান ব্যবহার করতে হবে। আমরা কীভাবে এটি করব?

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

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

বেঁচে থাকার পক্ষপাত

বেঁচে থাকার পক্ষপাত নিম্নলিখিত উদাহরণ দ্বারা ব্যাখ্যা করা যেতে পারেঃ ১. যখন ট্যুয়ারে দাঁড়াবে, তখন গরু উড়বে। ২. যারা অনলাইনে প্যারাশুট বিক্রি করে তাদের প্রশংসা করা হয়, কারণ প্যারাশুটের সমস্যাযুক্ত মানুষেরা আর বেঁচে থাকে না। ৩. সাংবাদিক জিজ্ঞাসা করলেন, যাত্রীরা বাসে টিকিট কিনেছেন কি না, কারণ টিকিট ছাড়া মানুষ বাসে উঠতে পারে না। ৪. গণমাধ্যম প্রচার করে যে লটারি জিততে পারে, কারণ গণমাধ্যম যারা লটারি জিততে পারে না তাদের সক্রিয়ভাবে প্রচার করবে না।

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

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

  • বাম চার্ট (সমতুল্যতা): একটি খুব ভাল ট্রেডিং কৌশল। বড় প্রত্যাহার ছাড়া, বিনিয়োগকারীরা স্থিতিশীল বিনিয়োগ রিটার্ন পেতে পারেন।
  • ডান চার্ট (বাস্তবতা): এটি 200 এলোমেলো ট্রেডিং ব্যাকটেস্টের মধ্যে সেরা।

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

খরচ শক

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

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

কৌশলগত সক্ষমতা

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

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

৪.২ সর্বোত্তম অবস্থান ব্যবস্থাপনা প্রতিষ্ঠা করা

একজন স্টক অপারেটরের স্মৃতিতে, একটি খুব আকর্ষণীয় অনুচ্ছেদ রয়েছেঃ ওল্ড টার্কি (পূর্বে প্যাট্রিজ নামে পরিচিত) যিনি নায়ক লিভারমোরের মতো একই সিকিউরিটিজ সংস্থায় আছেন, সর্বদা একটি বড় চুক্তি করেন। যখন তাকে মুনাফা নেওয়ার পরে বিক্রি করার এবং স্টক মূল্য পুনরায় ক্রয়ের পরামর্শ দেওয়া হয়েছিল। ওল্ড টার্কি সর্বদা ইনটোন করেছিলঃ না, আপনি জানেন, এটি একটি ষাঁড়ের বাজার!

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

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

অনেকে জানেন যে ঝুঁকি লাভের সমান বড়, অর্থাৎ রিটার্ন ঝুঁকির সমানুপাতিক। কিছু লোকের মতে, রিটার্ন এবং ঝুঁকির মধ্যে সম্পর্কটি নিম্নরূপ হওয়া উচিতঃ অনুভূমিক অক্ষ হ'ল ঝুঁকির শতাংশ এবং উল্লম্ব অক্ষ হ'ল রিটার্নের শতাংশঃ

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

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

এর থেকে আমরা জানতে পারি যে উপরের চিত্রের ঝুঁকিতে রিটার্নের অনুপাত প্রকৃত পারফরম্যান্স নয়। একটি বাস্তব ট্রেডিং পরিবেশে, ঝুঁকিতে রিটার্নের অনুপাত নীচের চার্টটির মতোই হওয়া উচিতঃ

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

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

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

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

আসুন একটি উদাহরণ হিসাবে মুদ্রা নিক্ষেপ নেওয়া যাক। ধরে নেওয়া যাক যে মুদ্রার উভয় পক্ষ সমানভাবে ওজনযুক্ত। যদি 2 ইউয়ান মাথা লাভ এবং 1 ইউয়ান লেজ ক্ষতি হয়, তবে এটি স্পষ্ট যে এটি একটি ইতিবাচক প্রত্যাশা খেলা। বিজয় হার 50% এবং 2 এর ক্ষতি। এখানে প্রশ্ন আসেঃ এখন আপনার কাছে 100 ইউয়ান রয়েছে, আপনি কীভাবে বাজি পুনরাবৃত্তি করতে পারেন যাতে 100 ইউয়ান দ্রুততম গতিতে 1 মিলিয়ন ইউয়ান পৌঁছাতে পারে?

যদি আমরা ভালো করে না ভাবি, তাহলে আমরা ভাবব যেহেতু প্রতিটি বাজির রিটার্ন ৫০% * ২-৫০% * ১, অর্থাৎ ৫০%, তাহলে দ্রুত সর্বোচ্চ রিটার্ন অর্জনের জন্য আমাদের প্রতিটি বাজিতে যতটা সম্ভব মূলধন বিনিয়োগ করা উচিত। এই বাজি ১০০% হতে হবে।

যাইহোক, এটা স্পষ্ট যে প্রতিটি জুয়া খেলায় মূলধনের ১০০% বিনিয়োগ করা অযৌক্তিক, কারণ যতক্ষণ আপনি মূলধন একবার হারাবেন ততক্ষণ এটি হারাবে, যদিও এটি খুব অসম্ভব। কারণ যতক্ষণ আপনি যথেষ্ট বার জুয়া খেলেন ততক্ষণ অর্থ হারাতে হবে।

কেউ হয়তো জিজ্ঞেস করতে পারে, যেহেতু ১০০% বাজিটা অযৌক্তিক, তাহলে ৯০% বা তার কম বাজিটা কেমন? আসলে এই সমস্যা সমাধানের জন্য, আমরা একটি পরীক্ষা করতে পারি জুয়া খেলার সিমুলেশন করার জন্য এবং দেখতে পারি প্রতিটি বাজির ফলাফল কেমন হয়। যেমন নিচের চার্টটিতে দেখানো হয়েছেঃ

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

চার্ট থেকে আমরা দেখতে পাচ্ছি যে, যখন আমরা ধীরে ধীরে পজিশনকে ৯০%, ৮০%, ৭০%, ৬০% এবং ৫০% থেকে একই জুটিতে কমাতে থাকি, তখন ফলাফল সম্পূর্ণ ভিন্ন হয়। সতর্ক বন্ধুরা হয়তো লক্ষ্য করেছেন যে, ধীরে ধীরে পজিশন কমানোর সাথে সাথে চূড়ান্ত মূলধন ধীরে ধীরে প্রসারিত হচ্ছে।

তারপরে কিছু লোক জিজ্ঞাসা করতে পারে যে বাজিটি প্রতিবার যত ছোট, তত ভাল, যেমন 10%। প্রতিটি বাজির অনুপাত গণনা করা অসম্ভব। এটি বিখ্যাত কেলি মানদণ্ড দ্বারা সমাধান করা সমস্যা। পরিসংখ্যানগুলিতে, কেলি মানদণ্ড পুনরাবৃত্তি বাজির ইতিবাচক প্রত্যাশার সাথে একটি কৌশলটির দীর্ঘমেয়াদী বৃদ্ধির হারকে সর্বাধিক করতে পারে এবং এটি প্রতিটি বাজির সেরা বাজি অনুপাত গণনা করতে পারে।

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

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

  • f হ'ল উপলব্ধ মূলধনের জন্য সর্বোত্তম বাজি অনুপাত;
  • b হ'ল কোড রেসিও, যা ট্রেডিংয়ে লাভ/হানি রেসিও নামেও পরিচিত হতে পারে;
  • p হল সফলতার হার;
  • q হল ব্যর্থতার হার।

তারপর আমরা কেলি মানদণ্ড অনুসারে এই পাঠে জুয়া খেলার উদাহরণ গণনা করতে পারি। 100 ইউয়ান প্রাথমিক মূলধন 50 শতাংশ বিজয়ী অনুপাত এবং সম্ভাবনা 2 যখন বাজি অনুপাত ব্যবহার করে দ্রুততম গতিতে 1 মিলিয়ন ইউয়ান পৌঁছাতে পারে। কেলি মানদণ্ডে সেট, গণনা প্রক্রিয়া নিম্নরূপঃ

(0.5*(2+1) -1)/2=0.25

50% এর জয়ের হার 0.5। 2 + 1 দ্বারা হারগুলি গুণ করুন, তারপর 1 কেটে নিন, এবং তারপর 2 দ্বারা ভাগ করুন। গণনার ফলাফল 0.25। অর্থাৎ, প্রতিটি বাজিতে, মূলধনের 25% ব্যবহার করে, আপনি দ্রুততম গতিতে 1 মিলিয়ন ইউয়ান পৌঁছাতে পারেন। আমরা গণনার ফলাফল অনুযায়ী ম্যানুয়ালি সিমুলেট করতে পারি এটি সঠিক কিনা তা দেখতে।

From Quantitative Trading to Asset Management - CTA Strategy Development for Absolute Return

উপরের চিত্রটি ম্যানুয়াল সিমুলেশনের ফলাফল। দয়া করে শেষ লাইনটি দেখুন। একই বাজিতে, 100 টিরও বেশি রাউন্ডের পরে, 25% অবস্থানগুলি প্রথমে 1 মিলিয়ন ইউয়ান পৌঁছেছে। 90%, 80%, 70% এবং 60% অবস্থানের ফলাফল নেতিবাচক, যা দেখায় যে এমনকি একটি ইতিবাচক প্রত্যাশা ট্রেডিং কৌশল ভুল অবস্থানের পরিচালনার অধীনে দেউলিয়া হয়ে যাবে।

আমরা এটিও দেখতে পাচ্ছি যে 50% অবস্থানগুলি শেষ পর্যন্ত হারাবে না বা জিতবে না, যা বড় সংখ্যার আইনের ফলাফলের সাথেও সামঞ্জস্যপূর্ণ। সমস্যাটি আরও চিত্রিত করার জন্য, ম্যানুয়াল সিমুলেশনে 10% অবস্থানও যুক্ত করা হয়েছিল। যদিও চূড়ান্ত ফলাফলটি ইতিবাচক রিটার্ন ছিল, তবে প্রভাবটি 25% অবস্থানের তুলনায় বেশ কয়েকটি মাত্রার চেয়ে খারাপ ছিল।

আপনি কেলি মানদণ্ডের শক্তি দেখতে পারেন। আপনি যদি প্রকৃত অ্যাপ্লিকেশনে মূল পজিশনের 10% চয়ন করেন, আপনার মূল 100 টিরও বেশি বাজিতে 30,000 এরও বেশি হয়ে যাবে। যদিও রিটার্নটি 25% মূল পজিশনের তুলনায় বড়, এটি কোনও লাভের সমতুল্য। এটি জ্ঞানের শক্তি।

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

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


সম্পর্কিত বিষয়বস্তু

আরও দেখুন