संसाधन लोड हो रहा है... लोड करना...

एफएमजेड एपीआई निर्देश

लेखक:शून्य, बनाया गयाः 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)
    }
}
  • सी++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(), लेकिन इन दो एक ही फ़ंक्शन नहीं हैं, सिर्फ एक ही नाम के साथ. एफएमजेड मंच पर, रिटर्न मूल्य के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सभी एपीआई इंटरफेस जो स्ट्रिंग मापदंडों को पारित कर सकते हैं भी पारित करने का समर्थनArrayBuffer type.

जावास्क्रिप्ट बहु-थ्रेडिंग

यह वास्तव में बहु-थ्रेडिंग समारोह का समर्थन करता हैJavaScriptसिस्टम के नीचे से भाषा रणनीति, जिसमें शामिल हैंः कस्टम निष्पादन कार्यों का समवर्ती निष्पादन; समवर्ती धागे के बीच संचार के लिए समर्थन, समवर्ती धागे और मुख्य धागे के बीच संचार के लिए समर्थन; भंडारण, धागे के वातावरण में चर का साझाकरण और अन्य कार्य। यह केवल लाइव ट्रेडिंग वातावरण में उपयोग का समर्थन करता है अब तक, कृपया देखेंःhttps://www.fmz.com/bbs-topic/9974.

__थ्रेड

..__Thread(function, arguments...)function एक थ्रेड बनाता है जो समवर्ती रूप से चलता है। यह थ्रेड निष्पादन फ़ंक्शन (एक अलग वातावरण के रूप में चल रहा है) के अलावा अन्य चरों के लिए प्रत्यक्ष संदर्भ का समर्थन नहीं करता है। बाहरी चरों के संदर्भ संकलित करने में विफल रहेंगे। अन्य समापन कार्यों के संदर्भ भी समर्थित नहीं हैं। प्लेटफ़ॉर्म के सभी एपीआई को थ्रेड के अंदर बुलाया जा सकता है, लेकिन अन्य उपयोगकर्ता-परिभाषित फ़ंक्शन को नहीं बुलाया जा सकता है। पैरामीटरfunctionएक फ़ंक्शन संदर्भ या एक गुमनाम फ़ंक्शन हो सकता है। पैरामीटरargumentsके पैरामीटर हैfunctionफ़ंक्शन (वास्तविक पैरामीटर जो दिया गया है), औरarguments...इसका मतलब है कि कई पैरामीटर पास किए जा सकते हैं। रिटर्न मानः थ्रेड आईडी।

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")])))
}

__threadPeekMessage

..__threadPeekMessage(threadId, timeout)समारोह थ्रेड संचार चैनल से डेटा पढ़ता है, पैरामीटरthreadIdआईडी द्वारा लौटाया गया है__Thread()फंक्शन, पैरामीटर सेट करनाthreadIdका अर्थ है थ्रेड द्वारा भेजे गए डेटा को प्राप्त करना जिसका प्रतिनिधित्व थ्रेडआईडी द्वारा किया जाता है। जब यह 0 पर सेट होता है, तो इसका अर्थ है मुख्य थ्रेड द्वारा भेजे गए डेटा को प्राप्त करना, अर्थात वर्तमान मुख्य फ़ंक्शन (पैरामीटर threadId को 0 पर सेट किया जाता है, जो केवल समवर्ती थ्रेड निष्पादन कार्यों में समर्थित है) । पैरामीटरtimeoutएक टाइमआउट सेटिंग है, जो इस पैरामीटर द्वारा सेट मिलीसेकंड की संख्या के अनुसार ब्लॉक और प्रतीक्षा करेगा।timeoutपर सेट है-1, इसका अर्थ है ब्लॉक करना और चैनल में डेटा प्राप्त होने तक इंतजार करना। जब चैनल का प्रेषक थ्रेड निष्पादन समाप्त करता है और कोई डेटा नहीं होता है, तो__threadPeekMessageफ़ंक्शन तुरंत शून्य मान लौटाएगा. लौटाएँ मानः प्राप्त डेटा.

जब आप प्रोग्राम लिखते हैं, तो आपको थ्रेड गतिरोध की समस्या पर ध्यान देने की आवश्यकता होती है। निम्नलिखित उदाहरण निष्पादन फ़ंक्शन के बीच संचार है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)
    }
}

__थ्रेडपोस्ट संदेश

