Алгоритмы, методы решений, сравнение их производительности - страница 13

 
Реter Konow:

2. Интеграция в советник является ключевым моментом. Если решение сверх-запутанно (я уверен, вы даже объяснить не можете как работает решение Sergey Dzyublik), то какова его практическая ценность для трейдера? Нельзя построить нормальный советник из сверх-запутанных решений.

Предложенное решение было озвучено сразу

Но кто-то даже не поинтересовался, что это. Реализовать можно было гораздо "доходчивее". Но от этого основа идеи не изменилась бы.

 
Реter Konow:

1. С точки зрения практики, это пустые слова, которыми вы боретесь с фактами. Я показал замер времени на поиск магика. Я продемонстрировал удобство интеграции решения в советник. Вы демонстрируете только клевету на мое решение. Больше ничего.

2. Интеграция в советник является ключевым моментом. Если решение сверх-запутанно (я уверен, вы даже объяснить не можете как работает решение Sergey Dzyublik), то какова его практическая ценность для трейдера? Нельзя построить нормальный советник из сверх-запутанных решений.

Я не сужу решение Sergey Dzyublik. Он его еще не объяснил. Когда объяснит, - тогда станет понятно кто "городит огород".


Вот я хотел ответить вам, но модератор опередил и говорил тоже самое. И поэтому еще раз покажу что он говорил:

Artyom Trishkin:

Нет. Я не предлагаю вам чужой вам стиль решения. Пишите в своём стиле - никто никому ничего не навязывает же.

Но я предлагаю вам со свойственным вам упорством решать задачи оптимальным образом изначально. Вы же что делаете?

1. Вы изначально выбираете самое неоптимальное решение из возможных, и начинаете его обыгрывать со всех сторон. Для данной задачи, ещё на стадии продумывания решения, нужно было не то, что отбросить ваш вариант, а даже не думать в том направлении - работа с текстом слишком затратна по ресурсам. Да и не для этого предназначены функции работы с текстом.

2. Насчёт интеграции в советник и преимуществ предложенного решения - пусть вам ответит тот, кто его предложил.


P.S.  Видимо вы очень плохой ученик  :)

 
Реter Konow:

Я осознаю свои ошибки, как только в них убеждаюсь. На текущий момент никто не смог доказать что мое решение ошибочно. Будем ждать.

Вы плохо обучаемый!

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Алгоритмы, методы решений, сравнение их производительности

Sergey Dzyublik, 2017.12.10 20:58


1. Ваш код не рабочий. 
Неправильный паттерн "_index_magic". Возможное решение "|index_magic"


После добавления имеем  _1_3_2_4_3_5_4_6_
Найдите пожалуйста 3-й в списке.
Вы получите результат 2.

string All_magics = "_1_3_2_4_3_5_4_6_";

int Get_magic(int deal_number)
{
 int stringlen = StringLen((string)deal_number); //добавлено
 //--------------------------------------------
 //Получаем начало строки магика.
 //--------------------------------------------
 int Magic_position_start =  StringFind(All_magics,"_" + (string)deal_number + "_",0) + stringlen + 2;
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 int Magic_position_end   =  StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0);
 //--------------------------------------------
 //Получаем количество цифр из которых состоит магик.
 //--------------------------------------------
 int Magic_lenght         =  Magic_position_end - Magic_position_start;
 //--------------------------------------------
 //Извлекаем магик из общей строки.
 //--------------------------------------------
 string Magic             =  StringSubstr(All_magics,Magic_position_start,Magic_lenght);
 //--------------------------------------------
 //Возвращаем цифровое значение магика.
 //--------------------------------------------
 return((int)Magic);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  Print(All_magics);
  Print(Get_magic(3));   
}


Результат

_1_3_2_4_3_5_4_6_
2
 
Artyom Trishkin:

Пока что я тут вижу лишь высмеивание человека, который имел смелость выложить сюда своё решение.

Понятно, что оно ... мягко сказать - никудышное от слова совсем. Но он выложил. Остальные пока только имеют смелость ржать и пальцем тыкать.

