FMZ.COM، ایک مقداری تجارتی پلیٹ فارم کے طور پر ، بنیادی طور پر پروگراماتی تاجروں کی خدمت کرنا ہے۔ لیکن یہ ایک بنیادی تجارتی ٹرمینل بھی فراہم کرتا ہے۔ اگرچہ فنکشن آسان ہے ، لیکن بعض اوقات یہ مفید ثابت ہوسکتا ہے۔ مثال کے طور پر ، اگر ایکسچینج مصروف ہے اور اسے چلانا ممکن نہیں ہے ، لیکن API پھر بھی کام کرتا ہے۔ اس وقت ، آپ آرڈر واپس لے سکتے ہیں ، آرڈر دے سکتے ہیں ، اور انہیں ٹرمینل کے ذریعہ دیکھ سکتے ہیں۔ تجارتی ٹرمینل کے تجربے کو بہتر بنانے کے ل plug ، پلگ ان اب شامل کیے گئے ہیں۔ بعض اوقات ، ہمیں لین دین میں مدد کے لئے ایک چھوٹے فنکشن کی ضرورت ہوتی ہے ، جیسے سیڑھی کے زیر التواء آرڈرز ، آئس برگ آرڈرز ، ایک کلک ہیجنگ ، ایک کلک بند ہونے والی پوزیشنیں اور دیگر کارروائیاں۔ روبوٹ کے عملدرآمد لاگ کو دیکھنے کی ضرورت نہیں ہے۔ نیا روبوٹ بنانے کے لئے تھوڑا سا بوجھل ہے۔ ٹرمینل میں پلگ ان پر کلک کریں ، اسی طرح کے افعال کو فوری طور پر سمجھا جاسکتا ہے ، جو دستی لین دین کو بہت آسان بنا سکتا ہے۔ پلگ
پلگ ان آپریشن کے دو طریقے ہیں ، فوری آپریشن اور پس منظر کا آپریشن۔ پس منظر میں چلانے سے روبوٹ بنانے کے مترادف ہے (عام چارجز) ۔ فوری آپریشن کا اصول ڈیبگنگ ٹول کی طرح ہی ہے: عملدرآمد کے لئے ٹریڈنگ ٹرمینل پیج کے ڈوکر کو کوڈ کا ایک ٹکڑا بھیجیں ، اور چارٹ اور ٹیبلز کی واپسی کی حمایت کریں (ڈیبگنگ ٹول کو فی الحال بھی سپورٹ کرنے کے لئے اپ گریڈ کیا گیا ہے) ، وہی صرف 5 منٹ کے لئے عملدرآمد کیا جاسکتا ہے ، کوئی فیس نہیں ، کوئی پابندی نہیں ہے۔ مختصر عملدرآمد کے وقت کے ساتھ پلگ ان فوری طور پر چلانے کے موڈ کا استعمال کرسکتے ہیں ، جبکہ پیچیدہ اور طویل عرصے سے چلنے والی حکمت عملیوں کو اب بھی روبوٹ چلانے کی ضرورت ہے۔
ایک حکمت عملی لکھنے جب، آپ کو ایک پلگ ان کے طور پر حکمت عملی کی قسم کو منتخب کرنے کی ضرورت ہے.main
فنکشنreturn
کے پلگ ان آپریشن ختم ہو گیا ہے کے بعد ٹرمینل میں پاپ اپ ہو جائے گا، تار، ڈرائنگ اور میزیں کی حمایت. کیونکہ پلگ ان پر عملدرآمد لاگ نہیں دیکھ سکتے ہیں، آپ کر سکتے ہیںreturn
پلگ ان کے عمل کا نتیجہ۔
براہ راست تلاش کے خانے میں تلاش کریں جیسا کہ شبیہہ میں دکھایا گیا ہے۔ نوٹ کریں کہ صرف تجارتی پلگ ان کی قسم کی حکمت عملی چل سکتی ہے ، اور پھر شامل کریں پر کلک کریں۔ عوامی پلگ انز کو حکمت عملی اسکوائر میں پایا جاسکتا ہے:https://www.fmz.com/square/21/1
پیرامیٹر سیٹنگ انٹرفیس میں داخل ہونے کے لئے حکمت عملی پر کلک کریں۔ اگر کوئی پیرامیٹرز نہیں ہیں تو ، یہ براہ راست چلتا ہے۔ ڈوکر ، تجارتی جوڑی ، اور ٹریڈنگ ٹرمینل کے ذریعہ منتخب کردہ K لائن کی مدت ڈیفالٹ کے مساوی پیرامیٹرز ہیں۔ عمل درآمد شروع کرنے کے لئے عمل درآمد کی حکمت عملی پر کلک کریں ، اور
پلگ ان کو روکنے کے لئے آئکن کی پوزیشن پر کلک کریں۔ چونکہ تمام پلگ ان ڈیبگنگ ٹول کے عمل میں چلتے ہیں، لہذا تمام پلگ انز کو روک دیا جائے گا۔
پلگ ان کوڈ کو وقت کی ایک مدت کے لئے انجام دے سکتے ہیں اور کچھ آسان کارروائیوں کو انجام دے سکتے ہیں۔ بہت سے معاملات میں ، دستی کارروائیوں کو جو بار بار کارروائیوں کی ضرورت ہوتی ہے ، کو پلگ ان کے ساتھ عمل درآمد کیا جاسکتا ہے تاکہ لین دین کو آسان بنایا جاسکے۔ مندرجہ ذیل میں مخصوص مثالیں پیش کی جائیں گی ، اور فراہم کردہ سورس کوڈ کو اپنی حکمت عملی کو اپنی مرضی کے مطابق بنانے کے لئے حوالہ کے طور پر استعمال کیا جاسکتا ہے۔
فیوچر انٹرٹیمپورل ہیجنگ ٹریڈنگ ایک بہت ہی عام حکمت عملی ہے۔ چونکہ تعدد بہت زیادہ نہیں ہے ، لہذا بہت سے لوگ اسے دستی طور پر چلائیں گے۔ ایک معاہدہ لمبا اور ایک معاہدہ مختصر کرنا ضروری ہے ، لہذا پھیلاؤ کے رجحان کا تجزیہ کرنا بہتر ہے۔ تجارتی ٹرمینل میں پلگ ان کا استعمال آپ کی توانائی کی بچت کرے گا۔
پہلا تعارف یہ ہے کہ مدت کے درمیان قیمت کے فرق کا پلگ ان تیار کیا جائے:
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)
}
}
بہت سارے چھوٹے افعال کو پڑھنے کے بعد ، آپ کے پاس بھی اپنے خیالات ہونے چاہئیں۔ آپ دستی تجارت کو آسان بنانے کے لئے پلگ ان لکھنا چاہتے ہیں۔