[TOC] اس سبق میں حکمت عملی لکھنے کے بارے میں ابتدائی معلومات شامل ہیں ، بشمول API کا تعارف ، جانچ پڑتال ، چارٹ وغیرہ۔ اس بنیادی سبق کو سیکھنے کے بعد ، صارف بنیادی API کو مہارت کے ساتھ استعمال کرنے کے قابل ہو جائے گا تاکہ وہ مستحکم ڈسک کی حکمت عملی لکھ سکے۔ اس سبق کو سیکھنے سے پہلے ، سیکھنے کی ضرورت ہے۔ایف ایم زیڈ کے موجدوں نے مقداری پلیٹ فارم کا استعمال کیا 。
پرانے سبق:موجد کی مقدار ((FMZ.COM) حکمت عملی مکمل طور پر استعمال دستی 2.0 ((ٹیوٹوریل)اس ٹیوٹوریل میں بہت سے پوسٹس کی فہرست دی گئی ہے اور آپ کو اس کی جانچ پڑتال کرنے کی سفارش کی جاتی ہے۔
پروگرامنگ ٹرانزیکشن (انگریزی: Programmatic Trading) ایک ایسا طریقہ ہے جس میں ایک پروگرام API کے ذریعے ایک تبادلے کی جگہ سے منسلک ہوتا ہے تاکہ خود کار طریقے سے خرید و فروخت یا دیگر افعال کو انجام دیا جاسکے۔
فی الحال ڈیجیٹل کرنسی کے تبادلے میں بنیادی طور پر دو قسم کے انٹرفیس پروٹوکول ہیں: REST اور Websocket ؛ REST پروٹوکول ہر بار ڈیٹا حاصل کرنے کے لئے ایک بار تک رسائی حاصل کرنے کی ضرورت ہے۔ ہم آہنگ تبادلے wex.app کے API کی مثال کے طور پر ، براہ راست براؤزر میں https://api.wex.app/api/v1/public/ticker?market=BTC_USDT کھولیں ، جس کے نتائج:
{"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 کے ساتھ تجارت کی جاتی ہے اور ہر بار اپ ڈیٹ ہونے پر اس میں تبدیلی آتی ہے۔market=
اس کے بعد مخصوص ٹرانزیکشن پیرامیٹرز ہیں جو دوسرے ٹرانزیکشنز کے اعداد و شمار کو حاصل کرنے کے لئے تبدیل کیے جاسکتے ہیں۔ عوامی انٹرفیس جیسے مارکیٹوں کے لئے ، سب کو رسائی حاصل ہے ، لہذا تصدیق کی ضرورت نہیں ہے ، جبکہ کچھ انٹرفیس جیسے ذیل میں دیئے گئے آرڈر اور اکاؤنٹ تک رسائی کے ل user صارف کی شناخت کی ضرورت ہوتی ہے ، اس وقت API-KEY کا استعمال کرتے ہوئے دستخط کرنے کی ضرورت ہوتی ہے۔ ویب ساکٹ سبسکرپشن موڈ ہے ، جس میں سبسکرپشن کی ضرورت ہوتی ہے ، تبادلے کے بعد ، تبادلے کو اپ ڈیٹ شدہ ڈیٹا پروگرام کو بھیج دیا جاتا ہے ، ہر بار دوبارہ رسائی کی ضرورت نہیں ہوتی ہے ، لہذا زیادہ موثر ہے۔
ایف ایم زیڈ کیوٹی ٹریڈنگ پلیٹ فارم نے مختلف ایکسچینجز کے لئے REST انٹرفیس کو احاطہ کیا ہے ، جس میں کال کرنے اور ڈیٹا فارمیٹ کرنے کا ایک مربوط طریقہ استعمال کیا گیا ہے ، جس سے حکمت عملی کو لکھنا زیادہ آسان اور عام ہے۔ ایف ایم زیڈ پلیٹ فارم پر ویب ساکٹ کی سہولت کی حمایت کی جاسکتی ہے ، جس کا تفصیلی تعارف اگلے سبق میں کیا جائے گا۔
ایف ایم زیڈ پلیٹ فارم اے پی آئی دستاویزات زیادہ تر جاوا اسکرپٹ کی مثال کے طور پر ہیں ، لیکن پیکیجنگ کی وجہ سے ، مختلف زبانوں میں کوئی فرق نہیں ہے ، صرف نحوی مسائل پر توجہ دینا ضروری ہے۔ سی ++ قدرے خاص ہے ، بعد میں ٹیوٹوریل میں خصوصی طور پر تعارف کیا جائے گا۔ جے ایس نسبتا simple آسان ہے اور اس میں مطابقت کے مسائل نہیں ہیں ، لہذا نئے آنے والوں کو استعمال کرنے کی سفارش کی جاتی ہے۔ ایف ایم زیڈ کوالٹی پلیٹ فارم مکمل پییٹن کی حمایت کرتا ہے ، مختلف قسم کے انسٹال کرنے کے لئے آزاد ہے ، اور ایک مخصوص پروگرامنگ کی بنیاد کا استعمال کرنے کی سفارش کی جاتی ہے۔ ایسے صارفین کے لئے جو پروگرامنگ کی زبان نہیں سیکھنا چاہتے ہیں ، لیکن صرف حکمت عملی کو جلدی سے لکھنا چاہتے ہیں ، ایف ایم زیڈ پلیٹ فارم بھی میور زبان کی حمایت کرتا ہے ، بنیادی طور پر مطابقت رکھتا ہے ، ٹیکسٹ فنانس کی حکمت عملی ، کچھ تجربے سے متعلق سفارشات بھی استعمال کرتا ہے ، نقصان یہ ہے کہ پروگرامنگ کی زبان نہیں ہے۔
پیتھون کے مختلف ورژن ہونے کی وجہ سے ، پروگرام کے آغاز میں مخصوص کیا جاسکتا ہے ، جیسے:#!Python2
,#!Python3
◦ نوٹ کریں کہ جاوا اسکرپٹ نے حال ہی میں ای ایس 6 کی نحو کو اپ گریڈ کیا ہے ، یہ جاننا دلچسپ ہے۔ ذیل میں ایک ہی فنکشن کے لئے پیتھون اور جاوا اسکرپٹ کوڈ دکھایا گیا ہے ، صرف نحو کے فرق کو دیکھا جاسکتا ہے ، لہذا API دستاویزات صرف جاوا اسکرپٹ کی مثالیں پیش کرتی ہیں ، اس سبق میں پیتھون کے خصوصی استعمال کی مثالوں کو بھی مدنظر رکھا جائے گا۔
#python代码
def main():
while True:
Log(exchange.GetAccount().Balance)
Sleep(2000)
#相应的Js代码
function main(){
while(true){
Log(exchange.GetAccount().Balance)
Sleep(2000)
}
}
ایف ایم زیڈ کیوٹیفکیشن پلیٹ فارم ڈیبگنگ ٹولز فراہم کرتا ہے تاکہ ای پی آئی انٹرفیس کو ڈیبگ کیا جا سکے۔https://www.fmz.com/m/debug♦ ڈیبگ ٹول صرف جاوا اسکرپٹ کی حمایت کرتا ہے ، صرف ایک وقت کے لئے چل سکتا ہے ، ایکسچینج انٹرفیس کو ڈیبگ کرنے کے لئے کسی بھی ڈسک کو تخلیق کرنے کی ضرورت نہیں ہے۔ ♦ واپسی کا ڈیٹا نتائج کے طور پر واپس آجائے گا ، ڈیبگ ٹول کا کوڈ محفوظ نہیں کیا جائے گا۔
پالیسی پروگراموں کی طرح عام پروگراموں کی طرح ، کوڈ ترتیب میں عملدرآمد کیا جاتا ہے ، خاص بات یہ ہے کہ اس میں ایک مین فنکشن ہونا ضروری ہے۔ چونکہ پالیسیوں کو مستقل طور پر چلانے کی ضرورت ہوتی ہے ، عام طور پر ، ایک لوپ کے ساتھ ساتھ نیند کا وقت بھی درکار ہوتا ہے۔ چونکہ ٹرانزیکشن کے تمام API تک رسائی کی تعدد محدود ہے ، لہذا نیند کا وقت اسی طرح ایڈجسٹ کرنے کی ضرورت ہوتی ہے۔ یہ فن تعمیر عام طور پر فکسڈ وقفے سے عملدرآمد کی جاتی ہے ، اور ویب سوکٹ کو ایونٹ سے چلنے والی پالیسیاں لکھنے کے لئے بھی استعمال کیا جاسکتا ہے ، جیسے کہ جب بھی گہرائی میں تبدیلی آتی ہے تو فوری طور پر عملدرآمد ہوتا ہے ، جو ترقی پذیر سبق میں متعارف کرایا جائے گا۔
دیگر افعال جن کا خاص کردار ہے وہ ہیں:
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
while(true){
onTick()
Sleep(6000)
}
}
پچھلی مثال میں اگر نیٹ ورک تک رسائی کی غلطی سے براہ راست پالیسی کا خاتمہ ہوسکتا ہے ، اگر آپ ایسی پالیسی چاہتے ہیں جو خود بخود دوبارہ شروع ہونے کی طرح نہیں رکتی ہے تو ، آپ دوبارہ ڈسک کی پالیسی کا استعمال کرسکتے ہیں تاکہ غلطیوں کو روکنے کے لئے غلطی کا استعمال نہ کریں۔ یقینا only جب یہ پالیسی مستحکم ہو تو ہی یہ کام کرنے کی سفارش کی جاتی ہے ، ورنہ یہ تمام غلطیوں کو غلط نہیں کرے گا ، اور اس کی پالیسی کے مسئلے کو ترتیب دینا مشکل ہے۔
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
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)
}
}
جیسا کہ پہلے ذکر کیا گیا ہے ، مارکیٹ انٹرفیس عام طور پر ایک عوامی انٹرفیس ہے ، جو سب کے لئے قابل رسائی ہے۔ عام مارکیٹ انٹرفیس میں شامل ہیں: مارکیٹ ٹکر حاصل کریں ، گہرائی کی گہرائی حاصل کریں ، K لائن ریکارڈز حاصل کریں ، ٹرانزیکشن ریکارڈ ٹریڈز حاصل کریں۔ مارکیٹ تجارت کے فیصلے کے لئے حکمت عملی کی بنیاد ہے۔ ذیل میں ایک ایک کرکے پیش کیا جائے گا ، بہتر ہے کہ ڈیبگ ٹول میں خود ہی کوشش کریں ، اگر آپ کو تفصیلی وضاحت کی ضرورت ہو تو آپ API دستاویزات دیکھ سکتے ہیں۔
اور یہ انٹرفیس میں عام طور پر ہوتا ہےInfo
ایک فیلڈ، جس میں اصل ڈیٹا سٹرنگ کی نمائندگی کی جاتی ہے جو تبادلے کی طرف سے واپس آتی ہے، اضافی معلومات کے لئے استعمال کیا جا سکتا ہے، جو پہلے سے ہی تجزیہ کیا جانا چاہئے، جاوا اسکرپٹ کا استعمال کرتے ہوئےJSON.parse()
آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔Time
اس فیلڈ میں درخواست کا ٹائم لائن ظاہر ہوتا ہے اور اس کا استعمال تاخیر کا فیصلہ کرنے کے لئے کیا جاتا ہے۔
ایک حقیقی ڈسک میں API انٹرفیس کا استعمال کرتے ہوئے، رسائی ناکام ہو گئی ہے اور واپسی کا امکان ہےnull
پیتھون واپس آگیاNone
اس کے علاوہ ، اس میں موجود اعداد و شمار کو استعمال کرتے وقت غلطیوں کا سامنا کرنا پڑتا ہے اور اس کی وجہ سے ڈسک کو روک دیا جاتا ہے ، لہذا غلطیوں کو برداشت کرنا بہت ضروری ہے۔ اس سبق میں الگ الگ بیان کیا جائے گا۔
مارکیٹ کی موجودہ صورتحال کا حصول ، شاید سب سے زیادہ استعمال ہونے والا انٹرفیس ہے ، جس میں پچھلی ٹرانزیکشن کی قیمت ، خرید و فروخت کی قیمت ، حالیہ ٹرانزیکشن کی مقدار وغیرہ کی معلومات حاصل کی جاسکتی ہیں۔ آرڈر دینے سے پہلے ٹکر کی معلومات کے مطابق ٹرانزیکشن کی قیمت کا تعین کیا جاسکتا ہے۔ ایک حقیقی پلیٹ فارم کی واپسی کی مثال{"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 。可以看到具体的结果。
Log('上次成交价: ',ticker.Last, '买一价: ', ticker.Buy)
}
لنک کی گہرائی کی معلومات حاصل کریں۔ اگرچہ گیٹ ٹکر میں خرید و فروخت کی ایک فہرست شامل ہے ، لیکن اگر آپ گہری فہرستوں کا استفسار کرنا چاہتے ہیں تو ، آپ عام طور پر اس انٹرفیس کا استعمال کرتے ہوئے اوپر اور نیچے 200 فہرستوں کو تلاش کرسکتے ہیں۔ آپ اس انٹرفیس کا استعمال کر کے دھچکا قیمت کا حساب لگاسکتے ہیں۔ ذیل میں ایک حقیقی واپسی کا نتیجہ ہے۔ جہاں Asks فروخت کی فہرستوں کا اشارہ کرتا ہے ، جس میں صف میں بالترتیب فروخت کی ایک صف ، فروخت کی دوسری صف... لہذا قیمتیں بھی بالترتیب بڑھتی ہیں۔
{
"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
}
گہرائی میں خریداری اور فروخت کے احکامات کا استعمال کرتے ہوئے ایک مثال:
function main() {
var depth = exchange.GetDepth()
Log('买一价个: ', depth.Bids[0].Price, '卖一价格: ', depth.Asks[0].Price)
}
K لائن حاصل کریں ، جو ایک بار میں طویل عرصے سے قیمت کی معلومات واپس کرنے کے لئے استعمال ہونے والے سب سے عام انٹرفیسوں میں سے ایک ہے۔ مختلف اشارے کی بنیاد پر حساب کتاب کریں۔ K لائن کا دورانیہ اگر مخصوص نہیں کیا گیا ہے تو اس کا مطلب ہے کہ ڈیفالٹ دورانیہ استعمال کیا جائے گا۔ K لائن کی لمبائی کا تعین نہیں کیا جاسکتا ہے ، جو وقت کے ساتھ ساتھ بڑھتا رہتا ہے ، زیادہ سے زیادہ 2000 بٹن ، پہلی بار کال کرنے پر تقریبا 200 بٹن ((مختلف تبادلے مختلف لوٹتے ہیں) ؛ آخری K لائن تازہ ترین K لائن ہے ، لہذا اعداد و شمار کے ساتھ ساتھ جاری رہے گا ، پہلی K لائن قدیم ترین اعداد و شمار ہے۔
exchange.SetMaxBarLen(Len)
پہلی بار K لائن حاصل کرنے کی تعداد مقرر کی جاسکتی ہے (کچھ تبادلے کی حمایت کرتے ہیں) اور زیادہ سے زیادہ K لائنوں کی تعداد مقرر کی جاتی ہے۔مثال کے طور پرexchange.SetMaxBarLen(500)
گیٹ ریکارڈز میں دورانیے کی وضاحت کی جاسکتی ہے: PERIOD_M1:1 منٹ ، PERIOD_M5:5 منٹ ، PERIOD_M15:15 منٹ ، PERIOD_M30:30 منٹ ، PERIOD_H1:1 گھنٹے ، PERIOD_D1:1 دن ؛ خاص طور پر استعمال کیا جاتا ہے۔exchange.GetRecords(PERIOD_M1)
♦ تازہ ترین مینیجر کو اپ گریڈ کرنے کے بعد ، کسٹم سائیکل کی حمایت کی جائے گی ، سیکنڈوں کے سیکنڈ کو بطور پیرامیٹر براہ راست منتقل کیا جائے گا ، منٹ کی سطح پر کسٹم 1 منٹ کی لائن کے مطابق تیار کیا جائے گا ، 1 منٹ سے کم کی لائن کو گیٹ ٹریڈز کے ذریعہ تیار کیا جائے گا ، اور تجارتی مستقبل کو ٹک کے مطابق تیار کیا جائے گا۔نوٹ کریں کہ اس سبق میں آپ کو اسی طرح کے مسائل کا سامنا کرنا پڑتا ہے۔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 دستاویزات سے رجوع کریں.
یہ انٹرفیس اکاؤنٹ سے وابستہ ہونے کی وجہ سے براہ راست حاصل نہیں ہوسکتے ہیں ، لہذا 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)
،Price قیمت ہے ،Amount مقدار ہے ،Msg ایک اضافی تار ہے جو فلیٹ ڈسک لاگ ان میں دکھائی دے سکتی ہے ، ضروری نہیں ہے۔ اس طرح منسلک ہے ، اگر فوری طور پر مکمل طور پر عملدرآمد نہیں کیا جاسکتا ہے تو ، غیر منسلک آرڈر پیدا ہوتا ہے ، جس کے نتیجے میں آرڈر کی کامیابی آرڈر آئی ڈی کے طور پر واپس آتی ہے ، اور ناکامی آرڈر آئی ڈی کے طور پر۔null
آپ کے آرڈر کی حیثیت کی جانچ پڑتال کے لئے.
اگر آپ مارکیٹ کی قیمت ادا کرنا چاہتے ہیں تو ، قیمت 1 ہے ، رقم کی قیمت ، جیسےexchange.Buy(-1, 0.5)
تجارت درست ہےETH_BTC
اس کے علاوہ ، ای ٹی ایچ کی قیمتوں میں بھی اضافہ ہوا ہے۔ اس کے علاوہ ، ای ٹی ایچ کی قیمتوں میں اضافہ ہوا ہے۔
تمام قیمتوں اور مقدار کی درستگی کی ضروریات کے لئے دستیاب_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 فروخت کیا۔
آرڈر کی شناخت کے مطابق آرڈر کی معلومات حاصل کریں۔ عام طور پر استعمال کردہ انٹرفیس ، کال کرنے کا طریقہexchange.GetOrder(OrderId)
آرڈر آئی ڈی آرڈر آئی ڈی کے طور پر ، جب آپ آرڈر کرتے ہیں تو واپس آ جاتا ہے۔احکامات کی اقسام پر توجہ دیںType
فیلڈ اور آرڈر کی حیثیتStatus
اصل اقدار عددی ہیں اور مختلف معنی کی نمائندگی کرتی ہیں ، لیکن یہ یاد رکھنے کے لئے نقصان دہ ہے ، ایف ایم زیڈ نے ان اقدار کی نمائندگی عالمی مستقلات کے ساتھ کی ہے ، جیسے غیر منقولہ احکامات۔Status
اور اس کی قیمت 0 ہے.ORDER_STATE_PENDING
یہ تمام عالمی مستقلات دستاویزات میں دیکھے جا سکتے ہیں۔◄ نتائج واپس:
{
"Id":125723661, //订单id
"Amount":0.01, //订单数量
"Price":7000, //订单价格
"DealAmount":0, //已成交数量
"AvgPrice":0, //成交均价
"Status":0, // 0:未完全成交, 1:已成交, 2:已撤单
"Type":1,// 订单类型,0:买单, 1:卖单
"ContractType":"",//合约类型,用于期货交易
"Info":{} //交易所返回原始信息
}
}
ایک حکمت عملی جس میں مخصوص مقدار میں کرنسی خریدنے کی ضرورت ہے:
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){ //这里也可以用 status == ORDER_STATE_PENDING 来判断。
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)
❖ منسوخ کرنے میں کامیابی true لوٹتی ہے، ورنہ false لوٹتی ہے۔ ❖ نوٹ کریں کہ آرڈر مکمل طور پر مکمل ہوچکا ہے اور منسوخ کرنے میں ناکام ہے۔ ❖
ڈیجیٹل کرنسی فیوچر ٹریڈنگ اور فوری طور پر تجارت سے مختلف ہے ، اوپر دیئے گئے فوری طور پر تجارت کے افعال بھی فیوچر کے لئے لاگو ہوتے ہیں ، اور ایک ہی فیوچر ٹریڈنگ کے لئے خصوصی افعال ہیں۔ ڈیجیٹل کرنسی فیوچر پروسیسرڈ ٹریڈنگ کرنے سے پہلے ، ویب سائٹ پر دستی آپریشن سے واقف ہونا ضروری ہے ، بنیادی تصورات کو سمجھنا ، جیسے کھولنے ، بریک ، مکمل پوزیشن ، بریک ، فائدہ اٹھانا ، بریک نقصان ، فلوٹنگ منافع ، ضمانت کی رقم وغیرہ کے تصورات اور اس کے مطابق حساب کتاب کے فارمولوں کو سمجھنا ضروری ہے۔ ہر فیوچر ایکسچینج میں متعلقہ سبق مل سکتے ہیں ، آپ کو خود سیکھنا چاہئے۔
مستقل معاہدے اور مستقبل کے معاہدے اسی طرح کے ہیں ، لیکن ایک فرق یہ ہے کہ ایک ہی وقت میں متعدد خالی جگہوں کو برقرار رکھنے کا تصور نہیں ہے۔
اگر ایک ایکسچینج ایک ہی وقت میں فوری طور پر آنے والے فیوچر کی حمایت کرتا ہے ، جیسے اوکیکس اور ہووبی فیوچر ، تو تبادلے کے انٹرفیس میں علیحدہ علیحدہ منتخب کرنے کی ضرورت ہوتی ہے تاکہ اوکیکس فیوچر ٹولز اور ہووبی فیوچر ٹولز کو شامل کیا جاسکے ، جو ایف ایم زیڈ میں فوری طور پر مختلف تبادلوں کے طور پر دیکھا جاتا ہے۔
فیوچر ٹریڈنگ کا پہلا مرحلہ یہ ہے کہ جس معاہدے پر تجارت کی جائے اسے ترتیب دیا جائے ، مثال کے طور پر اوکیکس فیوچر ، جب حقیقی ڈیسک یا ریویو بناتے وقت بی ٹی سی ٹریڈنگ کا انتخاب کریں ، اور کوڈ میں اس ہفتے ، اگلے ہفتے یا سہ ماہی کے معاہدے کی ترتیب کی ضرورت ہوتی ہے۔ اگر یہ ترتیب نہیں ہے تو اشارہ کیا جائے گا۔invalid contract type
。فوری تجارت کے برعکس ، مستقبل کے معاہدوں میں عام طور پر تجارت کی جانے والی کرنسیوں جیسے بی ٹی سی کی ضمانت دی جاتی ہے ، تجارت کے جوڑے میں بی ٹی سی کے علاوہ عام طور پر بی ٹی سی کی ضمانت دی جانے والی بی ٹی سی_یو ایس ڈی ٹریڈنگ جوڑی کی نمائندگی کی جاتی ہے ، اگر USDT کی ضمانت دی جانے والی فیوچر موجود ہے تو ، ایسا کرنے کے لئے حقیقی ڈیسک کو شامل کرنے کی ضرورت ہوتی ہے۔تجارت کے بعد جوڑے کو ترتیب دینے کے بعد ، معاہدے کی مخصوص اقسام ، جیسے مستقل ، اسی ہفتے ، اگلے ہفتے وغیرہ کو بھی ترتیب دیا جاتا ہے۔ معاہدے کو ترتیب دینے کے بعد ، خرید و فروخت ، خرید و فروخت وغیرہ کی کارروائی کی جاسکتی ہے۔
بینان ، اوکیکس ، ہووبی ڈی ایم جیسے موجودہ سکے اور یو ایس ڈی ٹی پر مبنی معاہدوں میں فرق کرنے کی ضرورت ہے جب حقیقی ڈسک سیٹ اپ معاہدہ شامل کیا جائے۔ مخصوص ترتیبات درج ذیل ہیں۔
//OKEX期货
exchange.SetContractType("swap") // 设置为永续合约
exchange.SetContractType("this_week") // 设置为当周合约
exchange.SetContractType("next_week") // 设置为次周合约
exchange.SetContractType("quarter") // 设置为季度合约
//HuobiDM
exchange.SetContractType("this_week") // 设置为当周合约
exchange.SetContractType("next_week") // 设置为次周合约
exchange.SetContractType("quarter") // 设置为季度合约
exchange.SetContractType("swap") // 设置为永续合约
//币安期货
exchange.SetContractType("swap") // 设置为永续合约,注意币本位和USDT本位都存在永续
exchange.SetContractType("quarter") // 设置为当季合约
exchange.SetContractType("next_quarter") // 设置为次季合约
//BitMEX
exchange.SetContractType("XBTUSD") // 设置为永续合约
exchange.SetContractType("XBTM19") // 具体某个时间结算的合约,详情登录BitMEX查询各个合约代码
//GateIO
exchange.SetContractType("swap") // 设置为永续合约,不设置默认为swap永续合约。
//Deribit
exchange.SetContractType("BTC-27APR18") // 具体某个时间结算的合约,详情参看Deribit官网。
موجودہ ہولڈنگ کی معلومات کی فہرست حاصل کریں، OKEX ((OKCOIN) فیوچر کو ایک پیرامیٹر میں منتقل کیا جاسکتا ہے جو معاہدے کی قسم کو حاصل کرنے کی وضاحت کرتا ہے۔ اگر کوئی ہولڈنگ نہیں ہے تو خالی فہرست لوٹاتا ہے۔[]
◄ ہولڈنگ کی معلومات مندرجہ ذیل طور پر واپس آتی ہیں، بہت سی مخصوص معلومات ہیں، جن کو تجارت کے مخصوص تجزیہ کے ساتھ جوڑنے کی ضرورت ہے۔
ڈیٹا کی اقسام | متغیر کا نام | وضاحت |
---|---|---|
چیز | معلومات | ایکسچینج کی اصل ساخت واپس |
نمبر | مارجن لیول | بیعانہ کا سائز، OKCoin 10 یا 20 ہے، ٹھیک ہے، مستقبل کے پورے اسٹاک موڈ کو فکسڈ 10 پر واپس آ جاتا ہے کیونکہ مقامی API کی حمایت نہیں کرتا |
نمبر | رقم | ذخیرہ اندوزی ، او کے کوئن معاہدے کے حصص کا اشارہ کرتا ہے ((پوری تعداد اور 1 سے زیادہ) |
نمبر | منجمد مقدار | پوزیشن منجمد مقدار |
نمبر | قیمت | اسٹاک کی اوسط قیمت |
نمبر | مارجن | ضمانت کی رقم منجمد |
نمبر | منافع | کموڈٹی فیوچر: ہولڈنگ ہولڈنگ مارکیٹ میں نقصان، ڈیجیٹل کرنسی: ((ڈیجیٹل کرنسی یونٹ: بی ٹی سی / ایل ٹی سی ، روایتی فیوچر یونٹ: آر ایم بی ، نوٹ: او کے کوئن فیوچر مکمل ہولڈنگ کی صورت میں منافع کا مطلب ہے ، نہ کہ ہولڈنگ ہولڈنگ ، ہر ہولڈنگ کے تحت ہولڈنگ ہولڈنگ) |
کنسٹ | قسم | PD_LONG ایک کثیر پوزیشن کے لئے (CTP میں closebuy_today کے ساتھ) ، PD_SHORT ایک خالی پوزیشن کے لئے (CTP میں closeesell_today کے ساتھ) ، (CTP مستقبل میں) PD_LONG_YD کل کی کثیر پوزیشن کے لئے (closebuy کے ساتھ) ، PD_SHORT_YD کل کی خالی پوزیشن کے لئے (closesell کے ساتھ) |
سٹرنگ | معاہدہ کی قسم | اجناس کے مستقبل کے لئے معاہدہ کوڈ، اسٹاک کے لئے کرنسی کے تبادلے کا کوڈ _ اسٹاک کوڈ کی کرنسی، مخصوص پیرامیٹر SetContractType کے لئے ان پٹ کی قسم |
function main(){
exchange.SetContractType("this_week");
var position = exchange.GetPosition();
if(position.length>0){ //特别要注意引用前要先判断position长度再引用,否则会出错
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
,closebuy
◦**مخصوص تعلقات:
آپریشن | SetDirection کے پیرامیٹرز | ذیلی افعال |
---|---|---|
زیادہ اسٹاک | exchange.SetDirection (( |
تبادلہ.خریدیں() |
پلائیووڈ | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
خالی گودام | exchange.SetDirection (( |
تبادلہ.فروخت ((() |
خالی اسٹور | تبادلہ.سیٹ ڈائریکشن (( |
تبادلہ.خریدیں() |
آخر میں ، مخصوص کھلی پوزیشنوں کا کوڈ ہے ، جس کی مقدار مختلف تبادلے میں مختلف ہوتی ہے ، جیسے کہ ہووبی فیوچر 100 ڈالر کی رقم پر ہے۔ نوٹ: فیوچر ریویو مارکیٹ کی قیمت کی فہرست کی حمایت نہیں کرتا ہے۔
function main(){
exchange.SetContractType("this_week") // 举例设置 为OKEX期货 当周合约
price = exchange.GetTicker().Last
exchange.SetMarginLevel(10) //设置杠杆为10倍
exchange.SetDirection("buy") //设置下单类型为做多
exchange.Buy(price+10, 20) // 合约数量为20下单
pos = exchange.GetPosition()
Log(pos)
Log(exchange.GetOrders()) //查看是否有未成交订单
exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")
exchange.Sell(price-10, 20)
}
ذیل میں ایک مخصوص مثال دی گئی ہے کہ کس طرح تمام تجارت کو ختم کیا جا سکتا ہے۔
function main(){
while(true){
var pos = exchange.GetPosition()
var ticker = exchange.GetTicekr()
if(!ticker){
Log('无法获取ticker')
return
}
if(!pos || pos.length == 0 ){
Log('已无持仓')
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) عام اکاؤنٹ موڈ پر واپس جائیں۔
سپورٹ شدہ تبادلے:
کموڈٹی فیوچر ٹریڈنگ اور ڈیجیٹل کرنسی فیوچر ٹریڈنگ میں بہت فرق ہے۔ سب سے پہلے ، کموڈٹی فیوچر ٹریڈنگ کا وقت بہت کم ہے ، ڈیجیٹل کرنسی 24h ٹریڈنگ ہے۔ کموڈٹی فیوچر ٹریڈنگ کا پروٹوکول بھی عام طور پر استعمال ہونے والا REST API نہیں ہے۔ کموڈٹی فیوچر ٹریڈنگ کی تعدد اور منسلک فہرستوں کی تعداد پر پابندی عائد ہے ، جبکہ ڈیجیٹل کرنسی بہت لچکدار ہے ، وغیرہ۔ لہذا ، تجارتی کموڈٹی فیوچر ٹریڈنگ میں بہت ساری جگہیں ہیں جن پر خصوصی توجہ کی ضرورت ہوتی ہے ، لہذا آپریشن کے لئے بھرپور دستی آپریشن کا تجربہ کرنے کی سفارش کی جاتی ہے۔ FMZ simnow کموڈٹی فیوچر ٹریڈنگ سمیلیٹر کی حمایت کرتا ہے۔ حوالہ:https://www.fmz.com/bbs-topic/325◄ اجناس کے فیوچر کمپنی نے مزید کہا:https://www.fmz.com/bbs-topic/371
اجناس کے مستقبل کے ساتھ جون 2019 میں دیکھ بھال کی نگرانی کا نفاذ کیا گیا ، انفرادی پروگرامنگ کے لئے انفرادی صارفین کی ضرورت ہوتی ہے ، فیوچررز کے لئے اجازت نامہ کی درخواست (مخصوص درخواست کے لئے مطلوبہ معلومات کے سانچوں کو ویکیوم گروپ یا کیو کیو گروپ میں بھیجا جاسکتا ہے) ، عام طور پر 4-5 دن لگتے ہیں ، اقدامات زیادہ بوجھل ہوتے ہیں۔ ایف ایم زیڈ کوالٹی پلیٹ فارم بطور پروگرامنگ ٹریڈنگ فراہم کرنے والے نے مختلف فیوچر سروس فراہم کرنے والوں سے سافٹ ویئر لائسنس کا کوڈ درخواست کیا ، صارف براہ راست درخواست دینے کی ضرورت کے بغیر استعمال کرسکتے ہیں۔https://www.fmz.com/bbs-topic/3860٭ اگر آپ کا فیوچر ڈائریکٹر فہرست میں نہیں ہے تو ، آپ صرف اپنے آپ کو درخواست دے سکتے ہیں ، یا معاون تاجروں میں دوبارہ اکاؤنٹ کھول سکتے ہیں ، عام طور پر 2 دن لگتے ہیں۔ ٭ ایف ایم زیڈ کے ساتھ کچھ سروس فراہم کرنے والوں کے ساتھ گہری شراکت داری ہے ، جیسے گوانگ تائی جونان مائیکرو سورس فیوچر ، ایف ایم زیڈ پلیٹ فارم کا ادارہ ورژن خریدا ہے ، جو صارفین کے لئے استعمال کیا جاسکتا ہے ، کھلاڑی خود بخود وی آئی پی بن جاتا ہے ، اور طریقہ کار کی فیس کم ہوتی ہے۔https://www.fmz.com/bbs-topic/506 。
ایف ایم زیڈ پلیٹ فارم کی ساخت کے فوائد کی وجہ سے ، صارفین متعدد فیوچر اکاؤنٹ بھی شامل کرسکتے ہیں اور کچھ ایسی خصوصیات کو حاصل کرسکتے ہیں جو دوسرے تجارتی سامان کے لئے فیوچر پروگرامنگ ٹریڈنگ سافٹ ویئر نہیں کرسکتے ہیں ، جیسے ہائی فریکوئنسی ٹِک کی ترکیب۔https://www.fmz.com/bbs-topic/1184
سب سے پہلے، چونکہ یہ 24 گھنٹے کا ٹرانزیکشن نہیں ہے اور لینڈنگ آپریشن کی ضرورت ہوتی ہے، لہذا ٹرانزیکشن سے پہلے لنک کی حیثیت کا فیصلہ کرنا ضروری ہے۔exchange.IO("status")
کے لئےtrue
اس کا مطلب یہ ہے کہ لاگ ان کریں۔ اگر لاگ ان کامیاب نہیں ہوا تو اے پی آئی کو کال کریں ، لاگ ان بٹن کو اشارہ نہیں کیا گیا ہے۔ پالیسی شروع ہونے کے بعد نیند ((2000) ، لاگ ان کرنے کے لئے ایک خاص وقت دیا جاسکتا ہے۔ یا پھر سبسکرائب کرنے کی کوشش کی جاسکتی ہے۔_C(exchange.SetContractType,"MA888")
اس کے علاوہ ، ہم نے اپنے صارفین کو بھی اس کے بارے میں آگاہ کیا ہے۔
اجناس کے مستقبل کے لئے مارکیٹ کی حصولی اور تجارت کا کوڈ ڈیجیٹل کرنسی کے مستقبل کے ساتھ ہی ہے ، یہاں مختلف اور توجہ دینے کی ضرورت ہے۔
function main(){
_C(exchange.SetContractType,"MA888") //没登陆成功是无法订阅合约的,最好重试一下
while(true){
if(exchange.IO("status")){
var ticker = exchange.GetTicker()
Log("MA888 ticker:", ticker)
LogStatus(_D(), "已经连接CTP !")//_D获取事件
} else {
LogStatus(_D(), "未连接CTP !")
Sleep(1000)
}
}
}
یہ سفارش کی جاتی ہے کہ آپ کو تجارتی سامان کی مستقبل کی کتاب (بعد میں وضاحت کی جائے گی) کا استعمال کریں ، اس وقت کوڈ بہت آسان ہوگا ، جس میں کسی بھی طرح کی تفصیلات کو سنبھالنے کی ضرورت نہیں ہوگی۔https://www.fmz.com/strategy/57029
function main() {
// 使用了商品期货类库的CTA策略框架
$.CTA(Symbols, function(st) {
var r = st.records
var mp = st.position.amount
var symbol = st.symbol
/*
r为K线, mp为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则不持仓, symbol指品种名称
返回值如为n:
n = 0 : 指全部平仓(不管当前持多持空)
n > 0 : 如果当前持多仓,则加n个多仓, 如果当前为空仓则平n个空仓,如果n大于当前持仓, 则反手开多仓
n < 0 : 如果当前持空仓,则加n个空仓, 如果当前为多仓则平n个多仓,如果-n大于当前持仓, 则反手开空仓
无返回值表示什么也不做
*/
if (r.length < SlowPeriod) {
return
}
var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod));
if (mp <= 0 && cross > ConfirmPeriod) {
Log(symbol, "金叉周期", cross, "当前持仓", mp);
return Lots * (mp < 0 ? 2 : 1)
} else if (mp >= 0 && cross < -ConfirmPeriod) {
Log(symbol, "死叉周期", cross, "当前持仓", 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:交易所索引(按实盘上交易所添加顺序), Nano:事件纳秒级时间, Symbol:合约名称}
آرڈر کی ترسیل:{Event:"order", Index:交易所索引, Nano:事件纳秒级时间, Order:订单信息(与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")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅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)
}
}
}
یہ بھی نوٹ کرنا ضروری ہے کہ تجارتی مستقبل اور ڈیجیٹل کرنسی کے تبادلے کے مابین فرق ہے۔ جیسے گیٹ ڈیپتھ دراصل صرف ایک گہرائی ہے ((5 گہرائی کی فیس مہنگی ہے) ، گیٹ ٹریڈز بھی تجارت کی تاریخ تک رسائی حاصل نہیں کرتی ہے ((یہ سب اسٹاک کی تبدیلیوں پر مبنی ہیں ، کوئی حقیقی ٹرانزیکشن ریکارڈ نہیں ہے۔ تجارتی مستقبل میں گرنے اور گرنے کی حد ہے ، جب یہ رک جاتا ہے تو ، گہرائی میں فروخت کرنے اور فروخت کرنے کی قیمت گرنے کی قیمت ہے ، آرڈر کی مقدار 0 ہے ، جب یہ گرتی ہے تو ، خریدنے اور خریدنے کی قیمت گرنے کی قیمت ہے ، اور آرڈر کی مقدار 0 ہے۔ نیز تجارتی مستقبل میں انٹرفیس کی فریکوئنسی کی انکوائری ہوتی ہے ، اور اکاؤنٹ ، آرڈر ، اسٹاک تک رسائی کی حد بھی ہوتی ہے ، جیسے سخت حد ، عام طور پر ایک بار 2s کی ضرورت ہوتی ہے۔ تجارتی مدت میں انوائس کی واپسی کی حد وغیرہ۔
exchange.IO("instruments"): تمام معاہدوں کی فہرست {کنٹریکٹ نام: تفصیلات} ڈکشنری کی شکل میں واپسی کرتا ہے ، صرف حقیقی پلیٹ فارم کی حمایت کرتا ہے۔exchange.IO("products"): تبادلہ میں تمام مصنوعات کی فہرست {پروڈکٹ کا نام: تفصیلات} ڈکشنری کی شکل میں لوٹاتا ہے ، صرف اصلی ڈسک کی حمایت کرتا ہے۔exchange.IO("subscribed"): سبسکرائب شدہ مارکیٹ کے معاہدوں کی واپسی ، اسی شکل میں ، صرف اصلی پلیٹ کی حمایت کرتا ہے۔
روایتی سی ٹی پی فیوچرContractType
اس کا مطلب یہ ہے کہ معاہدے کی شناخت، بڑے اور چھوٹے سائز کے درمیان فرق.exchange.SetContractType("au1506")
♦ معاہدہ سیٹ اپ کے بعد کامیابی کے ساتھ معاہدے کی تفصیلات واپس آتی ہیں ، جیسے کم سے کم ایک بار کتنا خریدنا ہے ، آپریشنل فیس ، ترسیل کا وقت وغیرہ ♦ متعدد معاہدوں کی خریداری کرتے وقت ، صرف پہلی بار خریداری کی درخواست بھیج دی جاتی ہے ، اور پھر صرف کوڈ کی سطح پر تبادلہ ہوتا ہے ، وقت نہیں لگتا ہے۔ اہم مسلسل معاہدہ کوڈ 888 ہے جیسے MA888 ، مسلسل اشاریہ معاہدہ 000 جیسے MA000 ، 888 اور 000 صرف ورچوئل معاہدوں کی تجارت کے لئے ریٹرن کی حمایت کرتے ہیں ، اور اصلی ڈسک صرف تجارت حاصل کرنے کی حمایت کرتا ہے۔لیکن مائی زبان بنیادی معاہدوں پر کام کر سکتی ہے ، اور پروگرام خود بخود تجارت کا تبادلہ کرتا ہے ، یعنی غیر بنیادی پوزیشنوں کو صاف کرتا ہے اور بنیادی پوزیشنوں پر نئی پوزیشنیں کھولتا ہے۔
بغیر لاگ ان کامیابی سے معاہدہ قائم نہیں کیا جاسکتا ہے ، لیکن یہ فوری طور پر واپس آجاتا ہے ، لہذا آپ _C کے ساتھ دوبارہ کوشش کر سکتے ہیں ، یہ جان کر کہ سی ٹی پی لینڈنگ مکمل ہوگئی ہے۔ لاگ ان کے بعد ، معاہدہ دوبارہ ترتیب دینے میں زیادہ وقت نہیں لگتا ہے اور نہ ہی حقیقی نیٹ ورک تک رسائی حاصل ہوتی ہے۔
SetDirection
ڈائریکشن حاصل کر سکتے ہیںbuy, closebuy, sell, closesell
چار پیرامیٹرز، کموڈٹی فیوچر زیادہclosebuy_today
اورclosesell_today
اس کا مطلب یہ ہے کہ ہم اس وقت کی پوزیشن میں ہیں،closebuy/closesell
کل کے لئے ، صرف پچھلی مدت کی اقسام کو کل اور کل کے درمیان فرق کرنے کی ضرورت ہے ، جس سے طریقہ کار کی فیس متاثر ہوسکتی ہے ، لہذا کل کی پوزیشن کو ترجیح دی جانی چاہئے۔ سی ٹی پی روایتی مستقبل کے ل the ، دوسرا پیرامیٹر 1 ٹن یا 2 ٹن یا 3 ٹن مقرر کیا جاسکتا ہے ، جس میں بالترتیب قیاس آرائی کرنے والا ، منافع بخش ، محفوظ رکھنے والا ، اور غیر متعینہ قیاس آرائی کا تعین ہوتا ہے۔ڈیجیٹل کرنسی فیوچر ٹریڈنگ کے لئے مخصوص خرید و فروخت ، پوزیشن حاصل کرنے ، آرڈر حاصل کرنے ، رقم نکلوانے ، اکاؤنٹ حاصل کرنے اور اسی طرح کی کارروائییں اسی طرح کی ہیں ، جیسا کہ پچھلے باب میں دیکھا گیا ہے۔
آپریشن | SetDirection کے پیرامیٹرز | ذیلی افعال |
---|---|---|
زیادہ اسٹاک | 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 ? "平今" : "平昨", '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 ? "平今" : "平昨", 'Ask', depth.Asks[0]);
}
}
}
کموڈٹی فیوچر اپنی مرضی کے مطابق آرڈر کی اقسام کی حمایت کرتا ہے (حقیقی ڈسک کی حمایت کرتا ہے ، دوبارہ جانچ پڑتال کی حمایت نہیں کرتا ہے) ، جس کے بعد تکیے کی شکل میں مخصوص کیا جاتا ہے ، جیسے تکیے کے بعد شامل کیا جاتا ہے۔
exchange.SetDirection("buy_ioc");
exchange.SetDirection("sell_gtd-20170111")
اس کے نتیجے میں:
ڈیفالٹ طور پر ، اجناس کے مستقبل کے تاجروں میں سی ٹی پی انٹرفیس کھل جاتا ہے ، اگر کوئی درخواست ہو تو ، اسے ایزی لینڈ انٹرفیس میں تبدیل کیا جاسکتا ہے۔ ایف ایم زیڈ کے ذریعہ ، پیکیجنگ ، کال کرنے کا طریقہ ایک جیسا ہے۔ فرق یہ ہے کہ اکاؤنٹ ، آرڈر ، ہولڈنگ دونوں کو آگے بڑھانے کا طریقہ ہے ، لہذا ٹاسپوٹر مقامی طور پر اس ڈیٹا کو برقرار رکھتا ہے ، جب اس کے مطابق انٹرفیس کو بلایا جاتا ہے تو وہ فوری طور پر واپس آجاتا ہے ، دراصل کوئی درخواست نہیں کرتا ہے۔
ایشیئن پروٹوکول میں حسب ضرورت آرڈر کی اقسام درج ذیل ہیں:
ڈیوائس انٹرفیس میں لاگ ان کریں ایک نوشتہ ، اسکرین کے بعد @ کردار شامل کریں ، پیغام کو آگے بڑھانے کی قطار میں ڈال دیا جائے گا ، جس میں ویکی میسج یا ٹیلیگرام کو باندھنے کے بعد براہ راست آگے بڑھایا جائے گا۔Log('推送到微信@')
لاگ ان کا رنگ بھی اپنی مرضی کے مطابق کیا جا سکتا ہےLog('这是一个红色字体的日志 #ff0000')
。#ff0000
RGB رنگوں کے لئے 16 انڈیکس
تمام لاگ فائلیں اس کی ڈائریکٹری میں واقع ڈسک پر واقع SQLite ڈیٹا بیس میں موجود ہیں ، جو ڈیٹا بیس سافٹ ویئر کا استعمال کرتے ہوئے ڈاؤن لوڈ کیا جاسکتا ہے ، یا بیک اپ کو دوبارہ بنانے کے لئے استعمال کیا جاسکتا ہے ((ڈیٹا بیس کا نام اور ڈسک کی شناخت ایک جیسی ہے) ۔
اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہوگی۔ آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہوگی۔LogProfit(1000)
◄ توجہLogProfit
اگر آپ کے پاس کوئی بھی اعداد و شمار ہیں تو ، آپ ان میں سے کسی کو بھی درج کر سکتے ہیں۔
اصلی ڈسک کی حالت، کیونکہ لاگ لاگ پہلے محفوظ کیا جاتا ہے اور مسلسل تازہ کاری کی جاتی ہے، اگر آپ کو صرف ایک غیر محفوظ شدہ معلومات دکھانے کی ضرورت ہو تو استعمال کیا جا سکتا ہےLogStatus
فنکشن۔LogStatus
اس کے علاوہ، آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے کہ آپ کو اس بات کا یقین کرنے کی ضرورت ہے.
ایک مثال جس میں ٹیبل میں ایک مخصوص ڈسک کی حیثیت کی جگہ دکھائی گئی ہے:
var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]};
LogStatus('`' + JSON.stringify(table) + '`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格)
LogStatus('第一行消息\n`' + JSON.stringify(table) + '`\n第三行消息'); // 表格信息也可以在多行中出现
LogStatus('`' + JSON.stringify([table, table]) + '`'); // 支持多个表格同时显示, 将以TAB显示到一组里
LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n'); // 上下排列显示多个表
آپ کے پاس ایک سیکنڈ کا ایک سیکنڈ ہے۔Sleep(1000)
ایک سیکنڈ کے لئے نیند لینا۔ عام حکمت عملی میں نیند کے وقت کو موت کے چکر میں شامل کرنا ہے کیونکہ تمام تجارتوں کی رسائی کی تعدد محدود ہے۔
اگر آپ کو کچھ مستقل معلومات محفوظ کرنے کی ضرورت ہے تو ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے۔_G
اس کے علاوہ، یہ بہت آسان اور عملی ہے کہ آپ JSON ترتیب شدہ مواد کو محفوظ کرسکتے ہیں._G
یہ فنکشن اس طرح لکھا ہےonexit()
اس کے علاوہ، آپ کو اپنے آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کی پالیسی میں کیا شامل ہے، لیکن آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔
اگر آپ مزید فارمیٹڈ ڈیٹا کو محفوظ کرنا چاہتے ہیں تو ، _G فنکشن بہت کم کام کرتا ہے ، اور آپ براہ راست ڈیٹا بیس میں لکھ سکتے ہیں۔
function onexit(){
_G('profit', profit)
}
function main(){
_G("num", 1); // 设置一个全局变量num, 值为1 s
_G("num", "ok"); // 更改一个全局变量num, 值为字符串ok
_G("num", null); // 删除全局变量 num
_G("num"); // 返回全局变量num的值,如果不存在返回null
var profit = 0
if(_G('profit')){
profit = _G('profit')
}
}
آرڈر کرتے وقت ، اکثر قیمت اور مقدار کی درستگی کو کنٹرول کرنے کے لئے ، ایف ایم زیڈ نے _ این فنکشن کو بلٹ ان کیا ہے ، جس سے یہ طے ہوتا ہے کہ کسٹم پوائنٹس کو محفوظ کیا جائے ، جیسے:_N(4.253,2)
اس کا نتیجہ 4.25 ہے۔
کال کرنے والے ایکسچینج API کو ہر بار کامیابی کی ضمانت نہیں دی جاسکتی ہے۔ _C ایک خود کار طریقے سے دوبارہ کوشش کرنے والا فنکشن ہے۔ مخصوص فنکشن کو کال کرنے کے بعد بھی کامیابی کی واپسی ہوگی (مثلاً فنکشن null یا false واپس آئے گا) ۔_C(exchange.GetTicker)
، ڈیفالٹ ریٹیسٹ وقفہ 3 سیکنڈ ہے، _CDelay فنکشن کو کال کرکے ریٹیسٹ وقفہ کو کنٹرول کیا جاسکتا ہے ، جیسے _CDelay ((1000) ، جس کا مطلب ہے کہ _C فنکشن کو ریٹیسٹ وقفہ 1 سیکنڈ میں تبدیل کرنا تجویز کیا گیا ہے۔GetTicker()
,exchange.GetDepth
,GetTrade
,GetRecords
,GetAccount
,GetOrders
, GetOrder
یہ سب _C کے ساتھ غلطیوں کو معاف کرتے ہیں تاکہ رسائی کی ناکامی سے پروگرام میں رکاوٹ پیدا نہ ہو۔
CancelOrder
_C فنکشن استعمال نہیں کیا جا سکتا، کیونکہ منسوخی ناکام ہونے کی مختلف وجوہات ہیں، اگر ایک سیٹ کا تبادلہ ہو چکا ہے، تو دوبارہ منسوخی ناکام ہو جائے گی، _C فنکشن کا استعمال کرتے ہوئے مسلسل دوبارہ کوشش کی جائے گی.
_C فنکشن بھی پیرامیٹرز میں منتقل کیا جا سکتا ہے اور اپنی مرضی کے مطابق افعال میں استعمال کیا جاتا ہے.
function main(){
var ticker = _C(exchange.GetTicker)
var depth = _C(exchange.GetDepth)
var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数
}
براہ راست کال کریں_D()
موجودہ وقت کی سٹرنگ لوٹاتا ہے، جیسے:2019-08-15 03:46:14
│ اگر دوبارہ جانچ پڑتال میں کال کی جائے تو دوبارہ جانچ کا وقت لوٹاتا ہے۔_D فنکشن کے ذریعہ وقت کا تعین کیا جاسکتا ہے ، جیسے:_D().slice(11) > '09:00:00':
_D(timestamp,fmt)
،ms ٹائم لائن کو ٹائم سٹرنگ میں تبدیل کرتا ہے، جیسے_D(1565855310002)
fmt پیرامیٹرز وقت کی شکل کے طور پر، ڈیفالٹyyyy-MM-dd hh:mm:ss
کچھ عام اشارے کے افعال جیسے عام اشارے جیسے MA\MACD\KDJ\BOLL کے لئے ، FMZ پلیٹ فارم براہ راست بلٹ ان ہے ، اور مخصوص معاون اشارے کے لئے API دستاویزات دیکھ سکتے ہیں۔
اشارے کے افعال کا استعمال کرنے سے پہلے ، K لائن کی لمبائی کا تعین کرنا بہتر ہے۔ جب پچھلی K لائن کی لمبائی حساب کتاب کے مطلوبہ دورانیے کو پورا نہیں کرسکتی ہے تو ، نتیجہ:null
◄ اگر ان پٹ K لائن کی لمبائی 100 ہے اور حساب کتاب کے MA کا دورانیہ 10 ہے، تو پہلے 9 اقدار صفر ہیں، اور بعد میں عام حساب کتاب ہے۔
جاوا اسکرپٹ بھی مکمل طور پر طالب کی حمایت کرتا ہے، تیسری پارٹی کے لائبریری کی حمایت کے طور پر، جیسے کالزtalib.CCI(records)
◄ حوالہ جاتhttp://ta-lib.org/function.html◄ python کے لئے خود تنصیب کرنے کے لئے طالب لائبریری، کیونکہ مرتب کرنے کی ضرورت ہے، سادہ استعمال نہیں کر سکتے ہیں pip تنصیب، خود کی تلاش کے لئے تنصیب کے طریقوں ◄
اشارے کے افعال K لائن کے اعداد و شمار کے علاوہ کسی بھی آرٹیکل کو منتقل کرسکتے ہیں
function main(){
var records = exchange.GetRecords(PERIOD_M30)
if (records && records.length > 9) {
var ma = TA.MA(records, 14)
Log(ma)
}
}
یہاں کچھ عام طور پر استعمال ہونے والے جاوا اسکرپٹ افعال کے بارے میں بتایا گیا ہے۔
Date.now()
واپس موجودہ ٹائم بیگ پرparseFloat()
اسکرین کو اعداد میں تبدیل کریںparseFloat("123.21")
parseInt()
سٹرنگ کو انٹیجر میں تبدیل کریںnum.toString()
اعداد کو سٹرنگ میں تبدیل کریں، num کو عددی متغیر میںJSON.parse()
Json سٹرنگ کو فارمیٹ کریں، جیسےJSON.parse(exchange.GetRawJSON())
Math.max()
,Math.abs()
مثال کے طور پر:https://www.w3school.com.cn/jsref/jsref_obj_math.aspایک حقیقی پلیٹ فارم کی حکمت عملی کی خصوصیت کو لکھنے کے لئے بہت سارے معاملات پر غور کرنے کی ضرورت ہے ، جیسے کہ 5 سکے خریدنے کے لئے ایک آسان فنکشن ، ہمیں اس بات پر غور کرنا ہوگا: کیا موجودہ بیلنس کافی ہے؟ کس طرح کی قیمت ہے؟ کس حد تک درست ہے؟ مارکیٹ کو متاثر کرنے سے بچنے کے لئے تقسیم شدہ آرڈر کی ضرورت نہیں ہے؟ غیر مکمل آرڈر کو کیسے سنبھالنا ہے؟ وغیرہ۔ مختلف حکمت عملیوں میں ، یہ خصوصیات ایک جیسی ہیں ، ایک ٹیمپلیٹ میں بنائی جاسکتی ہیں۔ سرکاری ٹیمپلیٹ کی نقل کریں ، صارف اپنی ٹیمپلیٹ کی پالیسی بھی لکھ سکتے ہیں۔ یہاں ایف ایم زیڈ کی سرکاری طرف سے بہت عام ٹیمپلیٹ لائبریری کا تعارف کیا جائے گا ، تاکہ اپنی حکمت عملی کو جلدی سے لکھنا آسان ہو۔
جاوا اسکرپٹ ڈیجیٹل کرنسی ٹریڈنگ کلاس لائبریری اور تجارتی فیوچر ٹریڈنگ کلاس لائبریری ڈیفالٹ کی طرف سے بلٹ میں ہیں، نقل کرنے کی ضرورت نہیں ہے۔ دیگر ٹیمپلیٹ کلاس لائبریری حکمت عملی اسکوائر میں پایا جا سکتا ہےhttps://www.fmz.com/square/20/1❏ ٹیمپلیٹ کلاس لائبریری کو کاپی اور محفوظ کریں اور اپنی پالیسی بنانے کے وقت استعمال کرنے کے لئے کلاس لائبریری کو منتخب کریں۔
جاوا اسکرپٹ ٹیمپلیٹ افعال$
اس کے ساتھ ہی، ہم نے اس کے ساتھ شروع کیا.ext
شروع کریں۔
اس کا ماخذ ایڈریس:https://www.fmz.com/strategy/10989، بلٹ ان ہے، نقل کرنے کی ضرورت نہیں ہے۔ مخصوص افعال کی عمل درآمد کو براہ راست ماخذ کوڈ کا حوالہ دیا جا سکتا ہے۔
اکاؤنٹ تک رسائی:
$.GetAccount(e)
Log($.GetAccount()); // 获取账户信息, 带容错功能
Log($.GetAcccount(exchanges[1]));
مندرجہ ذیل دستاویزات واپس لی گئیں:
$.Buy/Sell(e, amount)
$.Buy(0.3); // 主交易所买入0.3个币
$.Sell(0.2); // 主交易所卖出0.2个币
$.Sell(exchanges[1], 0.1); // 次交易所卖出0.1个币
$.CancelPendingOrders(e, orderType)
$.CancelPendingOrders(); // 取消主交易所所有委托单
$.CancelPendingOrders(ORDER_TYPE_BUY); // 取消主交易所所有的买单
$.CancelPendingOrders(exchanges[1]); // 取消第二个交易所所有订单
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // 取消第二个交易所所有的卖单
ایک اور صارف نے لکھا:
$.Cross(periodA, periodB) / $.Cross(arr1, arr2);
var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
如果 n 等于 0, 指刚好15周期的EMA与30周期的EMA当前价格相等
如果 n 大于 0, 比如 5, 指15周期的EMA上穿了30周期的EMA 5个周期(Bar)
如果 n 小于 0, 比如 -12, 指15周期的EMA下穿了30周期的EMA 12个周期(Bar)
如果传给Cross不是数组, 则函数自动获取K线进行均线计算
如果传给Cross的是数组, 则直接进行比较
.withdraw ((e, currency, address, amount, fee, password) فنکشن:
$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")
تجارتی فیوچر ٹریڈنگ لائبریری کا استعمال مستحکم ہے ، استعمال کی سفارش کی جاتی ہے۔ ماخذ کوڈ ایڈریس:https://www.fmz.com/strategy/12961◄ پہلے سے موجود ہے، نقل کرنے کی ضرورت نہیں ہے۔
سی ٹی اے
function main() {
$.CTA("rb000,M000", function(r, mp) {
if (r.length < 20) {
return
}
var emaSlow = TA.EMA(r, 20)
var emaFast = TA.EMA(r, 5)
var cross = $.Cross(emaFast, emaSlow);
if (mp <= 0 && cross > 2) {
Log("金叉周期", cross, "当前持仓", mp);
return 1
} else if (mp >= 0 && cross < -2) {
Log("死叉周期", cross, "当前持仓", mp);
return -1
}
});
}
کلاس لائبریری کال مثالیں
function main() {
var p = $.NewPositionManager();
p.OpenShort("MA609", 1);
p.OpenShort("MA701", 1);
Log(p.GetPosition("MA609", PD_SHORT));
Log(p.GetAccount());
Log(p.Account());
Sleep(60000 * 10);
p.CoverAll("MA609");
LogProfit(p.Profit());
Log($.IsTrading("MA609"));
// 多品种时使用交易队列来完成非阻塞的交易任务
var q = $.NewTaskQueue();
q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
Log(task.desc, ret)
})
while (true) {
// 在空闲时调用poll来完成未完成的任务
q.poll()
Sleep(1000)
}
}
چونکہ اصل گرافک افعال زیادہ پیچیدہ ہیں ، جو اگلے سبق میں پیش کیے جائیں گے ، لہذا نئے آنے والوں کو براہ راست گرافک لائبریری کا استعمال کرنے کی سفارش کی جاتی ہے ، بہت آسان گرافک فولڈ لائن گراف ، K لائن گراف وغیرہ۔ ایف ایم زیڈ میں ایک سادہ کلاس لائبریری بنائی گئی ہے ، جو پالیسی ایڈیٹر کے صفحے پر دیکھی جاسکتی ہے ، اگر اس میں کوئی بلٹ ان نہیں ہے تو ، صارف کو خود کو کاپی کرنے اور محفوظ کرنے کی ضرورت ہے تاکہ اس پالیسی میں حوالہ منتخب کیا جاسکے۔
جاوا اسکرپٹ پرنٹ کی تصویر کی لائبریری کاپی ایڈریس:https://www.fmz.com/strategy/27293پیتھون پرنٹ لائن کلاس لائبریری کاپی ایڈریس:https://www.fmz.com/strategy/39066
مثال کے طور پر:
function main() {
while (true) {
var ticker = exchange.GetTicker()
if (ticker) {
$.PlotLine('Last', ticker.Last) //可以同时画两条线,Last是这条线的名字
$.PlotLine('Buy', ticker.Buy)
}
Sleep(6000)
}
}
پالیسی ایڈیٹر کے نیچے پالیسی پیرامیٹرز کی ترتیبات ہیں ، جو پالیسی کے عالمی متغیرات کے مترادف ہیں ، جو کوڈ کے کسی بھی مقام پر قابل رسائی ہیں۔ پالیسی پیرامیٹرز کو ریئل ڈسک انٹرفیس میں تبدیل کیا جاسکتا ہے ، جو دوبارہ شروع ہونے پر اثر انداز ہوتا ہے۔ لہذا کچھ متغیرات کو پیرامیٹرز کے طور پر ترتیب دیا جاسکتا ہے ، اور بغیر پالیسی کو تبدیل کیے پیرامیٹرز کو تبدیل کیا جاسکتا ہے۔
سٹرنگ کی قسم اور عددی قسم کو سمجھنا آسان ہے اور یہ سب سے زیادہ استعمال ہونے والی قسم ہے۔ ڈراپ باکس آپشنز کے ڈراپ باکس کو پیرامیٹرز انٹرفیس میں دکھائے گا ، جیسے ڈراپ باکس کی SYMBOL پیرامیٹر کی قیمت کو سیٹ کرنا۔BTC|USDT|ETH
، اگر آپ نے پیرامیٹرز کے صفحے کے ڈراپ ڈاؤن میں یو ایس ڈی ٹی کا انتخاب کیا ہے تو ، حکمت عملی میں سیمبول کی قدر یو ایس ڈی ٹی کا انڈیکس 1 ہے۔ اشارہ ایک آپشن باکس ہے ، اشارہ سچ ہے ، ورنہ غلط ہے۔
آپ کے پاس بہت سی ترتیبات ہیں.https://www.fmz.com/bbs-topic/1306
جب آپ کسی حکمت عملی کی مقدار کا کام مکمل کرتے ہیں تو ، آپ اپنی حکمت عملی کو تاریخی اعداد و شمار کے ساتھ جانچ سکتے ہیں تاکہ یہ معلوم ہوسکے کہ آپ کی حکمت عملی نے تاریخی اعداد و شمار میں کتنا منافع کمایا ہے۔ یقینا reassessment کے نتائج صرف حوالہ کے لئے ہیں۔ FMZ کیوٹیفکیشن پلیٹ فارم ڈیجیٹل کرنسیوں کی موجودہ کرنسیوں ، مستقبل ، BitMEX مستقل معاہدوں کی مصنوعات ، مستقبل کی حمایت کرتا ہے ، جن میں سے ڈیجیٹل کرنسیوں میں بنیادی طور پر اہم اقسام کی حمایت کی جاتی ہے۔ جاوا اسکرپٹ کی توثیق براؤزر میں کی جاتی ہے ، اور پائتن کی توثیق کو میزبان کی ضرورت ہوتی ہے ، جو پلیٹ فارم کو عوامی میزبان فراہم کرنے کے لئے استعمال کیا جاسکتا ہے۔ میک زبان کی توثیق کے لئے مزید پیرامیٹرز کو ترتیب دینے کی ضرورت ہے ، خاص طور پر میک زبان کی دستاویزات کا حوالہ دیتے ہیں۔
onbar retargeting کا طریقہ کار K لائن پر مبنی ہے ، یعنی ہر K لائن ایک retargeting ٹائم پوائنٹ پیدا کرتی ہے ، جس پر موجودہ K لائن کے اوپری اوپری قیمتوں ، تجارت کی مقدار وغیرہ کی معلومات حاصل کی جاسکتی ہیں ، اور اس سے پہلے بھی۔
گاوینچیئرایپی
سائنسمیں نے ایک سادہ لاگ آؤٹ پٹ بیان لکھا ہے اور اس کے اختتام پر عمل کیا ہے۔ اس کے بعد ، آپ کو اپنے کمپیوٹر کو ایک سرور کے طور پر استعمال کرنے کی ضرورت ہے۔ دوسرا مرحلہ ، ایک سادہ لاگ آؤٹ پٹ معلومات کے لئے ایک ٹیسٹ.پی پروگرام لکھنا (FMZ کے API انٹرفیس فنکشن) ۔ تیسرا مرحلہ ، جیسا کہ متن کے اختتام پر ، ایک رن فائل لکھیں ، جسے run.py کے ذریعہ ٹیسٹ.py کال کریں۔ /upload/asset/1add39483ef82d45b3ce3.png
گیپ9میں نے ایک نیٹ ایزی کلاؤڈ کوانٹیمیٹڈ ٹریڈنگ کورس خریدا ہے، اب کہاں جانا ہے؟
مونوراجاکبہت سے
مونوراجاکہیلو
بھائی بھائی!سیکھنا
wqyیہاں ایک چھوٹی سی غلطی ہے، GetAccount اکاؤنٹ حاصل کرتا ہے، اور یہ کہ FrozenStocks کے بارے میں ہے، یہ ایک منجمد توازن ہونا چاہئے، اور دستیاب توازن نہیں.
چیف ایجنٹgetorder outtime آرڈر آؤٹ ٹائم حاصل کریں، اوکیکس کے تبادلے، کیا کریں
اونی بارو نے اعلیٰ چالیں بنائیںضمانت کی شرح دستیاب نہیں ہے، 0 فیصد تک کی ضمانت کی شرح کو مجبور کیا جائے گا
شیفینگ2020میں نے ایک منٹ کے اسٹرنگ گراف پر کام کیا ہے، لہذا پیتھون کی موت کی لوپ کے لئے نیند کا وقت 0.1s پر مقرر کیا جاسکتا ہے، یعنی نیند ((100) کیا میں نے دیکھا کہ آپ نے اس میں ایک نیند ((10) لکھا ہے، یعنی 0.1s HM API کی حد سے زیادہ نہیں ہوگی؟
مشرقی ہوائی اڈےexchange.SetDirection (("closebuy"); // اگر یہ مستقل معاہدہ ہے تو براہ راست exchange.SetDirection (("sell") سیٹ کریں یہاں میں نے اوکیکس کا مستقل معاہدہ آزمایا، اور اگر اسے فروخت پر سیٹ کیا جائے تو یہ فوری طور پر خالی ہو جاتا ہے، اور یہ بہت سستا نہیں ہے۔
مشرقی ہوائی اڈےexchange.SetDirection (("closebuy"); // اگر یہ مستقل معاہدہ ہے تو براہ راست exchange.SetDirection (("sell") سیٹ کریں یہاں میں نے اوکیکس کا مستقل معاہدہ آزمایا، اور اگر اسے فروخت پر سیٹ کیا جائے تو یہ فوری طور پر خالی ہو جاتا ہے، اور یہ بہت سستا نہیں ہے۔
مشرقی ہوائی اڈےGetOrders کے کوڈ میں دو ہجے کی غلطیاں ہیں۔ ایک function کو fuction کے طور پر لکھا گیا ہے اور دوسرا for loop کی شرائط میں؛
مشرقی ہوائی اڈےیہ میری غلطی تھی۔ exchange.Buy ((-1, 0.5) ، ٹریڈنگ جوڑی ETH_BTC ہے، مارکیٹ کی قیمت کا اشارہ 0.5BTC کے لئے ETH خریدنے کے لئے ہے exchange.Buy ((price، 0.5) ، اگر یہ اس طرح کی قیمت کی حد ہے تو ، اس کی قیمت کے ساتھ 0.5ETH خریدنے کی نمائندگی کرتا ہے۔
مشرقی ہوائی اڈےexchange.Buy ((-1, 0.5) ، ٹریڈنگ جوڑی ETH_BTC ہے ، جس کی نمائندگی مارکیٹ کی قیمت پر 0.5BTC کے ETH کی خریداری کرتی ہے۔ یہاں 0.5ETH مارکیٹ کی قیمت پر خریدنے کے لئے ایک ایٹم ہے.
گیپ9شکریہ
گھاسہمیشہ سے نیٹ پر دستیاب https://study.163.com/course/courseMain.htm?share=2&shareId=400000000602076&courseId=1006074239&_trace_c_p_k2_=c3f5d238efc3457d93c8b92c0398d2b2
گھاسہوم پیج پر ویکیپیڈیا شامل کریں، آپ کو گروپ میں شامل کریں
wqyمیں نے آپ سے پوچھا کہ کیا آپ کے پاس کوئی سرکاری گروپ ہے؟ کبھی کبھی آپ کے پاس کوئی مسئلہ ہوتا ہے اور آپ نہیں جانتے کہ کہاں پوچھنا ہے۔
گھاستبدیل کر دیا
گھاسدوبارہ حاصل کریں
گھاساصل معلومات میں، آپ کو GetRawJSON استعمال کر سکتے ہیں یا ایک فیلڈ میں معلومات دیکھ سکتے ہیں
مشرقی ہوائی اڈےبہت اچھا، اور انتظامیہ کی طرف سے جوابات بھی۔ میں نے کوڈ میں بہت سے ہجے کی غلطیاں دیکھی ہیں، ہاہاہا
گھاساوہ، یہ درست ہے، غلطی کی نشاندہی کرنے کا شکریہ
گھاسکچھ مستقل معاہدوں میں دو طرفہ ہولڈنگ کی اجازت ہوتی ہے ، جس کے لئے بریک اپ کی ضرورت ہوتی ہے۔ میں نے اپ ڈیٹ کیا ، پہلے صرف بٹ میکس تھا۔