এই নিবন্ধে, আমরা ধারণার অন্বেষণ করব এবং স্ক্রিপ্টটি বাস্তবায়নের চেষ্টা করব।
কে-লাইন এলাকা কৌশল হল মূল্য কে-লাইন এবং চলমান গড়ের মধ্যে এলাকা সম্পর্কের উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এর মূল ধারণা হ'ল মূল্যের প্রবণতার মাত্রা এবং পরিবর্তনগুলি বিশ্লেষণ করে, পাশাপাশি ক্রয় এবং বিক্রয় আবেগের পরিবর্তনগুলি বিশ্লেষণ করে শেয়ারের দামের সম্ভাব্য প্রবণতা পূর্বাভাস দেওয়া, যার ফলে অবস্থানগুলি খুলতে এবং বেরিয়ে আসার সময় নির্ধারণ করা হয়। এই কৌশলটি কে-লাইন এবং চলমান গড়ের মধ্যে এলাকার উপর নির্ভর করে, পাশাপাশি কেডিজে সূচক থেকে মানগুলি, দীর্ঘ এবং সংক্ষিপ্ত ট্রেডিং সংকেত তৈরি করতে।
কে-লাইন এলাকা হল মূল্য কে-লাইন এবং চলমান গড়ের মধ্যে স্থানিক এলাকা, যা প্রতিটি বারের বন্ধের মূল্য থেকে চলমান গড় মান বিয়োগ করে এবং তারপরে এটি যোগ করে গণনা করা হয়। যখন দীর্ঘ সময়ের মধ্যে দামের বড় বৃদ্ধি হয়, তখন কে-লাইন এলাকা বড় হয়ে যায়, যখন অস্থির বাজার বা অস্থিরতার বিপরীতের পরে, কে-লাইন এলাকা ছোট হয়।
একটি আসন্ন প্রবণতা বিপরীতকরণের আরও নিশ্চিত করার জন্য, আমরা কেডিজে সূচকগুলির ব্যবহার চালু করি যা ক্রয় বা বিক্রয় আবেগ পরিবর্তন নির্ধারণে সহায়তা করে। এই সূচকগুলির জন্য কৌশল এবং মানগুলি নির্দিষ্ট পরিস্থিতি এবং প্রয়োজনের ভিত্তিতে সঠিকতা বাড়ানোর জন্য সামঞ্জস্য করা যেতে পারে।
কে-লাইন এলাকা কৌশলটির সুবিধা হল এটির মূল্যের প্রবণতার মাত্রা এবং পরিবর্তনের পাশাপাশি ক্রয় এবং বিক্রয় মনোভাবের পরিবর্তনের সমন্বয়ে একটি তুলনামূলকভাবে সম্পূর্ণ পরিমাণগত ট্রেডিং কৌশল প্রদান করে। এর সুবিধাগুলির মধ্যে রয়েছেঃ
যদিও কে-লাইন এলাকার কৌশলটির কিছু সুবিধা রয়েছে, তবে এটি কিছু ঝুঁকিও বহন করে, যার মধ্যে রয়েছেঃ
কে-লাইন এলাকা কৌশল অপ্টিমাইজ করার জন্য, নিম্নলিখিত দিক বিবেচনা করুনঃ
কে-লাইন এলাকা গণনা করুন
লং পজিশনের উদ্বোধনী সংকেতঃ
(১) নিম্নমুখী প্রবণতার
(২) KDJ সূচকের মান ৮০ এর বেশি।
শর্ট পজিশনের সূচনা সংকেতঃ
(১)
(২) KDJ সূচকের মান ২০ এর কম।
লং/শর্ট পজিশনের জন্য প্রস্থানঃ ATR এর পিছনে স্টপ লস এবং লাভ নিন।
কোড বাস্তবায়ন
// Parameter
var maPeriod = 30
var threshold = 50000
var amount = 0.1
// Global variable
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL" // NULL BUY SELL
function calculateKLineArea(r, ma) {
var lastCrossUpIndex = null
var lastCrossDownIndex = null
for (var i = r.length - 1 ; i >= 0 ; i--) {
if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
}
var area = 0
if (lastCrossDownIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
area -= Math.abs(r[i].Close - ma[i])
}
} else if (lastCrossUpIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
area += Math.abs(r[i].Close - ma[i])
}
}
return [area, lastCrossUpIndex, lastCrossDownIndex]
}
function onTick() {
var r = _C(exchange.GetRecords)
if (r.length < maPeriod) {
LogStatus(_D(), "Insufficient number of K-line")
return
}
var ma = TA.MA(r, maPeriod)
var atr = TA.ATR(r)
var kdj = TA.KDJ(r)
var lineK = kdj[0]
var lineD = kdj[1]
var lineJ = kdj[2]
var areaInfo = calculateKLineArea(r, ma)
var area = _N(areaInfo[0], 0)
var lastCrossUpIndex = areaInfo[1]
var lastCrossDownIndex = areaInfo[2]
r.forEach(function(bar, index) {
c.begin(bar)
c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
let maLine = c.plot(ma[index], "ma", {overlay: true})
let close = c.plot(bar.Close, 'close', {overlay: true})
c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
if (lastCrossUpIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
} else if (lastCrossDownIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
}
c.plot(lineK[index], "K")
c.plot(lineD[index], "D")
c.plot(lineJ[index], "J")
c.close()
})
if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
// long
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "BUY"
}
} else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
// short
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "SELL"
}
}
let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
// cover long
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
} else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
// cover short
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
}
LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}
function main() {
if (exchange.GetName().includes("_Futures")) {
throw "not support Futures"
}
while (true) {
onTick()
Sleep(1000)
}
}
কৌশলগত যুক্তি খুবই সহজ:
কৌশলগত পরামিতি
গ্লোবাল ভেরিয়েবল
ফাংশন গণনা করুন
প্রধান লুপ ফাংশন
onTick ফাংশন: এটি মূল কৌশল কার্যকরকরণ ফাংশন, এবং এখানে ফাংশনের মধ্যে অপারেশন আছেঃ
ক. সর্বশেষ কে-লাইন তথ্য সংগ্রহ করুন এবং নিশ্চিত করুন যে কে-লাইনের সংখ্যা maPeriod এর চেয়ে কম নয়, অন্যথায় অবস্থা রেকর্ড করুন এবং রিটার্ন করুন।
b. চলমান গড় রেখা ma এবং ATR সূচক atr, সেইসাথে KDJ সূচক গণনা করুন।
c. areaInfo থেকে এলাকার তথ্য, সর্বশেষ ক্রস-ওভার কে-লাইন সূচক এবং সর্বশেষ ক্রস-অন্ডার কে-লাইন সূচক পান।
d. K-লাইন চার্ট অবজেক্ট c ব্যবহার করে K-লাইন এবং ইন্ডিকেটর লাইন আঁকতে বিভিন্ন রঙ পূরণ করে যা মুভিং গড় রেখার সাথে দামের সম্পর্কের উপর ভিত্তি করে।
e. শর্ত অনুযায়ী ক্রয় বা বিক্রয় সময় নির্ধারণ করুনঃ
যদি tradeState
যদি এটি ক্রয় অবস্থায় থাকে, যখন মূল্য শেষ ট্রেডিং দিনের বন্ধের মূল্যের নিচে যায়, বিয়োগ পূর্ববর্তী দিনের ATR (গড় সত্য পরিসীমা), অবস্থান বন্ধ। যদি এটি বিক্রয় অবস্থায় থাকে, যখন মূল্য শেষ ট্রেডিং দিনের বন্ধের মূল্যের উপরে এবং আগের দিনের ATR (গড় সত্য পরিসীমা) এর উপরে উঠে যায়, তখন অবস্থান বন্ধ হয়।
main function: এটি প্রধান এক্সিকিউশন এন্ট্রি পয়েন্ট হিসাবে কাজ করে। এটি চেক করে যে এক্সচেঞ্জ নামটিতে
সংক্ষেপে, এই কৌশলটি মূলত কে-লাইন চার্ট এবং প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে কেনা বা বিক্রয় সিদ্ধান্ত নেওয়ার জন্য এবং ঝুঁকি পরিচালনার জন্য স্টপ-লস এবং লাভ গ্রহণের কৌশলগুলিও ব্যবহার করে। দয়া করে নোট করুন যে এটি কেবলমাত্র একটি উদাহরণ কৌশল হিসাবে কাজ করে যা বাজারের পরিস্থিতি এবং প্রকৃত ব্যবহারের সময় নির্দিষ্ট প্রয়োজনীয়তা অনুসারে সামঞ্জস্য এবং অনুকূলিতকরণের প্রয়োজন।
চালুFMZ.COM, জাভাস্ক্রিপ্ট ভাষা ব্যবহার করে কোডের অনেক লাইনের প্রয়োজন হয় নি, পরিবর্তে, এটি সহজেই এই মডেলটি বাস্তবায়ন করে। এবং KLineChart ফাংশনের সাহায্যে কে-লাইন চার্ট এলাকার গ্রাফিকাল উপস্থাপনা সহজেই অর্জন করা হয়েছিল। কৌশল নকশাটি টেমপ্লেটের মধ্যে ক্যাপসুলযুক্ত ফাংশনগুলির মাধ্যমে অর্ডার দেওয়ার জন্য
আমি এলোমেলোভাবে একটি ব্যাকটেস্টিং সময় বেছে নিয়েছি। যদিও আমি অর্থ হারাতে পারি নি, তবে আমি ক্রমাগত মুনাফাও অর্জন করতে পারি নি, এবং ড্রডাউন ইস্যুটি বেশ গুরুত্বপূর্ণ। কৌশলটির জন্য অন্য দিক এবং অপ্টিমাইজেশনের জায়গা থাকা উচিত। আগ্রহীরা কৌশলটি আপগ্রেড করার চেষ্টা করতে পারে।
কৌশলটির মাধ্যমে, আমরা কেবল একটি অপ্রচলিত ট্রেডিং ধারণা শিখেছি না, তবে কীভাবে ডায়াগ্রামগুলি গ্রাফ করা যায় তাও শিখেছি; কে-লাইন এবং চলমান গড় রেখার দ্বারা আবদ্ধ এলাকা উপস্থাপন করা; কেডিজে সূচকগুলি গ্রাফিং ইত্যাদি।
কে-লাইন এলাকা কৌশল হল মূল্য প্রবণতা মাত্রা এবং কেডিজে সূচক উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এটি ট্রেডারদের কে-লাইন এবং চলমান গড়ের মধ্যে এলাকা বিশ্লেষণ করে বাজার প্রবণতা, পাশাপাশি কেনা এবং বিক্রয় আবেগ পরিবর্তন পূর্বাভাস সাহায্য করে। নির্দিষ্ট ঝুঁকি সত্ত্বেও, এই কৌশল ক্রমাগত অপ্টিমাইজেশন এবং সমন্বয় মাধ্যমে শক্তিশালী ট্রেডিং সরঞ্জাম প্রদান করতে পারেন, ট্রেডারদের বাজারের ওঠানামা ভাল মোকাবেলা করতে সাহায্য করে। উপরন্তু, ট্রেডারদের নির্দিষ্ট পরিস্থিতি এবং বাজারের অবস্থার অনুযায়ী কৌশল পরামিতি এবং নিয়ম নমনীয়ভাবে সামঞ্জস্য করা উচিত ভাল ট্রেডিং কর্মক্ষমতা অর্জন।