وسائل لوڈ ہو رہے ہیں... لوڈنگ...

FMZ API ہدایات

مصنف:صفر, تخلیق: 2020-04-20 10:19:00, تازہ کاری: 2023-04-12 14:44:56

sted آئی پی ایڈریس ہے10.0.3.15 }


#### exchange.SetTimeout(...)

```exchange.SetTimeout(Millisecond)```, in which the parameter **Millisecond** is a millisecond value.

Only for the ```rest``` protocol, it is used to set the time-out period for ```rest``` requests, and it takes effect only by setting it once.
For example: ```exchange.SetTimeout(3000)```, set the timeout time of the ```rest``` request of the exchange object ```exchange```, if it exceeds 3 seconds, timeout will return ```null```.

Note:
* The parameter ```Millisecond``` is millisecond, and 1,000 milliseconds equals 1 second. 
* Only need to set once.
* Only for the **rest** protocol.
* ```SetTimeout``` is not a global function, but an exchange object method. 

### Special Requirements for C++ Written Strategies   
The main difference between ```C++``` written strategy and ```JavaScript``` written strategy is the returned data differences of **FMZ API** interface. For example, the ```exchange.GetTicker()``` function.

- JavaScript
```exchange.GetTicker()``` returns an object if the call succeeds, or returns ```null``` if the call fails (due to the exchange server problems or network problems, etc.).

