FMZ.COM, एक मात्रात्मक ट्रेडिंग प्लेटफॉर्म के रूप में, मुख्य रूप से प्रोग्रामेटिक व्यापारियों की सेवा करने के लिए है। लेकिन यह एक बुनियादी ट्रेडिंग टर्मिनल भी प्रदान करता है। हालांकि फ़ंक्शन सरल है, कभी-कभी यह उपयोगी हो सकता है। उदाहरण के लिए, यदि एक्सचेंज व्यस्त है और संचालित नहीं किया जा सकता है, लेकिन एपीआई अभी भी काम करता है। इस समय, आप ऑर्डर वापस ले सकते हैं, ऑर्डर दे सकते हैं, और उन्हें टर्मिनल के माध्यम से देख सकते हैं। ट्रेडिंग टर्मिनल के अनुभव को बेहतर बनाने के लिए, प्लग-इन अब जोड़े गए हैं। कभी-कभी, हमें लेनदेन में सहायता के लिए एक छोटे से फ़ंक्शन की आवश्यकता होती है, जैसे कि सीढ़ी लंबित ऑर्डर, आइसबर्ग ऑर्डर, एक-क्लिक हेजिंग, एक-क्लिक क्लोजिंग पदों और अन्य संचालन। रोबोट निष्पादन लॉग को देखना आवश्यक नहीं है। एक नया लॉग बनाना थोड़ा बोझिल है। बस टर्मिनल में प्लग-इन पर क्लिक करें, संबंधित कार्यों को तुरंत महसूस किया जा सकता है, जो मैन्युअल लेनदेन को बहुत सुविधा
प्लग-इन ऑपरेशन के दो मोड हैं, तत्काल संचालन और पृष्ठभूमि संचालन। पृष्ठभूमि में चलना एक रोबोट बनाने के बराबर है (सामान्य शुल्क) । तत्काल संचालन का सिद्धांत डिबगिंग टूल के समान हैः निष्पादन के लिए ट्रेडिंग टर्मिनल पृष्ठ के डॉकर को कोड का एक टुकड़ा भेजें, और चार्ट और तालिकाओं को वापस करने के लिए समर्थन (डिबगिंग टूल को वर्तमान में समर्थन के लिए भी अपग्रेड किया गया है), वही केवल 5 मिनट के लिए निष्पादित किया जा सकता है, कोई शुल्क नहीं, कोई प्रतिबंध नहीं भाषा। कम निष्पादन समय के साथ प्लग-इन तत्काल रन मोड का उपयोग कर सकते हैं, जबकि जटिल और लंबे समय तक चलने वाली रणनीतियों को अभी भी रोबोट चलाने की आवश्यकता है।
जब एक रणनीति लिखना, आप एक प्लगइन के रूप में रणनीति प्रकार का चयन करने की जरूरत है.main
कार्यreturn
प्लग-इन के टर्मिनल में पॉप अप हो जाएगा ऑपरेशन खत्म हो गया है के बाद, समर्थन स्ट्रिंग, ड्राइंग और टेबल. क्योंकि प्लग-इन निष्पादन लॉग नहीं देख सकते हैं, आप कर सकते हैंreturn
प्लग-इन के निष्पादन का परिणाम।
खोज बॉक्स में सीधे खोजें जैसा कि चित्र में दिखाया गया है. ध्यान दें कि केवल व्यापार प्लगइन प्रकार की रणनीतियों को चलाया जा सकता है, और फिर जोड़ें पर क्लिक करें. सार्वजनिक प्लगइन्स रणनीति वर्ग में पाया जा सकता हैःhttps://www.fmz.com/square/21/1
पैरामीटर सेटिंग इंटरफ़ेस दर्ज करने के लिए रणनीति पर क्लिक करें. यदि कोई पैरामीटर नहीं है, तो यह सीधे चलाया जाएगा. व्यापार टर्मिनल द्वारा चयनित डॉकर, ट्रेडिंग जोड़ी, और के-लाइन अवधि डिफ़ॉल्ट अनुरूप पैरामीटर हैं. निष्पादन शुरू करने के लिए निष्पादन रणनीति पर क्लिक करें, और
प्लग-इन को रोकने के लिए आइकन स्थिति पर क्लिक करें. चूंकि सभी प्लग-इन डिबगिंग टूल प्रक्रिया में निष्पादित होते हैं, इसलिए सभी प्लग-इन को रोक दिया जाएगा.
प्लग-इन समय की अवधि के लिए कोड निष्पादित कर सकते हैं और कुछ सरल संचालन कर सकते हैं। कई मामलों में, मैन्युअल संचालन जिन्हें दोहराए जाने वाले संचालन की आवश्यकता होती है, लेनदेन की सुविधा के लिए प्लग-इन के साथ लागू किया जा सकता है। निम्नलिखित विशिष्ट उदाहरण पेश करेंगे, और दी गई स्रोत कोड का उपयोग अपनी रणनीति को अनुकूलित करने के लिए संदर्भ के लिए किया जा सकता है।
फ्यूचर्स इंटरटेम्पोरल हेजिंग ट्रेडिंग एक बहुत ही आम रणनीति है। चूंकि आवृत्ति बहुत अधिक नहीं है, इसलिए कई लोग इसे मैन्युअल रूप से संचालित करेंगे। एक अनुबंध को लंबा और एक अनुबंध को छोटा बनाना आवश्यक है, इसलिए स्प्रेड प्रवृत्ति का विश्लेषण करना बेहतर है। ट्रेडिंग टर्मिनल में प्लग-इन का उपयोग करने से आपकी ऊर्जा की बचत होगी।
पहला परिचय अंतर-अवधि मूल्य अंतर प्लगइन खींचने के लिए हैः
var chart = {
__isStock: true,
title : { text : 'Spread analysis chart'},
xAxis: { type: 'datetime'},
yAxis : {
title: {text: 'Spread'},
opposite: false,
},
series : [
{name : "diff", data : []},
]
}
function main() {
exchange.SetContractType('quarter')
var recordsA = exchange.GetRecords(PERIOD_M5) //Cycle can be customized
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 'Unable to get ticker'}
if(!pos || pos.length == 0 ){return 'No holding position'}
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 'Unable to get account information'}
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)
}
}
कभी-कभी, एक बेहतर
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 is not connected!")
Sleep(10000)
}
if(trade_amount >= Amount){
Log('mission completed')
return
}
Sleep(1000)
}
}
इतने सारे छोटे कार्यों को पढ़ने के बाद, आपको अपने स्वयं के विचार भी होने चाहिए। आप अपने मैनुअल ट्रेडिंग को सुविधाजनक बनाने के लिए एक प्लग-इन लिखना चाह सकते हैं।