پچھلے مضمون میں ، ہم نے پائیتھون زبان ، بنیادی نحو ، حکمت عملی کے فریم ورک اور بہت کچھ کے بارے میں سیکھا۔ اگرچہ مواد بورنگ تھا ، لیکن یہ آپ کی تجارتی حکمت عملی کی ترقی میں ایک لازمی مہارت ہے۔ اس مضمون میں ، آئیے آپ کو قابل عمل مقداری تجارتی حکمت عملی کے حصول میں مدد کے ل step قدم بہ قدم ، ایک آسان حکمت عملی کے ساتھ پائیتھون کے راستے کو جاری رکھیں۔
بہت سی تجارتی حکمت عملیوں میں ، ڈونچیان چینل کی حکمت عملی سب سے کلاسیکی پیش رفت کی حکمت عملیوں میں سے ایک ہونی چاہئے۔ یہ 1970 سے مشہور ہے۔ اس وقت ، ایک ایسی کمپنی تھی جو مرکزی دھارے میں شامل پروگراماتی تجارتی حکمت عملیوں کی نقلی جانچ اور تحقیق میں مہارت رکھتی تھی۔ تمام حکمت عملی ٹیسٹوں میں ، ڈونچیان چینل کی حکمت عملی سب سے زیادہ کامیاب تھی۔
بعد میں ، ریاستہائے متحدہ میں ، مشہور
توڑنے والی تجارتی حکمت عملی تجارتی اقسام کے نسبتا smooth ہموار رجحان کے مطابق ہے۔ توڑنے کا سب سے عام طریقہ یہ ہے کہ مخصوص تجارتی پوزیشن کا تعین کرنے کے لئے قیمت کی حمایت اور مزاحمت کے مابین نسبتا positional پوزیشن تعلقات کا استعمال کریں۔ اس حصے میں ڈونچیئن چینل کی حکمت عملی بھی اس اصول پر مبنی ہے۔
ڈونچیئن چینل ایک رجحان پر مبنی اشارے ہے ، اور اس کی ظاہری شکل اور سگنل بولنگر بینڈ اشارے سے کچھ حد تک ملتے جلتے ہیں۔ تاہم ، اس کی قیمت کا چینل ایک خاص مدت میں سب سے زیادہ اور کم قیمتوں کے مطابق بنایا گیا ہے۔ مثال کے طور پر: اوپری ریل کا حساب تازہ ترین 50 کلو لائن کی سب سے زیادہ قیمت سے کیا جاتا ہے؛ نچلی ریل کا حساب تازہ ترین 50 کلو لائن کی سب سے کم قیمت سے کیا جاتا ہے۔
جیسا کہ اوپر دکھایا گیا ہے: اس اشارے کے ساتھ منحنی خطوط تین مختلف رنگوں پر مشتمل ہے ، ڈیفالٹ کی ترتیب قیمت کی اتار چڑھاؤ ظاہر کرنے کے لئے 20 سائیکل میں سب سے زیادہ اور سب سے کم قیمت ہے۔ جب قیمت ایک تنگ چینل میں ہوتی ہے تو یہ کم اتار چڑھاؤ دکھائے گی ، اور اس کے برعکس۔
اگر قیمتیں اوپری ریل سے اوپر بڑھتی ہیں تو ، خرید کا اشارہ ظاہر ہوگا؛ اس کے برعکس ، اگر قیمت نچلی ریل سے نیچے آجاتی ہے تو ، فروخت کا اشارہ ظاہر ہوگا۔ چونکہ اوپری اور نچلی ریلیں جو سب سے کم اور سب سے زیادہ قیمت کا استعمال کرتے ہوئے حساب کی جاتی ہیں ، لہذا عام حالات میں ، قیمت ریلوں کو توڑ نہیں پائے گی ، یہ ریلوں کے ساتھ ساتھ حرکت کرے گی یا چینل کے اندر چھلانگ لگائے گی۔
FMZ کوانٹ پلیٹ فارم پر، Donchian چینل حساب آسان ہے، آپ صرف دیئے گئے سائیکل میں سب سے زیادہ یا سب سے کم قیمت تک رسائی حاصل کر سکتے ہیں، ذیل میں دکھایا گیا ہے کے طور پر: 5th لائن 50 سائیکلوں کی سب سے زیادہ قیمت حاصل کرنے کے لئے ہے، 6th لائن 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
ڈونچیئن چینل کو استعمال کرنے کے بہت سے طریقے ہیں ، جو اکیلے یا دوسرے اشارے کے ساتھ مل کر استعمال کیے جاسکتے ہیں۔ اس حصے میں ہم اسے آسان ترین طریقے سے استعمال کریں گے۔ یعنی: جب قیمتیں اوپری ریل کو توڑتی ہیں ، جس کا مطلب ہے کہ یہ دباؤ کی لائن سے اوپر ٹوٹ جاتی ہے ، خریداری کی طاقت مضبوط ہوتی ہے ، اس نے بڑھتی ہوئی توانائی کی لہر تشکیل دی ہے ، خریدنے کا اشارہ پیدا ہوتا ہے۔ جب قیمت نیچے ریل سے نیچے ٹوٹ جاتی ہے ، جس کا مطلب ہے کہ یہ سپورٹ لائن سے نیچے ٹوٹ جاتی ہے ، تو فروخت کا اشارہ پیدا ہوتا ہے۔
اگر طویل پوزیشن کھولنے کے بعد قیمت دوبارہ چینل کے وسط ریل میں گر جاتی ہے تو ، ہم سمجھتے ہیں کہ خریدار کی طاقت کمزور ہو رہی ہے ، یا فروخت کرنے کی طاقت مضبوط ہو رہی ہے ، اور مختصر پوزیشن کھولنے کا اشارہ پیدا ہوتا ہے۔
کھلی لمبی پوزیشن: اگر کوئی پوزیشن ہولڈنگ نہیں ہے، اور بند ہونے کی قیمت اوپری ریل سے زیادہ ہے
کھلی مختصر پوزیشن: اگر کوئی پوزیشن ہولڈنگ نہیں ہے، اور بند ہونے کی قیمت کم ریل سے کم ہے
بندش طویل پوزیشن: اگر فی الحال طویل پوزیشن رکھتے ہیں اور بندش کی قیمت وسط ریل سے کم ہے
اختتامی مختصر پوزیشن: اگر فی الحال مختصر پوزیشن رکھی جاتی ہے اور اختتامی قیمت وسط ریل سے زیادہ ہے
حکمت عملی کو نافذ کرنے کا پہلا قدم پہلے ڈیٹا حاصل کرنا ہے ، کیونکہ ڈیٹا تجارتی حکمت عملی کا لازمی حصہ ہے۔ اس کے بارے میں سوچیں ، ہمیں کس ڈیٹا کی ضرورت ہے؟ اور ان ڈیٹا کو کیسے حاصل کیا جائے؟
اگلا ان اعداد و شمار کی بنیاد پر ٹریڈنگ منطق کا حساب لگانا ہے۔ آخری مرحلہ منطق کے مطابق تجارت کرنا ہے۔ مندرجہ ذیل اقدامات:
آپ ٹریڈنگ کلاس لائبریری کو ایک فنکشنل ماڈیول کے طور پر سوچ سکتے ہیں۔ ٹریڈنگ کلاس لائبریری کا استعمال کرنے کا فائدہ یہ ہے کہ یہ آپ کو حکمت عملی کی منطق لکھنے پر توجہ مرکوز کرنے کی اجازت دیتا ہے۔ مثال کے طور پر ، جب ہم ٹریڈنگ کلاس لائبریری کا استعمال کرتے ہیں ، تو کسی پوزیشن کو کھولنے یا بند کرنے کے ل we ، ہم براہ راست ٹریڈنگ کلاس لائبریری میں API انٹرفیس کا استعمال کرسکتے ہیں۔ لیکن اگر ہم ٹریڈنگ کلاس لائبریری کا استعمال نہیں کرتے ہیں تو ، ہمیں پوزیشن کھولنے پر مارکیٹ کی قیمت حاصل کرنے کی ضرورت ہے۔ غیر انجام شدہ آرڈرز کے مسئلے اور انخلا کے احکامات کے مسئلے پر غور کرنے کی ضرورت ہے ، اور اسی طرح۔
def main();
wile true:
obj = ext.NewPositionManager() # using the trading class library
# followed by strategy logic and placing order part
مندرجہ بالا کوڈنگ کا حصہ ایف ایم زیڈ کوانٹ ٹول کا استعمال کرتے ہوئے سی ٹی اے حکمت عملی کا فریم ورک ہے۔ یہ ایک فکسڈ کوڈنگ فارمیٹ ہے ، اور تمام تجارتی منطق کا کوڈ لائن 4 سے شروع ہوگا۔ دوسری جگہوں پر کسی اور تبدیلی کی ضرورت نہیں ہے۔
اس کے بارے میں سوچو، ہمیں کس قسم کے اعداد و شمار کی ضرورت ہے؟ ہماری حکمت عملی ٹریڈنگ منطق سے، ہمیں پہلے موجودہ پوزیشن کی حیثیت حاصل کرنے کی ضرورت ہے، اور پھر بندش کی قیمت کا موازنہ بولنگر بینڈ اشارے کے اوپری، درمیانی اور نچلے ریلوں کے ساتھ کریں.
پہلا یہ ہے کہ K لائن ڈیٹا صف اور موجودہ K لائن بند ہونے کی قیمت حاصل کریں، K لائن صف کے ساتھ، ہم API انٹرفیس کے ذریعے سب سے زیادہ اور سب سے کم قیمت کی N سائیکل مدت کا حساب لگاسکتے ہیں۔ یہ اس طرح لکھا جا سکتا ہے:
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
جیسا کہ اوپر دکھایا گیا ہے:
لائن 4: K لائن صف حاصل کریں، جو ایک مقررہ شکل ہے.
لائن 5: K لائن کی لمبائی کو فلٹر کریں ، کیونکہ ڈونچیئن چینل اشارے کا حساب لگانے کا پیرامیٹر 50 ہے ، جب K لائن کی تعداد 50 سے کم ہے تو اس کا حساب لگانا ناممکن ہے۔ لہذا یہاں ہمیں K لائن کی تعداد کو فلٹر کرنے کی ضرورت ہے۔ اگر K لائن کی تعداد 50 سے کم ہے تو ، یہ موجودہ لوپ کو چھوڑ دے گا اور اگلی K لائن کا انتظار کرتا رہے گا۔
لائن 6: ہم کوڈ " ریکارڈز [ لین (ریکارڈز) - 1] " کا استعمال کرتے ہیں تاکہ 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 ہے۔
لائن 2:
لائن 3: پوزیشن صف حاصل کریں، جو ایک مقررہ شکل ہے.
لائن 4: پوزیشن صف کی لمبائی کا تعین کریں. اگر اس کی لمبائی 0 کے برابر ہے تو اس کا مطلب یہ ہے کہ اس کی کوئی پوزیشن ہولڈنگ نہیں ہے، 0 لوٹاتا ہے.
لائن 6: کے لئے لوپ کا استعمال کرتے ہوئے، اس صف کو پار کرنے کے لئے شروع، مندرجہ ذیل منطق بہت آسان ہے، اگر یہ طویل پوزیشن رکھتا ہے، 1 واپس آتا ہے؛ اگر یہ مختصر پوزیشن رکھتا ہے، -1 واپس آتا ہے.
لائن 18: پوزیشن انفارمیشن فنکشن
ایف ایم زیڈ کوانٹ مقداری تجارتی ٹول میں ، آپ اپنے منطقی حساب کتاب لکھنے کی ضرورت کے بغیر براہ راست " ٹی اے.ہائیسٹ " اور " ٹی اے.لوسٹ " افعال استعمال کرسکتے ہیں۔ اور
# 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
جیسا کہ اوپر دکھایا گیا ہے:
لائن 19: 50 سائیکلوں کی سب سے زیادہ قیمت حاصل کرنے کے لئے
لائن 20: 50 سائیکلوں کی کم قیمت حاصل کرنے کے لئے
لائن 21: 50 سائیکلوں کی سب سے زیادہ اور سب سے کم قیمت کے مطابق اوپری اور نچلے ریل کی اوسط قیمت کا حساب لگائیں
مندرجہ بالا اعداد و شمار کے ساتھ ، ہم اب تجارتی منطق اور آرڈر دینے کا حصہ لکھ سکتے ہیں۔ یہ بھی بہت آسان ہے ، سب سے زیادہ عام طور پر استعمال ہونے والا
# 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
جیسا کہ اوپر دکھایا گیا ہے:
لائن 22: ٹریڈنگ کلاس لائبریری کا استعمال کرتے ہوئے، یہ ایک مقررہ شکل ہے
لائنیں 23، 24: یہ ایک بند ہونے والی طویل پوزیشن بیان ہے جو ہم نے پہلے سیکھا ہے کہ
لائنیں 25، 26: یہ ایک بند ہونے والی مختصر پوزیشن کا بیان ہے جو ہم نے پہلے سیکھا ہے کہ
لائن 27: موجودہ پوزیشن کی حیثیت کا تعین کریں۔ اگر پوزیشن ہولڈنگ نہیں ہے تو ، اگلے مرحلے پر جائیں۔
لکیریں 28، 29: اس بات کا تعین کریں کہ کیا بندش کی قیمت اوپری ریل سے زیادہ ہے۔ اگر بندش کی قیمت اوپری ریل سے اوپر بڑھتی ہے تو ، طویل پوزیشن کھولیں۔
لائنیں 30، 31: اس بات کا تعین کریں کہ کیا بندش کی قیمت نیچے کی ریل سے کم ہے۔ اگر بندش کی قیمت نیچے کی ریل سے کم ہو جائے تو مختصر پوزیشن کھولیں۔
مندرجہ بالا ہم نے پائیتھون کا استعمال کرتے ہوئے ایک مکمل مقداری تجارتی حکمت عملی تیار کرنے کے ہر مرحلے کو سیکھا ہے ، بشمول: حکمت عملی کا تعارف ، ڈونچیئن چینل حساب کتاب کا طریقہ ، حکمت عملی منطق ، تجارتی حالات ، حکمت عملی کوڈ کے نفاذ ، وغیرہ۔ یہ سیکشن صرف ایک سادہ حکمت عملی ہے۔ حوصلہ افزائی کا ایک طریقہ کے طور پر ، اس کو پورا کرنے کے لئے ایک سے زیادہ طریقے ہیں۔ آپ اپنی تجارتی حکمت عملی بنانے کے لئے اپنے تجارتی نظام کے مطابق مختلف تجارتی طریقوں کو اوورلیپ کرسکتے ہیں۔
مقداری تجارتی حکمت عملیوں کی ترقی میں ، پروگرامنگ زبان کے عملدرآمد کی رفتار کے نقطہ نظر سے ، کون سا تیز ترین ہے؟ یہ C ++ ہونا ضروری ہے۔ خاص طور پر مالی مشتق اور اعلی تعدد تجارت کے میدان میں۔ C ++ زبان کی خصوصیت میں منفرد ہے اور اس میں عددی حساب کتاب میں فوائد ہیں۔ جاوا اسکرپٹ اور پائتھون کے مقابلے میں ، اس کی رفتار کو کئی احکامات کی حد تک بڑھایا جاسکتا ہے۔ اگر آپ مستقبل میں مالی مشتق یا اعلی تعدد تجارت کے میدان میں جانا چاہتے ہیں۔ یہ وہ کورس ہوگا جسے آپ کو یاد نہیں کرنا چاہئے۔
بنیادی سے شروع کریں اور اس سیکشن کی حکمت عملی کو نافذ کریں۔
اس سیکشن میں تجارتی تعدد کو کم کرنے کے لئے حکمت عملی میں ایک چلتی اوسط اشارے کو شامل کرنے کی کوشش کریں.