How about this?
string Pair[1]; int size=1; bool flag; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { flag=false; for(int y=0;y<ArraySize(Pair)-1;y++) { if(OrderSymbol()==Pair[y]) { flag=true; break; } } if(!flag) { Pair[size-1]=OrderSymbol(); size++; ArrayResize(Pair,size); } } }
Thank you. This was a good advise. In the end it looks like this.
int size=1,y; bool flag; string Pair[1]; for(int i=0;i<OrdersTotal();i++) { //Print("Size: " + ArraySize(Pair_Source)); if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { flag=false; if(OrderMagicNumber() == sMagicNumber || OrderMagicNumber() == sMagicNumber+1) { for(y=0;y<ArraySize(Pair);y++) { if(OrderSymbol()==Pair[y] && (OrderMagicNumber() != sMagicNumber || OrderMagicNumber() != sMagicNumber+1)) { flag=true; break; } } if(!flag) { //Print("y: " + y + " || i: " + i + " || Symbol: " + OrderSymbol()); Pair[size-1]=OrderSymbol(); size++; ArrayResize(Pair,size); //Print(ArraySize(Pair)); } } } } ArrayResize(Pair,ArraySize(Pair)-1);
#include <arrays/arraystring.mqh> void OnStart() { CArrayString symbols; for (int i=0; OrderSelect(i, SELECT_BY_POS); i++) if (symbols.SearchLinear(OrderSymbol()) < 0) symbols.Add(OrderSymbol()); for (int i=0; i<symbols.Total(); i++) Print(symbols[i]); }
- Simplify your code by refactoring, (or use the CArrayString class.)
template<typename T>int linearSearch(T item, const T& array[], int iEnd=-1, int iBeg=0){ if(iEnd == -1) iEnd = ArraySize(array); for(; iBeg < iEnd; ++iBeg) if(item == array[iBeg]) break; return iBeg; } template<typename T>int insertUnique(T item, T& array[], int iEnd=-1, int iBeg=0){ if(iEnd == -1) iEnd = ArraySize(array); if(iEnd == linearSearch(item, array, iEnd, iBeg){ ArrayResize(array, iEnd+1); array[iEnd] = item; ++iEnd; } return iEnd; } int openSymbols(string& s[]){ for(int i=0;i<OrdersTotal();i++) if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderMagicNumber() == sMagicNumber || OrderMagicNumber() == sMagicNumber+1) ) insertUnique(OrderSymbol(), s); return ArraySize(s); } string Pair[]; int nPair = openSymbols(Pair);
- Florian Riedrich:The second condition will always be true. If (m==1 or m==2) then (m!=1 or m!=2) If it's 1 then it's not 2 and if it's 2 then it's not 1.
if(OrderMagicNumber() == sMagicNumber || OrderMagicNumber() == sMagicNumber+1) { for(y=0;y<ArraySize(Pair);y++) { if(OrderSymbol()==Pair[y] && (OrderMagicNumber() != sMagicNumber || OrderMagicNumber() != sMagicNumber+1)) {
Hi thanks for adding.
1. I will try it out.
2. Yes, I realised as well. Must be both "=="

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hi,
I want to get all Symbols in my present orderlist in an array. But if the symbol is already in the list, the loop must take the next one. I am stuck here. Maybe someone knows how
So in the example there should be 3 Pairs: EURAUD,EURJPY,GBPJPY.
What do I do wrong?