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

लेखक:छोटे सपने, बनाया गयाः 2022-09-29 14:36:32, अद्यतन किया गयाः 2023-09-15 20:53:45

img

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

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

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

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

1. ऑफसेटः जब ट्रैकिंग स्टॉपलाइन को ट्रिगर किया जाता है, तो स्टॉपलाइन के विचलन की दूरी को निर्धारित करने के लिए उच्चतम मूल्य, निम्नतम मूल्य को विचलित किया जाता है। 2, सीमाः पैरामीटर का उपयोग करने के लिए नियंत्रण है A. प्रारंभिक निचले हिस्से को सीधे खरीदें; B. खरीद के लिए प्रतीक्षा मूल्य निर्दिष्ट करें; C. कुछ भी न करें। 3,amount: नीचे की स्थिति में खोलने के लिए एकमुश्त मात्रा। 4,loss: स्टॉप लॉस बिंदुओं की संख्या । 5. targetOffset: ट्रेकिंग स्टॉप को ट्रिगर करते समय स्टॉप की कीमत में बदलाव का कारण बनता है। 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("跟踪止损止盈委托", 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 युआन की दूरी) । जब कीमत एक छलांग है तो यह 130 है। यह 30 युआन की दूरी है।

यह विनियमन नीति न केवल प्रारंभिक आधारभूत स्थिति को अधिक करने के लिए डिज़ाइन की गई है, बल्कि प्रारंभिक आधारभूत स्थिति को खाली करने के लिए भी है।

नीचे हम डिजाइन कार्यान्वयन की सुविधाओं का प्रदर्शन करते हैंः

1. इस रणनीति को चलाने के लिए, तुरंत नीचे की ओर रुख करें और फिर पैरामीटर के अनुसार स्टॉप लॉस, ट्रैक स्टॉप लॉस सेट करें।

img

direction को long पर सेट किया गया है, limit पैरामीटर को 0 पर सेट किया गया है, यानी रणनीति चलाने पर तुरंत अधिक प्रवेश करें, amount को 1 पर सेट किया गया है, रणनीति को 1 अनुबंध खोलना है।

img

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

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

img

3, डिफ़ॉल्ट लिमिट पैरामीटर -1 है, कुछ भी काम नहीं करता है, गलत ट्रेडों को रोकने के लिए

img

अंत

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

img

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

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

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


संबंधित

अधिक