Oak آپ FMZ توسیع API کے ساتھ انٹرفیس کرنے کے لئے JS استعمال کرنے کے لئے سکھاتا ہے

مصنف:لیدیہ, تخلیق: 2022-12-20 13:27:24, تازہ کاری: 2023-09-20 11:12:14

img

Oak آپ FMZ توسیع API کے ساتھ انٹرفیس کرنے کے لئے JS استعمال کرنے کے لئے سکھاتا ہے

تعارف

ہیلو سب، میں اوک کوانٹ ہوں. مارکیٹ رجحان یاد دہانی کے باعث میں نے کچھ وقت پہلے تیار کیامارکیٹ کی نگرانی، جو مشہور ہے ، اور اسی نام کی سروس نمبر کی ہم آہنگ یاد دہانی ہے ، جو نئے اور پرانے صارفین کو مارکیٹ کے رجحان کا فیصلہ کرنے میں ایک نیا حوالہ فراہم کرتا ہے۔ اس گرمی سے فائدہ اٹھانے کے ل we ، ہم نے روبوٹ کے مابین پیغام مواصلات کو حاصل کرنے کے لئے ایف ایم زیڈ کی توسیع شدہ اے پی آئی کو ڈاکنگ کرنا شروع کیا ، اور مارکیٹ کے انتباہات کو براہ راست نامزد روبوٹ کو آگے بڑھانا۔ یہ مضمون دو ایپلی کیشن کے منظرناموں کو مثال کے طور پر لیتا ہے ، اور امید کرتا ہے کہ آپ مزید دلچسپ چیزیں تیار کرسکتے ہیں...

اس مضمون میں بنیادی طور پر متعارف کرایا گیا ہے:

  1. ڈویلپرز جے ایس زبان کے ذریعے ایف ایم زیڈ توسیع شدہ اے پی آئی کے ساتھ کس طرح انٹرفیس کرتے ہیں۔ (اس مضمون میں بطور مثال گیٹ نوڈ لسٹ کا طریقہ لیا گیا ہے)
  2. کیس 1: مانیٹرنگ روبوٹ اور دیگر روبوٹ کے درمیان پیغام مواصلات کو سمجھنے کے لئے توسیع شدہ API کے کمانڈ روبوٹ طریقہ کار کا استعمال کریں۔
  3. کیس 2: متعدد روبوٹ ڈیٹا کی متحد نگرانی اور نمائش کو حاصل کرنے کے لئے توسیع شدہ API کے GetRobotDetail طریقہ کار کا استعمال کریں۔

1. FMZ کے توسیع API کے ساتھ انٹرفیس کے لئے JS کا استعمال کریں

1) AccessKey اور SecretKey (جسے آگے AK اور SK کہا جائے گا) کے لئے درخواست دیں۔ ہم ایف ایم زیڈ کی سرکاری ویب سائٹ پر [اکاؤنٹ] -> [اے پی کیو] -> [نیا ایپی کیو بنائیں] کے مینو میں درخواست دیتے ہیں ، اور پھر اے کے اور ایس کے کا ایک گروپ حاصل کرتے ہیں اور ریکارڈ کرتے ہیں۔ (ایف ایم زیڈ میں اے کے اور ایس کے نظر آتے ہیں ، ہم کسی بھی وقت [اے پی آئی انٹرفیس] مینو میں اے کے اور ایس کے کے مکمل ڈیٹا کو دیکھ سکتے ہیں۔)

img

2) توسیع API دستاویز کے مطابق تیار سب سے پہلے، کی درخواست API کے اہم اقدامات پر نظر آتے ہیں.

  1. FMZ API انٹرفیس:
https://www.fmz.com/api/v1
  1. درخواست کے بنیادی پیرامیٹرز
{
    'version'   : '1.0',                                //Custom version number
    'access_key': '8a148320e0bxxxxxxxxxxxxxx19js99f',   //AK
    'method'    : 'GetNodeList',                        //The specific method to call
    'args'      : [],                                   //List of parameters for the specific method algorithm
    'nonce'     : 1516292399361,                        //Timestamp, in milliseconds
    'sign'      : '085b63456c93hfb243a757366600f9c2'    //Signature (need to be encrypted according to the above 5 parameters to obtain, as discussed below)
}
  1. مکمل درخواست یو آر ایل سوالیہ نشان اور پیرامیٹر پاسنگ کی شکل میں spliced کر رہے ہیں
