[TOC]
ہمارے پلیٹ فارم کا استعمال کرنے کے لئے شکریہ. یہ beginners کے لئے ایک بنیادی ہدایات ہے, ہمارے API دستاویزات کا ایک مکمل ورژن کے لئے, پر چیک کریںایف ایم زیڈ اے پی آئی. بہت سے واضح وضاحتیں ہیں جو اس سبق میں احاطہ نہیں کیا گیا ہے آپ کو دریافت کرنے کے لئے چھوڑ دیا.
مکمل سبق سیکھنے کے بعد، آپ کو FMZ کام کرتا ہے اور کچھ بنیادی حکمت عملی لکھنے کے قابل ہو جائے گا کہ کس طرح پتہ چل جائے گا.
ایف ایم زیڈ پلیٹ فارم کیا ہے؟
ایف ایم زیڈ کریپٹوکرنسی تاجروں کے لئے ایک خودکار تجارتی پلیٹ فارم ہے جس میں بہت سے بٹ کوائن / ایتھ / الٹکوئن ایکسچینج مارکیٹوں کی حمایت ہے۔
FMZ آپ کے لئے کیا کر سکتے ہیں؟
آپ سیکھ سکتے ہیں کہ کس طرح اپنے بوٹس لکھنے کے لئے (اسٹریٹیجیز) ہماری حکمت عملیوں سے مربع جس میں بہت سے کھلے ذریعہ کوڈ پر مشتمل ہے، دوسروں کے ساتھ آپ کی حکمت عملی کا کوڈ اشتراک کریں، کسی بھی وقت پیشہ ورانہ مدد کے لئے پوچھیں، بہت سے تبادلے پر آپ کی حکمت عملی چلائیں، کمپیوٹر یا موبائل فون کے ساتھ ویب سائٹ پر اپنے بوٹ کو کنٹرول کریں، اگر آپ چاہتے ہیں تو اپنی حکمت عملی فروخت کریں، ہمارے بہت سے دوسرے آٹو ٹریڈنگ کے محبت کرنے والوں کے ساتھ بات چیت کریںگروپایک لفظ میں، ایف ایم زیڈ ان لوگوں کے لئے ایک بہترین پلیٹ فارم ہے جو خودکار تجارت کرنا چاہتے ہیں۔
ایف ایم زیڈ کون سے کریپٹوکرنسی تبادلے کی حمایت کرتا ہے؟
FMZ تقریبا تمام تبادلے کی حمایت کرتا ہے جو مقبول ہیں، جیسےBinance
, Bitfinex
, Bitstamp
, OKEX
, Huobi
, Poloniex
، وغیرہ آپ بھی فیوچر پر تجارت کر سکتے ہیںOKEX
اورBitMEX
مکمل سپورٹ کی فہرست چیک کریںAPIآپ کو صرف ایک حکمت عملی لکھنے کی ضرورت ہے اور اسے بغیر کسی تبدیلی کے تمام تبادلے پر چلائیں.
ایف ایم زیڈ کون سی پروگرامنگ زبانوں کی حمایت کرتا ہے؟
ایف ایم زیڈ آپ کی حکمت عملیوں کو کوڈ کرنے کے لئے جاوا اسکرپٹ ، پائتھون ، سی ++ (جاوا اسکرپٹ اور پائتھون کی سفارش کی جاتی ہے) کی حمایت کرتا ہے۔ مکمل زبانوں کی حمایت ((صرف ایک کسٹم زبان کو ایک پلیٹ فارم کے لئے استعمال نہیں کیا جاسکتا) سے فائدہ اٹھاتے ہوئے ، آپ اپنی پروگرامنگ کی مہارت کو بہتر بنا سکتے ہیں اور ساتھ ہی حکمت عملی لکھنا سیکھ سکتے ہیں۔
کیا آپ کی API KEY محفوظ ہے؟
جی ہاں، آپ کے API-KEYs خفیہ کاری کے بعد محفوظ کر رہے ہیں. یہ کیسے کام کرتا ہے.
https
.موجودہ خصوصیت کی فہرست:
ایک بوٹ چلانے کے لئے، آپ کو ایک حکمت عملی کی ضرورت ہے، ایک تبادلہ شامل کریں، پہلے ایک ڈوکر تعینات کریں. ڈوکر آپ کی حکمت عملی کا عملدرآمد ہے جو آپ کے اپنے کمپیوٹر یا سرور پر چل رہا ہے.
مرکزی صفحہ کا ایک مختصر نظارہ
تبادلہ شامل کریں
میں شامل کریںhttps://www.fmz.com/m/add-platform، یا کلک کریںPlatform
لیبل.
آپ کی رسائی کی کلید اور خفیہ کلید کو کریپٹوکرنسی ایکسچینج میں لاگو کیا جاسکتا ہے۔ API-KEY کا استعمال تجارت کرنے اور ایکسچینج سے نجی معلومات حاصل کرنے کے لئے کیا جاتا ہے۔ ہم اپنے سرور پر کوئی API-KEY یا پاس ورڈ محفوظ نہیں کرتے ہیں۔
آپ ایف ایم زیڈ
ایک ڈوکر تعینات کریں
ایف ایم زیڈ آپ کے لئے بوٹس نہیں چلاتا ہے ، آپ کو بطور ایگزیکٹر خود ہی ڈوکر کی تعیناتی کرنے کی ضرورت ہے ، جو زیادہ لچکدار اور محفوظ ہے کیونکہ ہماری خدمت آپ کے بوٹس کو چلانے میں حصہ نہیں لیتی ہے۔ اگرچہ ہم عوامی ڈوکر بھی فراہم کرتے ہیں ، لیکن اسے صرف جانچ کے لئے استعمال کیا جانا چاہئے۔
ونڈوز کے لئے، یہ بہت آسان ہے، صرف ہدایات پر عمل کریںhttps://www.fmz.com/m/add-node
لینکس کے ل you ، آپ ہماری ویب سائٹ پر وی پی ایس کرایہ پر لے سکتے ہیں ، جو ڈوکر کو خود بخود تعینات کرے گا۔ اپنے لینکس سرور پر تعینات کرنے کے اقدامات یہ ہیں (تجویز کردہ):
wget www.fmz.com/dist/robot_linux_amd64.tar.gz
، کمانڈ نہیں ملا؟ پہلے انسٹال کریںyum install wget -y
.tar -xzvf robot_linux_amd64.tar.gz
کھولنے کے لئے../robot -s node.fmz.com/xxxxx -p -p yourFMZpassword
، آپ کو کچھ اس طرح دیکھنا چاہئے2018/07/05 05:04:10 Login OK, SID: 62086, PID: 7226, Name: host.localdomain
، جس کا مطلب ہے کہ سب کچھ کام کر رہا ہے.node.fmz.com/xxxxx
ہر صارف کے لئے منفرد ہے، پر آپ کی اپنی تلاشhttps://www.fmz.com/m/add-node.ctrl + C
ڈاکر کو روکنے کے لئے.nohup ./robot -s node.fmz.com/xxxxx -p yourFMZpassword &
پس منظر میں چلانے کے لئے. یہ قدم بھی کیا جا سکتا ہے کی طرف سےScreen
command.ایک حکمت عملی لکھیں
آپ کو اپنی حکمت عملی لکھنی چاہئے یا مربع سے خریدنا چاہئے۔ یہاں ہم ایک سادہ جاوا اسکرپٹ حکمت عملی کو ڈیمو کے طور پر استعمال کریں گے تاکہ آپ کو دکھایا جاسکے کہ صفحہ میں ترمیم کا استعمال کیسے کریں۔ حکمت عملی کی کاپی اس سے کی جاسکتی ہے۔https://www.fmz.com/strategy/125482. اس سبق میں جاوا اسکرپٹ کا استعمال نہیں کیا جائے گا کیونکہ آپ آن لائن بہت سارے سبق تلاش کرسکتے ہیں۔
Ctrl+S
ترمیم موڈ پر.ذیل میں حکمت عملی کی مکمل وضاحت ہے۔ اپنے فون پر پیغام بھیجنے کے لئے ، آپ کو ٹیلیگرام کو اپنے اکاؤنٹ سے منسلک کرنے کی ضرورت ہےhttps://www.fmz.com/m/account
/*
This strategy will send a message to your telegram when the price is higher or lower than
the set price.
All strategies must have a main function as the entrance.
*/
function main() {
//change symbol,will cover the default symbol which was set when start a bot.Currency is a strategy arguments
exchange.IO("currency", Currency)
var lastPushTime = 0 //the variable of last push timestamp.
while(true){ //run a infinite loop, which is the basic structure
//_C() function can retry the request automatically after failure. not necessary. var ticker = exchange.GetTicker() is ok.
var ticker = _C(exchange.GetTicker) // for information about GetTicker, check on https://fmz-docs.readthedocs.io/en/latest/code_Instruction/Market%20API.html#getticker
if(ticker.Last > UpPrice || ticker.Last < LowPrice){ //ticker.Last represents the last deal price
if(Date.now() - lastPushTime > 300*1000){ //only push once in 5 mins, Date.now() return ms.
lastPushTime = Date.now() //update lastPushTime
Log(Currency, 'Price is: ', ticker.Last, '@') //Log the price on the bot's page and sent the message. '@' in the end means push message
}
}
Log(Currency, 'Price is: ', ticker.Last) //just log the price
Sleep(Interval*1000) //check the last price again after Interval seconds
}
}
روبوٹ چلائیں
آخر میں، یہ ایک روبوٹ چلانے کا وقت ہے.
پرRobot
صفحہ، کلک کریںAdd robot
، یا دورہhttps://www.fmz.com/m/add-robotبراہ راست ایک بوٹ شامل کرنے کے لئے.
exchanges[0]
, exchanges[1]
بوٹ کا انتظام کریں
پرRobot
صفحہ، آپ دیکھ سکتے ہیں کہ روبوٹ چل رہا ہے.
LogProfit()
، آپ چاہتے ہیں کسی بھی نمبر ہو سکتا ہے.مزید معلومات کے لیے بوٹ کے نام پر کلک کریں:
اس حصے میں کچھ سب سے زیادہ عام طور پر استعمال API متعارف کرایا جائے گا، ہمارے API دستاویزات کا ایک مکمل ورژن کے لئے، چیک کریںایف ایم زیڈ اے پی آئی. یہ انتہائی beginners کے لئے ڈیمو کوڈ پر چلانے کے لئے سفارش کی جاتی ہےڈیبگ صفحہ.
2.1 لاگ
استعمال کریں: Log(msg)
پیرامیٹرز:تاریں یا اعدادتفصیل:روبوٹ لاگ صفحہ پر ایک پیغام لاگ.واپسی:کوئی نہیںڈیمو:
function main() {
var msg = 'msg string'
Log(msg)
Log('hello', 'world', 123)
Log("red color message", "#FF0000")
Log("push this message to telegram!@") // won't push on debug page
}
2.2 گیٹ ٹکر
استعمال کریں: exchange.GetTicker()
پیرامیٹرز:کوئی نہیںتفصیل:موجودہ مارکیٹ ٹکر حاصل کریں.واپسی:
{"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)
Log('Last Price: ',ticker.Last, 'Bid Price: ', ticker.Buy)
}
2.3 گہرائی حاصل کریں
استعمال کریں: exchange.GetDepth()
پیرامیٹرز:کوئی نہیںتفصیل:موجودہ مارکیٹ کے آرڈر بک حاصل کریں.واپسی:
{
"Info":null,
"Asks":[
{"Price":5866.38,"Amount":0.068644},
{"Price":5866.39,"Amount":0.263985},
{"Price":5866.73,"Amount":0.05},
{"Price":5866.77,"Amount":0.05},
{"Price":5867.01,"Amount":0.15},
{"Price":5875.89,"Amount":0.05},
......
]
"Bids":[
{"Price":5865.13,"Amount":0.001898},
{"Price":5865,"Amount":0.085575},
{"Price":5864.15,"Amount":0.013053},
{"Price":5863.65,"Amount":0.016727},
{"Price":5863.51,"Amount":0.128906},
{"Price":5863.15,"Amount":0.2}
......
],
"Time":1530241857399
}
ڈیمو:
function main() {
var depth = exchange.GetDepth()
Log(depth)
Log('Bid one: ', depth.Bids[0].Price, 'Ask one: ', depth.Asks[0].Price)
}
2.4 GetRecords
استعمال کریں: exchange.GetRecords()
, exchange.GetRecords(Period)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
مدت | گلوبل واربل | نہیں | Kline |
تمام ممکنہ پیرامیٹرز:PERIOD_M1
1 منٹ،PERIOD_M5
پانچ منٹ،PERIOD_M15
15:15 منٹ،PERIOD_M30
:30 منٹ،PERIOD_H1
1h،PERIOD_D1
1d.تفصیل:موجودہ مارکیٹ کے لئے کلین / موم بتیوں کی سلاخیں حاصل کریں.واپسی:
[
{"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},
......
]
ڈیمو:
//A useful JavaScript example using Records to get a close array:
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
}
2.5 اکاؤنٹ حاصل کریں
استعمال کریں: exchange.GetAccount()
پیرامیٹرز:کوئی نہیںتفصیل:اکاؤنٹ کی معلومات حاصل کریںواپسی:
{
"Stocks":0.38594816,// free base asset
"FrozenStocks":0, //locked base asset
"Balance":542.858308,//free quote asset
"FrozenBalance":0 //locked quote asset
"Info":{} //the raw data
}
ڈیمو:
//A useful JavaScript example of Log your account value for a certain trading pair:
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
}
}
2.6 خریدیں
استعمال کریں: exchange.Buy(Price, Amount)
, exchange.Buy(Price, Amount, Msg)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
قیمت | نمبر | ہاں | حد آرڈر کی خرید قیمت |
رقم | نمبر | ہاں | حد آرڈر کی مقدار خریدیں |
پی ایس جی | تار | نہیں | لاگ صفحہ پر ایک اضافی پیغام شامل کریں |
تفصیل:بوٹس کے صفحے پر خرید آرڈر اور خرید لاگ بھیجیںواپسی:اگر کامیابی ہو تو آرڈر آئی ڈی واپس کریں،null
اگر نہیں.ڈیمو:
//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
while(true){
var ticker = exchange.GetTicker()
var price = ticker.Sell
if(price >= 7000){
exchange.Buy(price+5, 1, 'BTC-USDT')
}
Sleep(3000)//Sleep 3000ms
}
}
2.7 فروخت کریں
استعمال کریں: exchange.Sell(Price, Amount)
, exchange.Sell(Price, Amount, Msg)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
قیمت | نمبر | ہاں | حد آرڈر کی فروخت کی قیمت |
رقم | نمبر | ہاں | حد آرڈر کی رقم فروخت کریں |
پی ایس جی | تار | نہیں | لاگ صفحہ پر ایک اضافی پیغام شامل کریں |
تفصیل:بوٹس کے صفحے پر فروخت آرڈر اور فروخت لاگ بھیجیںواپسی:اگر کامیابی ہو تو آرڈر آئی ڈی واپس کریں،null
اگر نہیں.ڈیمو:
//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
while(true){
var ticker = exchange.GetTicker()
var price = ticker.Buy
if(price >= 7000){
var id = exchange.Sell(price-5, 1, 'BTC-USDT')
Log('OrderId: ', id)
}
Sleep(3000)
}
}
2.8 GetOrder
استعمال کریں: exchange.GetOrder(OrderId)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
حکم | نمبر | ہاں | آرڈر ID |
تفصیل:آرڈر کی تفصیلات آرڈر آئی ڈی کے ذریعے حاصل کریں.واپسی:
{
"Id":125723661,
"Amount":0.01,
"Price":7000,
"DealAmount":0,
"AvgPrice":0,
"Status":0, // 0:Not filled, 1:Filled, 2:Canceled
"Type":1,// 0:Buy, 1:Sell
"ContractType":"",//just for futures contract orders
"Info":{} //raw info from exchange
}
}
ڈیمو:
//A JavaScript example of using this API, which will buy until your account has 5 coins:
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(10-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){
exchange.CancelOrder(id)
}
}
}
}
2.9 GetOrders
استعمال کریں: exchange.GetOrders()
پیرامیٹرز:کوئی نہیںتفصیل:آپ کے ٹریڈنگ علامتوں کے لئے تمام کھلی احکامات حاصل کریں.واپسی:کھلے احکامات کی ایک فہرست، نتیجہ کے طور پر ایک ہی معنی ہےGetOrder()
[
{
"Info":{},
"Id":16387538,
"Amount":1123,
"Price":0.00012826,
"DealAmount":0,
"AvgPrice":0,
"Status":0,
"Type":1,
"ContractType":""
}
]
ڈیمو:
//A JavaScript example of using this API, which will cancel all open orders for trading symbol:
fuction 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)
}
}
2.10 آرڈر منسوخ کریں
استعمال کریں: exchange.CancelOrder(OrderId)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
حکم | نمبر | ہاں | آرڈر ID |
تفصیل:آرڈر ID کے ذریعے آرڈر منسوخ کریں.واپسی:بول ٹائپtrue
اس کا مطلب یہ ہے کہ آرڈر کی درخواست کی منسوخی کامیاب ہوگئی ہے۔false
اس کا مطلب ہے کہ آرڈر کی درخواست کی منسوخی ناکام ہوگئی ہے۔
2.11 سیٹ کنٹریکٹ ٹائپ
استعمال کریں: exchange.SetContractType(ContractType)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
معاہدہ کی قسم | تار | ہاں | معاہدہ کی قسم |
تفصیل:مستقبل کی تجارت کے لئے معاہدے کی قسم مقرر کریں. دوسرے نجی API کا استعمال کرنے سے پہلے پہلے مقرر کیا جانا چاہئے.واپسی:کوئی نہیںڈیمو:
exchange.SetContractType("this_week") //OKEX future has “this_week”, “next_week”, “quarter” , "swap"
exchange.SetContractType("XBTUSD") //BitMEX future has "XBTUSD","XBTM19",etc
2.12 گیٹ پوزیشن
استعمال کریں: exchange.GetPosition()
پیرامیٹرز:کوئی نہیںتفصیل:موجودہ پوزیشن کی معلومات حاصل کریں، صرف فیوچر ٹریڈنگ کے لیے۔واپسی:پوزیشنوں کی فہرست، خالی فہرست واپس کرے گا اگر اکاؤنٹ میں کوئی پوزیشن نہیں ہے.ڈیمو:
// Note: GetPosition function obtains all positions.
function main(){
exchange.SetContractType("this_week") //for OKEX future
var position = exchange.GetPosition()
if(position.length>0){
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)
}
}
2.13 سیٹ ڈائریکشن
استعمال کریں: exchange.SetDirection(Direction)
پیرامیٹرز:
نام | قسم | لازمی | تفصیل |
---|---|---|---|
سمت | تار | ہاں | ہو سکتا ہےbuy , closebuy , sell , closesell . |
تفصیل:صرف فیوچر ٹریڈنگ کے لیے خرید یا فروخت کے آرڈر کی اقسام مقرر کریں۔واپسی:کوئی نہیںڈیمو:
function main(){
exchange.SetContractType("this_week");
exchange.SetMarginLevel(5) // Set the leverage to 5 times
exchange.SetDirection("buy") // Set the order type to buy long
exchange.Buy(5000, 2) //buy long at the price 1000, quantity of 2
exchange.SetDirection("closebuy")
exchange.Sell(4999, 2) //close long position
}
2.14 دیگر عام طور پر استعمال شدہ فنکشن:
FMZ پر ان افعال کے بارے میں مزید تفصیلات چیک کریںAPI دستاویزات
نام | تفصیل | مثال |
---|---|---|
LogStatus |
بوٹس کی حالت بار پر ایک پیغام یا میزیں لاگ، ہر بار تازہ کاری کریں گے | LogStatus('msg') |
_C |
دوبارہ کوشش کریں فنکشن | _C(exchange.GetRecords,PERIOD_H1) ,_C(exchange.GetTicker) |
_N |
پوزیشن فنکشن | _N(4001.512,2) ,_N(num,0) |
_G |
عالمی لغت جو روبوٹ کو دوبارہ شروع کرنے کے بعد محفوظ کی جا سکتی ہے۔ | _G('initValue', 1000);_G('initValue') |
_D |
ٹائم اسٹیمپ لوٹاتا ہے | _D() , _D(1478570053241) |
TA |
TA-Lib اشارے لائبریری. سپورٹMACD , EMA , KDJ وغیرہ... |
TA.MACD(records) |
Math |
سپروٹ ریاضی کی تقریب، چیک پرhttps://mathjs.org/ | Math.min(1,2) , Math.sqrt(2) |
میں بہت سی تدریسی حکمت عملی موجود ہیںhttps://www.fmz.com/square/s:tag:Study/1، جو کہ ابتدائیوں کے لیے آسان اور آسان ہے۔
یہ ایک سادہ لیکن طاقتور حکمت عملی ہے جو حقیقی بی ٹی سی اسپاٹ مارکیٹوں میں سیکڑوں گنا زیادہ کمائی کرتی تھی۔ یہ ان تبادلے پر نہیں چل سکتی جن کی تجارتی فیس زیادہ ہے۔
var floatAmountBuy = 20
var floatAmountSell = 20
var diffPrice = 3
var Interval = 3000
function CancelPendingOrders() {
var orders = _C(exchange.GetOrders);
for (var j = 0; j < orders.length; j++) {
exchange.CancelOrder(orders[j].Id, orders[j])
}
}
function GetPrice(depth) {
var price = {buy:0, sell:0}
var askAmount = 0
var bidAmount = 0
for(var i=0; i<depth.Bids.length; i++){
askAmount += depth.Asks[i].Amount
bidAmount += depth.Bids[i].Amount
if(askAmount >= floatAmountBuy && !price.buy){
price.buy = depth.Asks[i].Price
}
if(bidAmount >= floatAmountSell && !price.sell){
price.sell = depth.Bids[i].Price
}
}
if(!price.buy || !price.sell){
price = {buy:depth.Asks[depth.Asks.length-1].Price, sell:depth.Bids[depth.Bids.length-1].Price}
}
return price
}
function onTick() {
var price = GetPrice(_C(exchange.GetDepth))
var buyPrice = price.buy + 0.01
var sellPrice = price.sell - 0.01
if ((sellPrice - buyPrice) <= diffPrice){
buyPrice -= 10
sellPrice += 10
}
CancelPendingOrders()
var account = _C(exchange.GetAccount)
var amountBuy = _N((account.Balance / buyPrice-0.01), 2)
var amountSell = _N((account.Stocks), 2)
if (amountSell > 0.02) {
exchange.Sell(sellPrice, amountSell)
}
if (amountBuy > 0.02) {
exchange.Buy(buyPrice, amountBuy)
}
}
function main() {
while (true) {
onTick()
Sleep(Interval)
}
}
ایک کلاسیکی فرار کی حکمت عملی، چیک کریںhttps://www.fmz.com/strategy/103247تشکیلات کے لئے. آپ سیکھ سکتے ہیں کہ کس طرح خصوصیات کا تبادلہ کریں اور ماخذ کوڈ سے چارٹ بنائیں.
var ChartCfg = {
__isStock: true,
title: {
text: 'Dual Thrust Up-Down Track'
},
yAxis: {
plotLines: [{value: 0,
color: 'red',
width: 2,
label: {
text: 'Up Track',
align: 'center'}
},
{value: 0,
color: 'green',
width: 2,
label: {
text: 'Down Track',
align: 'center'},
}
]
},
series: [{type: 'candlestick',
name: 'current cycle',
id: 'primary',
data: []
},
{type: 'flags',
onSeries: 'primary',
data: [],
}
]
};
var STATE_IDLE = 0;
var STATE_LONG = 1;
var STATE_SHORT = 2;
var State = STATE_IDLE;
var LastBarTime = 0;
var UpTrack = 0;
var BottomTrack = 0;
var chart = null;
var InitAccount = null;
var LastAccount = null;
var Counter = {
w: 0,
l: 0
};
function GetPosition(posType) {
var positions = exchange.GetPosition();
for (var i = 0; i < positions.length; i++) {
if (positions[i].Type === posType) {
return [positions[i].Price, positions[i].Amount];
}
}
return [0, 0];
}
function CancelPendingOrders() {
while (true) {
var orders = exchange.GetOrders();
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
Sleep(Interval);
}
if (orders.length === 0) {
break;
}
}
}
function Trade(currentState, nextState) {
var pfn = nextState === STATE_LONG ? exchange.Buy : exchange.Sell;
if (currentState !== STATE_IDLE) {
exchange.SetDirection(currentState === STATE_LONG ? "closebuy" : "closesell");
while (true) {
var amount = GetPosition(currentState === STATE_LONG ? PD_LONG : PD_SHORT)[1];
if (amount === 0) {
break;
}
// pfn(amount);
pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, amount);
Sleep(Interval);
CancelPendingOrders();
}
var account = exchange.GetAccount();
if (account.Stocks > LastAccount.Stocks) {
Counter.w++;
} else {
Counter.l++;
}
LogProfit(_N(account.Stocks - InitAccount.Stocks), "Profit rate:", _N((account.Stocks - InitAccount.Stocks) * 100 / InitAccount.Stocks) + '%');
LastAccount = account;
}
exchange.SetDirection(nextState === STATE_LONG ? "buy" : "sell");
while (true) {
var pos = GetPosition(nextState === STATE_LONG ? PD_LONG : PD_SHORT);
if (pos[1] >= AmountOP) {
Log("Average Price", pos[0], "amount:", pos[1]);
break;
}
// pfn(AmountOP-pos[1]);
pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, AmountOP-pos[1]);
Sleep(Interval);
CancelPendingOrders();
}
}
function onTick(exchange) {
var records = exchange.GetRecords();
if (!records || records.length <= NPeriod) {
return;
}
var Bar = records[records.length - 1];
if (LastBarTime !== Bar.Time) {
var HH = TA.Highest(records, NPeriod, 'High');
var HC = TA.Highest(records, NPeriod, 'Close');
var LL = TA.Lowest(records, NPeriod, 'Low');
var LC = TA.Lowest(records, NPeriod, 'Close');
var Range = Math.max(HH - LC, HC - LL);
UpTrack = _N(Bar.Open + (Ks * Range));
DownTrack = _N(Bar.Open - (Kx * Range));
if (LastBarTime > 0) {
var PreBar = records[records.length - 2];
chart.add(0, [PreBar.Time, PreBar.Open, PreBar.High, PreBar.Low, PreBar.Close], -1);
} else {
for (var i = Math.min(records.length, NPeriod * 3); i > 1; i--) {
var b = records[records.length - i];
chart.add(0, [b.Time, b.Open, b.High, b.Low, b.Close]);
}
}
chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close]);
ChartCfg.yAxis.plotLines[0].value = UpTrack;
ChartCfg.yAxis.plotLines[1].value = DownTrack;
ChartCfg.subtitle = {
text: 'Up Track: ' + UpTrack + ' Down Track: ' + DownTrack
};
chart.update(ChartCfg);
chart.reset(PeriodShow);
LastBarTime = Bar.Time;
} else {
chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close], -1);
}
LogStatus("Price:", Bar.Close, "Up:", UpTrack, "Down:", DownTrack, "Wins: ", Counter.w, "Losses:", Counter.l, "Date:", new Date());
var msg;
if (State === STATE_IDLE || State === STATE_SHORT) {
if (Bar.Close >= UpTrack) {
msg = 'Long Price: ' + Bar.Close + ' Up Track:' + UpTrack;
Log(msg);
Trade(State, STATE_LONG);
State = STATE_LONG;
chart.add(1, {x:Bar.Time, color: 'red', shape: 'flag', title: 'Long', text: msg});
}
}
if (State === STATE_IDLE || State === STATE_LONG) {
if (Bar.Close <= DownTrack) {
msg = 'Short Price: ' + Bar.Close + ' Down Track:' + DownTrack;
Log(msg);
Trade(State, STATE_SHORT);
chart.add(1, {x:Bar.Time, color: 'green', shape: 'circlepin', title: 'Short', text: msg});
State = STATE_SHORT;
}
}
}
function onexit() {
var pos = exchange.GetPosition();
if (pos.length > 0) {
Log("Warning, has positions when exiting", pos);
}
}
function main() {
if (exchange.GetName() !== 'Futures_OKCoin') {
throw "Only support OKEX features";
}
exchange.SetRate(1);
exchange.SetContractType(["this_week", "next_week", "quarter"][ContractTypeIdx]);
exchange.SetMarginLevel([10, 20][MarginLevelIdx]);
if (exchange.GetPosition().length > 0) {
throw "Can't have Positions when start.";}
CancelPendingOrders();
InitAccount = LastAccount = exchange.GetAccount();
LoopInterval = Math.min(1, LoopInterval);
Log('Exchange Name:', exchange.GetName(), InitAccount);
LogStatus("Ready...");
LogProfitReset();
chart = Chart(ChartCfg);
chart.reset();
LoopInterval = Math.max(LoopInterval, 1);
while (true) {
onTick(exchange);
Sleep(LoopInterval * 1000);
}
}
گھاساس پوسٹ پر اپ ڈیٹ رکھیں، کسی بھی سوال پوچھنے کے لئے آزاد محسوس کرتے ہیں