[TOC]
یہ سبق حکمت عملی لکھنے کے بنیادی علم پر مشتمل ہے ، جس میں API تعارف ، بیک ٹیسٹ ، چارٹ اور بہت کچھ شامل ہے۔ اس بنیادی سبق کو سیکھنے کے بعد ، صارفین بنیادی API کو مہارت سے استعمال کرسکیں گے اور مستحکم بوٹ حکمت عملی لکھ سکیں گے۔ سبق سیکھنے سے پہلے ، آپ کو سیکھنے کی ضرورت ہے کہ کس طرح استعمال کرنا ہے۔ایف ایم زیڈ کوانٹ پلیٹ فارم شروع کریں.
پرانے ورژن سبق:ایف ایم زیڈ کوانٹ (ایف ایم زیڈ ڈاٹ کام) حکمت عملی تحریری دستی 2.0 (ٹوٹوریل)؛ ٹیوٹوریل میں بہت سارے پوسٹ انڈیکس ہیں ، جن کو پڑھنے کی سفارش کی جاتی ہے۔
پروگرام ٹریڈنگ کا مطلب یہ ہے کہ ای پی آئی کے ذریعہ پلیٹ فارمز سے رابطہ قائم کرنے کے لئے پروگراموں کا استعمال کرنا تاکہ ڈیزائن کے ارادے کے مطابق خودکار خرید و فروخت یا دیگر افعال کو حاصل کیا جاسکے۔ ای پی آئی ایپلیکیشن پروگرامنگ انٹرفیس کی نمائندگی کرتا ہے۔
فی الحال ، کریپٹوکرنسی پلیٹ فارمز کے لئے دو اہم انٹرفیس پروٹوکول ہیں: REST اور ویب ساکٹ۔ ہر بار جب REST پروٹوکول ڈیٹا حاصل کرتا ہے تو ، اس تک ایک بار رسائی حاصل کرنے کی ضرورت ہوتی ہے۔ آئیے مثال کے طور پر نقلی پلیٹ فارم
{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}
اس طرح ، آپ دیکھ سکتے ہیں کہ ٹریڈنگ جوڑی BTC_USDT کے تازہ ترین مارکیٹ کوٹس کے بعد ، ہر بار جب اسے تازہ کاری کی جاتی ہے تو تجارت بدل جائے گی۔
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم ہر پلیٹ فارم کے ریسٹ انٹرفیس کو شامل کرتا ہے ، اور کال کرنے کا ایک متحد طریقہ اور ایک متحد ڈیٹا فارمیٹ استعمال کرتا ہے ، جس سے حکمت عملی لکھنا آسان اور زیادہ عام ہوجاتا ہے۔ ویب ساکٹ کو ایف ایم زیڈ پلیٹ فارم پر آسانی سے سپورٹ کیا جاسکتا ہے ، جس کا تفصیلی تعارف اگلے ٹیوٹوریل میں کیا جائے گا۔
ایف ایم زیڈ پلیٹ فارم API دستاویز کے بیشتر حصے جاوا اسکرپٹ کو بطور مثال استعمال کرتے ہیں ، لیکن انکیپسولیشن کی وجہ سے ، مختلف زبانوں کے مابین تقریبا کوئی فرق نہیں ہے ، اور آپ کو صرف نحو کے مسائل پر توجہ دینے کی ضرورت ہے۔
چونکہ پائتھون کے مختلف ورژن ہیں ، لہذا اسے پروگرام کے آغاز میں بیان کیا جاسکتا ہے ، جیسے:#!Python2
اور#!Python3
. نوٹ کریں کہ جاوا اسکرپٹ نے حال ہی میں اپنے ES6 نحو کو اپ گریڈ کیا ہے ، اور جو لوگ دلچسپی رکھتے ہیں وہ اس کے بارے میں جان سکتے ہیں۔ ایک ہی افعال کے ساتھ پائتھون اور جاوا اسکرپٹ کوڈز ذیل میں دکھائے گئے ہیں۔ یہ دیکھا جاسکتا ہے کہ صرف نحو کے اختلافات ہیں ، لہذا API دستاویز صرف جاوا اسکرپٹ کی مثالیں دیتی ہے ، اور یہ سبق پائتھون کے خصوصی استعمال کے معاملات کو بھی مدنظر رکھے گا۔
#python code
def main():
while True:
Log(exchange.GetAccount().Balance)
Sleep(2000)
#the corresponding Js code
function main(){
while(true){
Log(exchange.GetAccount().Balance)
Sleep(2000)
}
}
FMZ کوانٹ پلیٹ فارم فراہم کرتا ہے
حکمت عملی کا پروگرام ایک عام پروگرام کی طرح ہے ، جو کوڈ کے احکامات میں انجام دیا جاتا ہے۔ خاص بات یہ ہے کہ ایک
خصوصی کارروائیوں کے ساتھ دیگر افعال مندرجہ ذیل دکھائے گئے ہیں:
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//write the strategy logic here, and it will be called ever 6 seconds
}
function main(){
while(true){
onTick()
Sleep(6000)
}
}
پچھلی مثال میں ، اگر نیٹ ورک تک رسائی میں غلطی ہے تو ، حکمت عملی براہ راست رک سکتی ہے۔ اگر آپ ایسی حکمت عملی چاہتے ہیں جو خودکار دوبارہ شروع سے ملتی جلتی ہے اور رکتی نہیں ہے تو ، آپ بوٹ کی حکمت عملی میں
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//write the strategy logic here, and it will be called ever 6 seconds
}
function main(){
try{
while(true){
onTick()
Sleep(6000)
}
}catch(err){
Log(err)
}
}
کسی بھی پلیٹ فارم سے متعلق API کو کال کرتے وقت ، آپ کو پلیٹ فارم اور تجارتی جوڑی کی وضاحت کرنے کی ضرورت ہے۔ اگر بوٹ بنانے کے وقت صرف ایک exchange
اس اعتراض کی نمائندگی کرنے کے لئے. مثال کے طور پر، کیاexchange.GetTicker()
حاصل کرے گا اس
ایف ایم زیڈ کوانٹ پلیٹ فارم ایک ہی وقت میں متعدد exchanges
ان کی نمائندگی کرنے کے لئے صف، یعنیexchanges[0]
اورexchanges[1]
... اور اسی طرح، جب بوٹ تخلیق کیا جاتا ہے تو جمع کرنے کے حکم کے مطابق.BTC_USDT
، سابق
ظاہر ہے ، اگر ہم بہت سارے تجارتی جوڑے چلاتے ہیں تو ، یہ طریقہ بہت تکلیف دہ ہوگا۔ اس صورتحال میں ، ہم تجارت کے جوڑوں کو تبدیل کرنے کے لئے سیٹ کرنسی کا استعمال کرسکتے ہیں ، جیسےexchange.SetCurrency("BTC_USDT")
؛ پھر، ٹریڈنگ جوڑی سے منسلکexchange
بن جاتا ہےBTC_USDT
، جو ٹریڈنگ جوڑی کو تبدیل کرنے کے لئے اگلے کال تک درست رہے گا۔نوٹ کریں کہ بیک ٹیسٹ حالیہ ٹریڈنگ جوڑوں سوئچنگ کی حمایت کرتا ہےذیل میں ایک مخصوص مثال ہے:
var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"]
var buyValue = 1000
function main(){
for(var i=0;i<symbols.length;i++){
exchange.SetCurrency(symbols[i])
var ticker = exchange.GetTicker()
var amount = _N(buyValue/ticker.Sell, 3)
exchange.Buy(ticker.Sell, amount)
Sleep(1000)
}
}
جیسا کہ پچھلی مثال میں ذکر کیا گیا ہے ، مارکیٹ انٹرفیس عام طور پر ایک عوامی انٹرفیس ہے ، جس تک ہر ایک رسائی حاصل کرسکتا ہے۔ عام مارکیٹ انٹرفیس یہ ہیں: گیٹ ٹکر ، گیٹ ڈپتھ ، گیٹ ریکارڈز اور گیٹ ٹریڈز۔ مارکیٹ کی قیمتوں کا تعین تجارتی فیصلے کرنے کی حکمت عملی کی بنیاد ہے۔ بعد میں ، میں ان کو ایک ایک کرکے متعارف کرواؤں گا۔
ہر انٹرفیس عام طور پر ایکInfo
فیلڈ ، جو پلیٹ فارم کے ذریعہ واپس آنے والی اصل ڈیٹا سٹرنگ کی نمائندگی کرتا ہے ، اور جو اضافی معلومات کو مکمل کرنے کے لئے استعمال کیا جاسکتا ہے۔ اسے استعمال سے پہلے تجزیہ کرنے کی ضرورت ہے۔ جاوا اسکرپٹ استعمال کرتا ہےJSON.parse()
، جبکہ پائتھون json لائبریری کا استعمال کرتا ہے.Time
فیلڈ درخواست کا ٹائم اسٹیمپ ظاہر کرتا ہے، جس کا استعمال تاخیر کا فیصلہ کرنے کے لئے کیا جا سکتا ہے۔
جب بوٹ میں کسی بھی API کا استعمال کرتے ہوئے، رسائی ناکام ہو سکتی ہے اور واپس آ سکتی ہےnull
، اور پطرون لوٹتا ہےNone
اس وقت ، استعمال میں موجود ڈیٹا غلطی کی اطلاع دے گا اور بوٹ کو روکنے کا سبب بنے گا ، لہذا غلطی کی رواداری بہت اہم ہے۔ یہ سبق غلطی کی رواداری کو خاص طور پر متعارف کرائے گا۔
گیٹ ٹکر شاید سب سے زیادہ استعمال ہونے والا انٹرفیس ہے۔ آپ آخری بار عملدرآمد کی قیمت ، خرید1 قیمت اور فروخت1 قیمت ، اور تازہ ترین تجارتی حجم تلاش کرسکتے ہیں۔ آرڈر دینے سے پہلے ، عملدرآمد کی قیمت ٹکر کی معلومات کے مطابق طے کی جاسکتی ہے۔ بوٹ کی واپسی کی ایک مثال:{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}
.
function main() {
var ticker = exchange.GetTicker()
Log(ticker) //return ticker in the debugging tool, and you can see the specific result
Log('Last time executed price:',ticker.Last, 'Buy1 price:', ticker.Buy)
}
زیر التواء آرڈرز کی گہرائی کی معلومات حاصل کرنے کے لئے گیٹ ڈیپتھ۔ اگرچہ گیٹ ٹکر میں خرید 1 اور فروخت 1 کی قیمتیں شامل ہیں ، اگر آپ زیر التواء آرڈرز کی گہرائی سے استفسار کرنا چاہتے ہیں تو ، آپ اس انٹرفیس کا استعمال کرسکتے ہیں ، عام طور پر 200 زیر التواء آرڈرز کو اوپر اور نیچے چیک کرنے کے ل.۔ اس انٹرفیس کا استعمال کرتے ہوئے جھٹکا قیمتوں کا حساب لگایا جاسکتا ہے۔ ذیل میں ایک حقیقی واپسی کا نتیجہ ہے۔ ان میں سے ،
{
"Info":null,
"Asks":[
{"Price":5866.38,"Amount":0.068644},
{"Price":5866.39,"Amount":0.263985},
......
]
"Bids":[
{"Price":5865.13,"Amount":0.001898},
{"Price":5865,"Amount":0.085575},
......
],
"Time":1530241857399
}
Asks & Bids کے لئے GetDepth استعمال کرنے کا مثال:
function main() {
var depth = exchange.GetDepth()
Log('Buy 1 price:', depth.Bids[0].Price, 'Sell 1 price:', depth.Asks[0].Price)
}
گیٹ ریکارڈز سب سے زیادہ استعمال ہونے والے انٹرفیس میں سے ایک ہے ، ایک وقت میں ایک طویل عرصے میں قیمت کی معلومات واپس کرسکتا ہے ، جو مختلف اشارے کے حساب کتاب کی بنیاد ہے۔ اگر K لائن کی مدت کی وضاحت نہیں کی گئی ہے تو ، اس کا مطلب یہ ہے کہ بوٹ شامل کرتے وقت ڈیفالٹ مدت کا استعمال کریں۔ K لائن کی لمبائی کی وضاحت نہیں کی جاسکتی ہے ، اور یہ وقت کے ساتھ ساتھ بڑھتی رہے گی۔ زیادہ سے زیادہ تعداد 2000 ہے ، اور پہلی کال میں تعداد تقریبا 200 ہے (مختلف پلیٹ فارم مختلف نمبر واپس کرتے ہیں) ۔ آخری K لائن تازہ ترین K لائن ہے ، لہذا مارکیٹ کی قیمتوں میں تبدیلی کے ساتھ ہی اعداد و شمار بدل جائیں گے؛ پہلی K لائن قدیم ترین ڈیٹا ہے۔
exchange.SetMaxBarLen(Len)
پہلی بار حاصل کی جانے والی K لائنز کی تعداد مقرر کر سکتے ہیں (کچھ پلیٹ فارمز کی حمایت کرتے ہیں) ، اور K لائنز کی زیادہ سے زیادہ تعداد مقرر کرسکتے ہیں۔جیسے:exchange.SetMaxBarLen(500)
.
GetRecords جیسے ادوار کی وضاحت کر سکتے ہیں PERIOD_M1: 1 منٹ، PERIOD_M5: 5 منٹ، PERIOD_M15: 15 منٹ، PERIOD_M30: 30 منٹ، PERIOD_H1: 1 گھنٹہ اور PERIOD_D1: 1 دن. مخصوص استعمال یہ ہےexchange.GetRecords(PERIOD_M1)
. تازہ ترین ڈوکر کو اپ گریڈ کرنے کے بعد ، یہ ادوار کی تخصیص کی حمایت کرے گا ، جو صرف ایک پیرامیٹر کے طور پر مدت کا دوسرا نمبر پاس کرتا ہے۔ منٹ کی سطح کی تخصیص کو 1 منٹ کی K لائن کے مطابق ترکیب کیا جائے گا ، 1 منٹ سے کم کی K لائن کو GetTrades کے ذریعے ترکیب کیا جائے گا))) ، اور خام مال کے مستقبل کو ٹک کے مطابق ترکیب کیا جائے گا۔نوٹ کریں کہ دیگر مکمل بڑے متغیرات بھی ہیں جیسےPERIOD_M1
ٹیوٹوریل میں. وہ FMZ کے ڈیفالٹ گلوبل متغیر ہیں. اگر آپ دلچسپی رکھتے ہیں تو، آپ اپنے مخصوص اقدار کو اپنے آپ کو
واپسی کے اعداد و شمار کی مثال:
[
{"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
{"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
{"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
......
]
تکرار شدہ K لائن کا مثال:
function main(){
var close = []
var records = exchange.GetRecords(PERIOD_H1)
Log('total bars: ', records.length)
for(var i=0;i<records.length;i++){
close.push(records[i].Close)
}
return close
}
گیٹ ٹریڈس تجارتی اعداد و شمار کو ایک خاص وقت کی حد میں حاصل کرتا ہے (آپ کے اپنے تجارتی اعداد و شمار نہیں) ، جو کچھ پلیٹ فارمز کے ذریعہ تعاون یافتہ نہیں ہے۔ یہ عام طور پر استعمال نہیں ہوتا ہے ، اور آپ API دستاویز میں تفصیلی تعارف چیک کرسکتے ہیں۔
یہ انٹرفیس اکاؤنٹ سے وابستہ ہیں ، لہذا انہیں براہ راست حاصل نہیں کیا جاسکتا ہے۔ ان کو حاصل کرنے کے ل you ، آپ کو سائن ان کرنے کے لئے API-KEY کا استعمال کرنے کی ضرورت ہے۔ ایف ایم زیڈ پلیٹ فارم کی متحد خودکار پس منظر پروسیسنگ کے بعد ، آپ براہ راست ان کا استعمال کرسکتے ہیں۔
اکاؤنٹ کی معلومات حاصل کرنے کے لئے گیٹ اکاونٹ حاصل کریں۔ سب سے زیادہ عام طور پر استعمال ہونے والے انٹرفیس میں سے ایک ہونے کے ناطے ، آرڈر دینے سے پہلے اسے کال کرنے کی ضرورت ہے ، تاکہ ناکافی توازن سے بچ سکے۔ واپسی کا نتیجہ اس طرح ہے:{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}
جہاں BTC_USDT
،
نوٹ کریں کہ واپسی کا نتیجہ مخصوص ٹریڈنگ جوڑی کا نتیجہ ہے، اور ٹریڈنگ اکاؤنٹ میں دیگر کرنسیوں کی معلومات
ایک روبوٹ مسلسل موجودہ ٹریڈنگ جوڑی کی کل قیمت پرنٹ:
function main(){
while(true){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
var price = ticker.Buy
var stocks = account.Stocks + account.FrozenStocks
var balance = account.Balance + account.FrozenBalance
var value = stocks*price + balance
Log('Account value is: ', value)
LogProfit(value)
Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
//when run in debug tool, add a break here
}
}
آرڈر خریدیں۔ کال کرنے کے طریقوں میں شامل ہیںexchange.Buy(Price, Amount)
اورexchange.Buy(Price, Amount, Msg)
، جس میں null
اگر آرڈر ناکام ہوجاتا ہے تو واپس کردیا جائے گا، جو آرڈر کی حیثیت سے استفسار کرنے کے لئے استعمال ہوتا ہے۔
اگر آپ مارکیٹ کی قیمت پر خرید آرڈر دینا چاہتے ہیں تو exchange.Buy(-1, 0.5)
؛ اگر ٹریڈنگ جوڑیETH_BTC
، جس کا مطلب ہے کہ مارکیٹ کی قیمت پر 0.5BTC ETH خریدیں۔ کچھ پلیٹ فارم مارکیٹ آرڈرز کی حمایت نہیں کرتے ہیں ، اور نہ ہی فیوچر بیک ٹیسٹ کرتے ہیں۔
کچھ پلیٹ فارم قیمت اور رقم کے لئے صحت سے متعلق ضروریات ہیں جو صحت سے متعلق تقریب کے ساتھ کنٹرول کیا جا سکتا ہے_N()
فیوچر ٹریڈنگ کے لئے،
اسی قیمت تک پہنچنے کے بعد خریدنے کا ایک مثال:
function main(){
while(true){
var ticker = exchange.GetTicker()
var price = ticker.Sell
if(price >= 7000){
exchange.Buy(_N(price+5,2), 1, 'BTC-USDT')
break
}
Sleep(3000)//Sleep 3000ms
}
Log('done')
}
فروخت آرڈر۔ پیرامیٹرز exchange.Sell(-1, 0.2)
، کا مطلب ہے مارکیٹ کی قیمت پر 0.2ETH فروخت کرنا۔
GetOrder آرڈر کی شناخت کی بنیاد پر آرڈر کی معلومات حاصل کرتا ہے. جب یہ مشترکہ انٹرفیس طریقہ کار کو بلاتا ہےexchange.GetOrder(OrderId)
، Type
اور حکم کی اصل قیمتStatus
اعداد ہیں ، جو مختلف معانی کی نمائندگی کرتے ہیں ، لیکن میموری کے لئے سازگار نہیں ہیں۔ ایف ایم زیڈ ان اقدار کی نمائندگی کے لئے عالمی مستقل استعمال کرتا ہے۔ مثال کے طور پر ،Status
ایک نامکمل آرڈر کی قدر 0 ہے، جو کہ کے برابر ہےORDER_STATE_PENDING
. ان تمام عالمی مسلسل دستاویز میں دیکھا جا سکتا ہے... واپسی کا نتیجہ:
{
"Id":125723661, //Order id
"Amount":0.01, //Order ammount
"Price":7000, //Order price
"DealAmount":0, //Executed amount
"AvgPrice":0, //executed average price
"Status":0, //0: not completely executed; 1: executed; 2: canceled
"Type":1,//Order type; 0: buy order; 1: sell order
"ContractType":"",//contract type, used in futures trading
"Info":{} //the platform returns the raw information
}
}
کرنسی کی ایک مخصوص رقم خریدنے کی حکمت عملی:
function main(){
while(true){
var amount = exchange.GetAccount().Stocks
var ticker = exchange.GetTicker()
var id = null
if(5-amount>0.01){
id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2))
}else{
Log('Job completed')
return //return the main function, bot will stop
}
Sleep(3000) //Sleep 3000ms
if(id){
var status = exchange.GetOrder(id).Status
if(status == 0){ //Here you can aslo use "status == ORDER_STATE_PENDING" to judge
exchange.CancelOrder(id)
}
}
}
}
گیٹ آرڈر موجودہ ٹریڈنگ جوڑی کے تمام نامکمل احکامات کی فہرست حاصل کرتا ہے۔ اگر کوئی نامکمل آرڈر نہیں ہے تو ، ایک خالی صف واپس کریں۔ آرڈر کی فہرست کا مخصوص نتیجہ ، جیسے
موجودہ ٹریڈنگ جوڑی کے تمام احکامات کو منسوخ کرنے کا مثال:
function CancelAll(){
var orders = exchange.GetOrders()
for(var i=0;i<orders.length;i++){
exchange.CancelOrder(orders[i].Id) // cancel order by orderID
}
}
function main(){
CancelAll()
while(true){
//do something
Sleep(10000)
}
}
آرڈر کی شناخت کے مطابق، آرڈر منسوخ کریں.exchange.CancelOrder(OrderId)
. اگر منسوخی کامیاب ہے تو ، واپس
کریپٹوکرنسی کے ل futures ، فیوچر ٹریڈنگ اسپاٹ ٹریڈنگ سے مختلف ہے۔ اسپاٹ ٹریڈنگ کے مذکورہ بالا افعال فیوچر ٹریڈنگ پر بھی لاگو ہوتے ہیں ، اور سنگل فیوچر ٹریڈنگ کے اپنے افعال ہیں۔ کریپٹوکرنسی فیوچر کے پروگرام ٹریڈنگ کرنے سے پہلے ، آپ کو ویب سائٹ پر دستی کارروائیوں سے واقف ہونا چاہئے اور بنیادی تصورات کو سمجھنا چاہئے ، جیسے کھلی ، بند ، کراس ، الگ تھلگ ، فائدہ اٹھانا ، قریب منافع اور نقصان ، تیرتی آمدنی ، مارجن اور دیگر تصورات ، نیز اسی حساب کتاب کے فارمولے۔ متعلقہ سبق مختلف فیوچر پلیٹ فارمز پر مل سکتے ہیں ، اور آپ کو خود ہی ان کو سیکھنے کی ضرورت ہے۔
مستقل معاہدے مستقبل کے معاہدوں سے ملتے جلتے ہیں ، لیکن فرق یہ ہے کہ ایک ہی وقت میں لمبی اور مختصر پوزیشنیں رکھنے کا کوئی تصور نہیں ہے۔
اگر پلیٹ فارم فیوچر اور اسپاٹ دونوں کی حمایت کرتا ہے ، جیسے OKEX اور Huobi کے فیوچر ، آپ کو شامل کرنے کے لئے پلیٹ فارم انٹرفیس پر
فیوچر ٹریڈنگ میں پہلا قدم یہ ہے کہ جس معاہدے کی تجارت کی جائے اسے ترتیب دیا جائے۔ مثال کے طور پر اوکیکس فیوچر کو لیتے ہوئے ، بوٹ یا بیک ٹیسٹنگ بنانے کے دوران بی ٹی سی ٹریڈنگ جوڑی کا انتخاب کریں ، اور آپ کو کوڈ میں ہفتہ وار ، اگلے ہفتے یا سہ ماہی معاہدہ بھی ترتیب دینے کی ضرورت ہے۔ اگر یہ ترتیب نہیں دیا گیا ہے تو ، یہ آپ کو بتائے گاinvalid contract type
. اسپاٹ ٹریڈنگ کے جوڑوں سے مختلف ، فیوچر معاہدوں میں اکثر ٹریڈنگ کرنسی جیسے بی ٹی سی کو مارجن کے طور پر استعمال کیا جاتا ہے۔ ٹریڈنگ جوڑی میں بی ٹی سی کا اضافہ عام طور پر بی ٹی سی_یو ایس ڈی ٹریڈنگ جوڑی کی نمائندگی کرتا ہے جو بی ٹی سی کو مارجن کے طور پر استعمال کرتا ہے۔ اگر یو ایس ڈی ٹی کے ساتھ فیوچر معاہدہ مارجن کے طور پر ہے تو ، بی ٹی سی_یو ایس ڈی ٹی ٹریڈنگ جوڑی کو شامل کرنے کے لئے ایک بوٹ بنانے کی ضرورت ہے۔ مثال کے طور پر ، بائننس اوکیکس فیوچر جیسے دائمی معاہدوں میں ، کرپٹو مارجنڈ اور یو ایس ڈی ٹی مارجنڈ دونوں معاہدوں کے ساتھ۔تجارتی جوڑی کی ترتیب کے بعد ، آپ کو مخصوص معاہدے کی قسم بھی مقرر کرنا ہوگی ، جیسے مستقل ، ہفتہ وار ، اگلے ہفتے ، وغیرہ۔ معاہدہ ترتیب دینے کے بعد ، آپ مارکیٹ کی قیمتوں کا تعین ، خرید و فروخت جیسے آپریشن انجام دے سکتے ہیں۔
بائننس ، اوکیکس ، ہووبی ڈی ایم ، وغیرہ کے پاس کرپٹو مارجنڈ اور یو ایس ڈی ٹی مارجنڈ دونوں معاہدے ہیں ، جن میں بوٹ شامل کرنے اور معاہدہ ترتیب دینے پر فرق کرنے کی ضرورت ہے۔ مخصوص ترتیبات مندرجہ ذیل ہیں:
//OKEX Futures
exchange.SetContractType("swap") // set to perpetual contract
exchange.SetContractType("this_week") // set to weekly contract
exchange.SetContractType("next_week") // set to next week contract
exchange.SetContractType("quarter") // set to quarterly contract
//HuobiDM
exchange.SetContractType("this_week") // set to weekly contract
exchange.SetContractType("next_week") // set to next week contract
exchange.SetContractType("quarter") // set to quarterly contract
exchange.SetContractType("swap") // set to perpetual contract
//Binance Futures
exchange.SetContractType("swap") // set to perpetual contract, and notice that crypto-margined and USDT-margined contracts are all in the perpetual contract
exchange.SetContractType("quarter") // set to quarterly contract
exchange.SetContractType("next_quarter") // set to next quarter contract
//BitMEX
exchange.SetContractType("XBTUSD") // set to perpetual contract
exchange.SetContractType("XBTM19") // the contract settled at a specific time; for more details, please log in BitMEX to check each contract code
//GateIO
exchange.SetContractType("swap") // set to perpetual contract, and do not set the default as swap perpetual contract
//Deribit
exchange.SetContractType("BTC-27APR18") // the contract settled at a specific time; for more details, please log in Deribit to check out
موجودہ پوزیشن کی معلومات کی فہرست حاصل کرنے کے لئے، OKEX (OKCOIN) فیوچر حاصل کرنے کے لئے معاہدے کی قسم کی وضاحت کرنے کے لئے ایک پیرامیٹر میں منتقل کر سکتے ہیں.[]
، اگر کوئی پوزیشن نہیں ہے۔ پوزیشن کی معلومات مندرجہ ذیل طور پر واپس کردی جاتی ہیں۔ بہت ساری مخصوص معلومات ہیں ، جن کا تجزیہ ٹریڈنگ جوڑی کے ساتھ مل کر کرنے کی ضرورت ہے۔
ڈیٹا ٹائپ | متغیر کا نام | تفصیل |
---|---|---|
چیز | معلومات | خام ڈھانچہ جو پلیٹ فارم واپس کرتا ہے |
نمبر | مارجن لیول | بیعانہ سائز؛ OKCoin 10 یا 20 ہے، اور OK مستقبل کے کراس پوزیشن 10 (فکسڈ) لوٹاتا ہے، خام API کے لئے حمایت نہیں کرتا |
نمبر | رقم | پوزیشن کی رقم؛ OKCoin معاہدے کی مقدار کو ظاہر کرتا ہے (ایک سے زائد عدد) |
نمبر | منجمد مقدار | منجمد پوزیشن کی رقم |
نمبر | قیمت | پوزیشن کی اوسط قیمت |
نمبر | مارجن | منجمد مارجن |
نمبر | منافع | کموڈٹی فیوچر: مارکیٹ میں پوزیشن مارکنگ کا منافع اور نقصان۔ کریپٹوکرنسی: کریپٹوکرنسی یونٹ: بی ٹی سی / ایل ٹی سی ، روایتی فیوچر یونٹ: یو این بی (نوٹ:او کے کوئن فیوچر کی کراس پوزیشن کی صورت میں ، اس کا مطلب پوزیشن کا منافع اور نقصان نہیں ، بلکہ منافع اور نقصان ہے۔ الگ تھلگ پوزیشن کے تحت ، اس کا مطلب پوزیشن کا منافع اور نقصان ہے۔) |
کنسٹ | قسم | PD_LONG طویل پوزیشن ہے (CTP پوزیشن بند کرنے کے لئے |
سٹرنگ | معاہدہ کی قسم | commodity futures are contract codes، and stocks are |
function main(){
exchange.SetContractType("this_week");
var position = exchange.GetPosition();
if(position.length>0){ //especially pay attention to judging the length of position before call, or an error will occur
Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType)
}
}
سب سے پہلے، آپ کو بیعانہ سائز مقرر کرنے کی ضرورت ہے؛ بلانے کا طریقہ:exchange.SetMarginLevel(10)
، جہاں exchange.SetDirection(Direction)
، جو کھلی اور بند پوزیشنوں سے مطابقت رکھتا ہے۔فیوچر کے برعکس ، اگر ایک دائمی معاہدہ ایک ہی وقت میں طویل اور مختصر کے تصورات کو نہیں رکھتا ہے ، یعنی ایک ہی پوزیشن کی اجازت نہیں ہے۔ جب آپ لمبی پوزیشن پر مختصر کھولتے ہیں تو ، لمبی پوزیشن خود بخود بند ہوجائے گی ، لہذا آپ کو صرف سیٹ کرنے کی ضرورت ہےbuy
اورsell
. یہ دو طرفہ پوزیشن کی حمایت کرتا ہے تو، آپ کو مقرر کرنے کی ضرورت ہےclosebuy
, closesell
.مخصوص تعلقات:
آپریشن | سیٹ ڈائریکشن پیرامیٹرز | آرڈر دینے کا کام |
---|---|---|
کھلی لمبی پوزیشن | exchange.SetDirection (( |
تبادلہ.خریدیں() |
طویل پوزیشن بند کریں | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
کھلی مختصر پوزیشن | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
مختصر پوزیشن بند کرنا | تبادلہ.سیٹ ڈائریکشن (( |
تبادلہ.خریدیں() |
آخر میں ، کھلی اور بند پوزیشنوں کے لئے مخصوص کوڈ موجود ہے۔ پلیٹ فارم سے پلیٹ فارم میں دیئے گئے آرڈرز کی مقدار مختلف ہوتی ہے۔ مثال کے طور پر ، ہووبی فیوچر معاہدے کی مقدار پر مبنی ہیں ، اور ایک معاہدہ 100 امریکی ڈالر ہے۔ نوٹ کریں کہ فیوچر بیک ٹیسٹ مارکیٹ کے احکامات کی حمایت نہیں کرتا ہے۔
function main(){
exchange.SetContractType("this_week") // for example, set OKEX futures to weekly contract
price = exchange.GetTicker().Last
exchange.SetMarginLevel(10) // set to 10 times of leverage
exchange.SetDirection("buy") // set the order type as buy long
exchange.Buy(price+10, 20) // set contract quantity as 20 orders
pos = exchange.GetPosition()
Log(pos)
Log(exchange.GetOrders()) // check out if there is any unfinished order
exchange.SetDirection("closebuy"); // if it is a perpetual contract, directly set exchange.SetDirection("sell")
exchange.Sell(price-10, 20)
}
مکمل بند پوزیشنوں کی ایک مخصوص حکمت عملی کی مثال درج ذیل ہے:
function main(){
while(true){
var pos = exchange.GetPosition()
var ticker = exchange.GetTicekr()
if(!ticker){
Log('not able to obtain ticker')
return
}
if(!pos || pos.length == 0 ){
Log('no position')
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)
}
}
}
}
کریپٹوکرنسی لیوریج ٹریڈنگ کو کوڈ میں لیوریج اکاؤنٹ میں سوئچ کرنے کی ضرورت ہے، اور دیگر حصے اسپاٹ ٹریڈنگ کے برابر ہیں۔
استعمالexchange.IO("trade_margin") لیوریج اکاؤنٹ موڈ پر سوئچ کرنے کے لئے؛ ایک آرڈر رکھنے اور اکاؤنٹ کے اثاثوں کو حاصل کرنے سے پلیٹ فارم لیوریج کے انٹرفیس تک رسائی حاصل ہوگی۔ استعمالexchange.IO("trade_normal") عام اکاؤنٹ موڈ پر واپس سوئچ کرنے کے لئے.
معاون پلیٹ فارم:
کموڈٹی فیوچر ٹریڈنگ اور کریپٹوکرنسی فیوچر ٹریڈنگ کافی مختلف ہیں۔ سب سے پہلے ، کموڈٹی فیوچر کی تجارت کا وقت بہت مختصر ہے ، لیکن کریپٹوکرنسی کی تجارت 24 گھنٹوں تک کی جاتی ہے۔ کموڈٹی فیوچر کا پروٹوکول عام طور پر استعمال ہونے والا REST API نہیں ہے۔ کموڈٹی فیوچر کی تجارت کی تعدد اور زیر التواء آرڈر کی مقدار محدود ہے ، لیکن کریپٹوکرنسی کی بہت لچکدار ہیں ، وغیرہ۔ لہذا ، کموڈٹی فیوچر کی تجارت کرتے وقت بہت سارے نکات پر خصوصی توجہ کی ضرورت ہوتی ہے ، اور یہ ان لوگوں کے لئے تجویز کیا جاتا ہے جن کے پاس دستی آپریشن میں بھرپور تجربہ ہے۔ ایف ایم زیڈ اب کموڈٹی فیوچر سمیلیٹڈ بوٹ کی حمایت کرتا ہے ، اور آپ اس کا حوالہ دے سکتے ہیں۔https://www.fmz.com/bbs-topic/325اجناس کی فیوچر کمپنیوں کو شامل کرنے کے لئے:https://www.fmz.com/bbs-topic/371
کماڈٹی فیوچر نے جون 2019 میں شفاف نگرانی کا نفاذ کیا ہے۔ انفرادی پروگرام کے ل individual ، انفرادی صارفین کو فیوچر بروکرز کے لئے اجازت نامے کے کوڈ کے لئے درخواست دینے کے لئے اکاؤنٹ کھولنے کی ضرورت ہے (مخصوص درخواست کی معلومات کا ٹیمپلیٹ وی چیٹ گروپ یا کیو کیو گروپ میں بھیجا جاسکتا ہے) ، جس میں عام طور پر 4-5 دن لگتے ہیں۔ طریقہ کار کافی پیچیدہ ہیں۔ پروگرام کے مطابق تجارتی فراہم کنندہ کی حیثیت سے ، ایف ایم زیڈ پلیٹ فارم نے مختلف فیوچر سروس فراہم کرنے والوں سے سافٹ ویئر اجازت نامے کے کوڈوں کے لئے درخواست دی ہے۔ صارفین درخواست دینے کے بغیر براہ راست ان کا استعمال کرسکتے ہیں۔ فیوچر بروکر کو شامل کرتے وقت ،
ایف ایم زیڈ کوانٹ پلیٹ فارم ڈھانچے کے فوائد کی وجہ سے ، صارفین متعدد فیوچر بروکر اکاؤنٹس بھی شامل کرسکتے ہیں ، اور کچھ افعال کو نافذ کرسکتے ہیں جو دیگر خام مال فیوچر پروگرام ٹریڈنگ سافٹ ویئر مکمل نہیں کرسکتے ہیں ، جیسے ہائی فریکوئینسی ٹک کی ترکیب۔ آپ اس کا حوالہ دے سکتے ہیں:https://www.fmz.com/bbs-topic/1184
سب سے پہلے ، کیونکہ یہ 24 گھنٹے کی تجارت نہیں ہے اور اس میں لاگ ان آپریشن کی ضرورت ہے ، لہذا تجارت سے پہلے لنک کی حیثیت کا فیصلہ کرنا ضروری ہے۔exchange.IO("status")
ہےtrue
، جو پلیٹ فارم سے کامیاب کنکشن کی نشاندہی کرتا ہے۔ اگر لاگ ان کامیاب نہ ہونے پر API کو بلایا جاتا ہے تو ، _C(exchange.SetContractType,"MA888")
، جس میں کامیاب لاگ ان کو یقینی بنائے گا.
خام مال کے فیوچر کے مارکیٹ کوٹ کے حصول اور تجارتی کوڈز کریپٹوکرنسی فیوچر کے ساتھ ایک جیسے ہیں۔ یہاں ہم ان اختلافات اور نکات کو متعارف کروائیں گے جن پر توجہ دینے کی ضرورت ہے۔
function main(){
_C(exchange.SetContractType,"MA888") //If you do not log in successfully, you cannot subscribe to the contract, so better to try again
while(true){
if(exchange.IO("status")){
var ticker = exchange.GetTicker()
Log("MA888 ticker:", ticker)
LogStatus(_D(), "Already connected with CTP !")//_D obtain event
} else {
LogStatus(_D(), "Not connected with CTP !")
Sleep(1000)
}
}
}
یہ سفارش کی جاتی ہے کہ تجارت کے لئے خام مال فیوچر لائبریری کا استعمال کریں (جس کی وضاحت بعد میں کی جائے گی) ، اس وقت کوڈ بہت آسان ہوگا ، اور تکلیف دہ تفصیلات سے نمٹنے کی ضرورت نہیں ہے۔ ماخذ کوڈ کاپی ایڈریس:https://www.fmz.com/strategy/57029
function main() {
// Use the CTA strategy framework of commodity futures library
$.CTA(Symbols, function(st) {
var r = st.records
var mp = st.position.amount
var symbol = st.symbol
/*
"r" represents K-line, "mp" indicates the position amount of the current variety; positive number means long position, negative number means short position, and 0 means no position; "symbol" is the variety name
if the return value is n:
n = 0 : full close positions (no matter now they are long or short)
n > 0 : if right now long positions are held, add n long positions; if now they are short positions, close n short posiitons; if n is over the position amount right now, reverse to open long positions
n < 0 : if right now short positions are held, add n short positions; if now they are long positions, close n long posiitons; if -n is over the position amount right now, reverse to open short positions
*/
if (r.length < SlowPeriod) {
return
}
var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod));
if (mp <= 0 && cross > ConfirmPeriod) {
Log(symbol, "Golden Cross Period", cross, "the moment position", mp);
return Lots * (mp < 0 ? 2 : 1)
} else if (mp >= 0 && cross < -ConfirmPeriod) {
Log(symbol, "Death Cross Period", cross, "the moment position", mp);
return -Lots * (mp > 0 ? 2 : 1)
}
});
}
کموڈٹی فیوچر سی ٹی پی پروٹوکول کا استعمال کرتے ہیں ، اور مارکیٹ کی تمام قیمتوں کا تعین اور آرڈر پر عمل درآمد صرف تبدیلیوں کے بعد ہی مطلع کیا جائے گا ، جبکہ آرڈرز ، اکاؤنٹس اور پوزیشنوں کے بارے میں سوالات فعال سوالات ہیں۔ لہذا ، یہ ایونٹ سے چلنے والی اعلی تعدد کی حکمت عملیوں کو لکھنے کے لئے موزوں ہے۔ ڈیفالٹ موڈ میں مارکیٹ کی قیمتوں کا تعین حاصل کرنے کے لئے انٹرفیس ، جیسےGetTicker
, GetDepth
اورGetRecords
، سب کو تازہ ترین اعداد و شمار حاصل کرنے کے لئے ڈیٹا کیش کرنے کی ضرورت ہے۔ اگر کوئی ڈیٹا نہیں ہے تو ، یہ اس وقت تک انتظار کرے گا جب تک کہ اعداد و شمار موجود نہ ہوں ، لہذا حکمت عملی کے لئے
اگر آپ کو ہر بار آپ کو مارکیٹ کی قیمتوں کا تعین حاصل ڈیٹا حاصل کرنا چاہتے ہیں، یہاں تک کہ اگر یہ پرانے اعداد و شمار ہیں، آپ کو مارکیٹ کی قیمتوں کا تعین کی فوری اپ ڈیٹ موڈ پر سوئچ کر سکتے ہیںexchange.IO("mode", 0)
اس وقت ، حکمت عملی کو ایونٹ سے چلنے والے طور پر نہیں لکھا جاسکتا ہے ، اور تیز لامحدود لوپ سے بچنے کے لئے exchange.IO("mode", 1)
ڈیفالٹ کیش موڈ پر واپس سوئچ کرنے کے لئے.
ایک ہی معاہدہ چلانے پر ، پہلے سے طے شدہ موڈ استعمال کریں۔ تاہم ، اگر متعدد معاہدے ہیں تو ، یہ ممکن ہے کہ کسی ایک معاہدے میں مارکیٹ کی قیمتیں اپ ڈیٹ نہ ہوں ، جس کے نتیجے میں مارکیٹ کی قیمتوں کا تعین حاصل کرنے کے لئے انٹرفیس بلاک ہوجاتا ہے ، اور دوسرے معاہدوں کی قیمتوں کا تعین کی تازہ کاری بھی حاصل نہیں کی جاسکتی ہے۔ اس مسئلے کو حل کرنے کے لئے ، فوری اپ ڈیٹ موڈ استعمال کیا جاسکتا ہے ، لیکن اعلی تعدد کی حکمت عملی لکھنا تکلیف دہ ہے۔ اس وقت آپ آرڈرز اور قیمتوں کا تعین کرنے کے لئے ایونٹ پش موڈ استعمال کرسکتے ہیں۔ ترتیب دینے کا طریقہ یہ ہےexchange.IO("wait")
. اگر ایک سے زیادہ تبادلے اشیاء شامل کر رہے ہیں، جس اجناس مستقبل میں نایاب ہے، آپ کو استعمال کر سکتے ہیںexchange.IO("wait_any")
، اور واپس
مارکیٹ ٹِک تبدیلیوں کا دھکا:{Event:"tick", Index: platform index (in the order of the platforms added in the bot), Nano: event of nanosecond-level time, Symbol: contract name}
آرڈر دباؤ:{Event:"order", Index:Exchange index, Nano:Event of nanosecond-level time, Order:Order information (same as GetOrder)}
اس وقت تک، حکمت عملی کی ساخت کو اس طرح لکھا جا سکتا ہے:
function on_tick(symbol){
Log("symbol update")
exchange.SetContractType(symbol)
Log(exchange.GetTicker())
}
function on_order(order){
Log("order update", order)
}
function main(){
while(true){
if(exchange.IO("status")){ //Judge the link status
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//Subscribe to MA; only the subscription request for the first time is ture, and the later ones are program switches, which do not consume time
_C(exchange.SetContractType, "rb888")//Subscribe to rb
while(true){
var e = exchange.IO("wait")
if(e){
if(e.event == "tick"){
on_tick(e.Symbol)
}else if(e.event == "order"){
on_order(e.Order)
}
}
}
}else{
Sleep(10*1000)
}
}
}
یہ بھی نوٹ کریں کہ اجناس کے فیوچر اور کریپٹوکرنسی پلیٹ فارم کے مابین فرق ہے۔ مثال کے طور پر ،
exchange.IO("مصنوعات"): یہ پلیٹ فارم {معاہدہ نام: تفصیلات} پر تمام معاہدوں کی فہرست کو لغت کی شکل میں واپس کرتا ہے ، اور صرف بوٹس کی حمایت کرتا ہے۔exchange.IO("مصنوعات"): یہ پلیٹ فارم {معاہدہ نام: تفصیلات} پر تمام اشیاء کی فہرست لغت کی شکل میں واپس کرتا ہے ، اور صرف بوٹس کی حمایت کرتا ہے۔exchange.IO("سبسکرائب شدہ"): یہ پلیٹ فارم پر سبسکرائب شدہ مارکیٹ کوٹس کو لغت کی شکل میں واپس کرتا ہے ، اور صرف بوٹس کی حمایت کرتا ہے۔
کےContractType
روایتی سی ٹی پی فیوچر کا حوالہ معاہدے کی شناخت سے کرتا ہے ، جو بڑے اور چھوٹے سے حساس ہے۔ جیسےexchange.SetContractType("au1506")
. معاہدہ کامیابی کے ساتھ طے ہونے کے بعد ، یہ معاہدے کی تفصیلی معلومات ، جیسے کم سے کم خریداری کی رقم ، سروس فیس ، ترسیل کا وقت وغیرہ واپس کردے گا۔ جب متعدد معاہدوں کی خریداری کرتے ہو تو ، صرف پہلی بار خریداری کی درخواست اصل میں بھیجی جاتی ہے ، اور پھر تجارتی جوڑی کوڈ کی سطح پر صرف تبدیل کردی جاتی ہے ، جس میں وقت نہیں لگتا ہے۔ اہم مسلسل معاہدہ کوڈ 888 ہے ، جیسے MA888 ، مسلسل شرح معاہدہ 000 ہے ، جیسے MA000؛ 888 اور 000 ورچوئل معاہدہ تجارت ہیں جو صرف بیک ٹیسٹ کی حمایت کرتے ہیں ، اور اصلی بوٹس صرف مارکیٹ کی قیمتوں کا تعین کرتے ہیں۔تاہم، MyLanguage مرکزی معاہدے کو چل سکتا ہے، اور پروگرام خود بخود پوزیشنوں کو تبدیل کرے گا، یعنی غیر اہم پوزیشنوں کو بند کرے گا اور اہم پوزیشنوں پر نئی پوزیشنیں کھولے گا.
ناکام لاگ ان معاہدوں کو ترتیب نہیں دے سکتا ، لیکن فوری طور پر واپس آجائے گا ، لہذا آپ
SetDirection
چار پیرامیٹرز حاصل کر سکتے ہیں:buy, closebuy, sell, closesell
۔ خام مال کے مستقبل میں زیادہclosebuy_today
اورclosesell_today
، موجودہ پوزیشنوں کی بندش کی نشاندہی کرتا ہے۔ ڈیفالٹ ہےclosebuy/ closesell
، کل کی پوزیشنوں کی بندش کی نشاندہی کرتا ہے۔ شنگھائی فیوچر ایکسچینج کی صرف اقسام کو آج اور کل کی بندش میں تقسیم کیا گیا ہے ، جو سروس فیس کو متاثر کرسکتا ہے ، لہذا کل کی پوزیشنوں کی بندش کو ترجیح دینا ضروری ہے۔ سی ٹی پی روایتی فیوچر کے ل you ، آپ دوسرا پیرامیٹر
آپریشن | سیٹ ڈائریکشن پیرامیٹرز | آرڈر دینے کا کام |
---|---|---|
کھلی لمبی پوزیشن | exchange.SetDirection (( |
تبادلہ.خریدیں() |
طویل پوزیشن بند کریں | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
کھلی مختصر پوزیشن | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
مختصر پوزیشن بند کرنا | تبادلہ.سیٹ ڈائریکشن (( |
تبادلہ.خریدیں() |
مندرجہ ذیل مثال ایک مخصوص اختتامی پوزیشن فنکشن ہے۔ نوٹ کریں کہ یہ مثال بہت آسان ہے۔ آپ کو یہ بھی غور کرنا چاہئے کہ آیا یہ تجارتی وقت کے اندر ہے ، اگر یہ مکمل طور پر مکمل نہیں ہوا ہے تو زیر التواء آرڈر کی دوبارہ کوشش کیسے کی جائے ، آرڈر کا زیادہ سے زیادہ حجم کیا ہے ، آیا تعدد بہت زیادہ ہے ، اور کیا یہ سلائیڈنگ قیمت ہے یا مارکیٹ کی قیمت وغیرہ۔ صرف حوالہ کے لئے ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کس طرح آرڈر کو دوبارہ شروع کرنا چاہئے۔یہ حقیقی بوٹس میں پوزیشن کھولنے اور بند کرنے کے لئے تجویز کردہ پلیٹ فارمز کا لائبریری پیکج ہے:https://www.fmz.com/strategy/12961لائبریری کے سیکشن میں ایک مخصوص تعارف ہے، اور لائبریری کے ماخذ کوڈز کا مطالعہ بھی سفارش کی جاتی ہے.
function Cover(contractType, amount, slide) {
for (var i = 0; i < positions.length; i++) {
if (positions[i].ContractType != contractType) {
continue;
}
var depth = _C(e.GetDepth);
if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) {
exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy");
exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "Close today" : "Close yesterday", 'Bid', depth.Bids[0]);
} else {
exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell");
exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "Close today" : "Close yesterday", 'Ask', depth.Asks[0]);
}
}
}
کموڈٹی فیوچر اپنی مرضی کے آرڈر کی اقسام کی حمایت کرتے ہیں (بوٹس کی حمایت کرتے ہیں ، لیکن بیک ٹسٹ کے لئے نہیں) ، جو
exchange.SetDirection("buy_ioc");
exchange.SetDirection("sell_gtd-20170111")
مخصوص ضمنی الفاظ:
پہلے سے طے شدہ طور پر ، خام مال کے مستقبل کے بروکرز میں کھلے ہوئے انٹرفیس تمام سی ٹی پی انٹرفیس ہیں۔ اگر ضرورت ہو تو ، ان کی جگہ ایسننی انٹرفیس لے سکتے ہیں۔ ایف ایم زیڈ کے انکیپسولیشن کے ذریعہ ، کال کرنے کا طریقہ ایک جیسا ہے۔ فرق یہ ہے کہ اکاؤنٹس ، آرڈرز اور پوزیشنیں سب پش موڈ میں ہیں ، لہذا ڈوکر ان ڈیٹا کو مقامی طور پر برقرار رکھے گا ، اور جب متعلقہ انٹرفیس کو بلایا جائے گا تو فوری طور پر واپس آجائے گا ، بغیر واقعی درخواست کی جائے۔
Esunny پروٹوکول کسٹم آرڈر کی اقسام ہیں:
جب بوٹ انٹرفیس پر لاگ ان ریکارڈ کو لاگ ان کریں ، اور سٹرنگ کے بعد کردار Log('Push to WeChat@')
.
لاگ رنگ بھی اپنی مرضی کے مطابق کیا جا سکتا ہے، جیسےLog('this is a log in red font #ff0000')
.
#ff0000
RGB رنگ کا ہیکساڈیسمل ہے ، اس بات کی نشاندہی کرتا ہے کہ تمام لاگ فائلیں اس ڈائرکٹری میں بوٹ کے SqLit ڈیٹا بیس میں محفوظ ہیں جہاں ڈوکر واقع ہے ، جسے ڈاؤن لوڈ کیا جاسکتا ہے اور ڈیٹا بیس سافٹ ویئر کے ساتھ کھولا جاسکتا ہے ، یا بیک اپ کاپی کرنے اور بحال کرنے کے لئے استعمال کیا جاسکتا ہے (ڈیٹا بیس کا نام اور بوٹ آئی ڈی ایک جیسے ہیں) ۔
یہ منافع کو ریکارڈ کرتا ہے ، اور بوٹ انٹرفیس پر منافع کے منحنی خطوط تیار کرتا ہے ، جو بوٹ کو دوبارہ شروع کرنے کے بعد برقرار رکھا جاسکتا ہے۔ طلب کرنے کا طریقہ:LogProfit(1000)
نوٹ کریں کہ پیرامیٹرLogProfit
ضروری نہیں کہ منافع ہو، اور یہ کوئی بھی نمبر ہو سکتا ہے اور اسے خود بھرنے کی ضرورت ہے۔
اگر بوٹ کی حیثیت، چونکہ لاگ پہلے محفوظ کیا جائے گا اور مسلسل تازہ کاری کی جائے گی، صرف نمائش کے لئے معلومات کی ضرورت ہوتی ہے نہ کہ بچانے کے لئے، آپ کو استعمال کر سکتے ہیںLogStatus
فنکشن.LogStatus
تار ہیں، جو ٹیبل کی معلومات کی نمائندگی کرنے کے لئے بھی استعمال کیا جا سکتا ہے.
ایک مخصوص حقیقی بوٹ پوزیشن ڈسپلے ٹیبل کا ایک مثال:
var table = {type: 'table', title: 'position information', cols: ['Column1', 'Column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]};
LogStatus('`' + JSON.stringify(table) + '`'); // After serialization, JSON will be added the character "'" on both sides, which is regarded as a comlpex messag format (now supporting tables)
LogStatus('The first line information\n`' + JSON.stringify(table) + '`\nthe third line information'); // the table information can be displayed in multiple lines
LogStatus('`' + JSON.stringify([table, table]) + '`'); // Multiple tables are supported to be displayed at the same time, which will be displayed in one group by TAB
LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n