پائن زبان کا استعمال کرتے ہوئے ایک نیم خودکار ٹریڈنگ کا آلہ لکھیں

مصنف:لیدیہ, تخلیق: 2022-11-08 09:56:48, تازہ کاری: 2023-09-15 20:52:26

img

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

پیرامیٹر ڈیزائن

پائین زبان کا استعمال کرتے ہوئے اس طرح کی ضروریات کو ڈیزائن کرنے کی حکمت عملی بہت آسان ہے۔ ضروریات کے مطابق فنکشن کو حاصل کرنے کے لئے درج ذیل پیرامیٹرز کو ڈیزائن کرنے کی ضرورت ہے۔

  1. آفسیٹ: جب ٹریلنگ اسٹاپ منافع کو ٹرگر کیا جاتا ہے تو ، اسٹاپ منافع لائن کو طے کرنے کے لئے سب سے زیادہ قیمت اور سب سے کم قیمت کو آفسیٹ کرنے کے لئے آفسیٹ فاصلہ۔
  2. حد: کنٹرول کرنے کے لئے استعمال ہونے والے پیرامیٹرز - A. براہ راست خریدنے کے لئے ابتدائی بیس پوزیشن، B. خریدنے کے لئے انتظار کرنے کے لئے مخصوص قیمت، C. کچھ بھی نہیں کرتے.
  3. رقم: جب بیس پوزیشن کھولی جاتی ہے تو دیئے گئے آرڈرز کی رقم۔
  4. نقصان: سٹاپ نقصان کے پوائنٹس.
  5. ٹارگٹ آفسیٹ: قیمت کا فرق جو ٹریلنگ اسٹاپ منافع کو متحرک کرنے پر افتتاحی قیمت کو معاوضہ دیتا ہے۔
  6. minTick: قیمتوں میں اتار چڑھاؤ کی کم سے کم اکائی۔
  7. سمت: بیس پوزیشن کھولنے کی سمت.

حکمت عملی کا ڈیزائن

/*backtest
start: 2022-09-24 00:00:00
end: 2022-09-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["v_input_1",20],["v_input_2",0],["v_input_4",50],["v_input_5",20],["RunMode",1,358374],["ZPrecision",0,358374],["XPrecision",3,358374]]
*/

strategy("Tracking loss and profit stopping entrustment", overlay = true)

varip targetPrice = na
varip high_lowPrice = na
varip isTrade = false 
varip isAlert = false
varip isAlertMinTick = false
varip isAlertFinished = false 

varip offset = input(30, "offset", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("All order processes executed, position is 0", "#FF0000")
    isAlertFinished := true 

if not barstate.ishistory and not isTrade and limit != -1
    if limit == 0 
        strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount)
    else if limit > 0 
        strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount, limit=limit)
    
    if tradeType == "long"
        targetPrice := (limit == 0 ? close : limit) + targetOffset
    else 
        targetPrice := (limit == 0 ? close : limit) - targetOffset
    strategy.exit("exit", "open", amount, loss=loss, trail_price=targetPrice, trail_offset=offset)
    runtime.log("The price per point is:", syminfo.mintick, ", current close:", close)
    isTrade := true 

if ((close > targetPrice and strategy.position_size > 0) or (close < targetPrice and strategy.position_size < 0)) and not barstate.ishistory
    high_lowPrice := na(high_lowPrice) ? close : high_lowPrice
    if strategy.position_size > 0 
        high_lowPrice := close > high_lowPrice ? close : high_lowPrice
    else 
        high_lowPrice := close < high_lowPrice ? close : high_lowPrice

plot(targetPrice, "trail_price trigger line")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")

حکمت عملی کا ڈیزائن پیچیدہ نہیں ہے، لیکن اسے ریئل ٹائم قیمت ماڈل کے طور پر قائم کرنے کی ضرورت ہے، کیونکہ قیمت ہر لمحے کی نگرانی کی جانی چاہئے.

img

نوٹ کریں کہ اسٹاپ نقصان کو پوائنٹس (minTick) میں ظاہر کیا جاتا ہے اور آفسیٹ کو بھی پوائنٹس (minTick) میں ظاہر کیا جاتا ہے۔ ہدف آفسیٹ ٹریلنگ اسٹاپ منافع ٹرگر لائن کا آفسیٹ قیمت کے فاصلے کے لحاظ سے ظاہر کیا جاتا ہے (مثال کے طور پر ، 30 پر مقرر کیا جاتا ہے ، جو فاصلے کے لئے RMB30 ہے۔ جب من ٹِک 1 ہے تو ، 30 کا مطلب فاصلے کے لئے RMB30 ہے۔

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

چلو مندرجہ ذیل کے طور پر ڈیزائن کے نفاذ کا مظاہرہ:

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

img

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

img

2. حد پیرامیٹر کی وضاحت کریں، داخلہ کی قیمت کی وضاحت کریں

دیگر پیرامیٹر کی ترتیبات میں کوئی تبدیلی نہیں آئی ہے، سوائے اس کے کہ پیرامیٹر کی مخصوص حد کی قیمت: 1276 ہے۔

img

ڈیفالٹ حد پیرامیٹر ہے - 1، جو کچھ بھی کام نہیں کرتا اور پوزیشنوں کی حادثاتی افتتاحی کو روکتا ہے

img

اختتام

پائن زبان کی حکمت عملی کا استعمال کرتے وقت ، minTick کے اعداد و شمار پر خصوصی توجہ دینا ضروری ہے۔ سسٹم میں قیمت کے منٹ ٹِک کی عین مطابق تعداد پیرامیٹر میں قیمت کی کرنسی کی درستگی سے وابستہ ہے۔

img

پیرامیٹر قیمتوں کا تعین کرنسی کی درستگی کو 0 پر مقرر کیا گیا ہے ، جس کا مطلب ہے کہ قیمت کے اعداد و شمار کی قیمت ایک ہندسہ تک درست ہے (یعنی ، 0 اعشاریہ مقامات) ۔ پھر کم سے کم قیمت کی تبدیلی کی اکائی 1 ہے۔ چونکہ کچھ پیرامیٹرز منٹ ٹکس کی عین مطابق تعداد سے متعلق ہیں ، لہذا اس پر اضافی توجہ کی ضرورت ہے۔

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

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


متعلقہ

مزید