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

مصنف:چھوٹا سا خواب, تخلیق: 2022-09-29 14:36:32, تازہ کاری: 2023-09-15 20:53:45

img

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

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

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

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

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

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

/*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("跟踪止损止盈委托", 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", "跟踪止损止盈偏移")
varip limit = input(-1, "limit", "初始开仓价格,-1为不开仓,0为立即开仓,其它具体数值为限价价格")
varip amount = input(1, "amount", "开仓量")
varip loss = input(30, "loss", "止损")
varip targetOffset = input(30, "targetOffset", "触发跟踪止盈止损偏移量")
varip minTick = input(1, "minTick", "价格一跳")
tradeType = input.string("long", "direction", tooltip="下单方向,long做多,short做空", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("检查syminfo.mintick是否正确!syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("系统syminfo.mintick < minTick参数", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("没有设置开仓价格,当前limit为-1(防止误开仓,初始默认limit为-1),禁止开仓", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("所有委托流程执行完毕,仓位为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("每点价格为:", syminfo.mintick, ",当前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 触发线")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "当前最高价/最低价")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "移动止损触发线")

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

img

نوٹ کریں کہ اس پیرامیٹر میں اسٹاپ نقصان کو ایک نقطہ ((قیمت میں ایک چھلانگ) کے طور پر بیان کیا گیا ہے ، اور آفسیٹ ٹریکنگ اسٹاپ ٹریکنگ کی طرف بھی ایک نقطہ ((قیمت میں ایک چھلانگ) کے طور پر بیان کیا گیا ہے۔ ٹارگٹ آفسیٹ ٹریکنگ اسٹاپ ٹریکنگ ٹرگر لائن کی طرف اشارہ قیمت کے فاصلے کے طور پر بیان کیا گیا ہے ((مثال کے طور پر ، سیٹ کریں 30 ، یعنی 30 یوآن کا فاصلہ) ؛ جب قیمت میں ایک چھلانگ 1 ہے تو 30 چھلانگ 30 یوآن کا فاصلہ ہے۔

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

اس کے علاوہ، ہم نے اس کے بارے میں مزید معلومات فراہم کی ہیں:

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

img

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

img

2، حد کے پیرامیٹرز کی وضاحت، لاگ ان کی قیمت کی وضاحت کریں

دیگر پیرامیٹرز کی ترتیبات تبدیل نہیں ہوتی ہیں، صرف حد کی پیرامیٹرز کی قیمت کا تعین کرتے ہیں: 1276

img

3، ڈیفالٹ کی حد کی طرف سے پیرامیٹر 1 ہے، کچھ بھی کام نہیں کرتا، غلط پوزیشنوں کو روکنے کے لئے

img

اختتام

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

img

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

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

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


متعلقہ

مزید