Why this is needed:
This class can help organize data exchange between your programs in case you create products for the Market or if you do not want to use system DLLs.
For other cases, there are more reliable and faster methods for connecting applications. The exchange is implemented using simple structures.
Usage options:
- It is necessary to pass data from an expert to indicator or to another expert;
- It is necessary to create an indicator that displays information to multiple windows (or to the main window and subwindow);
- It is necessary to set up visualization of the calculated values for an expert, in which all the required calculations are made.
How to work with it:
Here is an example of transferring data from an expert to an indicator.
- In the expert
1.1. Create an instance of the class:
CInterchange Exp_buffer;
1.2. In the OnInit() set the prefix for names of the global variables. To avoid conflicts with other instances of the class, set a unique name for each of them:
Exp_buffer.SetPrefixNameForSave(_Symbol+"_"+(string)_Period);
1.3. The algorithm operation is implemented using custom events. Simple add the line below to the OnChartEvent() handler:
Exp_buffer.OnEvent(id,lparam,dparam,sparam);
If the data for transferring is ready (in the example it is the Exp_Data structure), it is necessary to call the method:
Exp_buffer.SendDataStart(Exp_Data);
1.4. Do not forget to destroy the class instance during the program deinitialization:Exp_buffer.Destroy();
- In the indicator
2.1. Create an instance of the class:
CInterchange Ind_buffer;
2.2. In the OnInit() set the prefix for names of the global variables. It has to match the source – must be the same as in point 1.1.Ind_buffer.SetPrefixNameForLoad(_Symbol+"_"+(string)_Period);
2.3. To start the process of data transfer, it is necessary to call the GetDataStart() with the Ind_data parameter (structure to write the data from the expert);
Ind_buffer.GetDataStart(Ind_data);
2.4. The algorithm operation is implemented using custom events. Add the line below to the OnChartEvent() handler:
Ind_buffer.OnEvent(id,lparam,dparam,sparam);
If the data transfer process is completed, the method:
Ind_buffer.GetDataFinish(Ind_data)
returns true.
2.5. Do not forget to destroy the class instance during the program deinitialization:
Ind_buffer.Destroy();
Video with example of operation: