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

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

আসলে, এটি এই জাভাস্ক্রিপ্ট কৌশল কোড কল করার মত:
function main () {
Log(exchanges.length)
}
এই সম্মিলিত মডিউলটি চালানোর ফলাফলগুলি একবার দেখে নেওয়া যাক:

আপনি দেখতে পাচ্ছেন যে আমরা 3টি এক্সচেঞ্জ অবজেক্ট যোগ করেছি, যা তিনটি ভিন্ন এক্সচেঞ্জ অ্যাকাউন্টের প্রতিনিধিত্ব করে, এবং ব্যাকটেস্ট লগ আউটপুট ফলাফল 3।

তিনটি বিনিময় বস্তু যোগ করার সময়, ড্রপ-ডাউন বক্স তিনটি বিকল্প প্রদর্শন করবে।
লুপ টাইপে, সময়ের আগে একটি লুপ মডিউল শিখুন।

চলুন আগে থেকে একটি শর্তসাপেক্ষ বিচার মডিউল শিখে নেওয়া যাক:
রায়ের শর্তটি এভাবে লেখা যেতে পারে:

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

ব্যাকটেস্ট রানের ফলাফল:

জাভাস্ক্রিপ্ট নীতি কোডের মত:
function main () {
for (var i = 1 ; i <= exchanges.length ; i++) {
if (i == 1) {
Log(exchanges[0].GetName())
} else if (i == 2) {
Log(exchanges[1].GetName())
} else {
Log(exchanges[2].GetName())
}
}
}

একটি সাধারণ উদাহরণ বর্তমানে সেট করা প্রথম এক্সচেঞ্জ অবজেক্টের ট্রেডিং জোড়া প্রাপ্ত করে এবং এটিকে টেক্সট ভেরিয়েবলে বরাদ্দ করে (ভেরিয়েবল ক্যাটাগরিতে আগে থেকেই তৈরি করা হয়েছে)।
ব্যাকটেস্ট ফলাফল:

যদি জাভাস্ক্রিপ্ট নীতি কোড কল করা হয়:
function main () {
var text = exchange.GetCurrency()
Log(text)
}
এই মডিউলটি খুবই গুরুত্বপূর্ণ এবং এটি অর্ডার করার জন্য ব্যবহৃত হয়।
দ্বিতীয় টেনন (অবতল) অবস্থানটি অর্ডার পরিমাণ পরিবর্তনশীলের সাথে এমবেড করা হয়, যা অর্ডার পরিমাণ নির্দিষ্ট করতে ব্যবহৃত হয়।
উদাহরণ স্বরূপ, আমরা বর্তমান টিক মার্কেট ডেটার সর্বশেষ মূল্যের উপর ভিত্তি করে একটি ক্রয় অর্ডার দেওয়ার, 10 ইউয়ানের একটি স্লাইডিং মূল্য যোগ করার, অর্ডারের পরিমাণ 0.1 কয়েনে সেট করার এবং অর্ডার আইডি প্রিন্ট করার উদাহরণ একসাথে বিভক্ত করি।

ব্যাকটেস্ট রানের ফলাফল:

নিম্নলিখিত জাভাস্ক্রিপ্ট নীতি কোড মত:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
Log(id)
}

এই মডিউলটি বর্তমান ট্রেডিং পেয়ারের জন্য অসমাপ্ত অবস্থায় থাকা সমস্ত অর্ডার ফেরত দেবে যা একটি তালিকা কাঠামো (অ্যারে), যা তালিকা টাইপ মডিউল (ট্রাভার্সাল অপারেশন ইত্যাদি) দ্বারা প্রক্রিয়া করা যেতে পারে। উদাহরণস্বরূপ: আমরা উপরের [4] অর্ডার মডিউলের উদাহরণে সামান্য পরিবর্তন করেছি, এবং অর্ডার দেওয়ার সময় যোগ করা 10 ইউয়ানের মূল্য পরিবর্তন করে বিয়োগ 10 ইউয়ান করেছি। অর্ডারটি অবিলম্বে কার্যকর করা হবে না, তবে ক্রয় এবং বিক্রয় গভীরতায় স্থাপন করা হবে (অর্থাৎ, একটি কিনুন, দুটি কিনুন এবং এন কিনুন এর মধ্যে একটি নির্দিষ্ট স্তরে), তাই অর্ডারটি অপেক্ষায় থাকা একটি মুলতুবি অর্ডারে থাকবে মৃত্যুদন্ড কার্যকর তারপর আমরা পেন্ডিং অবস্থায় অর্ডারের তালিকা পেতে “বর্তমান ট্রেডিং পেয়ার অর্ডার পান” মডিউল ব্যবহার করি (লেনদেনের জন্য অপেক্ষা করা হচ্ছে)। ব্যাকটেস্টের চূড়ান্ত পর্যবেক্ষণকে প্রভাবিত করে পরবর্তী বাজারের পরিস্থিতিতে অর্ডার লেনদেন এড়াতে, “বর্তমান ট্রেডিং পেয়ার অর্ডার পান” মডিউলটি কার্যকর করার পরে, আমরা অর্ডার তালিকাটি মুদ্রণ করি এবং প্রোগ্রামটি বন্ধ করতে অবিলম্বে “থ্রো এক্সেপশন” মডিউল ব্যবহার করি।