Артем, мною было потрачено 40 минут моего времени и несколько миллионов нервных клеток, что бы объяснить человеку что в подстроке ..._25_... четыре а не три символа. Ну вот сколько по-твоему у нас всех уйдет человеко-лет, что бы объяснить ему что-то более концептуально ценное и мощное? Думаю много, очень много этих самых человеко-лет. Поэтому никто даже не пытается что-то объяснить и разжевать. Просто есть некий минимальный уровень, ниже которого объясняющий опуститься не может, а уровень Петра ниже этой планки.

 
fxsaber:



Результат

Я уже говорил, что номер магика определяет пользователь. Чтобы небыло коллизий внутри строки, нужно выделить определенный числовой диапазон для магиков. Например от 100 000 до 999 000. Тогда проблем не будет.

При этом, можно конечно доработать решение. Это только "прототип". Демонстрационный вариант.

 
Vasiliy Sokolov:

Артем, мною было потрачено 40 минут моего времени и несколько миллионов нервных клеток, что бы объяснить человеку что в подстроке ..._25_... четыре а не три символа. Ну вот сколько по-твоему у нас всех уйдет человеко-лет, что бы объяснить ему что-то более концептуально ценное и мощное? Думаю много, очень много этих самых человеко-лет. Поэтому никто даже не пытается что-то объяснить и разжевать. Просто есть некий минимальный уровень, ниже которого объясняющий опуститься не может, а уровень Петра ниже этой планки.

Василий, я все понял сразу, как только вы сказали. Спасибо, что нашли эту ошибку.

 
fxsaber:

Да пошел ты.

Приехали...))

И с чего такая реакция?

 

Для решения поставленной задачи был выбран стандартный контейнер из библиотеки - CArrayList.
Практически весь код - это обертка с целью предоставления "удобного" интерфейса для тестирования. На вкус и цвет как говориться....

Для тестирования вашего решения необходимо:
1. Создать класс, который наследуется от ITestRandomAccessCollection и реализует необходимые методы. (по аналогии с TestRandomAccessCollectionCArrayList)
2. Для тестирования используются данные определенного типа. В примере был int.
Нужно убедиться, что существует генератор для выбранного типа данных и он добавлен в CreateGenerator (по аналогии с IntGenerator)
3. Запустить тест на тех же данных для нескольких решений и сравнить результаты (при желании можно и в цикле для получения среднего):

{
     printf ("TestRandomAccessCollectionAfterAdding: Started.", result);
     TestRandomAccessCollectionCArrayList<int> testCollection();
     result = TestRandomAccessCollectionAfterAdding(testCollection, 10000, 1);
     printf ("TestRandomAccessCollectionAfterAdding: Fineshed. Total result: %I64i\n", result);
}


На текущий момент функция для тестирования она, по аналогии могут быть добавлены новые:

template<typename T>
ulong TestRandomAccessCollectionAfterAdding(ITestRandomAccessCollection<T> &testCollection, const int iterationCount = 1000, int srandValue = 0)

Параметры: 

testCollection - контейнер для тестирования, реализующий ITestRandomAccessCollection<T>;
iterationCount - количество циклов итерации в тесте;
srandValue - влияние на выборку из генератора, если 0 случайная выборка.

 
Реter Konow:
1. Сколько микросекунд в среднем берет поиск магика в вашем решении?

2. Насколько легко интегрировать ваше решение в советник (по вашему)?


1. Бессмысленно. Сравниваются алгоритмы в целом на относительных результатах.
2. Решение уже интегрировано - это стандартная библиотека <Generic\ArrayList.mqh>.

 
Реter Konow:

Я уже говорил, что номер магика определяет пользователь. Чтобы небыло коллизий внутри строки, нужно выделить определенный числовой диапазон для магиков. Например от 100 000 до 999 000. Тогда проблем не будет.

При этом, можно конечно доработать решение. Это только "прототип". Демонстрационный вариант.


Дорогой, то что вы хотите, это детская задача. Такие задачки решают школьники.

В интернете десятки таких задач. И забудьте о строковых данных.

Причина обращения: