[TOC]
FMZ एक मात्रात्मक ट्रेडिंग प्लेटफॉर्म है, जो मुख्य रूप से प्रोग्रामेटिक व्यापारियों की सेवा के लिए है। लेकिन यह एक बुनियादी ट्रेडिंग टर्मिनल भी प्रदान करता है, हालांकि यह सरल है, लेकिन कभी-कभी यह बहुत उपयोगी भी हो सकता है, जैसे कि एक्सचेंज व्यस्त है और इसे खोला नहीं जा सकता है, जबकि एपीआई अभी भी काम कर सकता है, इस समय टर्मिनल के माध्यम से निकासी, ऑर्डर, लेनदेन खाते आदि को देखने के लिए। ट्रेडिंग टर्मिनल के अनुभव को बेहतर बनाने के लिए, प्लगइन की सुविधा अब जोड़ी गई है। कभी-कभी हमें व्यापार में सहायता करने के लिए एक छोटी सी सुविधा की आवश्यकता होती है, जैसे कि सीढ़ी लटकाने, हिमशैल को सौंपने, एक-बटन हेजिंग, एक-बटन फ्लैशिंग आदि।
प्लगइन दो मोड में चल सकता है, तुरंत चल रहा है और पृष्ठभूमि में चल रहा है. पृष्ठभूमि में चल रहा है रोबोट बनाने के बराबर है ((सामान्य शुल्क) । तुरंत चल रहा है और डिबगिंग उपकरण एक ही है: लेनदेन के टर्मिनल पृष्ठ पर कोड के एक टुकड़े को भेजने के लिए एक होस्ट द्वारा निष्पादित किया जाता है, और वापस चार्ट और तालिकाओं का समर्थन करता है ((डिबगिंग उपकरण अब भी उन्नत समर्थन) । यह भी केवल 5 मिनट में निष्पादित किया जा सकता है, कोई शुल्क नहीं है, कोई भाषा सीमा नहीं है। बहुत कम निष्पादन समय के लिए प्लगइन तुरंत चल रहा है, जटिल, लंबे समय तक चलने वाली रणनीतियों की आवश्यकता होती है या रोबोट को चलाने की आवश्यकता होती है।
नीति लिखने के दौरान, प्लगइन के रूप में नीति प्रकार का चयन करना आवश्यक है।प्लगइन के मुख्य फ़ंक्शन की वापसी का परिणाम टर्मिनल पर पॉप अप होता है, जो स्ट्रिंग, चित्र और तालिकाओं का समर्थन करता है। प्लगइन के निष्पादन के लिए लॉग नहीं देखा जा सकता है, इसलिए प्लगइन के निष्पादन के परिणामों को वापस किया जा सकता है।
अगर आप सीधे खोज बॉक्स में खोज करते हैं, तो आप देख सकते हैं कि यह एक बहुत ही आकर्षक साइट है।ध्यान दें कि केवल लेन-देन प्लगइन प्रकार की नीति चल सकती है, फिर Add पर क्लिक करें. सार्वजनिक प्लगइन्स रणनीति वर्ग में पाए जा सकते हैंःhttps://www.fmz.com/square/21/1
क्लिक नीति पैरामीटर सेटिंग इंटरफ़ेस में प्रवेश करता है, यदि कोई पैरामीटर नहीं है तो सीधे चला जाता है, लेनदेन टर्मिनल द्वारा चयनित प्रदाता, लेनदेन जोड़ी, K लाइन चक्र डिफ़ॉल्ट रूप से संबंधित पैरामीटर हैं। क्लिक निष्पादन नीति निष्पादन शुरू हो जाती है, और टैब चुनने पर टैब मोड को तुरंत निष्पादित किया जाता है ((डिफ़ॉल्ट संचालन याद रखें) । प्लगइन लॉग नहीं दिखाएगा।
चित्र स्थान पर क्लिक करने से प्लगइन बंद हो जाता है, क्योंकि सभी प्लगइन्स एक डिबगिंग टूल प्रक्रिया में निष्पादित होते हैं।
प्लगइन कुछ समय के लिए कोड निष्पादित कर सकते हैं, कुछ सरल संचालन कर सकते हैं, कई बार मैनुअल ऑपरेशन को दोहराने की आवश्यकता होती है। ऑपरेशन प्लगइन के साथ लागू किया जा सकता है, व्यापार करने में आसान है।
फ्यूचर्स क्रॉस पीरियड हेजिंग एक आम रणनीति है, क्योंकि आवृत्ति बहुत अधिक नहीं है, कई लोग मैन्युअल रूप से ऑपरेट करते हैं, एक अनुबंध को अधिक करने की आवश्यकता होती है, एक अनुबंध को खाली करने के लिए, और अंतर के आंदोलन का विश्लेषण करना। ट्रेडिंग टर्मिनल पर प्लगइन का उपयोग करने से आपको ऊर्जा की बचत होगी।
सबसे पहले, हम एक प्लगइन पेश करते हैं जो समय-अवधि के बीच अंतर को दर्शाता हैः
var chart = {
__isStock: true,
title : { text : '差价分析图'},
xAxis: { type: 'datetime'},
yAxis : {
title: {text: '差价'},
opposite: false,
},
series : [
{name : "diff", data : []},
]
}
function main() {
exchange.SetContractType('quarter')
var recordsA = exchange.GetRecords(PERIOD_M5) //周期可以自行定制
exchange.SetContractType('this_week')
var recordsB = exchange.GetRecords(PERIOD_M5)
for(var i=0;i<Math.min(recordsA.length,recordsB.length);i++){
var diff = recordsA[recordsA.length-Math.min(recordsA.length,recordsB.length)+i].Close - recordsB[recordsB.length-Math.min(recordsA.length,recordsB.length)+i].Close
chart.series[0].data.push([recordsA[recordsA.length-Math.min(recordsA.length,recordsB.length)+i].Time, diff])
}
return chart
}
हाल के समय के अंतर के लिए क्लिक करें, प्लगइन स्रोत कोड कॉपी पते पर क्लिक करेंःhttps://www.fmz.com/strategy/187755
अंतर विश्लेषण के साथ, यह पता चला कि अंतर संकुचित हो रहा है, यह एक खाली तिमाही अनुबंध करने का अवसर है, जो एक बटन के साथ किया जा सकता है, एक क्लिक के साथ, स्वचालित रूप से आपको खाली तिमाही कई सप्ताह में मदद करता है, जो कि मैन्युअल ऑपरेशन की तुलना में बहुत तेज है। रणनीति का कार्यान्वयन सिद्धांत स्लाइडिंग मूल्य है। एक ही संख्या में पदों को खोलना, कई बार चल सकता है, धीरे-धीरे अपनी जरूरत की स्थिति तक पहुंच सकता है, बाजार को झटका देने से बच सकता है, डिफ़ॉल्ट पैरामीटर को बदल सकता है, तेजी से गति प्राप्त कर सकता है। रणनीति कॉपी पतेःhttps://www.fmz.com/strategy/191348
function main(){
exchange.SetContractType(Reverse ? Contract_B : Contract_A)
var ticker_A = exchange.GetTicker()
if(!ticker_A){return 'Unable to get quotes'}
exchange.SetDirection('buy')
var id_A = exchange.Buy(ticker_A.Sell+Slip, Amount)
exchange.SetContractType(Reverse ? Contract_B : Contract_A)
var ticker_B = exchange.GetTicker()
if(!ticker_B){return 'Unable to get quotes'}
exchange.SetDirection('sell')
var id_B = exchange.Sell(ticker_B.Buy-Slip, Amount)
if(id_A){
exchange.SetContractType(Reverse ? Contract_B : Contract_A)
exchange.CancelOrder(id_A)
}
if(id_B){
exchange.SetContractType(Reverse ? Contract_B : Contract_A)
exchange.CancelOrder(id_B)
}
return 'Position: ' + JSON.stringify(exchange.GetPosition())
}
जब तक कि अंतर को संकुचित नहीं किया जाता है, तब तक समानांतर की आवश्यकता होती है, एक बटन समानांतर प्लगइन चलाया जा सकता है, सबसे तेज़ गति समानांतर।
function main(){
while(ture){
var pos = exchange.GetPosition()
var ticker = exchange.GetTicekr()
if(!ticker){return '无法获取ticker'}
if(!pos || pos.length == 0 ){return '已无持仓'}
for(var i=0;i<pos.length;i++){
if(pos[i].Type == PD_LONG){
exchange.SetContractType(pos[i].ContractType)
exchange.SetDirection('closebuy')
exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount)
}
if(pos[i].Type == PD_SHORT){
exchange.SetContractType(pos[i].ContractType)
exchange.SetDirection('closesell')
exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount)
}
}
var orders = exchange.Getorders()
Sleep(500)
for(var j=0;j<orders.length;j++){
if(orders[i].Status == ORDER_STATE_PENDING){
exchange.CancelOrder(orders[i].Id)
}
}
}
}
सबसे आम है हिमस्खलन कमीशन, बड़े टुकड़े को छोटे टुकड़ों में तोड़ने के लिए, हालांकि यह एक रोबोट के रूप में चलाया जा सकता है, लेकिन 5 मिनट का प्लगइन वास्तव में पर्याप्त है। हिमस्खलन कमीशन के दो प्रकार हैं, एक खाया जाता है, एक लिपटीकरण है, यदि कोई प्रसंस्करण शुल्क लाभ है, तो आप लिपटीकरण का विकल्प चुन सकते हैं, या निष्पादन समय अधिक है।
नीचे दिया गया कोड हिमशैल को प्लगइन का स्रोत कोड खरीदने के लिए सौंपा गया हैःhttps://www.fmz.com/strategy/191771◎ स्रोत कोड बेचेंःhttps://www.fmz.com/strategy/191772
function main(){
var initAccount = _C(exchange.GetAccount)
while(true){
var account = _C(exchange.GetAccount)
var dealAmount = account.Stocks - initAccount.Stocks
var ticker = _C(exchange.GetTicker)
if(BUYAMOUNT - dealAmount >= BUYSIZE){
var id = exchange.Buy(ticker.Sell, BUYSIZE)
Sleep(INTERVAL*1000)
if(id){
exchange.CancelOrder(id) // May cause error log when the order is completed, which is all right.
}else{
throw 'buy error'
}
}else{
account = _C(exchange.GetAccount)
var avgCost = (initAccount.Balance - account.Balance)/(account.Stocks - initAccount.Stocks)
return 'Iceberg order to buy is done, avg cost is '+avgCost
}
}
}
एक खरीद या बिक्री पर कब्जा करना भी एक धीमी शिपिंग का एक तरीका है, जो बाजार पर कम प्रभाव डालता है। इस रणनीति में कुछ सुधार भी हैं, जिसमें न्यूनतम लेनदेन मात्रा या सटीकता को मैन्युअल रूप से बदला जा सकता है। खरीदेंःhttps://www.fmz.com/strategy/191582बिक्री के लिएःhttps://www.fmz.com/strategy/191730
function GetPrecision(){
var precision = {price:0, amount:0}
var depth = exchange.GetDepth()
for(var i=0;i<exchange.GetDepth().Asks.length;i++){
var amountPrecision = exchange.GetDepth().Asks[i].Amount.toString().indexOf('.') > -1 ? exchange.GetDepth().Asks[i].Amount.toString().split('.')[1].length : 0
precision.amount = Math.max(precision.amount,amountPrecision)
var pricePrecision = exchange.GetDepth().Asks[i].Price.toString().indexOf('.') > -1 ? exchange.GetDepth().Asks[i].Price.toString().split('.')[1].length : 0
precision.price = Math.max(precision.price,pricePrecision)
}
return precision
}
function main(){
var initAccount = exchange.GetAccount()
if(!initAccount){return '无法获取账户信息'}
var precision = GetPrecision()
var buyPrice = 0
var lastId = 0
var done = false
while(true){
var account = _C(exchange.GetAccount)
var dealAmount = account.Stocks - initAccount.Stocks
var ticker = _C(exchange.GetTicker)
if(BuyAmount - dealAmount > 1/Math.pow(10,precision.amount) && ticker.Buy > buyPrice){
if(lastId){exchange.CancelOrder(lastId)}
var id = exchange.Buy(ticker.Buy, _N(BuyAmount - dealAmount,precision.amount))
if(id){
lastId = id
}else{
done = true
}
}
if(BuyAmount - dealAmount <= 1/Math.pow(10,precision.amount)){done = true}
if(done){
var avgCost = (initAccount.Balance - account.Balance)/dealAmount
return 'order is done, avg cost is ' + avgCost // including fee cost
}
Sleep(Intervel*1000)
}
}
कभी-कभी एक बेहतर शिपिंग मूल्य बेचने के लिए या एक लटकन के लिए प्रतीक्षा करने के लिए, एक निश्चित अंतराल पर कई आदेशों को लटकाना संभव होता है। यह प्लगइन फ्यूचर्स लटकन के लिए भी काम कर सकता है।https://www.fmz.com/strategy/190017
function main() {
var ticker = exchange.GetTicker()
if(!ticker){
return 'Unable to get price'
}
for(var i=0;i<N;i++){
if(Type == 0){
if(exchange.GetName().startsWith('Futures')){
exchange.SetDirection('buy')
}
exchange.Buy(Start_Price-i*Spread,Amount+i*Amount_Step)
}else if(Type == 1){
if(exchange.GetName().startsWith('Futures')){
exchange.SetDirection('sell')
}
exchange.Sell(Start_Price+i*Spread,Amount+i*Amount_Step)
}else if(Type == 2){
exchange.SetDirection('closesell')
exchange.Buy(Start_Price-i*Spread,Amount+i*Amount_Step)
}
else if(Type == 3){
exchange.SetDirection('closebuy')
exchange.Sell(Start_Price+i*Spread,Amount+i*Amount_Step)
}
Sleep(500)
}
return 'order complete'
}
आम तौर पर उपयोग किए जाने वाले फ्यूचर्स ट्रेडिंग सॉफ़्टवेयर में अक्सर कई उन्नत लिपस्टिक सुविधाएँ होती हैं, जैसे कि लिपस्टिक स्टॉप-लॉस लिपस्टिक, लिपस्टिक कंडीशन लिपस्टिक आदि, जिन्हें प्लगइन के रूप में लिखना बहुत आसान होता है। यहां एक लिपस्टिक लिपस्टिक प्लगइन साझा करें जो लेनदेन के तुरंत बाद लिपस्टिक लिपस्टिक को लिपस्टिक करता है। कॉपी पताःhttps://www.fmz.com/strategy/187736
var buy = false
var trade_amount = 0
function main(){
while(true){
if(exchange.IO("status")){
exchange.SetContractType(Contract)
if(!buy){
buy = true
if(Direction == 0){
exchange.SetDirection('buy')
exchange.Buy(Open_Price, Amount)
}else{
exchange.SetDirection('sell')
exchange.Sell(Open_Price, Amount)
}
}
var pos = exchange.GetPosition()
if(pos && pos.length > 0){
for(var i=0;i<pos.length;i++){
if(pos[i].ContractType == Contract && pos[i].Type == Direction && pos[i].Amount-pos[i].FrozenAmount>0){
var cover_amount = math.min(Amount-trade_amount, pos[i].Amount-pos[i].FrozenAmount)
if(cover_amount >= 1){
trade_amount += cover_amount
if(Direction == 0){
exchange.SetDirection('closebuy_today')
exchange.Sell(Close_Price, cover_amount)
}else{
exchange.SetDirection('closesell_today')
exchange.Buy(Close_Price, cover_amount)
}
}
}
}
}
} else {
LogStatus(_D(), "未连接CTP !")
Sleep(10000)
}
if(trade_amount >= Amount){
Log('任务完成')
return
}
Sleep(1000)
}
}
इस तरह की छोटी सुविधाओं को देखते हुए, आपको अपने स्वयं के विचारों के बारे में भी सोचना चाहिए, शायद एक प्लगइन लिखें जो आपके लिए मैन्युअल लेनदेन को सुविधाजनक बनाता है।
श्यामगलत रिपोर्टिंग का कारण क्या है? Error: Futures_OP 0: 400: {"error_message":"Open orders exist","code":35017,"error_code":"35017","message":"Open orders exist"} Buy ((5000, 0.1): 400: {"error_message":"order_size error","result":"true","error_code":"35063","order_id":"-1"}
घासएक्सचेंज दस्तावेजों की जांच करें या एक्सचेंज ग्राहक सेवा से परामर्श करें