ریسرچ کے ماحول میں ڈونچیان چینل کی حکمت عملی کا تجزیہ

مصنف:لیدیہ, تخلیق: 2022-12-26 09:19:00, تازہ کاری: 2023-09-20 10:43:17

img

ریسرچ کے ماحول میں ڈونچیان چینل کی حکمت عملی کا تجزیہ

حکمت عملی کا تعارف

بہت سی تجارتی حکمت عملیوں میں ، ڈونچیان چینل کی حکمت عملی سب سے کلاسیکی پیش رفت کی حکمت عملیوں میں سے ایک ہونی چاہئے۔ یہ 1970 کے اوائل میں مشہور تھا۔ اس وقت ، ایک غیر ملکی کمپنی نے مرکزی دھارے کے پروگراموں کی تجارتی حکمت عملیوں پر نقلی جانچ اور تحقیق کی تھی۔ نتائج سے پتہ چلتا ہے کہ ڈونچیان چینل کی حکمت عملی تمام حکمت عملی ٹیسٹوں میں سب سے کامیاب تھی۔

بعد میں ، تجارتی تاریخ میں سب سے مشہور ٹرتل تاجر کی تربیت ریاستہائے متحدہ میں ہوئی ، جو ایک بڑی کامیابی تھی۔ اس وقت ، ٹرتلز کے تجارتی طریقے خفیہ تھے ، لیکن دس سال سے زیادہ کے بعد ، ٹرتل ٹریڈنگ رولز کو عوام کے سامنے شائع کیا گیا ، لوگوں نے پایا کہ ٹرتلز نے ڈونچیان چینل کی حکمت عملی کا بہتر ورژن استعمال کیا۔

توڑنے والی تجارتی حکمت عملی نسبتا smooth ہموار رجحان والی تجارت کی اقسام کے لئے موزوں ہے۔ اس مضمون میں ڈونچیان چینل کی حکمت عملی بھی اس اصول پر مبنی ہے۔

ڈونچیئن چینل کی حکمت عملی کے قواعد

ڈونچیان چینل ایک رجحان اشارے ہے ، اور اس کی ظاہری شکل اور سگنل بولنگر بینڈ اشارے کی طرح ہیں۔ تاہم ، ڈونچیان کا قیمت چینل ایک خاص مدت کے اندر سب سے زیادہ قیمت اور سب سے کم قیمت کے مطابق بنایا گیا ہے۔ مثال کے طور پر ، آخری 50 K لائنوں کی سب سے زیادہ قیمت کی زیادہ سے زیادہ قیمت کا حساب کتاب کیا جاتا ہے تاکہ اوپری ٹریک تشکیل دیا جاسکے۔ نچلی ٹریک بنانے کے لئے آخری 50 K لائنوں کی کم سے کم قیمت کی کم سے کم قیمت کا حساب لگائیں۔

img

جیسا کہ مندرجہ بالا شبیہہ میں دکھایا گیا ہے ، یہ اشارے مختلف رنگوں کے تین منحنی خطوط پر مشتمل ہے۔ پہلے سے طے شدہ طور پر ، 20 ادوار کے اندر سب سے زیادہ اور کم قیمتیں مارکیٹ کی قیمتوں کی اتار چڑھاؤ کو ظاہر کرنے کے لئے استعمال ہوتی ہیں۔ جب چینل تنگ ہوتا ہے تو اس کا مطلب یہ ہے کہ مارکیٹ کی اتار چڑھاؤ چھوٹی ہوتی ہے۔ اس کے برعکس ، جب چینل وسیع ہوتا ہے تو اس کا مطلب یہ ہے کہ مارکیٹ کی اتار چڑھاؤ بڑی ہوتی ہے۔

اگر قیمت اوپری ٹریک سے اوپر بڑھتی ہے تو ، یہ خرید کا اشارہ ہے۔ اس کے برعکس ، اگر قیمت نچلی ٹریک سے نیچے گرتی ہے تو ، یہ فروخت کا اشارہ ہے۔ چونکہ اوپری اور نچلی ٹریکوں کا حساب سب سے زیادہ اور سب سے کم قیمتوں سے کیا جاتا ہے ، عام طور پر ، قیمتیں ایک ہی وقت میں اوپری اور نچلی چینل لائنوں سے کم کم ہوتی ہیں۔ زیادہ تر معاملات میں ، قیمت ایک طرفہ طور پر اوپری یا نچلی ٹریکوں کے ساتھ ، یا اوپری اور نچلی ٹریکوں کے درمیان چلتی ہے۔

