পূর্ববর্তী নিবন্ধে, আমরা পাইথন ভাষার ভূমিকা, মৌলিক সিনট্যাক্স, কৌশল কাঠামো এবং আরও অনেক কিছু সম্পর্কে শিখেছি। যদিও বিষয়বস্তুটি বিরক্তিকর ছিল, তবে এটি আপনার ট্রেডিং কৌশল বিকাশে একটি প্রয়োজনীয় দক্ষতা। এই নিবন্ধে, আসুন একটি সহজ কৌশল দিয়ে পাইথনের পথটি ধাপে ধাপে চালিয়ে যান, আপনাকে একটি কার্যকর পরিমাণগত ট্রেডিং কৌশল অর্জনে সহায়তা করতে।
অনেক ট্রেডিং কৌশল মধ্যে, Donchian চ্যানেল কৌশল সবচেয়ে ক্লাসিক যুগান্তকারী কৌশল এক হওয়া উচিত। এটি 1970 সাল থেকে বিখ্যাত হয়েছে। সেই সময়, সিমুলেশন পরীক্ষা এবং মূলধারার প্রোগ্রাম্যাটিক ট্রেডিং কৌশল গবেষণা বিশেষজ্ঞ একটি কোম্পানী। সব কৌশল পরীক্ষা, Donchian চ্যানেল কৌশল সবচেয়ে সফল ছিল।
পরে, মার্কিন যুক্তরাষ্ট্রে, বিখ্যাত
বিভাজন ট্রেডিং কৌশলটি ব্যবসায়ের বৈচিত্র্যের তুলনামূলকভাবে মসৃণ প্রবণতার সাথে খাপ খাইয়ে নেওয়া হয়। বিভাজনের সর্বাধিক সাধারণ উপায় হ'ল নির্দিষ্ট ট্রেডিং অবস্থান নির্ধারণের জন্য মূল্য সমর্থন এবং প্রতিরোধের মধ্যে আপেক্ষিক অবস্থানের সম্পর্ক ব্যবহার করা। এই বিভাগে ডনচিয়ান চ্যানেল কৌশলটিও এই নীতির উপর ভিত্তি করে।
ডনচিয়ান চ্যানেল একটি প্রবণতা-ভিত্তিক সূচক, এবং এর চেহারা এবং সংকেত বোলিংজার ব্যান্ড সূচকের সাথে কিছুটা অনুরূপ। তবে, এর মূল্য চ্যানেলটি একটি নির্দিষ্ট সময়ের সর্বোচ্চ এবং সর্বনিম্ন দাম অনুসারে নির্মিত হয়। উদাহরণস্বরূপঃ উপরের রেলটি সর্বশেষতম 50 কে-লাইন
যেমন উপরে দেখানো হয়েছেঃ এই সূচকটি তিনটি ভিন্ন রঙের সমন্বয়ে গঠিত, ডিফল্ট সেটিংটি 20 চক্রের সর্বোচ্চ এবং সর্বনিম্ন মূল্য মূল্য প্রদর্শনের জন্য। যখন মূল্যটি একটি সংকীর্ণ চ্যানেলে থাকে তখন এটি কম অস্থিরতা প্রদর্শন করবে এবং বিপরীতভাবে।
যদি দামগুলি উপরের রেলের উপরে উঠে যায় তবে ক্রয় সংকেত উপস্থিত হবে; বিপরীতভাবে, যদি দাম নিম্ন রেলের নীচে পড়ে তবে বিক্রয় সংকেত উপস্থিত হবে। যেহেতু উপরের এবং নীচের রেলগুলি সর্বনিম্ন এবং সর্বোচ্চ মূল্য ব্যবহার করে গণনা করা হয়, তাই স্বাভাবিক পরিস্থিতিতে, দাম রেলগুলিকে ভেঙে ফেলবে না, এটি রেলগুলির সাথে বা চ্যানেলের অভ্যন্তরে ঝাঁপিয়ে যাবে।
FMZ কোয়ান্ট প্ল্যাটফর্মে, Donchian চ্যানেল গণনা সহজ, আপনি আপনি কেবলমাত্র প্রদত্ত চক্রের সর্বোচ্চ বা সর্বনিম্ন মূল্য অ্যাক্সেস করতে পারেন, যেমন নীচে দেখানো হয়েছেঃ 5 ম লাইন 50 চক্রের সর্বোচ্চ মূল্য পেতে হয়, 6 ষ্ঠ লাইন 50 চক্রের সর্বনিম্ন মূল্য পেতে হয়।
def main(): # program entry
exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
while True: # enter the loop
records = exchange.GetRecords() # get the k line array
upper = TA.Highest(record, 50, 'high') # get the highest price of 50 cycles
lower = TA.Lowest(record, 50, 'low') # get the lowest price of 50 cycles
middle = (upper + lower) / 2 # calculate the average value of upper and lower rails
Log("upper rail: ", upper) # print the upper rail value in the log
Log("lower rail: ", lower) # print the lower rail value in the log
Log("middle rail: ", middle) # print the middle rail value in the log
ডনচিয়ান চ্যানেলটি ব্যবহার করার অনেকগুলি উপায় রয়েছে, যা একা বা অন্যান্য সূচকগুলির সাথে সংমিশ্রণে ব্যবহার করা যেতে পারে। এই বিভাগে আমরা এটি সবচেয়ে সহজ উপায়ে ব্যবহার করব। অর্থাৎঃ যখন দামগুলি উপরের রেলটি ভেঙে দেয়, যার অর্থ এটি চাপের লাইনের উপরে ভেঙে যায়, তখন ক্রয় ক্ষমতা শক্তিশালী হয়, এটি উত্থান শক্তির একটি তরঙ্গ গঠন করেছে, ক্রয় সংকেত উত্পন্ন হয়; যখন দামের ভাঙ্গন নিম্ন রেলের নীচে হয়, যার অর্থ এটি সমর্থন লাইনের নীচে ভেঙে যায়, তখন বিক্রয় সংকেত উত্পন্ন হয়।
যদি লং পজিশন খোলার পর দাম আবার চ্যানেলের মাঝের রেলের দিকে ফিরে যায়, তাহলে আমরা বিশ্বাস করি যে ক্রয় ক্ষমতা দুর্বল হচ্ছে, অথবা বিক্রয় শক্তি শক্তিশালী হচ্ছে, এবং শর্ট পজিশন খোলার সংকেত উৎপন্ন হয়; একই নীতি খোলা শর্ট পজিশনের ক্ষেত্রে প্রযোজ্য
লং পজিশন ওপেনঃ যদি কোন পজিশন হোল্ডিং না থাকে এবং বন্ধের মূল্য উপরের রেলের চেয়ে বেশি হয়
খোলা শর্ট পজিশনঃ যদি কোন পজিশন হোল্ডিং না থাকে এবং বন্ধের মূল্য নিম্ন রেলের চেয়ে কম হয়
বন্ধ করা লং পজিশনঃ যদি বর্তমানে লং পজিশন ধরে রাখা হয় এবং বন্ধের মূল্য মধ্যম রেলের চেয়ে কম হয়
বন্ধ করা শর্ট পজিশনঃ যদি বর্তমানে শর্ট পজিশন ধরে রাখা হয় এবং বন্ধের মূল্য মধ্যম রেলের চেয়ে বেশি হয়
কৌশল বাস্তবায়নের প্রথম ধাপ হচ্ছে প্রথমে তথ্য সংগ্রহ করা, কারণ তথ্য ট্রেডিং কৌশল একটি পূর্বশর্ত অংশ. এটা সম্পর্কে চিন্তা করুন, কি তথ্য আমরা প্রয়োজন? এবং কিভাবে এই তথ্য পেতে?
এরপর এই তথ্যের উপর ভিত্তি করে ট্রেডিং লজিক গণনা করা হয়; শেষ ধাপ হল লজিক অনুযায়ী ট্রেড করা।
আপনি ট্রেডিং ক্লাস লাইব্রেরিকে একটি কার্যকরী মডিউল হিসাবে ভাবতে পারেন। একটি ট্রেডিং ক্লাস লাইব্রেরি ব্যবহারের সুবিধা হ'ল এটি আপনাকে কৌশল লজিক লেখার দিকে মনোনিবেশ করতে দেয়। উদাহরণস্বরূপ, যখন আমরা ট্রেডিং ক্লাস লাইব্রেরি ব্যবহার করি, একটি অবস্থান খোলার বা বন্ধ করার জন্য, আমরা সরাসরি ট্রেডিং ক্লাস লাইব্রেরির এপিআই ইন্টারফেস ব্যবহার করতে পারি; তবে যদি আমরা ট্রেডিং ক্লাস লাইব্রেরি ব্যবহার না করি, তবে আমাদের অবস্থান খোলার সময় বাজার মূল্য পেতে হবে। অকার্যকর আদেশ এবং প্রত্যাহারের আদেশ ইস্যু বিবেচনা করতে হবে, ইত্যাদি।
def main();
wile true:
obj = ext.NewPositionManager() # using the trading class library
# followed by strategy logic and placing order part
উপরের কোডিং অংশটি এফএমজেড কোয়ান্ট সরঞ্জাম ব্যবহার করে সিটিএ কৌশল কাঠামো। এটি একটি স্থির কোডিং ফর্ম্যাট, এবং সমস্ত ট্রেডিং লজিক কোড লাইন 4 থেকে শুরু হবে। অন্য কোথাও অন্য কোনও পরিবর্তন প্রয়োজন হয় না।
চিন্তা করুন, আমাদের কোন ধরনের তথ্যের প্রয়োজন? আমাদের কৌশল ট্রেডিং লজিক থেকে, আমাদের প্রথমে বর্তমান পজিশনের অবস্থা পেতে হবে, এবং তারপর বন্ধের মূল্য তুলনা করতে হবে বোলিংজার ব্যান্ড সূচকের উপরের, মাঝের এবং নীচের রেলের সাথে।
প্রথমটি হল কে-লাইন ডেটা অ্যারে এবং বর্তমান কে-লাইন বন্ধের মূল্য পাওয়া, কে-লাইন অ্যারে দিয়ে, আমরা এপিআই ইন্টারফেসের মাধ্যমে সর্বোচ্চ এবং সর্বনিম্ন মূল্যের এন চক্রের সময় গণনা করতে পারি। এটি এভাবে লেখা যেতে পারেঃ
def main(): # main function
exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
while True: # enter the loop
records = exchange.GetRecords() # get the k line array
if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
close = records[len(records) - 1].Close # get the closing price of the latest k-line
উপরে যেমন দেখানো হয়েছে:
লাইন ৪ঃ K লাইন অ্যারে পান, যা একটি ফিক্সড ফরম্যাট।
লাইন ৫ঃ K রেখার দৈর্ঘ্য ফিল্টার করুন, কারণ ডনচিয়ান চ্যানেল সূচক গণনা করার পরামিতি ৫০, যখন K রেখার সংখ্যা ৫০ এর কম হয়, তখন এটি গণনা করা অসম্ভব। সুতরাং এখানে আমাদের K রেখার সংখ্যা ফিল্টার করতে হবে। যদি K রেখার সংখ্যা ৫০ এর কম হয় তবে এটি বর্তমান লুপটি এড়িয়ে যাবে এবং পরবর্তী K রেখার জন্য অপেক্ষা করতে থাকবে।
লাইন ৬: আমরা " রেকর্ডস [লেন (রেকর্ডস) -১] " কোড ব্যবহার করি K- লাইন অ্যারের সর্বশেষ তথ্য পেতে, যা সর্বশেষ K- লাইন ডেটা। এই ডেটা একটি অবজেক্ট, যার মধ্যে রয়েছেঃ খোলার মূল্য, সর্বোচ্চ, সর্বনিম্ন এবং বন্ধের মূল্য, এছাড়াও ট্রেডিং ভলিউম, সময় এবং অন্যান্য তথ্য, যেহেতু এটি একটি অবজেক্ট, তাই আমরা কেবল
অবস্থান তথ্য পরিমাণগত ট্রেডিং কৌশল একটি খুব গুরুত্বপূর্ণ শর্ত। যখন ট্রেডিং শর্তাদি প্রতিষ্ঠিত হয়, এটি অবস্থান অবস্থা এবং অবস্থান সংখ্যা দ্বারা একটি অর্ডার স্থাপন করা উচিত কিনা তা বিচার করা প্রয়োজন। উদাহরণস্বরূপ, যখন দীর্ঘ অবস্থান খোলার শর্তাদি প্রতিষ্ঠিত হয়, যদি হোল্ডিং অবস্থান থাকে, অর্ডার স্থাপন করবেন না; যদি কোনও অবস্থান হোল্ডিং না থাকে, অর্ডার স্থাপন করুন। এই সময় আমরা সরাসরি অবস্থান তথ্যকে একটি ফাংশনে ক্যাপসুল করি, আমরা কেবল এই ফাংশনটি এটি ব্যবহার করতে কল করতে পারি। এভাবেঃ
# get the position information function
def mp():
positions = exchange.GetPosition() # get the holding position array
if len(position) == 0: # if the holding position array is 0
return 0 # meaning currently has no position holding, return 0
for i in range(len(position)): # Traversing the position array
if (position[i]['Type'] == PD_LONG):
return 1 # if there are long position holding, return 1
elif (position[i]['Type'] == PD_SHORT):
return -1 # if there are short position holding, return -1
def main(): # main function
exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
while True: # enter the loop
records = exchange.GetRecords() # get the k line array
if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
close = records[len(records) - 1].Close # get the closing price of the latest k-line
position = mp() # get the position information function
উপরে যেমন দেখানো হয়েছে:
এটি একটি ফাংশন যা অবস্থানের তথ্য পায়। যদি লং পজিশন থাকে, তাহলে মান হল 1; যদি শর্ট পজিশন থাকে, তাহলে মান হল -1; যদি কোন পজিশন না থাকে, তাহলে মান হল 0.
লাইন ২ঃ
লাইন ৩ঃ পজিশন অ্যারে পান, যা একটি ফিক্সড ফরম্যাট।
লাইন ৪ঃ অবস্থান অ্যারের দৈর্ঘ্য নির্ধারণ করুন। যদি এর দৈর্ঘ্য ০ এর সমান হয়, এর অর্থ হল যে এর কোন অবস্থান রাখা নেই, ০ প্রদান করে।
লাইন ৬: ফর লুপ ব্যবহার করে, এই অ্যারেটি অতিক্রম করতে শুরু করে, নিম্নলিখিত যুক্তিটি খুব সহজ, যদি এটি লং পজিশন ধরে রাখে, তবে 1 ফেরত দেয়; যদি এটি শর্ট পজিশন ধরে রাখে, তবে -1 ফেরত দেয়।
লাইন ১৮ঃ অবস্থান তথ্য ফাংশন
এফএমজেড কোয়ান্ট পরিমাণগত ট্রেডিং সরঞ্জামটিতে, আপনি সরাসরি আপনার নিজস্ব যৌক্তিক গণনা লিখতে হবে না এমন " TA.Highest " এবং " TA.Lowest " ফাংশনগুলি ব্যবহার করতে পারেন। এবং
# get the position information function
def mp():
positions = exchange.GetPosition() # get the holding position array
if len(position) == 0: # if the holding position array is 0
return 0 # meaning currently has no position holding, return 0
for i in range(len(position)): # Traversing the position array
if (position[i]['Type'] == PD_LONG):
return 1 # if there are long position holding, return 1
elif (position[i]['Type'] == PD_SHORT):
return -1 # if there are short position holding, return -1
def main(): # main function
exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
while True: # enter the loop
records = exchange.GetRecords() # get the k line array
if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
close = records[len(records) - 1].Close # get the closing price of the latest k-line
position = mp() # get the position information function
upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail
উপরে যেমন দেখানো হয়েছে:
লাইন ১৯ঃ
লাইন ২০:
লাইন ২১ঃ ৫০টি চক্রের সর্বোচ্চ এবং সর্বনিম্ন মূল্য অনুযায়ী উপরের এবং নীচের রেলের গড় মান গণনা করুন
উপরের তথ্য দিয়ে, আমরা এখন ট্রেডিং লজিক এবং অর্ডার দেওয়ার অংশ লিখতে পারি। এটি খুব সহজ, সর্বাধিক ব্যবহৃত হয়
# get the position information function
def mp():
positions = exchange.GetPosition() # get the holding position array
if len(position) == 0: # if the holding position array is 0
return 0 # meaning currently has no position holding, return 0
for i in range(len(position)): # Traversing the position array
if (position[i]['Type'] == PD_LONG):
return 1 # if there are long position holding, return 1
elif (position[i]['Type'] == PD_SHORT):
return -1 # if there are short position holding, return -1
def main(): # main function
exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
while True: # enter the loop
records = exchange.GetRecords() # get the k line array
if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
close = records[len(records) - 1].Close # get the closing price of the latest k-line
position = mp() # get the position information function
upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail
obj = ext.NewPositionManager() # using the trading class library
if position > 0 and close < middle: # If currently holding long position, and the closing price is less than the middle rail
obj.CoverAll() # close all position
if position < 0 and close > middle: # If currently holding short position, and the closing price is greater than the middle rail
obj.CoverAll() # close all position
if position == 0: # if currently holding no position
if close > upper: # if the closing price is greater than the middle rail
obj.OpenLong("this_week", 1) # open long position
elif close < lower: # if the closing price is less than the middle rail
obj.OpenShort("this_week", 1) # open short position
উপরে যেমন দেখানো হয়েছে:
লাইন ২২ঃ ট্রেডিং ক্লাস লাইব্রেরি ব্যবহার করে, এটি একটি নির্দিষ্ট বিন্যাস
লাইন ২৩, ২৪: এটি একটি বন্ধ হওয়া লং পজিশনের বিবৃতি যা আমরা আগে শিখেছি
লাইন 25, 26: এটি একটি বন্ধ শর্ট পজিশন বিবৃতি যা আমরা আগে শিখেছি
লাইন ২৭: বর্তমান অবস্থানের অবস্থা নির্ধারণ করুন। যদি কোন অবস্থান রাখা না থাকে, তাহলে পরবর্তী ধাপে এগিয়ে যান।
লাইন ২৮, ২৯: বন্ধের মূল্য উপরের রেলের চেয়ে বেশি কিনা তা নির্ধারণ করুন। যদি বন্ধের মূল্য উপরের রেলের উপরে উঠে যায়, তাহলে লং পজিশন খুলুন।
লাইন ৩০, ৩১: বন্ধের মূল্য নিম্নতম রেলের চেয়ে কম কিনা তা নির্ধারণ করুন। যদি বন্ধের মূল্য নিম্নতম রেলের নিচে পড়ে তবে শর্ট পজিশন খুলুন।
উপরে আমরা পাইথন ব্যবহার করে একটি সম্পূর্ণ পরিমাণগত ট্রেডিং কৌশল বিকাশের প্রতিটি ধাপ শিখেছি, যার মধ্যে রয়েছেঃ কৌশল ভূমিকা, ডনচিয়ান চ্যানেল গণনা পদ্ধতি, কৌশল যুক্তি, ট্রেডিং শর্তাদি, কৌশল কোড বাস্তবায়ন ইত্যাদি। এই বিভাগটি কেবল একটি সহজ কৌশল। অনুপ্রেরণার পদ্ধতি হিসাবে, এটি সম্পাদনের জন্য একাধিক উপায় রয়েছে। আপনি আপনার নিজস্ব পরিমাণগত ট্রেডিং কৌশল গঠনের জন্য আপনার ট্রেডিং সিস্টেম অনুসারে বিভিন্ন ট্রেডিং পদ্ধতিকে ওভারল্যাপ করতে পারেন।
পরিমাণগত ট্রেডিং কৌশলগুলির বিকাশে, প্রোগ্রামিং ভাষার কার্যকরকরণের গতির দৃষ্টিকোণ থেকে, কোনটি দ্রুততম? এটি অবশ্যই সি ++ হতে হবে। বিশেষত আর্থিক ডেরিভেটিভস এবং উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের ক্ষেত্রে। সি ++ ভাষার নির্দিষ্টতাতে অনন্য এবং এটি সংখ্যার গণনায় সুবিধা রয়েছে। জাভাস্ক্রিপ্ট এবং পাইথনের তুলনায় এর গতি কয়েক অর্ডার বৃদ্ধি করা যেতে পারে। আপনি যদি ভবিষ্যতে আর্থিক ডেরিভেটিভস বা উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের ক্ষেত্রে যেতে চান। এটি অবশ্যই আপনার মিস করা উচিত নয়।
প্রাথমিক দিক থেকে শুরু করুন এবং এই বিভাগের কৌশলটি বাস্তবায়ন করুন।
ট্রেডিং ফ্রিকোয়েন্সি কমাতে এই বিভাগে কৌশলটিতে একটি চলমান গড় সূচক যুক্ত করার চেষ্টা করুন।