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()
, কিন্তু এই দুই একই ফাংশন নয়, শুধু একই নাম আছে. 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...)
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(threadId, timeout)
ফাংশন থ্রেড যোগাযোগ চ্যানেল থেকে তথ্য reads, পরামিতিthreadId
কি আইডি দ্বারা ফিরে আসে__Thread()
ফাংশন, প্যারামিটার সেটিংthreadId
means to receive the data sent by the thread represented by the 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
মানে threadId দ্বারা প্রতিনিধিত্ব করা থ্রেডে ডেটা পাঠানো, এবং যখন এটি 0 এ সেট করা হয়, তখন এর অর্থ হ'ল মূল থ্রেডে ডেটা পাঠানো, অর্থাৎ বর্তমান প্রধান ফাংশন (প্যারামিটার threadId 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)
}
দ্য__threadJoin(threadId, timeout)
ফাংশনটি নির্দিষ্ট আইডি দিয়ে থ্রেডটি সিস্টেম রিসোর্সগুলি থেকে বেরিয়ে আসার এবং পুনরুদ্ধার করার জন্য অপেক্ষা করতে ব্যবহৃত হয়।threadId
কি আইডি দ্বারা ফিরে আসে__Thread()
ফাংশন, এবং পরামিতিtimeout
is the timeout setting for waiting for the end of the thread, in milliseconds. যদি টাইমআউট সেট না করা হয়, তবে এর অর্থ থ্রেড এক্সিকিউশন শেষ না হওয়া পর্যন্ত অপেক্ষা করা। রিটার্ন ভ্যালু: টাইপটি একটি বস্তু, যা এক্সিকিউশন ফলাফল নির্দেশ করে। যদি এটি টাইমআউট হয়, তবে রিটার্ন করুন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
}
দ্য__threadTerminate
ফাংশনটি থ্রেডটি জোর করে শেষ করতে এবং তৈরি থ্রেড দ্বারা ব্যবহৃত হার্ডওয়্যার সংস্থানগুলি মুক্ত করতে ব্যবহৃত হয় (শেষের জন্য অপেক্ষা করতে __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
pair. return 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 হয় (যেমন থ্রেড যেখানেmain
ফাংশন অবস্থিত), এবং আপনি ব্যবহার করতে পারেন__threadId()
বর্তমান থ্রেডের আইডি পেতে ফাংশন।value
মুছে ফেলার জন্য নির্দিষ্ট করা হয়নিkey
. এটি থ্রেডগুলির মধ্যে ভাগ করা ভেরিয়েবলগুলিতে পারস্পরিক অ্যাক্সেসের সমর্থন করে। যখন থ্রেডটি এক্সিকিউটেড না হয় তখন ডেটা বৈধ হয়__threadJoin
ফাংশন (সফল প্রস্থান জন্য অপেক্ষা) এবং কার্যকর করা হয়নি__threadTerminate
ফাংশন (শক্তিগতভাবে থ্রেড শেষ). পরামিতির মানvalue
একটি সিরিয়ালাইজযোগ্য ভেরিয়েবল হতে হবে।
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())
}
এ বিষয়েJavaScript
ভাষার কৌশল, wasm ফাইলের হেক্স কোড লোড করা যেতে পারে, ইনস্ট্যান্টাইজড, এবং এটির কোড কার্যকর.JavaScript
কোড, এটা একটি নির্দিষ্ট গতি সুবিধা আছে.
wasm.parseModule(data)
, যা একটি হেক্স স্ট্রিং মডেল বিশ্লেষণ করে।data
প্যারামিটার হ'ল হেক্স স্ট্রিংয়ে রূপান্তরিত হোম কোডিং। রিটার্ন মানঃ একটি হোম মডেল অবজেক্ট ফেরত দিন, আপনি উল্লেখ করতে পারেনকৌশল উদাহরণ.
উদাহরণস্বরূপ, নিম্নলিখিত সি++ ফাংশন কোডটি 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(module, opt)
, যা একটি wasm মডেল দৃষ্টান্ত তৈরি করে.module
প্যারামিটার হল wasm মডেল, এবংopt
প্যারামিটার হল কনফিগারেশন তথ্য, যা wasm ইনস্ট্যান্স প্রোগ্রামে বরাদ্দ করা স্ট্যাক স্পেস সেট করতে ব্যবহৃত হয়। রিটার্ন মানঃ একটি wasm মডেল ইনস্ট্যান্স রিটার্ন করে।
opt
প্যারামিটার সেটিং উদাহরণঃ
{
stack_size: 65*1024*1024,
}
callFunction(funcName, param1, ...)
, যা wasm মডেল ইনস্ট্যান্সের একটি পদ্ধতি, যা wasm মডেল ইনস্ট্যান্সে ফাংশনটি কার্যকর করতে ব্যবহৃত হয়।funcName
প্যারামিটার হ'ল কার্য সম্পাদন করার ফাংশনের নাম এবংparam1
প্যারামিটার ফাংশন সম্পাদন করার সময় পাস করা প্যারামিটার (প্যারামিটার দ্বারা নির্দিষ্ট)funcName
).
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মটি আনুষ্ঠানিকভাবে অ্যাক্সেসযোগ্যweb3
চেইন চুক্তি, যা অ্যাক্সেস করতে পারেনdefi
সহজে বিনিময় করুন।
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে, ইথেরিয়াম চেইনে স্মার্ট কন্ট্রাক্টের পদ্ধতি কল বাস্তবায়নের জন্য কৌশল কোড লিখুনexchange.IO
ফাংশন. প্রথমত, এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে অ্যাক্সেস নোডটি কনফিগার করুন। অ্যাক্সেস নোডগুলি স্ব-নির্মিত নোড হতে পারে বা তৃতীয় পক্ষের পরিষেবাগুলি ব্যবহার করতে পারে, যেমনinfura
.
এর পাতায়Web3
. কনফিগার করুনRpc Address
(অ্যাক্সেস নোডের পরিষেবা ঠিকানা) এবংPrivate Key
(প্রাইভেট কী) এটি ব্যক্তিগত কী স্থানীয়করণ সমর্থন করে, দেখুনমূল নিরাপত্তা].
একটি চুক্তির কলিং যা একটি মানERC20
পদ্ধতি নিবন্ধনের প্রয়োজন হয় না এবং এটি সরাসরি কল করা যেতে পারে। স্ট্যান্ডার্ড চুক্তি ছাড়া অন্য পদ্ধতি কল করার জন্য ABI কন্টেন্ট নিবন্ধন প্রয়োজনঃexchange.IO("abi", tokenAddress, abiContent)
. একটি চুক্তির ABI বিষয়বস্তু পেতে, আপনি নিম্নলিখিত URL ব্যবহার করতে পারেন এটি পেতে, শুধুমাত্র ফলাফল ক্ষেত্র গ্রহণ.
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
পদ্ধতি, যা ফাংশন কল এনকোডিং ফেরত দিতে পারেনhex
string format. আপনি প্ল্যাটফর্ম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
:
tuple
:{
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}
পাস করা পরামিতিগুলি অবশ্যই কাঠামোর সাথে সামঞ্জস্যপূর্ণ হতে হবেtuple
, যেমন সংজ্ঞায়িতtypes
প্যারামিটারঃtuple(a uint256, b uint8, c address)
.
bytes
:"0011"
অ্যারে বা অ্যারে ধারণকারী প্রকারের ক্রমিক কোডিংয়ের জন্য সমর্থনঃ
function main() {
var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"] // ETH address, USDT address
var ret = exchange.IO("encode", "address[]", path)
Log("encode: ", ret)
}
উদাহরণস্বরূপ, যখন 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
: মানিব্যাগের ঠিকানা উদাহরণে 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
: অনুমোদিত চুক্তির ঠিকানা, উদাহরণ স্ট্রিং দ্বারা প্রতিস্থাপিত হয় Uniswap V3 router v1
address.
0xde0b6b3a7640000
: অনুমোদন সংখ্যা, এখানে একটি hexadecimal স্ট্রিং ব্যবহার করে প্রতিনিধিত্ব করা হয়, একটি দশমিক মান অনুরূপ1e18
, ভাগ করেtoken
উদাহরণে যথার্থতা ইউনিট (যেমন, 1e18), যা 1 দেয়token
authorized.
তৃতীয় প্যারামিটারexchange.IO
ফাংশন পাস করা হয় পদ্ধতির নামapprove
, যা এই আকারেও লেখা যেতে পারেmethodId
, উদাহরণস্বরূপঃ
মাল্টি কল
দ্যmulticall
পদ্ধতি একটি ধ্রুবক পদ্ধতি নয়Uniswap V3
, যা সৃষ্টি করবেgas
ব্যবহার এবং একাধিক উপায়ে টোকেন বিনিময় করতে ব্যবহার করা যেতে পারে।multicall
পদ্ধতিতে প্যারামিটারগুলি পাস করার একাধিক পদ্ধতি থাকতে পারে। আপনি বিশদ জন্য পদ্ধতি ধারণকারী ABI অনুসন্ধান করতে পারেন। পদ্ধতি কল করার আগে আপনাকে ABI নিবন্ধন করতে হবে। রিটার্ন মানঃtxid
.
এর নির্দিষ্ট উদাহরণগুলির জন্যmulticall
পদ্ধতি কল, দয়া করে পাবলিক পড়ুন
এখানে কিছু বিবরণ বর্ণনা করার জন্য ছদ্ম কোড ব্যবহার করা হয়:
exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)
ContractV3SwapRouterV2
: রুটার v2 ঠিকানা Uniswap V3.value
: স্থানান্তরিত ETH পরিমাণ, এটি 0 সেট করুন যদিtokenIn
এক্সচেঞ্জ অপারেশনের টোকেন ETH নয়।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
পাস করার দরকার নেই।
function main() {
Log(exchange.IO("address")) // Print the wallet address of the private key configured on the exchange object.
}
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
FMZ Quant ট্রেডিং প্ল্যাটফর্মের সূচক লাইব্রেরী সাধারণভাবে ব্যবহৃত সূচক অ্যালগরিদমগুলিকে অপ্টিমাইজ করেছেJavaScript
, Python
এবংcpp
ওপেন সোর্স TA লাইব্রেরির কোড.
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]);
}
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)
হ'ল একটি এক্সপোনেনশিয়াল গড় সূচক, যার ডিফল্ট সময়ের প্যারামিটার ৯। এক মাত্রিক অ্যারে প্রদান করে।
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);
}
}
TA.BOLL(data, period, multiplier)
; BOLL ((data, period, multiplier) হল বোলিংজার ব্যান্ড সূচক, যার ডিফল্ট পরামিতি হল (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 ((data, mandible period, tooth period, upper lip period) হল Alligator সূচক, যার ডিফল্ট পরামিতি হল (13,8,5), এবং এটি একটি দ্বি-মাত্রিক অ্যারে প্রদান করে, যথা[Mandible, Teeth, Upper Lip]
.
TA.CMF(data, period)
; সিএমএফ ((ডেটা, পিরিয়ড) হল চৈকিন মানি ফ্লো সূচক, যার ডিফল্ট পিরিয়ড প্যারামিটার 20, এক-মাত্রিক অ্যারে প্রদান করে।
TA.Highest(data, period, attribute)
, সর্বাধিক সাম্প্রতিক সময়ের সর্বোচ্চ মান প্রদান করে (বর্তমান বার ব্যতীত), যেমনTA.Highest(records, 30, 'High')
. যদিperiod
হয় 0, এটা সব 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)))