حکمت عملی کا منطق

ڈونچیئن چینل کو استعمال کرنے کے بہت سے طریقے ہیں ، جو اکیلے یا دوسرے اشارے کے ساتھ مل کر استعمال کیے جاسکتے ہیں۔ اس سبق میں ، ہم سب سے آسان طریقہ استعمال کریں گے۔ یعنی ، جب قیمت نیچے سے اوپر کی طرف سے اوپری ٹریک کو توڑتی ہے ، یعنی ، پریشر لائن سے اوپر ، ہمیں یقین ہے کہ بہت سی جماعتوں کی طاقت بڑھ رہی ہے ، بڑھتی ہوئی مارکیٹ کی لہر تشکیل دی گئی ہے ، اور خریدنے کی کھلی پوزیشن کا اشارہ پیدا ہوا ہے۔ جب قیمت اوپر سے نیچے کی ٹریک سے نیچے گرتی ہے ، یعنی ، سپورٹ لائن سے نیچے ، ہمیں یقین ہے کہ شارٹ پوزیشن کی طرف مضبوط ہوتی ہے ، نیچے کی رجحان کی لہر تشکیل دی گئی ہے ، اور فروخت کی افتتاحی پوزیشن کا اشارہ پیدا ہوا ہے۔

اگر پوزیشن کھولنے کے لئے خریدنے کے بعد قیمت ڈونچیان چینل کے وسط ٹریک پر واپس آجاتی ہے تو ، ہم سمجھتے ہیں کہ کثیر پارٹی فورس کمزور ہو رہی ہے ، یا شارٹ پوزیشن پارٹی فورس مضبوط ہو رہی ہے ، اور پوزیشن بیچنے اور بند کرنے کا اشارہ پیدا ہوتا ہے۔ اگر فروخت کی پوزیشن کھولنے کے بعد قیمت ڈونچیان چینل کے وسط ٹریک پر واپس بڑھتی ہے تو ، ہم سمجھتے ہیں کہ شارٹ پوزیشن کی طرف کمزور ہو رہی ہے ، یا کثیر پارٹی فورس مضبوط ہو رہی ہے ، اور خریدنے کی بند پوزیشن کا اشارہ پیدا ہوتا ہے۔

خرید و فروخت کی شرائط

  • لانگ اوپننگ پوزیشن: اگر کوئی پوزیشن نہیں ہے اور بند ہونے کی قیمت اوپری ٹریک سے زیادہ ہے۔
  • مختصر افتتاحی پوزیشن: اگر کوئی پوزیشن موجود نہیں ہے اور بند ہونے کی قیمت کم ٹریک سے کم ہے۔
  • طویل اختتامی پوزیشن: اگر آپ ایک طویل پوزیشن رکھتے ہیں اور اختتامی قیمت درمیانی ٹریک سے کم ہے۔
  • مختصر بند پوزیشن: اگر آپ ایک مختصر پوزیشن رکھتے ہیں اور بند ہونے کی قیمت درمیانی ٹریک سے زیادہ ہے۔

حکمت عملی کوڈ کا نفاذ

اگلا، ہم FMZ کوانٹ پلیٹ فارم کے تحقیقی ماحول میں اس حکمت عملی کو ایک ایک کرکے سمجھیں گے:

ایف ایم زیڈ کوانٹ پلیٹ فارم کے تحقیقی ماحول میں درج کریں، جیسا کہ ذیل میں دکھایا گیا ہے:

img

پائیتھون ورژن.ipynb میں ڈونچیئن چینل کی حکمت عملی میں [1]:

from fmz import *
task = VCtx('''backtest
start: 2019-08-01 09:00:00
end: 2019-10-10 15:00:00
period: 5m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
''')
# Create a Backtesting Environment
# The example format of the backtest information in red above can be obtained by clicking "Save settings" on the strategy edting page of the FMZ Quant platform.

[2] میں:

# First, we need to get the position information, and we define a mp() function to do this.