```javascript
function main() {
    var ticker = exchange.GetTicker()
    // Determine if the call to "exchange.GetTicker" function failed, and return "null" when it failed
    if (ticker){
        Log(ticker)
    }
}
  • C++exchange.GetTicker()جب کال کامیاب ہوجاتی ہے تو ایک آبجیکٹ لوٹاتا ہے۔ اگر کال ناکام ہوجاتی ہے تو ، واپس آنے والا آبجیکٹ اب بھی ایک آبجیکٹ ہے ، جو عام واپس آنے والے آبجیکٹ سے خاصیت کے ذریعہ ممتاز ہے۔Valid.

    void main() {
        auto ticker = exchange.GetTicker();
        // Determine if the call to "exchange.GetTicker()" function failed and if the "Valid" attribute of the returned object is "false"
        if (ticker.Valid) {
            Log(ticker);
        }
    }
    

کے درمیان فرقmain()میں کردارC++تحریری حکمت عملی اورmain()معیاری C11 میں فنکشن: کی واپسی کی قیمتC++پروگرام کی انٹری فنکشنmain()میں C11 ہےintقسم.C++ایف ایم زیڈ پلیٹ فارم پر تحریری حکمت عملی، حکمت عملی کے آغاز کی تقریب بھی تقریب ہےmain()، لیکن یہ دونوں ایک ہی فنکشن نہیں ہیں، صرف ایک ہی نام کے ساتھ. FMZ پلیٹ فارم پر، واپسی کی قیمتmain()میں کردارC++کی حکمت عملی ہےvoid type.

void main() {
    // Use "Test" function to test
    if (!Test("c++")) {
        // Show an exception to stop the program
        Panic("Please download the latest-versioned docker");
    }

    // Determine if the return of all objects is valid with "Valid" 
    LogProfitReset();
    LogReset();
    Log(_N(9.12345, 2));
    Log("use _C", _C(exchange.GetTicker), _C(exchange.GetAccount));
}

جاوا اسکرپٹ کے خصوصی معاملات

جاوا اسکرپٹ زبان کی وجوہات کے لئے (جاوا اسکرپٹ زبان میں بلٹ میں تار حمایت کرتا ہےasciiاورutf-16صرف انکوڈنگ، تاکہ اعداد و شمار کو کھونے کے لئے نہیں) ، جب یہ تار ہے کہ انکوڈنگ نہیں کیا جا سکتا ہے کا سامنا ہے، یہ واپس آئے گاArrayBufferتمام API انٹرفیس جو تار پیرامیٹرز کو منتقل کر سکتے ہیں بھی پاسنگ کی حمایت کرتے ہیںArrayBuffer type.

جاوا اسکرپٹ ملٹی تھریڈنگ

یہ واقعی کی کثیر تھریڈنگ تقریب کی حمایت کرتا ہےJavaScriptسسٹم کے نچلے حصے سے زبان کی حکمت عملی ، بشمول: کسٹم ایگزیکشن فنکشنز کا بیک وقت عمل درآمد؛ بیک وقت تھریڈز کے مابین مواصلات کی حمایت ، بیک وقت تھریڈز اور مین تھریڈ کے مابین مواصلات کی حمایت؛ تھریڈ ماحول میں متغیرات کی اسٹوریج ، شیئرنگ اور دیگر افعال۔ یہ ابھی تک صرف براہ راست تجارتی ماحول میں استعمال کی حمایت کرتا ہے ، براہ کرم ملاحظہ کریں:https://www.fmz.com/bbs-topic/9974.

__دھاگہ

کے__Thread(function, arguments...)فنکشن ایک تھریڈ بناتا ہے جو بیک وقت چلتا ہے۔ یہ تھریڈ ایگزیکشن فنکشن (ایک الگ ماحول کے طور پر چل رہا ہے) کے علاوہ متغیرات کے براہ راست حوالہ کی حمایت نہیں کرتا ہے۔ بیرونی متغیرات کے حوالہ جات مرتب کرنے میں ناکام ہوجائیں گے۔ دوسرے بند ہونے والے افعال کے حوالہ جات بھی معاون نہیں ہیں۔ پلیٹ فارم کے تمام API کو تھریڈ کے اندر بلایا جاسکتا ہے ، لیکن دوسرے صارف کے ذریعہ بیان کردہ افعال کو بلایا نہیں جاسکتا ہے۔ پیرامیٹرfunctionایک تقریب حوالہ یا ایک گمنام تقریب ہو سکتا ہے. پیرامیٹرargumentsکے پیرامیٹر ہےfunctionفنکشن (حقیقی پیرامیٹر میں منتقل) ، اورarguments...اس کا مطلب ہے کہ متعدد پیرامیٹرز کو منتقل کیا جاسکتا ہے۔ واپسی کی قیمت: تھریڈ ID۔

function testFunc(n) {
    Log("Execute the function testFunc, parameter n:", n)
}

function main() {
    var testThread1 = __Thread(function () {
        Log("Executes an anonymous function with no parameters.")
    })

    var testThread2 = __Thread(testFunc, 10)   // parameter n : 10
    
    __threadJoin(testThread1)                  // You can use the __threadJoin function to wait for concurrent threads to complete
    __threadJoin(testThread2)                  // If you don't wait for the execution of testThread1 and testThread2 to complete, the main thread will automatically release the concurrent thread after the execution is completed first, and terminate the execution function of the concurrent thread
}

یہ کال کرنے کے طریقہ کار کی حمایت کرتا ہے__Thread([function, arguments...], [function, arguments...], ...)، یعنی متعدد تھریڈ ایگزیکشن افعال تخلیق شدہ تھریڈز میں ترتیب وار انجام دیئے جاتے ہیں۔

function threadTestFuncA(a) {
    Log(a)
    threadTestFuncC(4)
    
    // The threadTestFuncC function can be called, but the threadTestFuncB function cannot be called

    // this.d
    Log(d)
}

function threadTestFuncB(b) {
    Log(b)
    threadTestFuncC(2)

    this.d = 5
}

function main() {
    // Execute the threadTestFuncB function first, and then execute the threadTestFuncA function
    // threadTestFuncC will not be executed automatically, but it can be called by other thread execution functions
    var threadId = __Thread([threadTestFuncA, 3], [threadTestFuncB, 1], ["function threadTestFuncC(c) {Log(c)}"])
    __threadJoin(threadId)
}

متوازی عملدرآمد کی تقریب کو منتقل کر دیا__Threadفنکشن الٹا ترتیب میں عملدرآمد کیا جائے گا. مندرجہ بالا مثال میں استعمال کیا جائے گاLogپرنٹ کرنے کے لئے تقریب1 ~ 5ترتیب میں۔ مختلف تھریڈ ایگزیکشن افعال کے درمیان مشترکہ متغیرات کی حمایت کی جاتی ہے۔ مثال کے طور پر ،this.dمندرجہ بالا مثال میں متغیر میں تفویض کیا جا سکتا ہےthreadTestFuncBاستعمال کیا جاتا ہےthreadTestFuncAیہ فنکشن سٹرنگز میں منتقل کرنے کی حمایت کرتا ہے، جیسے"function threadTestFuncC(c) {Log(c)}"مندرجہ بالا مثال میں، جو تھریڈز کو بیرونی افعال اور لائبریریوں کو اس طریقہ کار کے ذریعہ درآمد شدہ فنکشن کالز انجام دینے کی اجازت دیتا ہے۔

بیرونی لائبریریاں درآمد کرنے کے لئے، ایک مخصوص استعمال کی مثال مندرجہ ذیل ہے:

function ml(input) {
    const net = new brain.NeuralNetwork();
    net.train([
        { input: [0, 0], output: [0] },
        { input: [0, 1], output: [1] },
        { input: [1, 0], output: [1] },
        { input: [1, 1], output: [0] },
    ]);
    return net.run(input);
}

function main() {
    Log(__threadJoin(__Thread([ml, [1, 0]], [HttpQuery("https://unpkg.com/brain.js")])))
}

__تھریڈ PeekMessage

کے__threadPeekMessage(threadId, timeout)تقریب تھریڈ مواصلات چینل سے ڈیٹا پڑھتا ہے، پیرامیٹرthreadIdID کی طرف سے واپس کیا جاتا ہے__Thread()فنکشن، پیرامیٹر کی ترتیبthreadIdکا مطلب ہے تھریڈ کی طرف سے بھیجے گئے ڈیٹا کو وصول کرنا جس کی نمائندگی تھریڈ آئی ڈی کرتا ہے۔ جب اسے 0 پر مقرر کیا جاتا ہے تو ، اس کا مطلب ہے کہ مرکزی تھریڈ کے ذریعہ بھیجے گئے ڈیٹا کو وصول کرنا ، یعنی موجودہ مرکزی فنکشن (پیرامیٹر تھریڈ آئی ڈی کو 0 پر مقرر کیا گیا ہے ، جو صرف بیک وقت تھریڈ ایگزیکشن افعال میں معاون ہے۔) پیرامیٹرtimeoutایک ٹائم آؤٹ کی ترتیب ہے، جو اس پیرامیٹر کی طرف سے مقرر ملی سیکنڈ کی تعداد کے مطابق بلاک اور انتظار کریں گے.timeoutپر مقرر کیا گیا ہے-1، اس کا مطلب یہ ہے کہ بلاک کریں اور انتظار کریں جب تک کہ چینل میں ڈیٹا موصول نہ ہو جائے۔ جب چینل کا بھیجنے والا تھریڈ عملدرآمد ختم ہوجاتا ہے اور کوئی ڈیٹا نہیں ہوتا ہے تو ،__threadPeekMessageتقریب فوری طور پر ایک null قدر واپس کرے گا. واپسی کی قیمت: موصول اعداد و شمار.

پروگرام لکھتے وقت ، آپ کو تھریڈ deadlock کے مسئلے پر توجہ دینے کی ضرورت ہے۔ مندرجہ ذیل مثال ایگزیکشن فنکشن کے مابین مواصلات ہے۔testFuncتخلیق ہم وقت سازی کے موضوع اورmainمرکزی تھریڈ کا فنکشن اور تھریڈ ایگزیکشن فنکشنtestFuncسب سے پہلے پھانسی دی جائے گی.

function testFunc() {
    for(var i = 0 ; i < 5 ; i++) {                // 0 ~ 5, after sending to the main thread 5 times, the execution of the thread function is completed, and the __threadPeekMessage function in the main function fetches all the data, it will not block again, and returns a null value immediately
        __threadPostMessage(0, i)                 // Send data to the main thread
        var msg = __threadPeekMessage(0, -1)      // Listen for data from the main thread
        Log("from main msg:", msg)
        Sleep(500)
    }
    Log("testFunc execution is complete")
}

function main() {
    var testThread = __Thread(testFunc)           // Create a thread with an Id of 1 
    
    for (var i = 0 ; i < 10 ; i++) {
        __threadPostMessage(1, i)                 // Send data to the thread whose Id is 1, that is, the thread that executes the testFunc function in this example
        var msg = __threadPeekMessage(1, -1)      // Listen to the data sent by the thread whose Id is 1, that is, the data sent by the thread that executes the testFunc function in the example
        Log("from testFunc msg:", msg)
        Sleep(500)
    }
}

__threadپوسٹ پیغام

کے__threadPostMessage(threadId, data)تقریب تھریڈ مواصلات چینل میں ڈیٹا لکھتا ہے، پیرامیٹرthreadIdID کی طرف سے واپس کیا جاتا ہے__Thread()تقریب، پیرامیٹر مقرر کریںthreadIdکا مطلب ہے تھریڈ ID کی نمائندگی کرنے والے تھریڈ میں ڈیٹا بھیجنا ، اور جب اسے 0 پر مقرر کیا جاتا ہے تو اس کا مطلب ہے کہ مرکزی تھریڈ میں ڈیٹا بھیجنا ، یعنی موجودہ مرکزی فنکشن (پیرامیٹر تھریڈ ID کو 0 پر مقرر کیا گیا ہے ، جو صرف بیک وقت تھریڈ ایگزیکشن افعال میں معاون ہے۔) پیرامیٹرdataاعداد و شمار ، تاروں ، بولین اقدار ، اشیاء ، صفوں اور دیگر قسم کے اعداد و شمار کو منتقل کرسکتا ہے۔ اس فنکشن میں کوئی واپسی کی قیمت نہیں ہے۔

جب__threadPostMessageایک تقریب کو اشارے اور اعداد و شمار بھیجنے کے لئے ایک موضوع کے عملدرآمد کے فنکشن میں بلایا جاتا ہے، ایک پیغام واقعہ بھی پیدا کیا جائے گا.EventLoop()پیغام کی اطلاعات وصول کرنے کا فنکشن۔

function testFunc() {
    for(var i = 0 ; i < 10 ; i++) {
        Log("post msg, i:", i)
        __threadPostMessage(0, {msg: "testFunc", i: i})
        Sleep(100)
    }
}

function main() {
    var testThread = __Thread(testFunc)
    
    for (var i = 0 ; i < 10 ; i++) {
        var e = EventLoop()
        Log("e:", e)
        // e: {"Seq":1,"Event":"thread","Index":1,"Nano":1677745512064773600,"Deleted":0,"Symbol":"","Ticker":{"Info":null,"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}}
        if (e.Event == "thread") {
            var msg = __threadPeekMessage(testThread, -1)
            Log("msg:", msg, "#FF0000")
        }
        Sleep(500)
    }
    
    var retThreadJoin = __threadJoin(testThread)
    Log("retThreadJoin:", retThreadJoin)
}

_threadشامل ہوں

کے__threadJoin(threadId, timeout)تقریب کا استعمال کیا جاتا ہے کے لئے انتظار کرنے کے لئے موضوع کے ساتھ مخصوص ID کے باہر نکلنے اور نظام کے وسائل کی وصولی کے لئے. پیرامیٹرthreadIdID کی طرف سے واپس کیا جاتا ہے__Thread()تقریب، اور پیرامیٹرtimeoutتھریڈ کے اختتام کا انتظار کرنے کے لئے ٹائم آؤٹ کی ترتیب ہے ، ملی سیکنڈ میں۔ اگر ٹائم آؤٹ مقرر نہیں کیا گیا ہے تو ، اس کا مطلب ہے تھریڈ کی کارروائی کے اختتام تک انتظار کرنا۔ واپسی کی قیمت: قسم ایک اعتراض ہے ، جس سے عملدرآمد کا نتیجہ ظاہر ہوتا ہے۔ اگر یہ ٹائم آؤٹ ہوتا ہے تو ، واپسیundefined.

واپسی کی قدر کی ساخت، مثال کے طور پر:

{
    "id":1,                 // Thread Id
    "terminated":false,     // Whether the thread is terminated forcibly
    "elapsed":2504742813,   // The running time of the thread (nanoseconds)
    "ret": 123              // The return value of the thread function
}

__threadتکمل کریں

کے__threadTerminateفنکشن کا استعمال تھریڈ کو زبردستی ختم کرنے اور تخلیق شدہ تھریڈ کے ذریعہ استعمال ہونے والے ہارڈ ویئر وسائل کو جاری کرنے کے لئے کیا جاتا ہے (__threadJoin کو اب اختتام کا انتظار کرنے کے لئے استعمال نہیں کیا جاسکتا) ۔ پیرامیٹرthreadIdID کی طرف سے واپس کیا جاتا ہے__Thread()فنکشن۔ واپسی کی قیمت: بولین ویلیو، جس میں عملدرآمد کا نتیجہ ظاہر ہوتا ہے۔

function testFunc() {
    for(var i = 0 ; i < 10 ; i++) {
        Log("i:", i)
        Sleep(500)
    }
}

function main() {
    var testThread = __Thread(testFunc)
    
    var retThreadTerminate = null 
    for (var i = 0 ; i < 10 ; i++) {
        Log("main i:", i)
        if (i == 5) {
            retThreadTerminate = __threadTerminate(testThread)
        }
        Sleep(500)
    }
    
    Log("retThreadTerminate:", retThreadTerminate)
}

__تھریڈ گیٹ ڈیٹا

__threadGetData(threadId, key)، اس فنکشن کا استعمال تھریڈز کے مابین مشترکہ متغیرات تک رسائی حاصل کرنے کے لئے کیا جاتا ہے۔ ڈیٹا درست ہے جب تھریڈ نے__threadJoinتقریب (ایک کامیاب باہر نکلنے کے لئے انتظار کر رہا ہے) اور عملدرآمد نہیں کیا ہے__threadTerminateتقریب (مجبوری سے دھاگے کو ختم). پیرامیٹرthreadIdتھریڈ ID، اور پیرامیٹر ہےkeyذخیرہ شدہ کی چابی کا نام ہےkey-valueجوڑا. واپسی کی قیمت: کی کلید کی قیمت کے مساوی لوٹاتا ہےkeyمیںkey-value pair.

threadIdاہم تار (یعنی تار جہاں) کی نشاندہی کرنے کے لئے 0 ہےmainفنکشن واقع ہے) ، آپ کو استعمال کر سکتے ہیں__threadId()موجودہ موضوع کی شناخت حاصل کرنے کے لئے تقریب، پیرامیٹر مقررthreadIdموجودہ تھریڈ ID میں، اور اس کا استعمال تھریڈ ایگزیکشن فنکشن میں موجودہ تھریڈ میں محفوظ متغیرات کو پڑھنے کے لئے کریں۔ آپ مخصوص ID کے تھریڈ ماحول میں متغیرات کو بھی پڑھ سکتے ہیں۔

function main() {
    var t1 = __Thread(function() {
        Sleep(2000)
        var id = __threadId()                                                   // Get the Id of the current thread
        Log("id:", id, ", in testThread1 print:", __threadGetData(id, "msg"))   // Retrieve the key value corresponding to the key name msg in the current thread, i.e. "testThread2"
        Log("id:", 2, ", in testThread1 print:", __threadGetData(2, "msg"))     // Read the key value corresponding to the key name msg in the thread with thread Id 2, i.e. 99
    })

    var t2 = __Thread(function(t) {
        __threadSetData(t, "msg", "testThread2")                                // Set a key-value pair to the thread with Id t1 (Id 1), with the key name msg and the key value "testThread2"
        __threadSetData(__threadId(), "msg", 99)                                // Set the key-value pair in the current thread (Id is 2) with the key name msg and the key value 99
        __threadSetData(0, "msg", 100)                                          // Set up a key-value pair in the main thread, with the key name msg and the key value 100
    }, t1)
    
    __threadJoin(t1)   // You can check the __threadJoin(threadId, timeout) function, which is used to wait for the end of thread execution
    Log("in main, get msg:", __threadGetData(0, "msg"))
}

__تھریڈ سیٹ ڈیٹا

__threadSetData(threadId, key, value)، جس میں موضوع کے ماحول میں متغیر ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے. پیرامیٹرthreadIdتھریڈ ID، پیرامیٹر ہےkeyذخیرہ شدہ کی چابی کا نام ہےkey-valueجوڑے، اور پیرامیٹرvalueکلیدی قدر ہے۔ فنکشن کی کوئی واپسی کی قدر نہیں ہے۔

threadIdاہم تار (یعنی تار جہاں) کی نشاندہی کرنے کے لئے 0 ہےmainآپ کو آپ کے کمپیوٹر کے لئے آپ کے کمپیوٹر کے لئے آپ کے کمپیوٹر کے لئے آپ کے کمپیوٹر کے لئے__threadId()موجودہ موضوع کی شناخت حاصل کرنے کے لئے تقریب.valueحذف کرنے کا کوئی مخصوص طریقہ نہیںkey. یہ موضوعات کے درمیان مشترکہ متغیرات تک باہمی رسائی کی حمایت کرتا ہے۔ ڈیٹا درست ہے جب تھریڈ نے عملدرآمد نہیں کیا ہے__threadJoinتقریب (کامیاب باہر نکلنے کے لئے انتظار کر رہا ہے) اور عملدرآمد نہیں کیا ہے__threadTerminateتقریب (طاقت سے دھاگے کو ختم). پیرامیٹر کی قدرvalueایک serializable متغیر ہونا ضروری ہے.

function testFunc() {
    var id = __threadId()                  // Get the current thread Id
    __threadSetData(id, "testFunc", 100)   // Stored in the current thread environment
    __threadSetData(0, "testFunc", 99)     // Stored in the main threaded environment
    Log("testFunc execution is complete")
}

function main() {
    // threadId is 1, the created thread with threadId 1 will be executed first, as long as the thread resources are not recycled, the variables stored locally in the thread will be valid
    var testThread = __Thread(testFunc)
    
    Sleep(1000)

    // Output in main, get testFunc: 100
    Log("in main, get testFunc:", __threadGetData(testThread, "testFunc"))

    // Output in main, get testFunc: 99
    Log("in main, get testFunc:", __threadGetData(0, "testFunc"))

    // Delete the testFunc key-value pair in the thread environment with Id testThread
    __threadSetData(testThread, "testFunc")

    // After deleting and reading again, the __threadGetData function returns undefined
    Log("in main, get testFunc:", __threadGetData(testThread, "testFunc"))
}

__تھریڈڈ

__threadId()، جو بغیر پیرامیٹرز کے موجودہ تھریڈ کی شناخت حاصل کرنے کے لئے استعمال ہوتا ہے۔ واپسی کی قیمت:threadIdموجودہ دھاگے کی.

function testFunc() {
    Log("in testFunc, __threadId():", __threadId())
}

function main() {
    __Thread(testFunc)

    // If the execution of the main thread is completed, the created child thread will stop executing, so here Sleep(1000), wait for 1 second
    Sleep(1000)
    Log("in main, __threadId():", __threadId())
}

سپورٹ wasm کوڈنگ

میںJavaScriptزبان کی حکمت عملی، wasm فائل کا ہیکس کوڈ لوڈ کیا جا سکتا ہے، مثال، اور اس میں کوڈ پر عملدرآمد کیا جا سکتا ہے.JavaScriptکوڈ، یہ ایک مخصوص رفتار فائدہ ہے.

wasm.parseModule

wasm.parseModule(data)، ایک hex تار ماڈل تجزیہ کرتا ہے جس میں.dataپیرامیٹر wasm انکوڈنگ ہے جو ایک ہیکس سٹرنگ میں تبدیل کیا گیا ہے۔ واپسی کی قیمت: واپسی a wasm ماڈل آبجیکٹ ، آپ حوالہ دے سکتے ہیںحکمت عملی کی مثال.

مثال کے طور پر مندرجہ ذیل سی ++ فنکشن کوڈ wasm کوڈ میں مرتب کیا جا سکتا ہے، اور پھر ایک ہیکس تار میں تبدیل کیا جا سکتا ہے، جس کے طور پر استعمال کیا جا سکتا ہےdataپیرامیٹرwasm.parseModule(data) function.

// Recursive Algorithm for Fibonacci Numbers
int fib(int f) {
    if (f < 2) return f;
    return fib(f - 1) + fib(f - 2);   
}

wasm.buildInstance

wasm.buildInstance(module, opt)، جو ایک wasm ماڈل مثال پیدا کرتا ہے.moduleپیرامیٹر wasm ماڈل ہے، اورoptپیرامیٹر تشکیل کی معلومات ہے ، جو wasm مثال پروگرام کو مختص اسٹیک اسپیس کو ترتیب دینے کے لئے استعمال ہوتی ہے۔ واپسی کی قیمت: wasm ماڈل مثال واپس کرتا ہے۔

optپیرامیٹر سیٹنگ مثال:

{
    stack_size: 65*1024*1024,
}

callFunction کو کال کریں

callFunction(funcName, param1, ...)، جس میں wasm ماڈل مثال کا ایک طریقہ ہے، wasm ماڈل مثال میں فنکشن کو انجام دینے کے لئے استعمال کیا جاتا ہے.funcNameپیرامیٹر کو انجام دینے کے لئے تقریب کا نام ہے، اورparam1پیرامیٹر ہے پیرامیٹر میں منتقل جب تقریب کے عملدرآمد (پیرامیٹر کی طرف سے مخصوص)funcName).

بلاکچین

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

ایتھریم

ترتیب

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم پر، ایتھریم چین کے ذریعے اسمارٹ معاہدے کے طریقہ کار کال کو لاگو کرنے کے لئے حکمت عملی کا کوڈ لکھیںexchange.IOفنکشن۔ سب سے پہلے ، ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم پر رسائی نوڈ کو تشکیل دیں۔ رسائی نوڈس خود ساختہ نوڈس ہوسکتے ہیں یا تیسری پارٹی کی خدمات کا استعمال کرسکتے ہیں ، جیسےinfura.

کے صفحے پرتبادلہFMZ مقدار ٹریڈنگ پلیٹ فارم، پروٹوکول منتخب کریں: cryptocurrency، اور پھر تبادلہ منتخب کریںWeb3ترتیب دیںRpc Address(رسائی نوڈ کا سروس ایڈریس) اورPrivate Keyیہ نجی چابیاں کی مقامی تعیناتی کی حمایت کرتا ہے، دیکھیںکلیدی تحفظ].

اے بی آئی رجسٹر کریں

ایک معاہدے کو بلانا جو ایک معیاری ہےERC20طریقہ کار کو رجسٹریشن کی ضرورت نہیں ہے اور اسے براہ راست بلایا جاسکتا ہے۔ معیاری معاہدے کے علاوہ دوسرے طریقوں کو کال کرنے کے لئے اے بی آئی مواد کی رجسٹریشن کی ضرورت ہوتی ہے۔exchange.IO("abi", tokenAddress, abiContent). ایک معاہدے کے ABI مواد حاصل کرنے کے لئے، آپ مندرجہ ذیل یو آر ایل کا استعمال کر سکتے ہیں حاصل کرنے کے لئے، صرف نتیجہ فیلڈ لے.

https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45

ایتھریم آر پی سی کو کال کرنے کا طریقہ

جب دوسرے پیرامیٹرexchange.IOفنکشن ہے"eth"، آپ کو براہ راست نوڈ سرور کے لئے دستیاب RPC طریقوں کو کال کر سکتے ہیں، مثال کے طور پر:

  • بٹوے میں ETH کے بیلنس سے استفسار کریں

    function main() {
        // "owner" needs to be replaced with a specific wallet address
        // "latest" parameter labels for string position: 'latest', 'earliest' or 'pending', please refer to https://eth.wiki/json-rpc/API#the-default-block-parameter
        // The return value ethBalance is a hexadecimal string: 0x9b19ce56113070
        var ethBalance = exchange.IO("api", "eth", "eth_getBalance", "owner", "latest")
    
        // ETH has a precision unit of 1e18
        var ethDecimal = 18
    
        // Because of the JavaScript language precision, it is necessary to use the system underlying encapsulated function BigInt, BigDecimal to process.
        // Convert ethBalance to readable quantity, 0x9b19ce56113070 to 0.043656995388076145.
        Log(Number((BigDecimal(BigInt(ethBalance))/BigDecimal(Math.pow(10, ethDecimal))).toString()))
    }
    
  • ETH ٹرانسفر

    function mian() {
        // ETH has a precision unit of 1e18
        var ethDecimal = 18
    
        // Number of transfers, readable quantity e.g. 0.01 ETH
        var sendAmount = 0.01
    
        // Because of the JavaScript language precision, it is necessary to use the system underlying encapsulated function BigInt, BigDecimal to process, and converts readable quantities into data for processing on the chain.
        var toAmount = (BigDecimal(sendAmount)*BigDecimal(Math.pow(10, ethDecimal))).toFixed(0)
        
        // "toAddress" is the address of the recipient's ETH wallet at the time of the transfer, which needs to be filled in specifically, and toAmount is the number of transfers.
        exchange.IO("api", "eth", "send", "toAddress", toAmount)
    }
    
  • سوال گیس قیمت

    function toAmount(s, decimals) {
        return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
    }  
    
    function main() {
        var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
        Log("gasPrice:", toAmount(gasPrice, 0))   // 5000000000 , in wei (5 gwei)
    }
    
  • سوال eth_estimateگیس

    function toAmount(s, decimals) {
        // The toAmount function can convert the hex-encoded value to a decimal value
        return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
    }  
    
    function main() {
        // Encoding the call to the approve method
        var data = exchange.IO("encode", "0x111111111117dC0aa78b770fA6A738034120C302", "approve", "0xe592427a0aece92de3edee1f18e0157c05861564", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
        Log("data:", data)
        var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
        Log("gasPrice:", toAmount(gasPrice, 0))
        var obj = {
            "from" : "0x0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",   // walletAddress
            "to"  : "0x111111111117dC0aa78b770fA6A738034120C302",
            "gasPrice" : gasPrice,
            "value" : "0x0",
            "data" : "0x" + data,
        }
        
        var gasLimit = exchange.IO("api", "eth", "eth_estimateGas", obj)
        Log("gasLimit:", toAmount(gasLimit, 0))
        Log("gas fee", toAmount(gasLimit, 0) * toAmount(gasPrice, 0) / 1e18)
    }
    

کوڈنگ کی حمایت

فنکشنexchange.IOمیں شامل ہےencodeطریقہ، جس میں فنکشن کال کوڈنگ واپس کر سکتے ہیںhexstring فارمیٹ۔ آپ عوامی طور پر دستیاب پلیٹ فارمز کا حوالہ دے سکتے ہیںUniswap V3 ٹریڈنگ کلاس لائبریری ٹیمپلیٹمخصوص استعمال کے لئے. انکوڈنگ کی کالunwrapWETH9طریقہ کار یہاں ایک مثال کے طور پر استعمال کیا جاتا ہے:

function main() {
    // Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
    // To call the unwrapWETH9 method, you need to register the ABI first, omit the registration here.
    // "owner" represents the wallet address, it needs to fill in the specific, 1 represents the number of unwrapping, unwrap a WETH into ETH
    var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
    Log(data)
}

جب کال کریںexchange.IO("encode",...)فنکشن، اگر دوسرا پیرامیٹر (سٹرنگ کی قسم) کے ساتھ شروع ہوتا ہے0x، اس کا مطلب یہ ہے کہ کوڈت (encodeاسمارٹ کنٹریکٹ.0x، یہ مخصوص قسم کے حکم کوڈ کرنے کے لئے استعمال کیا جاتا ہے.abi.encodeمیںsolidityمندرجہ ذیل مثال کا حوالہ دیتے ہیں.

function main() {
    var x = 10 
    var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
    var str = "Hello World"
    var array = [1, 2, 3]
    var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array)   // uint i.e. uint256 , the type length needs to be specified on FMZ
    Log("ret:", ret)
    /*
    000000000000000000000000000000000000000000000000000000000000000a    // x
    00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9    // address
    0000000000000000000000000000000000000000000000000000000000000080    // offset of str
    00000000000000000000000000000000000000000000000000000000000000c0    // offset of array
    000000000000000000000000000000000000000000000000000000000000000b    // the length of str
    48656c6c6f20576f726c64000000000000000000000000000000000000000000    // str data
    0000000000000000000000000000000000000000000000000000000000000003    // the length of the array
    0000000000000000000000000000000000000000000000000000000000000001    // array the first data
    0000000000000000000000000000000000000000000000000000000000000002    // array the second data
    0000000000000000000000000000000000000000000000000000000000000003    // array the third data
    */
}

ٹوپلز یا ٹوپلز پر مشتمل اقسام کی ترتیب کوڈنگ کی حمایت کریں:

function main() {
    var types = "tuple(a uint256,b uint8,c address),bytes"
    var ret = exchange.IO("encode", types, {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }, "0011")
    Log("encode: ", ret)
}

اس قسم کے حکم پر مشتمل ہے:tupleاورbytes، تو دو پیرامیٹرز کو کال کرنے پر منتقل کرنے کی ضرورت ہےexchange.IOکرنے کے لئےencode:

    1. قسم کے مطابق متغیراتtuple:
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    

    میں منتقل پیرامیٹرز کی ساخت اور قسم کے ساتھ بھی ہم آہنگ ہونا ضروری ہےtuple، جیسا کہtypesپیرامیٹر:tuple(a uint256, b uint8, c address).

    1. قسم کے مطابق متغیراتbytes:
    "0011"
    

صفوں یا صفوں پر مشتمل اقسام کی ترتیب سے کوڈنگ کی حمایت:

function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}

encodePacked کے لیے معاونت

مثال کے طور پر، جب DEX طریقہ کار کو کال کرتے ہیںUniswap V3، آپ کو پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، جیسے تبادلہ راستہ، لہذا آپ کو استعمال کرنے کی ضرورت ہےencodePackagedآپریشن:

function main() {
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
    var tokenOutAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)
}

ڈی کوڈ کی حمایت

ڈیٹا پروسیسنگ نہ صرف کوڈنگ کی حمایت (encode), لیکن یہ بھی ڈیکوڈنگ (decodeاستعمال کریںexchange.IO("decode", types, rawData)کارکردگی کو انجام دینے کے لئےdecode operation.

function main() {
    // register SwapRouter02 abi
    var walletAddress = "0x398a93ca23CBdd2642a07445bCD2b8435e0a373f"
    var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
    exchange.IO("abi", routerAddress, abi)   // abi only uses the contents of the local exactOutput method, the full abi can be searched on the Internet

    // encode path
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    var tokenOutAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)

    var dataTuple = {
        "path" : path, 
        "recipient" : walletAddress, 
        "amountOut" : 1000, 
        "amountInMaximum" : 1, 
    }
    // encode SwapRouter02 exactOutput 
    var rawData = exchange.IO("encode", routerAddress, "exactOutput", dataTuple)
    Log("method hash:", rawData.slice(0, 8))   // 09b81346
    Log("params hash:", rawData.slice(8))

    // decode exactOutput params
    var decodeRaw = exchange.IO("decode", "tuple(path bytes,recipient address,amountOut uint256,amountInMaximum uint256)", rawData.slice(8))
    Log("decodeRaw:", decodeRaw)
}

مثال میں انجام دیتا ہےencodePackedآپریشن کے دوران سب سے پہلےpathپیرامیٹر پروسیسنگ، کیونکہexactOutputطریقہ کال ہے کہ بعد میں انکوڈ کرنے کی ضرورت ہے کی ضرورت ہےpathپیرامیٹر کے طور پر. پھر،encodeطریقہ کارexactOutputروٹنگ معاہدے میں صرف ایک پیرامیٹر ہے، اور پیرامیٹر کی قسم ہےtuple. طریقہ کارexactOutputنام کوڈ کیا گیا ہے0x09b81346، جس کا نتیجہ ڈیکوڈ کیا جاتا ہےdecodeRawکی طرف سےexchange.IO ("decode",...)طریقہ کار، اور یہ متغیر کے مطابق ہےdataTuple.

نجی چابیاں تبدیل کرنے کی حمایت

یہ متعدد بٹوے کے پتوں کو چلانے کے لئے نجی چابیاں سوئچ کرنے کی حمایت کرتا ہے ، مثال کے طور پر:

function main() {
    exchange.IO("key", "Private Key")   // "Private Key" represents the private key string, which needs to be filled in specifically
}

اسمارٹ معاہدے کو بلانے کا طریقہ

کی پہلی پیرامیٹرexchange.IOفنکشن ہے:"api"اس بات کا اشارہ ہے کہ اس کال ایک توسیع کال ہے.exchange.IOفنکشن اسمارٹ کنٹریکٹ کا ایڈریس ہے جسے بلایا جائے۔

اگر بلایا طریقہ ہےpayableوصف، آپ کو طریقہ نام کے بعد ایک منتقلی ETH قدر شامل کرنے کی ضرورت ہے (کے چوتھے پیرامیٹرexchange.IOفنکشن) ، جو عددی قسم کا ہو سکتا ہے یا تار کی شکل میں ایک قدر منتقل، مثال کے طور پرmulticallطریقہ کارUniswap V3مندرجہ ذیل مواد کچھ سمارٹ معاہدے کے طریقہ کار کالوں کی مثالیں ہیں:

  • اعشاری

    کےdecimalsطریقہ کار ایک ہےconstantطریقہ کارERC20جو پیدا نہیں کرتاgasکھپت، اور یہ ایک خاص کی درستگی کے اعداد و شمار کو تلاش کر سکتے ہیںtoken.decimalsکوئی پیرامیٹرز نہیں ہے. واپسی کی قیمت: درستگی کے اعداد و شمارtoken.

    function main(){
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"    // The contract address of the token, in the example the token is 1INCH
        Log(exchange.IO("api", tokenAddress, "decimals"))                  // Query, print 1INCH tokens with precision index of 18
    }
    
  • تنخواہ

    کےallowanceطریقہ کار ایک ہےconstantطریقہ کارERC20جو پیدا نہیں کرتاgasکھپت، اور یہ ایک مخصوص مقدار کی اجازت مقدار کی پوچھ گچھ کر سکتے ہیںtokenایک مخصوص معاہدے کے ایڈریس کے لئے.allowanceطریقہ 2 پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، سب سے پہلے ایک پرس ایڈریس ہے، اور دوسرا ایک مجاز ایڈریس ہے.token.

    function main(){
        // The contract address of the token, in the example the token is 1INCH
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"            
    
        // For example, the query yields 10000000000000000000000, divided by the precision unit of the token 1e18, the current exchange object bound to the wallet to the spender address authorized 1 1INCH.
        Log(exchange.IO("api", tokenAddress, "allowance", "owner", "spender"))   
    }
    

    owner: پرس کا پتہ مثال میں owner سٹرنگ سے تبدیل کیا جاتا ہے۔ اصل استعمال میں ، آپ کو پتہ پُر کرنے کی ضرورت ہے۔spender: مجاز معاہدے کا پتہ مثال میں تار spender کی طرف سے تبدیل کیا جاتا ہے. اصل استعمال میں، آپ کو ایڈریس کو خاص طور پر بھرنے کی ضرورت ہے، مثال کے طور پر، ایڈریس ہو سکتا ہےUniswap V3 router v1.

  • منظور

    کےapproveطریقہ کار ایک غیرconstantطریقہ کارERC20جو پیدا کرتا ہےgasکھپت، جو ایک اجازت دینے کے لئے استعمال کیا جاتا ہےtokenایک مخصوص معاہدے کے ایڈریس پر آپریشن کی رقم.approveطریقہ کار کو 2 پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، پہلا ایڈریس ہے جس کی اجازت دی جائے گی اور دوسرا اختیار شدہ رقم ہے. واپسی کی قیمت:txid.

    function main(){
        // The contract address of the token, in the example the token is 1INCH
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"   
    
        // The hexadecimal string of the authorization amount: 0xde0b6b3a7640000 , the corresponding decimal string: 1e18 , 1e18 divided by the precision unit of the token, i.e. 1 token amount, so this refers to the authorization of one token.
        Log(exchange.IO("api", tokenAddress, "approve", "spender", "0xde0b6b3a7640000"))  
    }
    

    spender: منظور شدہ معاہدے کا پتہ، مثال کے طور پر spender سٹرنگ کی طرف سے تبدیل کیا جاتا ہے، اصل استعمال مخصوص ایڈریس میں بھرنے کی ضرورت ہے، مثال کے طور پر، یہ ہو سکتا ہےUniswap V3 router v1 address. 0xde0b6b3a7640000: اجازتوں کی تعداد، یہاں ہیکساڈیسمل سٹرنگ کا استعمال کرتے ہوئے نمائندگی کی، ایک اعشاریہ قدر کے مساوی ہے1e18، تقسیمtokenمثال میں درستگی یونٹ (یعنی، 1e18) ، 1 پیداوارtoken authorized.

    کے تیسرے پیرامیٹرexchange.IOفنکشن کو طریقہ کار کا نام منتقل کیا جاتا ہےapprove، جو بھی شکل میں لکھا جا سکتا ہےmethodId، مثال کے طور پر: 0x571ac8b0. یہ بھی مکمل معیاری طریقہ نام لکھنے کے لئے ممکن ہے، جیسے approve(address,uint256) .

  • ملٹی کال

    کےmulticallطریقہ ایک غیر مستقل طریقہ ہےUniswap V3، جو پیدا کرے گاgasکھپت اور متعدد طریقوں سے ٹوکن کا تبادلہ کرنے کے لئے استعمال کیا جا سکتا ہے.multicallطریقہ کار میں پیرامیٹرز کو منتقل کرنے کے متعدد طریقے ہوسکتے ہیں۔ آپ تفصیلات کے لئے طریقہ کار پر مشتمل اے بی آئی سے استفسار کرسکتے ہیں۔ طریقہ کار کو کال کرنے سے پہلے آپ کو اے بی آئی کو رجسٹر کرنے کی ضرورت ہے۔ واپسی کی قیمت:txid.

    کے مخصوص مثالوں کے لئےmulticallطریقہ کار کالز، براہ مہربانی عوام سے رجوع کریںUniswap V3 ٹریڈنگ کلاس لائبریری ٹیمپلیٹہمارے پلیٹ فارم کے.

    یہاں کچھ تفصیلات کو بیان کرنے کے لئے جعلی کوڈ کا استعمال کیا جاتا ہے:

    exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)
    

    ContractV3SwapRouterV2: Uniswap V3 کے روٹر v2 ایڈریس.value: منتقل ETH کی رقم، یہ 0 پر مقرر اگرtokenInتبادلہ آپریشن کے لئے ٹوکن ETH نہیں ہے.deadline: یہ مقرر کیا جا سکتا ہے(new Date().getTime() / 1000) + 3600، جس کا مطلب ہے کہ یہ ایک گھنٹے کے لئے درست ہے.data: پیکنگ کے عمل کے اعداد و شمار.

    یہ بھی مخصوص کرنے کے لئے ممکن ہےgasLimit/gasPrice/nonceطریقہ کار کالز کے لئے ترتیب، ہم دوبارہ بیان کرنے کے لئے pseudocode استعمال کرتے ہیں:

    exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})
    

    آپ پیرامیٹر مقرر کر سکتے ہیں{gasPrice: 11, gasLimit: 111, nonce: 111}آپ کی مخصوص ضروریات کے مطابق، پیرامیٹر کی آخری پیرامیٹر پر مقرر کیا جاتا ہےexchange.IOآپ کو خارج کر سکتے ہیںnonceاور نظام ڈیفالٹس استعمال کریں، یا مقرر نہیں کرتےgasLimit/gasPrice/nonceاور سسٹم کے تمام ڈیفالٹ اقدار کا استعمال کریں.

    یہ نوٹ کیا جانا چاہئے کہ مثال میں، خصوصیتstateMutabilityمیںmulticall(uint256,bytes[])طریقہ یہ ہےpayable، اورvalueپیرامیٹر میں منتقل کرنے کی ضرورت ہے.stateMutability":"payable"سے دیکھا جا سکتا ہےABI.exchange.IOتقریب کے مطابق مطلوبہ پیرامیٹرز کا تعین کرے گاstateMutabilityمیں وصفABIرجسٹرڈ کیا گیا ہے.stateMutabilityوصف ہےnonpayable، پیرامیٹرvalueمنتقل کرنے کی ضرورت نہیں ہے.

مشترکہ فنکشن کالز

  1. ایکسچینج آبجیکٹ کی طرف سے تشکیل والی پرس کا پتہ حاصل کرتا ہے.
function main() {
    Log(exchange.IO("address"))         // Print the wallet address of the private key configured on the exchange object.
}
  1. بلاکچین آر پی سی نوڈس کو تبدیل کریں۔
function main() {
    var chainRpc = "https://bsc-dataseed.binance.org"
    e.IO("base", chainRpc)    // Switch to BSC chain
}

اشارے کے افعال

اشارے کے افعال کو کال کرتے وقت، آپ کو شامل کرنے کی ضرورت ہےTA.یاtalib.بطور سابقہ

میں اشارے افعال کو کال کرنے کی مثالیںtalibلائبریری اورTAلائبریری:

function main(){
    var records = exchange.GetRecords()
    var macd = TA.MACD(records)
    var atr = TA.ATR(records, 14)

    // Print the last row of indicator values
    Log(macd[0][records.length-1], macd[1][records.length-1], macd[2][records.length-1])
    Log(atr[atr.length-1])

    // Print all indicator data, and JavaScript written strategies have integrated a talib library on FMZ Quant Trading platform 
    Log(talib.MACD(records))
    Log(talib.MACD(records, 12, 26, 9))
    Log(talib.OBV(records))

    // The talib library can also be passed in an array of numbers, which can be passed in order. For example: OBV (Records [Close], Records [Volume]) requires the parameters of the two arrays, including "Close" and "Volume"
    Log(talib.OBV([1,2,3], [7.1, 6.2, 3, 3]))

    // You can also directly pass in the "records" array containing the "Close" and "Volume" attribute
    Log(talib.OBV(records))
    Log(TA.Highest(records, 30, 'High'))
    Log(TA.Highest([1,2,3,4], 0))
}
# Python needs to install the talib library separately 
import talib
def main():
    r = exchange.GetRecords()
    macd = TA.MACD(r)
    atr = TA.ATR(r, 14)
    Log(macd[0][-1], macd[1][-1], macd[2][-1])
    Log(atr[-1])

    # For Python, the system extends the attributes of the array returned by GetRecords, and adds "Open", "High", "Low", "Close" and "Volume" to facilitate the call of the functions in the talib library
    Log(talib.MACD(r.Close))
    Log(talib.MACD(r.Close, 12, 26, 9))
    Log(talib.OBV(r.Close, r.Volume))

    Log(TA.Highest(r, 30, "High"))
    Log(TA.Highest([1, 2, 3, 4], 0))
void main() {
    auto r = exchange.GetRecords();
    auto macd = TA.MACD(r);
    auto atr = TA.ATR(r, 14);
    Log(macd[0][macd[0].size() - 1], macd[1][macd[1].size() - 1], macd[2][macd[2].size() - 1]);
    Log(atr[atr.size() - 1]);

    Log(talib.MACD(r));
    Log(talib.MACD(r, 12, 26, 9));
    Log(talib.OBV(r));

    Log(TA.Highest(r.Close(), 30));
}

مندرجہ ذیل پیرامیٹرز میں اعداد و شمار تمام اعداد و شمار ہیں جو فنکشن کی طرف سے حاصل کیے جاتے ہیںexchange.GetRecords(Period). کی لمبائی پر توجہ دیناrecords، جب لمبائی اشارے کی تقریب کے پیرامیٹر حساب کی ضروریات کو پورا نہیں کرتا، ایک غلط قدر واپس آ جائے گا.

TA - عام طور پر استعمال شدہ اشارے کی لائبریری

کےTAFMZ مقدار ٹریڈنگ پلیٹ فارم کے اشارے لائبریری میں لکھا حکمت عملی کی کال کی حمایت کرنے کے لئے عام طور پر استعمال اشارے الگورتھم کو بہتر بنایا ہےJavaScript, Pythonاورcpp اوپن سورس ٹی اے لائبریری کا کوڈ.

MACD - کنورجنس اور ڈائیورجنس کا چلتا ہوا اوسط

TA.MACD(data, fast period, slow period, signal period)، کے ڈیفالٹ مدت پیرامیٹرز کے ساتھ (12، 26، 9) دو جہتی arrays، جو ہیں لوٹاتا ہے[DIF, DEA, MACD] respectively.

function main(){
    // You can fill in different k-line periods, such as PERIOD_M1, PERIOD_M30 and PERIOD_H1...
    var records = exchange.GetRecords(PERIOD_M15)
    var macd = TA.MACD(records, 12, 26, 9)
    // You can see from the log that three arrays are returned, corresponding to DIF, DEA, MACD
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
}
def main():
    r = exchange.GetRecords(PERIOD_M15)
    macd = TA.MACD(r, 12, 26, 9)
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
void main() {
    auto r = exchange.GetRecords(PERIOD_M15);
    auto macd = TA.MACD(r, 12, 26, 9);
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2]);
}

KDJ - اسٹوکاسٹک اشارے

TA.KDJ(data, period 1, period 2, period 3)، کے ڈیفالٹ مدت پیرامیٹرز کے ساتھ (9، 3، 3) دو جہتی arrays، جو ہیں لوٹاتا ہے(K, D, J) respectively.

function main(){
    var records = exchange.GetRecords(PERIOD_M15)
    var kdj = TA.KDJ(records, 9, 3, 3)
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
}
def main():
    r = exchange.GetRecords(PERIOD_M15)
    kdj = TA.KDJ(r, 9, 3, 3)
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
void main() {
    auto r = exchange.GetRecords();
    auto kdj = TA.KDJ(r, 9, 3, 3);
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2]);
}

RSI - رشتہ دار طاقت انڈیکس

TA.RSI(data, period)، ڈیفالٹ مدت پیرامیٹر 14 کے ساتھ، ایک جہتی صف واپس کرتا ہے.

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var rsi = TA.RSI(records, 14)
    Log(rsi)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    rsi = TA.RSI(r, 14)
    Log(rsi)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto rsi = TA.RSI(r, 14);
    Log(rsi); 
}

اے ٹی آر - اوسط حقیقی اتار چڑھاؤ

TA.ATR(data, period); ATR ((data, period) ، ڈیفالٹ مدت پیرامیٹر 14 کے ساتھ، ایک جہتی صف واپس کرتا ہے۔

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var atr = TA.ATR(records, 14)
    Log(atr)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    atr = TA.ATR(r, 14)
    Log(atr)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto atr = TA.ATR(r, 14);
    Log(atr);
}

OBV - بیلنس حجم پر

TA.OBV(data)ایک جہتی صف واپس کرتا ہے.

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var obv = TA.OBV(records)
    Log(obv)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    obv = TA.OBV(r)
    Log(obv)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto obv = TA.OBV(r);
    Log(obv);
}

ایم اے - چلتی اوسط

TA.MA(data, period); MA ((data, period) ، ڈیفالٹ مدت پیرامیٹر 9 کے ساتھ، ایک جہتی صف واپس کرتا ہے۔

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var ma = TA.MA(records, 14)
    Log(ma)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    ma = TA.MA(r, 14)
    Log(ma)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto ma = TA.MA(r, 14);
    Log(ma);
}

ای ایم اے - ایکسپونینشل چلتی اوسط

TA.EMA(data, period)ایک اشاریاتی اوسط اشارے ہے، ڈیفالٹ مدت پیرامیٹر 9 کے ساتھ، ایک جہتی صف واپس کرتا ہے.

function main(){
    var records = exchange.GetRecords()
    // Determine if the number of K-line bars meets the requirement of the indicator calculation period 
    if (records && records.length > 9) {
        var ema = TA.EMA(records, 9)          
        Log(ema)
    }
}
def main():
    r = exchange.GetRecords()
    if r and len(r) > 9:
        ema = TA.EMA(r, 9)
        Log(ema)
void main() {
    auto r = exchange.GetRecords();
    if(r.Valid && r.size() > 9) {
        auto ema = TA.EMA(r, 9);
        Log(ema);
    }
}

BOLL - بولنگر بینڈ

TA.BOLL(data, period, multiplier); BOLL ((ڈیٹا، مدت، ضارب) بولنگر بینڈ اشارے ہے، (20، 2 کے ڈیفالٹ پیرامیٹرز کے ساتھ) ، اور ایک دو جہتی صف، یعنی لوٹاتا ہے[Upline, Midline, Downline].

function main() {
    var records = exchange.GetRecords()
    if(records && records.length > 20) {
        var boll = TA.BOLL(records, 20, 2)
        var upLine = boll[0]
        var midLine = boll[1]
        var downLine = boll[2]
        Log(upLine)
        Log(midLine)
        Log(downLine)
    }
}
def main():
    r = exchange.GetRecords()
    if r and len(r) > 20:
        boll = TA.BOLL(r, 20, 2)
        upLine = boll[0]
        midLine = boll[1]
        downLine = boll[2]
        Log(upLine)
        Log(midLine)
        Log(downLine)
void main() {
    auto r = exchange.GetRecords();
    if(r.Valid && r.size() > 20) {
        auto boll = TA.BOLL(r, 20, 2);
        auto upLine = boll[0];
        auto midLine = boll[1];
        auto downLine = boll[2];
        Log(upLine);
        Log(midLine);
        Log(downLine);
    }
}

مگرمچھ - مگرمچھ اشارے

TA.Alligator(data, mandible period, tooth period, upper lip period); Alligator ((ڈیٹا، جبڑے کی مدت، دانت کی مدت، اوپری ہونٹ کی مدت) ہے Alligator اشارے، کے ڈیفالٹ پیرامیٹرز کے ساتھ (13,8,5) ، اور ایک دو جہتی صف لوٹاتا ہے، یعنی[Mandible, Teeth, Upper Lip].

سی ایم ایف - چیکن منی فلو

TA.CMF(data, period); CMF ((ڈیٹا، دورانیہ) Chaikin منی فلو اشارے ہے، ڈیفالٹ مدت پیرامیٹر 20 کے ساتھ، ایک جہتی صف لوٹاتا ہے.

سب سے زیادہ - مدت کی سب سے زیادہ قیمت

TA.Highest(data, period, attribute)، سب سے حالیہ مدت میں زیادہ سے زیادہ قدر (موجودہ بار کو خارج کر دیا) ، جیسے لوٹاتا ہےTA.Highest(records, 30, 'High'). اگرperiod0 ہے، اس کا مطلب ہے کہ تمام Bars.attributeوضاحت نہیں کی گئی ہے، اعداد و شمار کو ایک عام صف کے طور پر سمجھا جاتا ہے، اور ایک قیمت (قدر کی قسم) واپس کرتا ہے.

سب سے کم - مدت سب سے کم قیمت

TA.Lowest(data, period, attribute)، تازہ ترین مدت میں کم از کم قدر (موجودہ بار کو خارج) ، جیسے لوٹاتا ہےTA.Highest(records, 30, 'Low'). اگرperiod0 ہے ، اس کا مطلب ہے تمام بار۔ اگر وصف کی وضاحت نہیں کی گئی ہے تو ، اعداد و شمار کو ایک عام صف سمجھا جاتا ہے ، اور قیمت (قیمت کی قسم) واپس کردی جاتی ہے۔

کا استعمالTA.Highest(...)اورTA.Lowest(...)میںC++حکمت عملی کو نوٹ کیا جانا چاہئے کہHighestاورLowestافعال صرف 2 پیرامیٹرز ہیں، اور پہلا پیرامیٹر کی واپسی کی قیمت نہیں ہےauto r = exchange.GetRecords()فنکشن، لہذا آپ کو طریقہ کار کو فون کرنے کی ضرورت ہےrمخصوص صفت کے اعداد و شمار کو منتقل کرنے کے لئے، مثال کے طور پر: passr.Close()قریبی قیمت کے اعداد و شمار.Close, High, Low, Open, Volumeکی طرح ہےr.Close().

C++مثالیں:

void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }

    for(int j = 0; j < r.size(); j++){
        Log(r[j]);
    }

    // Note: if the first parameter passed in is not r, you need to call "r.Close()"
    auto highest = TA.Highest(r.Close(), 8);   
    Log(highest);                     
}

منسلک تھرڈ پارٹی لائبریری

جاوا اسکرپٹ

C++

مثالیں

  • JavaScriptلائبریریhttp://mathjs.org/

    function main() {
        Log(math.round(math.e, 3))                // 2.718
        Log(math.atan2(3, -3) / math.pi)          // 0.75
        Log(math.log(10000, 10))                  // 4
        Log(math.sqrt(-4))                        // {"mathjs":"Complex","re":0,"im":2}   
    }
    

    http://mikemcl.github.io/decimal.js/

    function main() {
        var x = -1.2
        var a = Decimal.abs(x)
        var b = new Decimal(x).abs()
        Log(a.equals(b))                           // true  
    
        var y = 2.2
        var sum = Decimal.add(x, y)
        Log(sum.equals(new Decimal(x).plus(y)))

مزید