forked from airat77786/MQL5Book
79 lines
3.1 KiB
MQL5
79 lines
3.1 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| Reservoir.mq5 |
| |||
//| Copyright 2022, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//| Test script to store and restore user data to/from resource |
| |||
//+------------------------------------------------------------------+
| |||
#include "..\..\Include\Reservoir.mqh"
| |||
#include "..\..\Include\PRTF.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
const string resource = "::reservoir";
| |||
| |||
Reservoir res1;
| |||
string message = "message1"; // custom string to write into resource
| |||
PRTF(res1.packString(message));
| |||
| |||
MqlTick tick1[1]; // simple struct to add
| |||
SymbolInfoTick(_Symbol, tick1[0]);
| |||
PRTF(res1.packArray(tick1));
| |||
PRTF(res1.packNumber(DBL_MAX)); // double value
| |||
| |||
/*
| |||
// complex structures with strings and objects not supported,
| |||
// compiler error: 'MqlParam' has objects and cannot be used as union member
| |||
MqlParam param[1] = {{}};
| |||
res1.packArray(param);
| |||
*/
| |||
| |||
res1.submit(resource); // commit our custom data into the resource
| |||
res1.clear(); // make the reservoir object empty
| |||
| |||
string reply; // new variable to receive the message back
| |||
MqlTick tick2[1]; // new struct to receive the tick back
| |||
double result; // new variable to receive the number
| |||
| |||
PRTF(res1.acquire(resource)); // attach the object to specified resource
| |||
PRTF(res1.unpackString(reply)); // restore custom string
| |||
PRTF(res1.unpackArray(tick2)); // restore simple struct
| |||
PRTF(res1.unpackNumber(result)); // restore double value
| |||
| |||
// output and compare restored data (string, struct, and number)
| |||
PRTF(reply);
| |||
PRTF(ArrayCompare(tick1, tick2));
| |||
ArrayPrint(tick2);
| |||
PRTF(result == DBL_MAX);
| |||
| |||
// make sure the reservoir was read till the end
| |||
PRTF(res1.size());
| |||
PRTF(res1.cursor());
| |||
| |||
PrintFormat("Cleaning up local storage '%s'", resource);
| |||
ResourceFree(resource);
| |||
}
| |||
//+------------------------------------------------------------------+
| |||
/*
| |||
example output
| |||
| |||
res1.packString(message)=4 / ok
| |||
res1.packArray(tick1)=20 / ok
| |||
res1.packNumber(DBL_MAX)=23 / ok
| |||
res1.acquire(resource)=true / ok
| |||
res1.unpackString(reply)=4 / ok
| |||
res1.unpackArray(tick2)=20 / ok
| |||
res1.unpackNumber(result)=23 / ok
| |||
reply=message1 / ok
| |||
ArrayCompare(tick1,tick2)=0 / ok
| |||
[time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real]
| |||
[0] 2022.05.19 23:09:32 1.05867 1.05873 0.0000 0 1653001772050 6 0.00000
| |||
result==DBL_MAX=true / ok
| |||
res1.size()=23 / ok
| |||
res1.cursor()=23 / ok
| |||
Cleaning up local storage '::reservoir'
| |||
| |||
*/
| |||
//+------------------------------------------------------------------+
|