हालांकि अधिक से अधिक व्यापारी हैं जो पूरी तरह से स्वचालित ट्रेडिंग के लिए प्रोग्राम लिखते हैं, व्यापारियों का बड़ा समूह अभी भी मैनुअल ट्रेडर है। वास्तव में, मैनुअल व्यक्तिपरक व्यापारी अपने व्यक्तिपरक ट्रेडिंग में उनकी सहायता के लिए छोटे उपकरण भी लिख सकते हैं। उदाहरण के लिए, कभी-कभी आपको एक अच्छी प्रवेश स्थिति मिलती है और प्रारंभिक स्थिति पर एक निश्चित स्टॉप लॉस और ट्रेलिंग लाभ सेट करने की योजना होती है। फिर बाद की बाजार निगरानी जैसी अधिक ऊर्जा-गहन चीजों से परहेज करें, अपनी स्थापित स्टॉप-लॉस और टेक-प्रॉफिट योजना का ठीक से पालन करें, और कार्यक्रम को आपके लिए बाजार की निगरानी करने दें। हारने के लिए स्टॉप लॉस, मैन्युअल ट्रेडिंग की सहायता के लिए जीतने के लिए ट्रेलिंग लाभ।
पाइन भाषा का उपयोग करके ऐसी आवश्यकताओं को डिजाइन करने की रणनीति बहुत सरल है। आवश्यकताओं के अनुसार कार्य को प्राप्त करने के लिए निम्नलिखित मापदंडों को डिजाइन करने की आवश्यकता हैः
/*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")
रणनीति का डिजाइन जटिल नहीं है, लेकिन इसे
ध्यान दें कि स्टॉप लॉस को बिंदुओं में व्यक्त किया जाता है (minTick) और ऑफसेट को भी बिंदुओं में व्यक्त किया जाता है (minTick) । टारगेटऑफसेट ट्रेलिंग स्टॉप प्रॉफिट ट्रिगर लाइन का ऑफसेट मूल्य दूरी के संदर्भ में व्यक्त किया जाता है (उदाहरण के लिए, 30 पर सेट किया गया है, जो दूरी के लिए RMB30 है) । जब minTick 1, 30 का अर्थ है दूरी के लिए RMB30।
इस कमीशन रणनीति को न केवल प्रारंभिक आधार पदों को लंबा करने की अनुमति देने के लिए डिज़ाइन किया गया है, बल्कि प्रारंभिक आधार पदों को भी छोटा करने की अनुमति देता है। फिर स्टॉप लॉस और ट्रेलिंग लाभ को शॉर्ट दिशा में संभाला जाता है।
आइए डिजाइन कार्यान्वयन का प्रदर्शन निम्नानुसार करें:
1. जब रणनीति चल रही है, तो बेस पोजीशन को तुरंत खोला और दर्ज किया जाएगा, और फिर स्टॉप लॉस और ट्रैकिंग स्टॉप प्रॉफिट को पैरामीटर के अनुसार सेट किया जाएगा।
direction को long पर सेट किया जाता है, limit parameter को 0 पर सेट किया जाता है, यानी, strategy को enter और go long immediately when it
2. सीमा पैरामीटर निर्दिष्ट करें, प्रवेश मूल्य निर्दिष्ट करें
अन्य पैरामीटर सेटिंग्स अपरिवर्तित रहती हैं, सिवाय इसके कि निर्दिष्ट सीमा पैरामीटर मूल्य हैः 1276
3. डिफ़ॉल्ट सीमा पैरामीटर -1 है, जो कुछ भी संचालित नहीं करता है और आकस्मिक पदों के उद्घाटन को रोकता है
पाइन भाषा रणनीति का उपयोग करते समय, minTick डेटा पर विशेष ध्यान देना महत्वपूर्ण है। सिस्टम में मूल्य minTick की सटीक संख्या पैरामीटर में
पैरामीटर
ठीक है, उपरोक्त इस अर्ध-स्वचालित कमीशन रणनीति का पूरा डिजाइन है, हालांकि मैं इसे वास्तविक बॉट ट्रेडिंग के लिए भी उपयोग करता हूं। लेकिन इस तरह के उपकरणों का उपयोग आपकी अपनी ट्रेडिंग आदतों के अनुसार भी किया जाना चाहिए, विशिष्ट संशोधन, अनुकूलन अपने दम पर किया जा सकता है। यहां रणनीति कोड केवल सार्वजनिक साझाकरण, एक्सचेंज लर्निंग डिजाइन और तर्क के लिए है।
जैसा कि हम देख सकते हैं, पाइन भाषा का उपयोग करना बहुत आसान है, और यह सुविधाजनक और सीखना आसान है। हम पाइन भाषा का उपयोग जटिल प्रोग्रामिंग के बारे में चिंता किए बिना, हम चाहते हैं कि उपकरण जल्दी से डिजाइन करने के लिए कर सकते हैं, और एफएमजेड मात्रात्मक ट्रेडिंग प्लेटफॉर्म पर मात्रात्मक व्यापार को आसान बनाने के लिए पाइन भाषा का उपयोग कर सकते हैं।