Take the GetNodeList method as an example:
https://www.fmz.com/api/v1?
access_key=8a148320e0bxxxxxxxxxxxxxx19js99f&
nonce=1516292399361&
args=%5B%5D&
sign=085b63456c93hfb243a757366600f9c2&
version=1.0&
method=GetNodeList
  1. دستخط کا طریقہ
After the parameters are spliced in the following order, the MD5 encryption algorithm is used to encrypt the string and convert it to a hexadecimal data string value, which is used as the value of the parameter sign.
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
  1. خلاصہ میں، مندرجہ ذیل کوڈ دستیاب ہے ماخذ کوڈ کا پتہ:[اوک کوانٹ] - JS FMZ توسیع API ڈیمو ڈاکنگ
var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//Replace here with your own AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//Replace here with your own SecretKey

function main() {
    //Get 5 basic parameter objects
    var param = getParam("1.0.0",AK,getArgs());
    Log("param:",param);
    //Get the result after md5 encryption of splicing parameters
    var md5Result = md5(param);
    //Assign the encryption result to the basic parameter object
    param.sign = md5Result;
    //Get the URL of the request api
    var finalUrl = getFinalUrl(param);
    Log("finalUrl:",finalUrl);
    //Execute the request and print the results
    var info = HttpQuery(finalUrl);
    Log("info:",info);
}

