पाइन भाषा का उपयोग करके एक अर्ध-स्वचालित व्यापार उपकरण लिखें

लेखक:लिडिया, बनाया गयाः 2022-11-08 09:56:48, अद्यतन किया गयाः 2023-09-15 20:52:26

img

हालांकि अधिक से अधिक व्यापारी हैं जो पूरी तरह से स्वचालित ट्रेडिंग के लिए प्रोग्राम लिखते हैं, व्यापारियों का बड़ा समूह अभी भी मैनुअल ट्रेडर है। वास्तव में, मैनुअल व्यक्तिपरक व्यापारी अपने व्यक्तिपरक ट्रेडिंग में उनकी सहायता के लिए छोटे उपकरण भी लिख सकते हैं। उदाहरण के लिए, कभी-कभी आपको एक अच्छी प्रवेश स्थिति मिलती है और प्रारंभिक स्थिति पर एक निश्चित स्टॉप लॉस और ट्रेलिंग लाभ सेट करने की योजना होती है। फिर बाद की बाजार निगरानी जैसी अधिक ऊर्जा-गहन चीजों से परहेज करें, अपनी स्थापित स्टॉप-लॉस और टेक-प्रॉफिट योजना का ठीक से पालन करें, और कार्यक्रम को आपके लिए बाजार की निगरानी करने दें। हारने के लिए स्टॉप लॉस, मैन्युअल ट्रेडिंग की सहायता के लिए जीतने के लिए ट्रेलिंग लाभ।

पैरामीटर डिजाइन

पाइन भाषा का उपयोग करके ऐसी आवश्यकताओं को डिजाइन करने की रणनीति बहुत सरल है। आवश्यकताओं के अनुसार कार्य को प्राप्त करने के लिए निम्नलिखित मापदंडों को डिजाइन करने की आवश्यकता हैः

  1. ऑफसेटः जब एक ट्रेलिंग स्टॉप प्रॉफिट ट्रिगर किया जाता है, तो स्टॉप प्रॉफिट लाइन को परिभाषित करने के लिए ऑफसेट के लिए ऑफसेट दूरी उच्चतम मूल्य और निम्नतम मूल्य को ऑफसेट करती है।
  2. सीमा: नियंत्रण के लिए प्रयुक्त मापदंड - A. सीधे खरीदने के लिए प्रारंभिक आधार स्थिति, B. खरीदने के लिए प्रतीक्षा करने के लिए निर्दिष्ट मूल्य, C. कुछ भी न करें।
  3. राशिः मूल स्थिति के खुलने पर रखे गए आदेशों की राशि।
  4. हानिः हानि को रोकने के बिंदु।
  5. targetOffset: मूल्य अंतर जो शुरुआती मूल्य को कम करता है जब ट्रेलिंग स्टॉप प्रॉफिट ट्रिगर होता है।
  6. मिनटिक: मूल्य उतार-चढ़ाव की न्यूनतम इकाई।
  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 है) । जब minTick 1, 30 का अर्थ है दूरी के लिए RMB30।

इस कमीशन रणनीति को न केवल प्रारंभिक आधार पदों को लंबा करने की अनुमति देने के लिए डिज़ाइन किया गया है, बल्कि प्रारंभिक आधार पदों को भी छोटा करने की अनुमति देता है। फिर स्टॉप लॉस और ट्रेलिंग लाभ को शॉर्ट दिशा में संभाला जाता है।

आइए डिजाइन कार्यान्वयन का प्रदर्शन निम्नानुसार करें:

1. जब रणनीति चल रही है, तो बेस पोजीशन को तुरंत खोला और दर्ज किया जाएगा, और फिर स्टॉप लॉस और ट्रैकिंग स्टॉप प्रॉफिट को पैरामीटर के अनुसार सेट किया जाएगा।

img

direction को long पर सेट किया जाता है, limit parameter को 0 पर सेट किया जाता है, यानी, strategy को enter और go long immediately when itis running पर सेट किया जाता है, amount को 1 पर सेट किया जाता है, यानी strategy को 1 contract की position open करना होता है.

img

2. सीमा पैरामीटर निर्दिष्ट करें, प्रवेश मूल्य निर्दिष्ट करें

अन्य पैरामीटर सेटिंग्स अपरिवर्तित रहती हैं, सिवाय इसके कि निर्दिष्ट सीमा पैरामीटर मूल्य हैः 1276

img

3. डिफ़ॉल्ट सीमा पैरामीटर -1 है, जो कुछ भी संचालित नहीं करता है और आकस्मिक पदों के उद्घाटन को रोकता है

img

अंत

पाइन भाषा रणनीति का उपयोग करते समय, minTick डेटा पर विशेष ध्यान देना महत्वपूर्ण है। सिस्टम में मूल्य minTick की सटीक संख्या पैरामीटर में मूल्य निर्धारण मुद्रा सटीकता से संबंधित है।

img

पैरामीटर Pricing Currency Accuracy को 0 पर सेट किया गया है, जिसका अर्थ है कि मूल्य डेटा मूल्य एक अंक (यानी, 0 दशमलव स्थान) तक सटीक है। फिर न्यूनतम मूल्य परिवर्तन इकाई 1 है। चूंकि कुछ पैरामीटर minTicks की सटीक संख्या से संबंधित हैं, इसलिए इसे अतिरिक्त ध्यान देने की आवश्यकता है।

ठीक है, उपरोक्त इस अर्ध-स्वचालित कमीशन रणनीति का पूरा डिजाइन है, हालांकि मैं इसे वास्तविक बॉट ट्रेडिंग के लिए भी उपयोग करता हूं। लेकिन इस तरह के उपकरणों का उपयोग आपकी अपनी ट्रेडिंग आदतों के अनुसार भी किया जाना चाहिए, विशिष्ट संशोधन, अनुकूलन अपने दम पर किया जा सकता है। यहां रणनीति कोड केवल सार्वजनिक साझाकरण, एक्सचेंज लर्निंग डिजाइन और तर्क के लिए है।

जैसा कि हम देख सकते हैं, पाइन भाषा का उपयोग करना बहुत आसान है, और यह सुविधाजनक और सीखना आसान है। हम पाइन भाषा का उपयोग जटिल प्रोग्रामिंग के बारे में चिंता किए बिना, हम चाहते हैं कि उपकरण जल्दी से डिजाइन करने के लिए कर सकते हैं, और एफएमजेड मात्रात्मक ट्रेडिंग प्लेटफॉर्म पर मात्रात्मक व्यापार को आसान बनाने के लिए पाइन भाषा का उपयोग कर सकते हैं।


संबंधित

अधिक