অন্যান্য প্রযুক্তিগত সূচকগুলির বিপরীতে,
সহজ অস্থিরতা ইএমভি সমান ভলিউম চার্ট এবং সংকুচিত চার্টের নীতি অনুসারে ডিজাইন করা হয়েছে। এর মূল ধারণাটি হ'লঃ ট্রেন্ডটি ঘুরছে বা ঘুরতে চলেছে কেবল তখনই বাজার মূল্য প্রচুর শক্তি খরচ করবে এবং বাহ্যিক পারফরম্যান্স হ'ল ট্রেডিং ভলিউম আরও বড় হয়ে উঠবে। যখন দাম বাড়ছে, তখন এটি উত্সাহিত প্রভাবের কারণে খুব বেশি শক্তি খরচ করবে না। যদিও এই ধারণাটি পরিমাণ এবং দাম উভয়ই বাড়ছে এমন দৃষ্টিভঙ্গির বিপরীতে, এটির নিজস্ব অনন্য বৈশিষ্ট্য রয়েছে।
ধাপ ১ঃ mov_mid গণনা করুন
এর মধ্যে TH হল দিনের সর্বোচ্চ মূল্য, TL হল দিনের সর্বনিম্ন মূল্য, YH হল আগের দিনের সর্বোচ্চ মূল্য এবং YL হল আগের দিনের সর্বনিম্ন মূল্য। তাহলে যদি MID> 0 হয় তবে আজকের গড় মূল্য গতকালের গড় মূল্যের চেয়ে বেশি।
ধাপ ২ঃ অনুপাত গণনা করুন
এর মধ্যে, টিভিওএল দিনের ট্রেডিং ভলিউমকে উপস্থাপন করে, TH দিনের সর্বোচ্চ মূল্যকে উপস্থাপন করে এবং TL দিনের সর্বনিম্ন মূল্যকে উপস্থাপন করে।
ধাপ ৩ঃ এমভি গণনা করুন
ইএমভি এর লেখক বিশ্বাস করেন যে বিশাল উত্থানের সাথে শক্তির দ্রুত অবসান ঘটে এবং উত্থানটি প্রায়শই খুব বেশি সময় স্থায়ী হয় না; বিপরীতে, মাঝারি পরিমাণ, যা একটি নির্দিষ্ট পরিমাণ শক্তি সঞ্চয় করতে পারে, প্রায়শই উত্থানকে দীর্ঘায়িত করে। একবার একটি উত্থান প্রবণতা গঠিত হলে, কম ট্রেডিং ভলিউম দামগুলিকে বাড়িয়ে তুলতে পারে এবং ইএমভি এর মান বাড়বে। একবার ডাউনট্রেন্ড বাজার গঠিত হলে, এটি প্রায়শই অসীম বা ছোট হ্রাসের সাথে থাকে এবং ইএমভি এর মান হ্রাস পাবে। যদি দামটি একটি অস্থির বাজারে থাকে বা দামের উত্থান এবং পতনগুলি একটি বড় ভলিউমের সাথে থাকে তবে ইএমভি এর মানও শূন্যের কাছাকাছি হবে। সুতরাং আপনি দেখতে পাবেন যে বেশিরভাগ বাজারে ইএমভি শূন্য অক্ষের নীচে রয়েছে, যা এই সূচকের একটি প্রধান বৈশিষ্ট্য। অন্য দৃষ্টিকোণ থেকে, মেগা-ট্রেন্ডগুলি ইএমভি এবং পর্যাপ্ত মুনা অর্জন করতে পারে।
EMV এর ব্যবহার বেশ সহজ, কেবল EMV শূন্য অক্ষ অতিক্রম করে কিনা তা দেখুন। যখন EMV 0 এর নীচে থাকে, তখন এটি একটি দুর্বল বাজারকে উপস্থাপন করে; যখন EMV 0 এর উপরে থাকে, তখন এটি একটি শক্তিশালী বাজারকে উপস্থাপন করে। যখন EMV নেতিবাচক থেকে ইতিবাচক হয়ে যায়, তখন এটি কেনা উচিত; যখন EMV ইতিবাচক থেকে নেতিবাচক হয়ে যায়, তখন এটি বিক্রি করা উচিত। এর বৈশিষ্ট্যটি হ'ল এটি কেবল বাজারে শক বাজার এড়াতে পারে না, তবে ট্রেন্ড মার্কেট শুরু হওয়ার সময় বাজারে প্রবেশ করতে পারে। তবে, কারণ EMV দামের পরিবর্তনের সময় ভলিউমের পরিবর্তনকে প্রতিফলিত করে, এটি কেবল মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতাগুলিতে প্রভাব ফেলে। স্বল্পমেয়াদী বা তুলনামূলকভাবে সংক্ষিপ্ত ট্রেডিং চক্রের জন্য, EMV এর প্রভাব খুব খারাপ।
ধাপ ১ঃ কৌশলগত কাঠামো লিখুন
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
FMZ.COMরোটেশন প্রশিক্ষণ মোড গ্রহণ করে। প্রথমত, আপনি একটিmain
ফাংশন এবং একটিonTick
ফাংশন।main
ফাংশন কৌশল এন্ট্রি ফাংশন, এবং প্রোগ্রাম কোড লাইন দ্বারা লাইন থেকে চালানো হবেmain
ফাংশন.main
ফাংশন লিখুনwhile
লুপ এবং বারবার সঞ্চালনonTick
কৌশলটির সমস্ত কোর কোডonTick
function.
ধাপ ২ঃ অবস্থান তথ্য পান
def get_position():
position = 0 # The number of assigned positions is 0
position_arr = _C(exchange.GetPosition) # Get array of positions
if len(position_arr)> 0: # If the position array length is greater than 0
for i in position_arr: # Traverse the array of positions
if i['ContractType'] =='IH000': # If the position symbol is equal to the subscription symbol
if i['Type']% 2 == 0: # if it is long position
position = i['Amount'] # Assign a positive number of positions
else:
position = -i['Amount'] # Assign the number of positions to be negative
return position # return position quantity
কারণ এই কৌশলতে, রিয়েল টাইম পজিশনের সংখ্যা ব্যবহার করা হয়, যাতে রক্ষণাবেক্ষণ সহজ হয়,get_position
যদি বর্তমান অবস্থান দীর্ঘ হয়, এটি একটি ধনাত্মক সংখ্যা ফেরত দেয়, এবং যদি বর্তমান অবস্থান সংক্ষিপ্ত হয়, এটি একটি নেতিবাচক সংখ্যা ফেরত দেয়।
পদক্ষেপ 3: কে-লাইন ডেটা পান
exchange.SetContractType('IH000') # Subscribe to futures variety
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <10: # If the number of K lines is less than 10
return
নির্দিষ্ট K-line ডেটা পাওয়ার আগে আপনাকে প্রথমে একটি নির্দিষ্ট ট্রেডিং চুক্তিতে সাবস্ক্রাইব করতে হবে,SetContractType
থেকে ফাংশনFMZ.COM, এবং চুক্তি কোড পাস. আপনি চুক্তি সম্পর্কে অন্যান্য তথ্য জানতে চান, আপনি এই তথ্য গ্রহণ করার জন্য একটি পরিবর্তনশীল ব্যবহার করতে পারেন. তারপর ব্যবহারGetRecords
ফাংশন K-লাইন তথ্য পেতে, কারণ ফিরে একটি অ্যারে, তাই আমরা পরিবর্তনশীল ব্যবহারbars_arr
এটাকে গ্রহণ করতে।
ধাপ ৪ঃ এমভি গণনা করুন
bar1 = bars_arr[-2] # Get the previous K-line data
bar2 = bars_arr[-3] # get the previous K-line data
# Calculate the value of mov_mid
mov_mid = (bar1['High'] + bar1['Low']) / 2-(bar2['High'] + bar2['Low']) / 2
if bar1['High'] != bar1['Low']: # If the dividend is not 0
# Calculate the value of ratio
ratio = (bar1['Volume'] / 10000) / (bar1['High']-bar1['Low'])
else:
ratio = 0
# If the value of ratio is greater than 0
if ratio> 0:
emv = mov_mid / ratio
else:
emv = 0
এখানে, আমরা EMV এর মান গণনা করার জন্য সর্বশেষতম মূল্য ব্যবহার করি না, তবে সংকেতটি আউটপুট করতে এবং অর্ডার দেওয়ার জন্য একটি K লাইন স্থাপন করতে অপেক্ষাকৃত পিছিয়ে থাকা বর্তমান K লাইনটি ব্যবহার করি। এর উদ্দেশ্য হ'ল ব্যাকটেস্টকে বাস্তব ট্রেডিংয়ের কাছাকাছি করা। আমরা জানি যে যদিও পরিমাণগত ট্রেডিং সফ্টওয়্যারটি এখন খুব উন্নত, তবে প্রকৃত মূল্য টিক পরিবেশটি সম্পূর্ণরূপে সিমুলেট করা এখনও কঠিন, বিশেষত যখন ব্যাকটেস্টিং বার-স্তরের দীর্ঘ ডেটাগুলির মুখোমুখি হয়, তাই এই আপস পদ্ধতিটি ব্যবহার করা হয়।
ধাপ ৫ঃ অর্ডার দেওয়া
current_price = bars_arr[-1]['Close'] # latest price
position = get_position() # Get the latest position
if position> 0: # If you are holding long positions
if emv <0: # If the current price is less than teeth
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(round(current_price-0.2, 2), 1) # close long position
if position <0: # If you are holding short positions
if emv> 0: # If the current price is greater than the teeth
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(round(current_price + 0.2, 2), 1) # close short position
if position == 0: # If there is no holding position
if emv> 0: # If the current price is greater than the upper lip
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(round(current_price + 0.2, 2), 1) # open long position
if emv <0: # if the current price is smaller than the chin
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(round(current_price-0.2, 2), 1) # open short position
অর্ডার স্থাপন করার আগে, আমরা দুটি তথ্য নির্ধারণ করতে হবে, এক অর্ডার মূল্য এবং অন্যান্য বর্তমান অবস্থান অবস্থা. একটি অর্ডার স্থাপন মূল্য খুব সহজ, শুধু বর্তমান বন্ধ মূল্য যোগ বা বৈচিত্র্য সর্বনিম্ন পরিবর্তন মূল্য বিয়োগ করতে ব্যবহার করুন. যেহেতু আমরা ব্যবহার করেছিget_position
অবশেষে, অবস্থান EMV এবং শূন্য অক্ষের মধ্যে অবস্থানের সম্পর্ক অনুযায়ী খোলা এবং বন্ধ করা হয়।
ব্যাকটেস্ট কনফিগারেশন
ব্যাকটেস্ট লগ
মূলধন কার্ভ
# Backtest configuration
'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
def get_position():
position = 0 # The number of assigned positions is 0
position_arr = _C(exchange.GetPosition) # Get array of positions
if len(position_arr)> 0: # If the position array length is greater than 0
for i in position_arr: # Traverse the array of positions
if i['ContractType'] =='IH000': # If the position symbol is equal to the subscription symbol
if i['Type']% 2 == 0: # if it is long position
position = i['Amount'] # Assign a positive number of positions
else:
position = -i['Amount'] # Assign the number of positions to be negative
return position # return position quantity
# Strategy main function
def onTick():
# retrieve data
exchange.SetContractType('IH000') # Subscribe to futures
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <10: # If the number of K lines is less than 10
return
# Calculate emv
bar1 = bars_arr[-2] # Get the previous K-line data
bar2 = bars_arr[-3] # get the previous K-line data
# Calculate the value of mov_mid
mov_mid = (bar1['High'] + bar1['Low']) / 2-(bar2['High'] + bar2['Low']) / 2
if bar1['High'] != bar1['Low']: # If the dividend is not 0
# Calculate the value of ratio
ratio = (bar1['Volume'] / 10000) / (bar1['High']-bar1['Low'])
else:
ratio = 0
# If the value of ratio is greater than 0
if ratio> 0:
emv = mov_mid / ratio
else:
emv = 0
# Placing orders
current_price = bars_arr[-1]['Close'] # latest price
position = get_position() # Get the latest position
if position> 0: # If you are holding long positions
if emv <0: # If the current price is less than teeth
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(round(current_price-0.2, 2), 1) # close long position
if position <0: # If you are holding short positions
if emv> 0: # If the current price is greater than the teeth
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(round(current_price + 0.2, 2), 1) # close short position
if position == 0: # If there is no holding position
if emv> 0: # If the current price is greater than the upper lip
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(round(current_price + 0.2, 2), 1) # open long position
if emv <0: # if the current price is smaller than the chin
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(round(current_price-0.2, 2), 1) # open short position
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
সমগ্র কৌশলটি প্রকাশিত হয়েছেFMZ.COMওয়েবসাইট, এবং এটি কপি ক্লিক করে ব্যবহার করা যেতে পারে.https://www.fmz.com/strategy/213636
এই গবেষণার মাধ্যমে, আমরা দেখতে পাচ্ছি যে ইএমভি সাধারণ ব্যবসায়ীদের বিপরীত, তবে এটি অযৌক্তিক নয়। কারণ ইএমভি ভলিউম ডেটা প্রবর্তন করে, এটি অন্যান্য প্রযুক্তিগত সূচকগুলির তুলনায় আরও কার্যকর যা দামের পিছনে কী রয়েছে তা জানতে মূল্য গণনা ব্যবহার করে। প্রতিটি কৌশলটির বিভিন্ন বৈশিষ্ট্য রয়েছে। কেবলমাত্র বিভিন্ন কৌশলগুলির সুবিধা এবং অসুবিধাগুলি পুরোপুরি বোঝার মাধ্যমে এবং আবর্জনা অপসারণ এবং এর সারমর্মটি বের করার মাধ্যমে আমরা সাফল্য থেকে আরও এগিয়ে যেতে পারি।