Dmitiry Ananiev:
Помогите разобраться.
допустим есть 3 стратегии без параметров . Каждая может торговать по 3 символам.
ка выбрать 3-4 самые прибыльные. чтоб записать результат в одну переменную
типа Num = 001000110 ?
Есть 3 стратегии. Нужно выбрать 4 стратегии... Что-то не то с постановкой задачи.
Либо так.
input int inConfig = 32; class SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; class SYSTEM1 : public SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; class SYSTEM2 : public SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; class SYSTEM3 : public SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; class SYSTEM4 : public SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; class SYSTEM5 : public SYSTEM { public: virtual string ToString() { return(__FUNCSIG__); } }; // https://www.mql5.com/ru/forum/1111/page3286#comment_45001634 template <typename T> SYSTEM* New( const string &ClassName ) { return((typename(T) == ClassName) ? new T : NULL); } typedef SYSTEM* (*TNew)( const string& ); const TNew FuncNew[] = {New<SYSTEM1>, New<SYSTEM2>, New<SYSTEM3>, New<SYSTEM4>, New<SYSTEM5>}; SYSTEM* New2( string ClassName ) { SYSTEM* Res = NULL; ClassName = "class " + ClassName; for (uint i = ArraySize(FuncNew); (Res == NULL) && (bool)i--;) Res = FuncNew[i](ClassName); return(Res); } // Возвращает набор систем по номеру конфигурации. int SetSystems( SYSTEM* &Systems[], const int Num = 0 ) { const string SystemsStr[] = {"SYSTEM1", "SYSTEM2", "SYSTEM3", "SYSTEM4", "SYSTEM5"}; const int Size = ArrayResize(Systems, ArraySize(SystemsStr)); for (uint i = Size; (bool)i--;) Systems[i] = !(Num & (1 << i)) ? NULL : New2(SystemsStr[i]); return(Size); } void OnStart() { SYSTEM* Systems[]; // Разные номера конфигурации для демонстрации. for (uint Num = inConfig; (bool)Num--;) { Print("\n" + (string)Num); for (uint i = SetSystems(Systems, Num); (bool)i--;) if (Systems[i] != NULL) { Print(Systems[i].ToString()); delete Systems[i]; } } }
Либо по-старинке.
SYSTEM* GetSystem( const int Num ) { switch(Num) { case 0: return new SYSTEM1; case 1: return new SYSTEM2; case 2: return new SYSTEM3; case 3: return new SYSTEM4; case 4: return new SYSTEM5; } return(NULL); } // Возвращает набор систем по номеру конфигурации. int SetSystems( SYSTEM* &Systems[], const int Num = 0 ) { const int Size = ArraySize(Systems); for (uint i = Size; (bool)i--;) Systems[i] = !(Num & (1 << i)) ? NULL : GetSystem(i); return(Size); }
Узнать количество стратегий в номере можно так.
int GetAmountBits( int Num ) { int Res = Num & 1; while ((bool)(Num >>= 1)) Res += Num & 1; return(Res); } void OnStart() { Print(GetAmountBits(3)); }
В сборе для оптимизации.
input int inConfig = 31; // Номер конфигурации (1 .. 2^n-1), n - количество стратегий sinput int inAmount = 3; // Искомое количество стратегий в портфеле class SYSTEM { public: virtual void OnTick() {} }; class SYSTEM1 : public SYSTEM { public: virtual void OnTick() {} }; class SYSTEM2 : public SYSTEM { public: virtual void OnTick() {} }; class SYSTEM3 : public SYSTEM { public: virtual void OnTick() {} }; class SYSTEM4 : public SYSTEM { public: virtual void OnTick() {} }; class SYSTEM5 : public SYSTEM { public: virtual void OnTick() {} }; SYSTEM* Portfolio[]; int OnInit() { return(GetAmountBits(inConfig) != inAmount); // https://www.mql5.com/ru/forum/452503#comment_48766759 } void OnTick() { static const int Size = SetSystems(Portfolio, inConfig); // https://www.mql5.com/ru/forum/452503#comment_48766759 for (uint i = Size; (bool)i--;) if (Portfolio[i] != NULL) Portfolio[i].OnTick(); } void OnDeinit( const int ) { for (uint i = ArraySize(Portfolio); (bool)i--;) if (Portfolio[i] != NULL) delete Portfolio[i]; }После полного перебора будут показаны наилучшие портфели ровно из трех стратегий, выбранных из пяти имеющихся.
А о чем вопрос? О том, как выбрать или о том, как записать в одну переменную?

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите разобраться.
допустим есть 3 стратегии без параметров . Каждая может торговать по 3 символам.
ка выбрать 3-4 самые прибыльные. чтоб записать результат в одну переменную
типа Num = 001000110 ?
Лучше сразу пример кода с комментарием.