..__threadPostMessage(threadId, data)कार्य थ्रेड संचार चैनल के लिए डेटा लिखता है, पैरामीटरthreadIdआईडी द्वारा लौटाया गया है__Thread()कार्य, पैरामीटर सेट करेंthreadIdइसका अर्थ है थ्रेडआईडी द्वारा दर्शाए गए थ्रेड को डेटा भेजना, और जब यह 0 पर सेट किया जाता है, तो इसका अर्थ है मुख्य थ्रेड को डेटा भेजना, अर्थात वर्तमान मुख्य फ़ंक्शन (पैरामीटर threadId को 0 पर सेट किया गया है, जो केवल समवर्ती थ्रेड निष्पादन कार्यों में समर्थित है) । पैरामीटरdataमान, स्ट्रिंग, बूलियन मान, ऑब्जेक्ट, सरणी और अन्य प्रकार के डेटा पास कर सकता है. इस फ़ंक्शन में कोई रिटर्न मान नहीं है.

जब__threadPostMessagefunction को एक धागे के निष्पादन फ़ंक्शन में बुलाया जाता है ताकि सिग्नल और डेटा भेजे जा सकें, एक संदेश घटना भी उत्पन्न की जाएगी। आप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)इस फ़ंक्शन का उपयोग निर्दिष्ट आईडी के साथ थ्रेड के बाहर निकलने और सिस्टम संसाधनों को पुनः प्राप्त करने के लिए प्रतीक्षा करने के लिए किया जाता है।threadIdआईडी द्वारा लौटाया गया है__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समाप्त करें

..__threadTerminatefunction का उपयोग थ्रेड को जबरन समाप्त करने और बनाए गए थ्रेड द्वारा उपयोग किए जाने वाले हार्डवेयर संसाधनों को जारी करने के लिए किया जाता है (अभी अंत का इंतजार करने के लिए __threadJoin का उपयोग नहीं किया जा सकता है) । पैरामीटरthreadIdआईडी द्वारा लौटाया गया है__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थ्रेड आईडी है, और पैरामीटर हैkeyसंग्रहीत की कुंजी का नाम हैkey-valueजोड़ी. रिटर्न मानः के अनुरूप कुंजी मान देता हैkeyमेंkey-value pair.

threadIdमुख्य धागा (यानी धागा जहां) इंगित करने के लिए 0 हैmainकार्य स्थित है), आप उपयोग कर सकते हैं__threadId()वर्तमान धागे की आईडी प्राप्त करने के लिए समारोह, पैरामीटर सेटthreadIdवर्तमान थ्रेड आईडी के लिए, और इसका उपयोग थ्रेड निष्पादन फ़ंक्शन में वर्तमान थ्रेड में संग्रहीत चर को पढ़ने के लिए करें. आप निर्दिष्ट आईडी के थ्रेड वातावरण में चर भी पढ़ सकते हैं.

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थ्रेड आईडी, पैरामीटर हैkeyसंग्रहीत की कुंजी का नाम हैkey-valueजोड़ी, और पैरामीटरvalueकुंजी मान है. फ़ंक्शन कोई वापसी मान नहीं है.

threadIdमुख्य धागा (यानी धागा जहां) इंगित करने के लिए 0 हैmainfunction स्थित है), और आप उपयोग कर सकते हैं__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(), जिसका उपयोग वर्तमान थ्रेड की आईडी प्राप्त करने के लिए किया जाता है, बिना पैरामीटर के। रिटर्न मानः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), जो एक हेक्स स्ट्रिंग मॉडल का विश्लेषण करता है।dataपैरामीटर wasm एन्कोडिंग है जो एक हेक्स स्ट्रिंग में परिवर्तित किया गया है। रिटर्न मानः एक 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 क्वांट ट्रेडिंग मंच, प्रोटोकॉल का चयन करेंः क्रिप्टोक्यूरेंसी, और फिर विनिमय का चयन करता हैWeb3. विन्यास करेंRpc Address(एक्सेस नोड का सेवा पता) औरPrivate Key(निजी कुंजी) यह निजी कुंजी के स्थानीय तैनाती का समर्थन करता है, देखेंमुख्य सुरक्षा].

एबीआई पंजीकृत करें

एक अनुबंध को कॉल करना जो एक मानक हैERC20विधि को पंजीकरण की आवश्यकता नहीं है और इसे सीधे बुलाया जा सकता है। मानक अनुबंध के अलावा अन्य तरीकों को कॉल करने के लिए एबीआई सामग्री को पंजीकृत करना आवश्यक हैःexchange.IO("abi", tokenAddress, abiContent). एक अनुबंध की एबीआई सामग्री प्राप्त करने के लिए, आप इसे प्राप्त करने के लिए निम्नलिखित यूआरएल का उपयोग कर सकते हैं, केवल परिणाम क्षेत्र लेते हैं.

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

