实现算法异步执行的接口,类似于 JavaScript 中的 Promise。
timer.mqh -定时器,仅用于演示异步执行
您也可以 使用 npm 包管理器下载
timer.mqh -定时器,仅用于演示异步执行
您也可以 使用 npm 包管理器下载
npm i mql5-promise
Promise 示例:
#include "timer.mqh" #include "index.mqh" void OnInit () { new Promise(printAndTimoutResolve, "111" ) .then(printAndReject, "222" ) // then - 如果前一个承诺已解决,则运行 .ccatch(printAndResolve, "333" ) // ccatch - 在前一个承诺被拒绝时运行 .ccatch(printAndResolve, "444" ) .ccatch(printAndResolve, "555" ) .then(printAndResolve, "666" ) .finally(printAndResolve, "end" ) // 最后 - 运行任何程序 .destroy(); // 执行完所有承诺后,清除这些承诺的内存 Print ( "start" ); // printAndTimoutResolve 111 // 打印后超时 // 开始 // printAndReject 222 // printAndTimoutResolve 333 // printAndTimoutResolve 666 // printAndTimoutResolve end }; void promiseAllResolve( ulong promiseId, string &prevResult[], string parametr) { Print ( "promiseAllResolve " + parametr); }; void printAndTimoutResolve( ulong promiseId, string prevResult, string parametr) { Print ( "printAndTimoutResolve " + parametr); Timer::setTimout(resolveByIdStr, 2000 , string (promiseId)); }; void resolveByIdStr( string id) { Promise::resolveById( ulong (id)); } void printAndResolve( ulong promiseId, string prevResult, string parametr) { Print ( "printAndResolve " + parametr); Promise::resolveById(promiseId); }; void printAndReject( ulong promiseId, string prevResult, string parametr) { Print ( "printAndReject " + parametr); Promise::rejectById(promiseId); };
例如,Promise:all:
void OnInit () { Promise* list1[] = { new Promise(printAndTimoutResolve, "Promise 1" ) .then(printAndTimoutResolve, "Promise 1.1" ) , new Promise(printAndReject, "Promise 2" ), new Promise(printAndTimoutResolve, "Promise 3" ), }; Promise::all(list1, promiseAllResolve) // 如果所有承诺都已解决,则进行解析 .then(printAndResolve, "Promise::all resolved" ) .ccatch(printAndResolve, "Promise::all rejected" ) .destroy(); // 删除所有承诺 // printAndTimoutResolve Promise 1 // 打印并拒绝承诺 2 // printAndTimoutResolve Promise 3 // printAndResolve Promise::all rejected };
Promise example:race:
void OnInit () { Promise* list2[] = { new Promise(printAndTimoutResolve, "Promise 1" ) .then(printAndTimoutResolve, "Promise 1.1" ) , new Promise(printAndReject, "Promise 2" ), new Promise(printAndTimoutResolve, "Promise 3" ), }; Promise::race(list2, printAndResolve, "Promise::race" ) // 在第一个承诺后解析/拒绝 .then(printAndResolve, "Promise::race resolved" ) .ccatch(printAndResolve, "Promise::race rejected" ) .destroy(); // printAndTimoutResolve Promise 1 // 打印并拒绝承诺 2 // printAndTimoutResolve Promise 3 // 拒绝接受 Promise::race };
例如 Promise:any:
void OnInit () { Promise* list3[] = { new Promise(printAndTimoutResolve, "Promise 1" ) .then(printAndTimoutResolve, "Promise 1.1" ) , new Promise(printAndReject, "Promise 2" ), new Promise(printAndTimoutResolve, "Promise 3" ), }; Promise::any(list3, printAndResolve, "Promise::any" ) .then(printAndResolve, "Promise::any resolved" ) .ccatch(printAndResolve, "Promise::any rejected" ) .destroy(); // printAndTimoutResolve Promise 1 // 打印并拒绝承诺 2 // printAndTimoutResolve Promise 3 // printAndResolve Promise::any // printAndResolve Promise::any resolved };
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/54412

Profit Maximiser(PMax)指标是通过整合超级趋势指标的移动平均线而创建的指标。

数据收集原型。 小时的数据窗口(用于数据收集)的虚拟缓冲区,以及每天小时的额外缓冲区。时的注释。