Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Скорее всего, нужно создать массив, и его отсортировать, а потом уже выводить в цикле
Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Я бы решил так: каждая строка представляет собой некий объект CObject, а вся таблица: CArrayObj. В своем классе наследнике CObject перегрузите метод Compare. Вот накидал полностью рабочую демонстрацию в виде скрипта:
//+------------------------------------------------------------------+//| MultiArray.mq5 |//| Copyright 2015, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#define EQUAL 0#define LESS -1#define MORE 1#include <Object.mqh>
#include <Arrays\ArrayObj.mqh>
enum ENUM_SORT_TYPE
{
SORT_BY_TEXT,
SORT_BY_NUMBER
};
class CLineTable: public CObject
{
private:
string m_text;
int m_number;
public:
CLineTable();
CLineTable(string text, int number)
{
m_text = text;
m_number = number;
}
string Text()const{return m_text;}
int Number()const{return m_number;}
virtualint Compare(const CObject *node,constint mode=0) const
{
const CLineTable* line = node;
switch (mode)
{
case SORT_BY_TEXT:
if(line.Text() == this.Text())
return EQUAL;
elseif(line.Text() < this.Text())
return MORE;
elsereturn LESS;
case SORT_BY_NUMBER:
if(line.Number() == this.Number())
return EQUAL;
elseif(line.Number() < this.Number())
return MORE;
elsereturn LESS;
}
return EQUAL;
}
};
CArrayObj Table;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//Добавляем в таблицу 13 строк CLineTableint limit = 13;
Table.Sort(SORT_BY_TEXT);
for(int i = 0; i < limit; i++)
{
string n = (string)(i+1);
if(StringLen(n) < 2)n = "0"+n;
string text = "Текст" + n;
Table.InsertSort(new CLineTable(text, limit-i));
}
//Смотрим что получилось:for(int i = 0; i < Table.Total(); i++)
{
CLineTable* line = Table.At(i);
printf(line.Text() + "\t" + (string)line.Number());
}
//Сортируем по второму фактору: номера
Table.Sort(SORT_BY_NUMBER);
//Смотрим что получилось:printf("");
for(int i = 0; i < Table.Total(); i++)
{
CLineTable* line = Table.At(i);
printf(line.Text() + "\t" + (string)line.Number());
}
Table.Clear();
}
//+------------------------------------------------------------------+
создаем массив с инструментами и сортируем его при инициализации?
тогда нужна ли загрузка из файла?
практичнее файл 1 раз подготовить по необходимым правилам
Не совсем так. При инициализации читается файл. Все символы которые найдены складываются в таблицу (пост #33). В таблице они автоматически сортируются. И уже из отсортированной таблицы заполняется служебный массив символов с которым и идёт работа.
А файл нужен обязательно - в нём содержатся необходимые символы. Почему нельзя использовать "Обзор рынка"? Да потому, что при переключении на другой сервер "Обзор рынка" очень сильно меняется :)
Не совсем так. При инициализации читается файл. Все символы которые найдены складываются в таблицу (пост #33). В таблице они автоматически сортируются. И уже из отсортированной таблицы заполняется служебный массив символов с которым и идёт работа.
А файл нужен обязательно - в нём содержатся необходимые символы. Почему нельзя использовать "Обзор рынка"? Да потому, что при переключении на другой сервер "Обзор рынка" очень сильно меняется :)
А вот в этом случае, Я бы отказался от файла, это совсем не рационально, проще читать текущий обзор рынка, и обновлять массив при добавлении/исключении инструментов
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Скорее всего, нужно создать массив, и его отсортировать, а потом уже выводить в цикле
Чтобы отображать информацию, нужно иметь текстовой файл с названиями символов. Я принял расположение этого файла в общей папке. Прикрепляю пример файла.
И в догонку возник вопрос: после чтения текстового файла, как организовать сортировку от "A" к "Z"?
Даже нашёл решение (спасибо @Vasiliy Sokolov) :
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Сортировка двухмерного массива.
Vasiliy Sokolov, 2015.03.21 16:19
Я бы решил так: каждая строка представляет собой некий объект CObject, а вся таблица: CArrayObj. В своем классе наследнике CObject перегрузите метод Compare. Вот накидал полностью рабочую демонстрацию в виде скрипта:
Смотрим вывод:
Даже нашёл решение (спасибо @Vasiliy Sokolov) :
Так массив одномерный?
Так массив одномерный?
Да, одномерный, но не числовой, поэтому
ArraySort
ArraySort Сортирует многомерный числовой массив ...
не подходит.
Да, одномерный, но не числовой, поэтому
не подходит.
Да, одномерный, но не числовой, поэтому
не подходит.
создаем массив с инструментами и сортируем его при инициализации?
тогда нужна ли загрузка из файла?
практичнее файл 1 раз подготовить по необходимым правилам
создаем массив с инструментами и сортируем его при инициализации?
тогда нужна ли загрузка из файла?
практичнее файл подготовить по необходимым правилам
Файл готовим вручную, а как его готовить, если в нём 50 инструментов, и нужно иногда добавить ещё несколько?
Загрузить файл и его отсортировать в инициализации, ну это и так понятно, никто ведь не будет загружать, и сортировать на каждом тике)
создаем массив с инструментами и сортируем его при инициализации?
тогда нужна ли загрузка из файла?
практичнее файл 1 раз подготовить по необходимым правилам
Не совсем так. При инициализации читается файл. Все символы которые найдены складываются в таблицу (пост #33). В таблице они автоматически сортируются. И уже из отсортированной таблицы заполняется служебный массив символов с которым и идёт работа.
А файл нужен обязательно - в нём содержатся необходимые символы. Почему нельзя использовать "Обзор рынка"? Да потому, что при переключении на другой сервер "Обзор рынка" очень сильно меняется :)
Не совсем так. При инициализации читается файл. Все символы которые найдены складываются в таблицу (пост #33). В таблице они автоматически сортируются. И уже из отсортированной таблицы заполняется служебный массив символов с которым и идёт работа.
А файл нужен обязательно - в нём содержатся необходимые символы. Почему нельзя использовать "Обзор рынка"? Да потому, что при переключении на другой сервер "Обзор рынка" очень сильно меняется :)
А вот в этом случае, Я бы отказался от файла, это совсем не рационально, проще читать текущий обзор рынка, и обновлять массив при добавлении/исключении инструментов