আপনি ব্যাকটেস্টে দেখতে পারেন:

ক্রয় অর্ডারের মূল্য সেই সময়ের সর্বশেষ মূল্যের চেয়ে 10 ইউয়ান কম, তাই লেনদেন অবিলম্বে সম্পন্ন হবে না। তারপরে লেনদেনের জন্য অপেক্ষা করা অর্ডারটি পান এবং এটি প্রিন্ট আউট করুন। অবশেষে, একটি ব্যতিক্রম নিক্ষেপ করা হয় এবং প্রোগ্রামটি বন্ধ হয়ে যায়।
সম্পূর্ণ একত্রিত মডিউলটি একটি জাভাস্ক্রিপ্ট কৌশল কল করার মত:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
Log(exchange.GetOrders())
throw "stop"
}

এই মডিউল অর্ডার বাতিল করতে ব্যবহার করা হয়.
অনেক পরিস্থিতিতে আছে যেখানে কৌশল লেখার সময় এটি প্রয়োজন হয়:
বর্তমানে মুলতুবি থাকা সমস্ত অর্ডার বাতিল করুন।
নিঃসন্দেহে, এটি অবশ্যই “অর্ডার বাতিলকরণ মডিউল” ব্যবহার করতে হবে, আমরা বর্তমান ট্রেডিং পেয়ারের অর্ডার অর্ডার পেতে [5] মডিউল ব্যবহার করতে পারি এবং এই ফাংশনটি উপলব্ধি করতে এটিকে একত্রিত করতে পারি।
প্রথমত, সমস্ত অর্ডার বাতিল করার পদ্ধতি পরীক্ষা করার জন্য, অর্ডার দেওয়া খুব স্পষ্ট নয়, আমরা দুটি অর্ডারের মধ্যে পার্থক্য করার জন্য ভিন্ন মূল্য এবং পরিমাণ সহ দুটি অর্ডার দিয়ে শুরু করি।

লুপ টাইপ মডিউলে “তালিকার প্রতিটি উপাদান অতিক্রম করুন” মডিউলটি ব্যবহার করুন বর্তমান মুলতুবি থাকা অর্ডার তালিকার অর্ডারগুলিকে অতিক্রম করতে৷
ট্র্যাভার্সিং করার সময়, প্রতিটি টেক আউট অর্ডার পরিবর্তনশীল মডিউল অর্ডারে বরাদ্দ করা হয় (ভেরিয়েবল মডিউল টাইপে তৈরি করা হয়েছে, যেমনটি নীচে দেখানো হয়েছে:)
টুল টাইপ মডিউল ব্যবহার করুন:
অর্ডার আইডি বের করুন এবং অর্ডার বাতিলকরণ মডিউলের টেনন (অবতল) অবস্থানে পাস করুন এবং অর্ডার বাতিলকরণ মডিউল অর্ডার বাতিলকরণ কার্যকর করে।
ব্যাকটেস্ট রান:

জাভাস্ক্রিপ্ট নীতির বর্ণনা ব্যবহার:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
Log(id2)
var orders = exchange.GetOrders()
Log(orders)
for (var i in orders) {
var order = orders[i]
Log(exchange.CancelOrder(order.Id))
}
}

এই মডিউলটির টেনন (অবতল) অবস্থান একটি অর্ডার আইডি পরিবর্তনশীল মডিউলের সাথে সংযুক্ত, এবং অর্ডারের বিবরণ ফেরত দেওয়া যেতে পারে।