def mp():
    positions = exchange.GetPosition() # Get position array
    if len(positions) == 0: # If the length of the position array is 0
        return 0 # Prove a short position, return 0
    for i in range(len(positions)): # Iterate through the positions array
        if (positions[i]['Type'] == PD_LONG) or (positions[i]['Type'] == PD_LONG_YD):
            return 1 # If there are long position orders, return 1
        elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] == PD_SHORT_YD):
            return -1 # If there are short position orders, return -1
        
    print(positions)
    
mp() # Next, we execute this function to get the position information, and we can see that the result is 0, which means that the current position is short.

آؤٹ [2]: 0

میں [3]:

# Let's start testing this strategy using the current main rebar contract as an example.

exchange.SetContractType("rb888") # Set the variety code, the main contract is the contract code followed by the number 888.

آؤٹ [1]: {مجموعہ کی قسم: 0، CreateDate: 0، ڈلیوری مہینہ: 9، پہنچانے کا سال: 0، آخر ترسیل کی تاریخ : 0، ExchangeID: SHFE، ExchangeInstID: rb888، معطل ہونے کی تاریخ: 0، InstLifePhase: 49، آلے ID: rb888، آلے کا نام: rb تسلسل، IsTrading: 1، لانگ مارجن ریشو: 0.06، MaxLimitOrderVolume: 500، میکس مارجن سائیڈ الگورتھم: 49، میکس مارکیٹ آرڈر حجم : 30, MinLimitOrderVolume: 1، MinMarketOrderVolume: 1، اوپن ڈیٹ: 0، اختیارات کی قسم: 48، PositionDateType: 49، PositionType: 50، پریس ٹِک: 1، پروڈکٹ کلاس: 49، ProductID: rb، شارٹ مارجن ریشو: 0.06، شروع ترسیل کی تاریخ : 0، سٹرائیک پرائس: 0، بنیادی انٹریڈ: rb، بنیادیمتعدد: 1، VolumeMultiple : 10}

اگلا ، ہمیں K- لائن صف ملتی ہے ، کیونکہ اسٹریٹجک منطق کے مطابق ، ہمیں مارکیٹ کو ایک عرصے تک چلانے کی ضرورت ہے اور پھر منطقی فیصلے کرنے کی ضرورت ہے ، تاکہ ہماری اسٹریٹجک منطق مارکیٹ میں بہتر طور پر موافقت کرسکے۔ یہاں ہم عارضی طور پر 50 K لائنوں کو ابتدائی ضرورت کے طور پر لیں گے۔ ایف ایم زیڈ کوانٹ کی K لائن کی معلومات ایک صف کی شکل میں محفوظ کی جاتی ہیں ، جس میں سب سے زیادہ قیمت ، سب سے کم قیمت ، افتتاحی قیمت ، اختتامی قیمت ، تجارتی مقدار اور دیگر معلومات شامل ہیں۔ اس حصے کے مندرجات کے ل please ، براہ کرم ایف ایم زیڈ کوانٹ پلیٹ فارم کے سرکاری API دستاویز کا حوالہ دیں:https://www.fmz.com/api

[4] میں:

# Next we define a variable to store the K-line array.

records = exchange.GetRecords() # Get the K-line array

میں [5]:

# According to the strategy logic description, we use the closing price as the price to open a position, so we need to calculate the closing price of the latest K-line.

close = records[len(records) - 1].Close # Get the latest K-line closing price
close

باہر[5]: 3846.0

اس کے بعد، ہمیں معیاری طور پر بندش کی قیمت کا استعمال کرتے ہوئے 50 K لائنوں میں سب سے زیادہ قیمت کی زیادہ سے زیادہ قیمت اور سب سے کم قیمت کی کم سے کم قیمت کا حساب لگانے کی ضرورت ہے۔

[6] میں:

upper = TA.Highest(records, 50, 'High') # Get the maximum value of the 50-period maximum price
upper

باہر[6]: 3903.0

میں [7]:

lower = TA.Lowest(records, 50, 'Low') # Get the minimum value of the 50-period minimum price
lower

آؤٹ[7]: 3856.0

اگلا، ہمیں اس چینل کے اوپری اور نچلے پٹریوں کی اوسط قدر کا حساب لگانے کی ضرورت ہے۔

[8] میں:

middle = (upper + lower) / 2 # Calculate the average value of the upper and lower tracks.
middle

باہر[8]: 3879.5