एथेरियम आरपीसी कॉल करने की विधि

जब दूसरे पैरामीटर केexchange.IOकार्य है"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()))
    }
    
  • ईटीएच हस्तांतरण

    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)
    }
    
  • क्वेरी gasPrice

    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विधि, जो फ़ंक्शन कॉल एन्कोडिंग को वापस कर सकता हैhexआप सार्वजनिक रूप से उपलब्ध प्लेटफार्मों का संदर्भ ले सकते हैं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.IOfunction को कॉल करने के लिए स्मार्ट कॉन्ट्रैक्ट का पता है।

यदि बुलाया विधि हैpayableविशेषता, आप विधि नाम के बाद एक स्थानांतरण ईटीएच मूल्य जोड़ने की जरूरत है (प्रणाली के चौथे पैरामीटरexchange.IOfunction), जो संख्यात्मक प्रकार का हो सकता है या स्ट्रिंग के रूप में मान पास कर सकता है, जैसे कि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: हस्तांतरित ईटीएच की राशि, इसे 0 पर सेट करें यदिtokenInविनिमय परिचालन के लिए टोकन ईटीएच नहीं है।deadline: इसे सेट किया जा सकता है(new Date().getTime() / 1000) + 3600, जिसका अर्थ है कि यह एक घंटे के लिए वैध है।data: पैकिंग के लिए किए जाने वाले ऑपरेशन का डेटा।

    यह भी निर्दिष्ट करना संभव हैgasLimit/gasPrice/nonceविधि कॉल के लिए सेटिंग, हम फिर से वर्णन करने के लिए छद्म कोड का उपयोग करेंः

    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 - आम तौर पर इस्तेमाल किया जाने वाला संकेतक पुस्तकालय

..TAएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के संकेतक पुस्तकालय ने आम तौर पर उपयोग किए जाने वाले संकेतक एल्गोरिदम को अनुकूलित किया है ताकि इसमें लिखी गई रणनीतियों की कॉल का समर्थन किया जा सके।JavaScript, Pythonऔरcpp ओपन सोर्स टीए लाइब्रेरी कोड.

एमएसीडी - अभिसरण और विचलन का चलती औसत

TA.MACD(data, fast period, slow period, signal period), (12, 26, 9) के डिफ़ॉल्ट अवधि मापदंडों के साथ दो आयामी सरणियों, जो हैं देता है[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) के डिफ़ॉल्ट अवधि पैरामीटर के साथ दो आयामी सरणियों, जो हैं देता है(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]);
}

आरएसआई - सापेक्ष शक्ति सूचकांक

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);
}

ओबीवी - बैलेंस वॉल्यूम पर

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); मगरमच्छ ((डेटा, जबड़े की अवधि, दांत की अवधि, ऊपरी होंठ की अवधि) मगरमच्छ संकेतक है, (13,8,5) के डिफ़ॉल्ट मापदंडों के साथ, और एक दो आयामी सरणी देता है, अर्थात्[Mandible, Teeth, Upper Lip].

सीएमएफ - चाइकिन मनी फ्लो

TA.CMF(data, period); सीएमएफ ((डेटा, अवधि) चाइकिन मनी फ्लो सूचक है, डिफ़ॉल्ट अवधि पैरामीटर 20 के साथ, एक-आयामी सरणी लौटाता है।

उच्चतम - अवधि उच्चतम मूल्य

TA.Highest(data, period, attribute), सबसे हाल की अवधि में अधिकतम मान (वर्तमान बार को छोड़कर) देता है, जैसे किTA.Highest(records, 30, 'High'). यदिperiod0 है, यह सभी Bars का मतलब है.attributeनिर्दिष्ट नहीं है, डेटा एक साधारण सरणी के रूप में माना जाता है, और एक मूल्य (मूल्य प्रकार) लौटाता है।

सबसे कम - अवधि सबसे कम कीमत

TA.Lowest(data, period, attribute), सबसे हाल की अवधि (वर्तमान बार को छोड़कर) में न्यूनतम मान देता है, जैसे किTA.Highest(records, 30, 'Low'). यदिperiodयदि विशेषता निर्दिष्ट नहीं है, तो डेटा को एक साधारण सरणी के रूप में माना जाता है, और एक मूल्य (मूल्य प्रकार) लौटाया जाता है।

का प्रयोग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);                     
}

संलग्न तृतीय-पक्ष पुस्तकालय

जावास्क्रिप्ट

सी++

उदाहरण

  • 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)))

अधिक