2 Commits

Author SHA1 Message Date
Gunther Schulz 08b83713af fix compiler failure 2020-11-22 13:15:51 +01:00
Gunther Schulz 775a962d38 format code with new MT5 code styler 2020-11-22 13:14:33 +01:00
2 changed files with 1735 additions and 1284 deletions
+671 -266
View File
File diff suppressed because it is too large Load Diff
+87 -41
View File
@@ -40,8 +40,6 @@ bool debug = true;
bool first = false;
int activeBufferCount = 0;
int activeBufferCount = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
@@ -50,8 +48,12 @@ int OnInit()
{
bool result = chartSubscriptionSocket.connect(StringFormat("tcp://%s:%d", HOST, CHART_SUB_PORT));
if (result == false) {Print("Failed to subscrbe on port ", CHART_SUB_PORT);}
else {
if(result == false)
{
Print("Failed to subscrbe on port ", CHART_SUB_PORT);
}
else
{
Print("Accepting Chart Indicator data on port ", CHART_SUB_PORT);
// TODO subscribe only to own IndicatorId topic
// Subscribe to all topics
@@ -116,7 +118,11 @@ int OnInit()
}
void SetStyle(int bufferIdx, string linelabel, color colorstyle, int linetype, int linestyle, int linewidth) {
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SetStyle(int bufferIdx, string linelabel, color colorstyle, int linetype, int linestyle, int linewidth)
{
PlotIndexSetString(bufferIdx,PLOT_LABEL,linelabel);
PlotIndexSetInteger(bufferIdx,PLOT_LINE_COLOR,0,colorstyle);
PlotIndexSetInteger(bufferIdx,PLOT_DRAW_TYPE,linetype);
@@ -140,7 +146,8 @@ int OnCalculate(const int rates_total,
{
// While a new candle is forming, set the current value to be empty
if(rates_total>prev_calculated){
if(rates_total>prev_calculated)
{
B0[0] = EMPTY_VALUE;
B1[0] = EMPTY_VALUE;
B2[0] = EMPTY_VALUE;
@@ -162,49 +169,80 @@ int OnCalculate(const int rates_total,
B18[0] = EMPTY_VALUE;
B19[0] = EMPTY_VALUE;
}
if(first==false) alive[0] = 1;
if(first==false)
alive[0] = 1;
// ChartRedraw(0);
//--- return value of prev_calculated for next call
return(rates_total);
}
void SubscriptionHandler(ZmqMsg &chartMsg){
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SubscriptionHandler(ZmqMsg &chartMsg)
{
CJAVal message;
// Get data from request
string msg=chartMsg.getData();
if(debug) Print("Processing:"+msg);
if(debug)
Print("Processing:"+msg);
// Deserialize msg to CJAVal array
if(!message.Deserialize(msg)){
if(!message.Deserialize(msg))
{
Alert("Deserialization Error");
ExpertRemove();
}
if(message["indicatorChartId"]==IndicatorId) {
if(message["indicatorChartId"]==IndicatorId)
{
if(message["action"]=="PLOT" && message["actionType"]=="DATA") {
if(message["action"]=="PLOT" && message["actionType"]=="DATA")
{
int bufferIdx = message["indicatorBufferId"].ToInt();
if (bufferIdx == 0) WriteToBuffer(message, B0);
if (bufferIdx == 1) WriteToBuffer(message, B1);
if (bufferIdx == 2) WriteToBuffer(message, B2);
if (bufferIdx == 3) WriteToBuffer(message, B3);
if (bufferIdx == 4) WriteToBuffer(message, B4);
if (bufferIdx == 5) WriteToBuffer(message, B5);
if (bufferIdx == 6) WriteToBuffer(message, B6);
if (bufferIdx == 7) WriteToBuffer(message, B7);
if (bufferIdx == 8) WriteToBuffer(message, B8);
if (bufferIdx == 9) WriteToBuffer(message, B9);
if (bufferIdx == 10) WriteToBuffer(message, B10);
if (bufferIdx == 11) WriteToBuffer(message, B11);
if (bufferIdx == 12) WriteToBuffer(message, B12);
if (bufferIdx == 13) WriteToBuffer(message, B13);
if (bufferIdx == 14) WriteToBuffer(message, B14);
if (bufferIdx == 15) WriteToBuffer(message, B15);
if (bufferIdx == 16) WriteToBuffer(message, B16);
if (bufferIdx == 17) WriteToBuffer(message, B17);
if (bufferIdx == 18) WriteToBuffer(message, B18);
if (bufferIdx == 19) WriteToBuffer(message, B19);
if(bufferIdx == 0)
WriteToBuffer(message, B0);
if(bufferIdx == 1)
WriteToBuffer(message, B1);
if(bufferIdx == 2)
WriteToBuffer(message, B2);
if(bufferIdx == 3)
WriteToBuffer(message, B3);
if(bufferIdx == 4)
WriteToBuffer(message, B4);
if(bufferIdx == 5)
WriteToBuffer(message, B5);
if(bufferIdx == 6)
WriteToBuffer(message, B6);
if(bufferIdx == 7)
WriteToBuffer(message, B7);
if(bufferIdx == 8)
WriteToBuffer(message, B8);
if(bufferIdx == 9)
WriteToBuffer(message, B9);
if(bufferIdx == 10)
WriteToBuffer(message, B10);
if(bufferIdx == 11)
WriteToBuffer(message, B11);
if(bufferIdx == 12)
WriteToBuffer(message, B12);
if(bufferIdx == 13)
WriteToBuffer(message, B13);
if(bufferIdx == 14)
WriteToBuffer(message, B14);
if(bufferIdx == 15)
WriteToBuffer(message, B15);
if(bufferIdx == 16)
WriteToBuffer(message, B16);
if(bufferIdx == 17)
WriteToBuffer(message, B17);
if(bufferIdx == 18)
WriteToBuffer(message, B18);
if(bufferIdx == 19)
WriteToBuffer(message, B19);
}
else if(message["action"]=="PLOT" && message["actionType"]=="ADDBUFFER") {
else
if(message["action"]=="PLOT" && message["actionType"]=="ADDBUFFER")
{
string linelabel = message["style"]["linelabel"].ToStr();
string colorstyleStr = message["style"]["color"].ToStr();
string linetypeStr = message["style"]["linetype"].ToStr();
@@ -237,23 +275,28 @@ void SubscriptionHandler(ZmqMsg &chartMsg){
//+------------------------------------------------------------------+
//| Update indicator buffer function |
//+------------------------------------------------------------------+
void WriteToBuffer(CJAVal &message, double &buffer[]) {
void WriteToBuffer(CJAVal &message, double &buffer[])
{
int bufferSize = ArraySize(buffer);
int messageDataSize = message["data"].Size();
// TODO check if this is working as expected. Seems to
if(first==false) {
for(int i=0;i<activeBufferCount;i++) {
if(first==false)
{
for(int i=0; i<activeBufferCount; i++)
{
//Print("BUFF ",bufferSize-messageDataSize, " ",ArraySize(B2)," ", ArraySize(B3), " ",messageDataSize);
PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,bufferSize-messageDataSize);
}
first = true;
}
for(int i=0;i<messageDataSize;i++){
for(int i=0; i<messageDataSize; i++)
{
// don't add more elements than the automatically sized buffer array can hold
if(i+1<bufferSize){
if(i+1<bufferSize)
{
// the first element is the current unformed candle, so we start at index 1
// we reverse the order of the incoming values, which are expected to be ascending
//buffer[i+1] = message["data"][messageDataSize-1-i].ToDbl();
@@ -268,7 +311,8 @@ void WriteToBuffer(CJAVal &message, double &buffer[]) {
//+------------------------------------------------------------------+
//| Check for new indicator data function |
//+------------------------------------------------------------------+
void CheckMessages(){
void CheckMessages()
{
// This is a workaround for Timer(). It is needed, because OnTimer() works if the indicator is manually added to a chart, but not with ChartIndicatorAdd()
ZmqMsg chartMsg;
@@ -277,7 +321,8 @@ void CheckMessages(){
chartSubscriptionSocket.recv(chartMsg,true);
// Request recieved
if(chartMsg.size()>0){
if(chartMsg.size()>0)
{
// Handle subscription SubscriptionHandler()
SubscriptionHandler(chartMsg);
ChartRedraw(ChartID());
@@ -293,6 +338,7 @@ void OnChartEvent(const int id,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_CUSTOM+222) CheckMessages();
if(id==CHARTEVENT_CUSTOM+222)
CheckMessages();
}
//+----------------------------------------------------