مندرجہ بالا ، ہم نے اس حکمت عملی کے لئے درکار تمام حساب کتاب مکمل کرلیے۔ اگلا ، ہم افتتاحی حالات کا منطقی طور پر فیصلہ کرنا شروع کریں گے اور منطقی فیصلے کے نتائج کے مطابق اصل افتتاحی پوزیشن آپریشن انجام دیں گے۔ یہاں یہ نوٹ کیا جانا چاہئے کہ ہمیں ایف ایم زیڈ کوانٹ پلیٹ فارم کے گھریلو اجناس فیوچر ٹیمپلیٹ کا استعمال کرنے کی ضرورت ہے۔ چونکہ موجودہ تحقیقی ماحول اس ٹیمپلیٹ کی حمایت نہیں کرسکتا ہے ، لہذا ہم اسے عارضی طور پر لکھیں گے ، لیکن آپریشن غلطی کی اطلاع دے گا ، ایف ایم زیڈ کوانٹ پلیٹ فارم کی حکمت عملی لکھنے والے صفحے میں اصل کوڈنگ کے لئے ، اس ٹیمپلیٹ کو بغیر کسی پریشانی کے درآمد کریں ، ٹیمپلیٹ کا پتہ یہ ہے:https://www.fmz.com/strategy/24288. جب آپ FMZ Quant پلیٹ فارم کی حکمت عملی میں ترمیم کے صفحے پر کوڈ کرتے ہیں، تو آپ کو پہلے اس ٹیمپلیٹ کو اپنی حکمت عملی لائبریری میں کاپی کرنے کی ضرورت ہے، اور پھر بیک ٹیسٹنگ کے دوران اسے چیک کریں.

[ ] میں:

obj = ext.NewPositionManager() # When using the FMZ Quant trading class library, errors will be reported at runtime, which can be ignored. Now it is the research environment,
                               # This problem does not occur during the actual coding process, and the following is the same without further comment.

اگلا مرحلہ حکمت عملی کے منطق کا تعین کرنا اور منطق کے مطابق پوزیشن کھولنے اور بند کرنا ہے۔

[ ] میں:

if positions > 0 and close < middle: # If you hold a long position order and the closing price falls below the middle track
            obj.CoverAll() # Close all positions
        if positions < 0 and close > middle: # If you hold a short position order and the closing price rises above the middle track
            obj.CoverAll() # Close all positions
        if positions == 0: # If it's a short position
            if close > upper: # If the closing price rises above the upper track
                obj.OpenLong("rb888", 1) # Buy opening positions
            elif close < lower: # If the closing price falls below the lower track
                obj.OpenShort("rb888", 1) # Sell opening positions

[ ] میں:

# Complete strategy code:
def mp():
    positions = exchange.GetPosition() # Get the position array
    if len(positions) == 0: # If the length of the position array is 0
        return 0 # It proved a short position, return 0
    for i in range(len(positions)): # Iterate through the positions array
        if (positions[i]['Type'] == PD_LONG) or (positions[i]['Type'] == PD_LONG_YD):
            return 1 # If there are long position orders, return 1
        elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] == PD_SHORT_YD):
            return -1 # If there are short position orders, return -1

def main(): # Main function
    exchange.SetContractType("rb888") # Set the variety code, the main contract is the contract code followed by the number 888
    while True: # Enter the loop
        records = exchange.GetRecords() # Get the K-line array
        if len(records) < 50: continue # If there are less than 50 K-lines, skip the loop
        close = records[len(records) - 1].Close # Get the latest K-line closing price
        positions = mp() # Get position information function
        upper = TA.Highest(records, 50, 'High') # Get the maximum value of the 50-period maximum price
        lower = TA.Lowest(records, 50, 'Low') # Get the minimum value of the 50-period minimum price
        middle = (upper + lower) / 2 # Calculate the average value of the upper and lower tracks
        obj = ext.NewPositionManager() # Use the Trading Library
        if positions > 0 and close < middle: # If you hold a long position order and the closing price falls below the middle track
            obj.CoverAll() # Close all positions
        if positions < 0 and close > middle: # If you hold a short position order and the closing price rises above the middle track
            obj.CoverAll() # Close all positions
        if positions == 0: # If it's a short position
            if close > upper: # If the closing price rises above the upper track
                obj.OpenLong("rb888", 1) # Buy opening positions
            elif close < lower: # If the closing price falls below the lower track
                obj.OpenShort("rb888", 1) # Sell opening positions

متعلقہ

مزید