اگرچہ پروگرام لکھنے والے زیادہ سے زیادہ تاجروں کو مکمل طور پر خود کار طریقے سے تجارت کرتے ہیں، لیکن بڑے گروپ دستی تاجروں کو بھی ہیں. دراصل، دستی موضوعی تاجروں کو بھی اپنے موضوعی ٹریڈنگ میں مدد کرنے کے لئے کچھ ٹولز لکھ سکتے ہیں. مثال کے طور پر، کبھی کبھی ایک اچھا اندراج کی پوزیشن ملتی ہے، ابتدائی پوزیشنوں کے لئے فکسڈ سٹاپ نقصان، ٹریک سٹاپ کی منصوبہ بندی کی جاتی ہے. اور پھر اس طرح کے بعد کے ڈسک کی طرح نسبتا توانائی کی کھپت سے بچنے کے لئے، مکمل طور پر اپنے پہلے سے طے شدہ سٹاپ نقصان کی منصوبہ بندی کے مطابق، پروگرام کو اپنے ڈسک کی مدد کرنے کے لئے.
پائین زبان کا استعمال کرتے ہوئے اس طرح کی ضروریات کو ڈیزائن کرنے کی حکمت عملی بہت آسان ہے ، جس میں ضروریات کے مطابق افعال کو نافذ کرنے کے لئے مندرجہ ذیل پیرامیٹرز کو ڈیزائن کرنے کی ضرورت ہے۔
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, "移动止损触发线")
اس کی حکمت عملی کا ڈیزائن بھی پیچیدہ نہیں ہے اور عام طور پر اسے استعمال کرتے وقت اسے "ریئل ٹائم پرائس ماڈل" کے طور پر ترتیب دینا پڑتا ہے ، کیونکہ ہر وقت قیمتوں کا پتہ لگانا پڑتا ہے۔
نوٹ کریں کہ اس پیرامیٹر میں اسٹاپ نقصان کو ایک نقطہ ((قیمت میں ایک چھلانگ) کے طور پر بیان کیا گیا ہے ، اور آفسیٹ ٹریکنگ اسٹاپ ٹریکنگ کی طرف بھی ایک نقطہ ((قیمت میں ایک چھلانگ) کے طور پر بیان کیا گیا ہے۔ ٹارگٹ آفسیٹ ٹریکنگ اسٹاپ ٹریکنگ ٹرگر لائن کی طرف اشارہ قیمت کے فاصلے کے طور پر بیان کیا گیا ہے ((مثال کے طور پر ، سیٹ کریں 30 ، یعنی 30 یوآن کا فاصلہ) ؛ جب قیمت میں ایک چھلانگ 1 ہے تو 30 چھلانگ 30 یوآن کا فاصلہ ہے۔
یہ تفویض کی حکمت عملی نہ صرف ابتدائی بیس پوزیشن کو زیادہ کرنے کے لئے ڈیزائن کیا گیا ہے بلکہ ابتدائی بیس پوزیشن کو خالی کرنے کے لئے بھی ہے۔ اس کے بعد نقصانات کو روکنے اور ٹریکنگ کو روکنے کے لئے بیس پوزیشن کی سمت کے مطابق عملدرآمد کیا جاتا ہے۔
اس کے علاوہ، ہم نے اس کے بارے میں مزید معلومات فراہم کی ہیں:
1، اس حکمت عملی کو چلانے کے لئے فوری طور پر نیچے کی پوزیشن کھولیں اور اس کے بعد پیرامیٹرز کے مطابق سٹاپ نقصان، ٹریکنگ سٹاپ ٹو۔
ڈائریکشن سیٹ پر طویل، حد پیرامیٹر سیٹ پر 0، یہ ہے کہ حکمت عملی چلانے پر فوری طور پر داخل کرنے کے لئے زیادہ، رقم سیٹ پر 1، حکمت عملی کھولنے کے لئے 1 معاہدے.
2، حد کے پیرامیٹرز کی وضاحت، لاگ ان کی قیمت کی وضاحت کریں
دیگر پیرامیٹرز کی ترتیبات تبدیل نہیں ہوتی ہیں، صرف حد کی پیرامیٹرز کی قیمت کا تعین کرتے ہیں: 1276
3، ڈیفالٹ کی حد کی طرف سے پیرامیٹر 1 ہے، کچھ بھی کام نہیں کرتا، غلط پوزیشنوں کو روکنے کے لئے
پائن زبان کی حکمت عملی کا استعمال کرتے ہوئے ، اس اعداد و شمار پر خصوصی توجہ دینا چاہئے۔ نظام کی قیمتوں میں ایک بار کتنی حد تک پیرامیٹرز میں "قیمت کی کرنسی کی درستگی" سے متعلق ہے۔
"قیمت سازی کی درستگی" کا پیرامیٹر 0 پر مقرر کیا گیا ہے، یعنی قیمت کے اعداد و شمار کی عددی درستگی ایک عدد تک ہے (یعنی عدد صفر ہے) ؛ اس کے بعد قیمت میں سب سے کم تبدیلی کا یونٹ 1 ہے۔ چونکہ کچھ پیرامیٹرز اس بات سے متعلق ہیں کہ قیمت میں ایک چھلانگ کتنی خاص ہے، لہذا اس جگہ پر خصوصی توجہ کی ضرورت ہے۔
ٹھیک ہے ، مندرجہ بالا اس نیم خودکار تفویض کی پالیسی کے ڈیزائن کے بارے میں ہے ، اگرچہ میں نے اسے عملی طور پر بھی استعمال کیا ہے۔ لیکن اس طرح کے ٹولز کو اپنے تجارتی عادات کے مطابق استعمال کرنا ضروری ہے ، اور اسے خود ہی تبدیل یا بہتر بنایا جاسکتا ہے۔ یہاں اس حکمت عملی کا کوڈ صرف عوامی اشتراک ، تبادلہ سیکھنے کے ڈیزائن ، منطق کے مطابق ہے۔
جیسا کہ آپ دیکھ سکتے ہیں، پائن زبان بہت اچھا ہے، آسان اور سیکھنے میں آسان ہے۔ ہم پائن زبان کو استعمال کرتے ہوئے اپنے مطلوبہ ٹولز کو تیزی سے ڈیزائن کرسکتے ہیں، پیچیدہ پروگرامنگ کے ڈیزائن کے بغیر، اور ایف ایم زیڈ میں پائن زبان کا استعمال کرتے ہوئے مقدار سازی کے معاملات کو آسان اور آسان بنا دیتا ہے۔