Download MetaTrader 5

How to calculate CheckGroup values?

To add comments, please log in or register
ErikTheRed
9
ErikTheRed  

I am creating a panel indicator which uses the "CheckGroup" class. My question is; in the "SimplePanel" indicator when the "OnChangeCheckGroup" function is called, how can i determine which of the boxes are checked using the value given by the check group value function? Any help is greatly appreciated.

//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnChangeCheckGroup(void)
  {
   m_check_group.Value();
  }

 

onewithzachy
2271
onewithzachy  
ErikTheRed:

I am creating a panel indicator which uses the "CheckGroup" class. My question is; in the "SimplePanel" indicator when the "OnChangeCheckGroup" function is called, how can i determine which of the boxes are checked using the value given by the check group value function? Any help is greatly appreciated.

Hi ErikTheRed,

There are plenty ways to solve that. Basically, we just keep subtracting the total value with the highest available value starting from the highest value down to the smallest value, if the result is bigger or equal than the smallest value, then we keep subtracting with the next available highest value until the result is less than the smallest value.

first example, using lot of ifs, which is annoying but perhaps self explanatory ...

  string Item =""; int value = 14;
  if (value >= 8) {Item = " 3"; value -= 8;}
  if (value >= 4) {Item = Item+" 2"; value -= 4;}
  if (value >= 2) {Item = Item+" 1"; value -= 2;}
  if (value >= 1) {Item = Item+" 0"; value -= 1;}
  
  Alert ("Item is "+Item);

second example using for loop iteration ...

  int value = 14; double power; int item [4] = {0, 0, 0, 0};
  
  for (int pos = 3; pos >= 0; pos--)
    {
    power = MathPow (2,pos);
    if (value >= power)  {item [pos] = 1; value -= power;}
    Alert ("item on "+IntegerToString (pos)+" is "+IntegerToString (item [pos]));
    }

I compiled all of those example but not check any further, like I didn't add break condition inside for loop and else if value is smaller than power ;).

Like I've said there are many ways to do that, so you may experiment with those examples.

:D 

ErikTheRed
9
ErikTheRed  
onewithzachy:

Hi ErikTheRed,

There are plenty ways to solve that. Basically, we just keep subtracting the total value with the highest available value starting from the highest value down to the smallest value, if the result is bigger or equal than the smallest value, then we keep subtracting with the next available highest value until the result is less than the smallest value.

first example, using lot of ifs, which is annoying but perhaps self explanatory ...

second example using for loop iteration ...

I compiled all of those example but not check any further, like I didn't add break condition inside for loop and else if value is smaller than power ;).

Like I've said there are many ways to do that, so you may experiment with those examples.

:D 

Thank you very much for the solution!
To add comments, please log in or register