চালানোর পরে ফিরে আসা অর্ডারে মনোযোগ দিন:

[5] উদাহরণে চলমান ফলাফলের তুলনা করে, আমরা দেখতে পারি যে মুদ্রিত অর্ডারটি একটি পৃথক অর্ডার তথ্য, ছাড়া[] বর্গাকার বন্ধনীতে মোড়ানো।
কারণ তালিকাটি উদাহরণে [5] ফেরত দেওয়া হয়েছে, এই উদাহরণটি একটি একক অর্ডার তথ্য প্রদান করে (মডিউল দ্বারা পাস করা টেনন অবস্থানে আইডি পরিবর্তনশীল মডিউলের উপর ভিত্তি করে প্রাপ্ত)।
উপরের উদাহরণটি একটি জাভাস্ক্রিপ্ট কৌশল কার্যকর করার মত:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(exchange.GetOrder(id))
}
আমরা উপরের মডিউলগুলি একে একে অধ্যয়ন করি এবং পরীক্ষা বিনিময়কে পণ্যের ফিউচারে সেট করি।
ব্যাকটেস্ট সেটিংস:
নিম্নলিখিত উদাহরণটি এই সেটআপের উপর ভিত্তি করে ব্যাকটেস্ট পরীক্ষা করে।

কমোডিটি ফিউচারের খোলার সময় এবং বন্ধ হওয়ার সময় থাকে যখন বাজার বন্ধ থাকে, সংযোগ করা যায় না।

যখন এক্সচেঞ্জ অবজেক্টটি ফিউচার এক্সচেঞ্জ হিসাবে কনফিগার করা হয়, আপনি যদি একটি চুক্তি সেট না করেন এবং সরাসরি বাজার মূল্য না পান, একটি ত্রুটি রিপোর্ট করা হবে:

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

আপনাকে অর্ডারের দিকনির্দেশ নির্দিষ্ট করতে হবে কারণ ফিউচার আছে:
কিনতে: একটি দীর্ঘ অবস্থান খুলুন
বিক্রয়: একটি ছোট অবস্থান খুলুন
closebuy: ক্লোজ লং পজিশন
closesell: বন্ধ সংক্ষিপ্ত অবস্থান
চারটি দিক (পণ্য ফিউচারের আরও দুটি দিক রয়েছে: ক্লোজবায়_টুডে লং কারেন্ট পজিশন বন্ধ করতে, ক্লোজসেল_টুডে ছোট বর্তমান অবস্থান বন্ধ করতে)।
উদাহরণস্বরূপ, যদি অর্ডার মডিউলটি কেনার জন্য সেট করা হয়, তবে এর দুটি অর্থ রয়েছে: একটি দীর্ঘ অবস্থান খোলা এবং একটি ছোট অবস্থান বন্ধ করা, যা অস্পষ্টতা তৈরি করে। অতএব, একটি স্পষ্ট অর্ডার দিকনির্দেশনা নির্ধারণের জন্য “সেট ফিউচার ট্রেডিং অর্ডার দিকনির্দেশনা” মডিউলটি প্রয়োজন।

ব্যাকটেস্ট শো:

জাভাস্ক্রিপ্ট কৌশল কোডের মতো:
function main () {
while (true) {
if (exchange.IO("status")) {
exchange.SetContractType("MA909")
Log(exchange.GetTicker().Last)
exchange.SetDirection("buy")
Log(exchange.Buy(1000, 1))
throw "stop"
} else {
Log("未连接商品期货前置机")
}
Sleep(1000)
}
}
ডিজিটাল কারেন্সি ফিউচারের ব্যবহার মূলত উপরের [8] এ কমোডিটি ফিউচার ব্যবহার করার মতই।
একটি উদাহরণ হিসাবে OKEX গ্রহণ, চুক্তি কোড হতে পারে:
BitMEX :
লিভারেজ মডিউল সেট আপ করুন

ডিজিটাল কারেন্সি ফিউচার লিভারেজ সেট করতে ব্যবহৃত হয়।
# 注意 : 回测不支持。
জাভাস্ক্রিপ্ট কৌশলের মত:
function main () {
exchange.SetMarginLevel(10)
}
ভিজ্যুয়াল উদাহরণ কৌশল:
আরও কৌশল এখানে: https://www.fmz.com/square
এই সিরিজের অন্যান্য নিবন্ধ