//Get 5 basic parameter objects
function getParam(version,ak,args){
    return {
        'version': version,
        'access_key': ak,
        'method': 'GetNodeList',
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

//Execute md5 encryption
function md5(param){
    var paramUrl = param.version+"|"+param.method+"|"+param.args+"|"+param.nonce+"|"+SK
    Log("paramUrl:",paramUrl);
    return Hash("md5", "hex", paramUrl)
}

//Get the final request URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//The naming method of... args is not supported in js, so the arguments keyword is used instead to obtain the parameter array
function getArgs(){
    return [].slice.call(arguments);
}

کیس 2: روبوٹ کے مابین پیغام مواصلات کو حاصل کرنے کے لئے توسیع شدہ API کے کمانڈ روبوٹ طریقہ کار کا استعمال

مندرجہ بالا کوڈ کی بنیاد پر، ہم روبوٹ کے درمیان پیغام مواصلات حاصل کرنے کے لئے کمانڈ روبوٹ طریقہ استعمال کریں گے.

سب سے پہلے، کمانڈ روبوٹ (روبوٹ آئی ڈی، سی ایم ڈی) کے طریقہ کار کی طرف سے کی ضرورت ہے کہ دو پیرامیٹرز پر ایک نظر ڈالیں:

پیرامیٹر کا نام قسم معنی
روبوٹ int روبوٹ ID، جو GetRobotList (...) یا روبوٹ کی تفصیلات کے صفحے پر حاصل کیا جا سکتا ہے
سی ایم ڈی تار روبوٹ کو پیغام بھیجا گیا

اب جب کہ ہم پیرامیٹر کا مطلب جانتے ہیں، چلیں کال کرنے کا طریقہ کار نافذ کریں۔

  1. روبوٹ کی تفصیلات کے صفحے پر روبوٹ کی شناخت حاصل کریں

  2. Cmd پیغام حاصل کرنے کا طریقہ لاگو کریں

//Get message header information
function getMessageBody(toUserName,msgType,content){
    return ({
        "toUserName":toUserName,//Who to send to
        "fromUserName":AOKE_INFO,//Source
        "createTime": new Date().getTime(),//Current timestamp
        "msgType":msgType,//Message Type
        "content":content,//Message content
        "msgId":Math.random().toString(36).slice(-8)//Message ID
    })
}

//Get message body trend information (data of message header content field)
function getCtaDate(symbol,timeCycle,direction,nowCycleTime){
    return {
        "symbol":symbol,//Trading currency
        "timeCycle":timeCycle,//Trend cycle
        "direction":direction,//Current entry direction, 0: berish, 1: bullish
        "createTime":new Date().getTime(),//Current timestamp
        "nowCycleTime":nowCycleTime//Start time of current cycle
    }
}
  1. پیغام بھیجنے کا کوڈ تبدیل کریں
//Get messages before sending them
var sendMessage = getMessageBody("Test object",'CTARemind',getCtaDate('BTC_USDT','120','0','2020-05-1620:00:00'));

//Get the robot ID and message body through the getArgs() method, and pass in the basic parameters.
var param = getParam("1.0.0",AK,getArgs(17777,sendMessage));
  1. اہم طریقہ کار کو چلائیں۔ پیغام بھیجنے کے بعد، پیغام حاصل کرنے کے لئے GetCommand() طریقہ کار کا استعمال کریں
function main(){
    while(true) { 
        var cmd = GetCommand()
        if (cmd) { 
            Log(cmd)
        }
        Sleep(1000) 
    }
}

پیغام کامیابی سے بھیجا گیا:

img

پیغام کامیابی سے موصول ہوا:

img

کیس 3: روبوٹ کی ڈیٹا مانیٹرنگ اور ڈسپلے کو سمجھنے کے لئے توسیع شدہ API کے GetRobotList اور GetRobotDetail طریقوں کا استعمال کریں.

اسی طرح، ہم سب سے پہلے اگلے دو طریقوں کے پیرامیٹر کی وضاحت پر نظر آتے ہیں GetRobotList ((آفسیٹ، لمبائی، robotStatus، لیبل):

پیرامیٹر کا نام قسم معنی
آفسیٹ int سوال کا صفحہ نمبر
لمبا int سوال کے صفحے کی ڈیٹا کی لمبائی
روبوٹاسٹیٹس int تمام حاصل کرنے کے لئے - 1 میں منتقل
لیبل تار اپنی مرضی کے مطابق ٹیگ اس ٹیگ کے ساتھ تمام روبوٹ فلٹر کر سکتے ہیں

GetRobotDetail(RobotId):

پیرامیٹر کا نام قسم معنی
روبوٹ int روبوٹ کی شناخت
  1. GetRobotList طریقہ کے ذریعے روبوٹ کی فہرست حاصل کریں
//Get robot list information
var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
var robotList = robotListJson.data.result.robots;
  1. روبوٹ کی تفصیلات حاصل کریں
//Get robot detail information
var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
var robotDetail = robotDetailJson.data.result.robot;
  1. کنسول آؤٹ پٹ ٹیبل ڈیٹا
function getLogPrient(infoArr){
    return table = {
            type: 'table',
            title: 'Oak Quant robot display',
            cols: [''Robot ID', 'Robot name', 'Strategy name', 'Next deduction time', 'Consumed time ms', 'Consumed amount CNY', 'Latest active time', 'Publish or not'],
            rows: infoArr
        };
}
  1. خلاصہ میں، مندرجہ ذیل کوڈ دستیاب ہے ماخذ کوڈ کا پتہ:[اوک مقدار] - روبوٹ کے بارے میں معلومات حاصل کرنے اور اسے ظاہر کرنے کے لئے توسیع API کا استعمال کریں
var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//Replace here with your own AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//Replace here with your own SecretKey
var OFF_SET = 0;//Page number subscript of query
var PAGE_LENGTH = 5;//Data length of the query page

function main() {
    LogReset();
    while(true){
        //Get robot list information
        var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
        //Get the robot list information
        var robotList = robotListJson.data.result.robots;
        //Create an array to display robot information
        var infoArr = new Array();
        var infoArr_index = 0;
        for (index = 0; index < robotList.length; index++) {
            var robot = robotList[index];
            //Get the robot ID of the current loop
            var robotId = robot.id;
            //Get robot detail information
            var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
            var robotDetail = robotDetailJson.data.result.robot;
            //Convert details to array objects
            var arr = getLogPrientItem(robotDetail);
            infoArr[infoArr_index] = arr;
            infoArr_index++;
        }
        Log("infoArr:",infoArr);
        LogStatus('`' + JSON.stringify(getLogPrient(infoArr)) + '`');
        Sleep(30000);
    }
}

function getLogPrient(infoArr){
    return table = {
            type: 'table',
            title: 'Oak Quant robot display',
            cols: [''Robot ID', 'Robot name', 'Strategy name', 'Next deduction time', 'Consumed time ms', 'Consumed amount CNY', 'Latest active time', 'Publish or not'],
            rows: infoArr
        };
}

//Get API information by parameters
function getAPIInfo(method,dateInfo){
    //Get 5 basic parameter objects
    var param = getParam("1.0.0",AK,method,dateInfo);
    //Log("param:",param);
    //Get the result after md5 encryption of splicing parameters
    var md5Result = md5(param);
    //Assign the encryption result to the basic parameter object
    param.sign = md5Result;
    //Get the URL of the request api
    var finalUrl = getFinalUrl(param);
    //Log("finalUrl:",finalUrl);
    //Execute the request and print the results
    var info = HttpQuery(finalUrl);
    //Log("info:",info);
    return JSON.parse(info);
}

//Get the object of the basic 5 parameters
function getParam(version,ak,method,args){
    return {
        'version': version,
        'access_key': ak,
        'method': method,
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

//Execute md5 encryption
function md5(param){
    var paramUrl = param.version+"|"+param.method+"|"+param.args+"|"+param.nonce+"|"+SK
    //Log("paramUrl:",paramUrl);
    return Hash("md5", "hex", paramUrl)
}

//Get the final request URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//The naming method of... args is not supported in js, so the arguments keyword is used instead to obtain the parameter array
function getArgs(){
    return [].slice.call(arguments);
}

//Get the display details object: ['Robot ID', 'Robot Name', 'Strategy Name', 'Next Deduction Time', 'Time Consumed ms', 'Amount Consumed CNY', 'Latest Active Time', 'Whether to Publish'],
function getLogPrientItem(robotDetail){
    var itemArr = new Array();
    var iteArr_index = 0;
    itemArr[iteArr_index++] = robotDetail.id;
    itemArr[iteArr_index++] = robotDetail.name;
    itemArr[iteArr_index++] = robotDetail.strategy_name;
    itemArr[iteArr_index++] = robotDetail.charge_time;
    itemArr[iteArr_index++] = robotDetail.charged;
    itemArr[iteArr_index++] = robotDetail.consumed/1e8;
    itemArr[iteArr_index++] = robotDetail.refresh;
    itemArr[iteArr_index++] = robotDetail.public == 0?"Published":"Unpublished";
    return itemArr;
}

نتیجہ

اصل توسیع میں ، زیادہ سے زیادہ دلچسپ افعال کا احساس کیا جاسکتا ہے۔ مثال کے طور پر ، کمانڈ روبوٹ طریقہ کار کا استعمال کرتے ہوئے ، ہر روبوٹ روبوٹ اے کو دل کی دھڑکن کا پتہ لگانے کا پیغام بھیجتا ہے۔ اگر روبوٹ اے کو معلوم ہوتا ہے کہ کسی مشین میں دل کی دھڑکن نہیں ہے ، لیکن روبوٹ ابھی بھی چل رہا ہے تو ، وہ ایف ایم زیڈ سروس کے ذریعے الارم دے سکتا ہے۔ اس طرح ، _C ((() مردہ لوپ جیسے الارم سے بچنے سے بچ سکتے ہیں جو جعلی موت کے منظرناموں کی پروگرامنگ کا باعث بنتے ہیں۔ مجھے امید ہے کہ اس بار میرے تعارف کے ذریعے، ایف ایم زیڈ پلیٹ فارم میں مزید اور زیادہ دلچسپ افعال تیار اور کھولے جا سکتے ہیں. آخر میں ، میں ایف ایم زیڈ پلیٹ فارم اور تمام عظیم لوگوں جیسے شیاوکسیومینگ ، مسٹر ژانگ اور مسٹر زیڈ کا ان کی حمایت اور مدد کے لئے شکریہ ادا کرنا چاہتا ہوں۔ شکریہ۔


متعلقہ

مزید