Блог им. Voldemar227

//+------------------------------------------------------------------+
//| Отбор по цене.mq5 |
//| Copyright 2026, Trading-Go. |
//| https://trading-go.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Trading-Go."
#property link "https://trading-go.ru/"
#property version "26.030"
#property script_show_inputs
/*
Скрипт отбирает финансовые инструменты по их цене/стоимости
Что бы получить список финансовых инструментов в обзоре рынка в указанном диапазоне цен.
Фин инструменты по которым есть открытые позиции или графики, из окна обзор рынка, НЕ УДАЛЯЮТСЯ. Ораничение на уровне терминала.
Можно выбрать:
1 - Отбор из окна рынка Или из полного списка фин инструментов брокера
2 - Тип цены Аск, Бид, Ласт
3 - В диапазоне между Максимальной и минимальной ценой
*/
enum ENUM_SELECT_TYPE
{
eBrokersFull = 0, // Brokers Full
eMarketWatch = 1 // Market Watch
};
enum ENUM_SELECT_TYPE_PRICE
{
eAsk = 0, // Ask
eBid = 1, // Bid
eLast = 2 // Last
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
input ENUM_SELECT_TYPE iSelectType = eBrokersFull; // Source of financial instruments (Источник финансовых инструментов)
input ENUM_SELECT_TYPE_PRICE iSelectTypePrice = eBid; // Price type (Тип цены)
input double iPriceMax = 200.0; // Maximum price (Максимальная цена)
input double iPriceMin = 100.0; // Minimum price (Минимальная цена)
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
MqlTick tick = {}; // === Структура
string name = "", symbols_all[];
int counter = 0, total = ::SymbolsTotal(iSelectType);
for(int i = 0; i < total; i++) // === Идем по всем символам
if((name = SymbolName(i, iSelectType)) != "")
if(::SymbolSelect(name, true))
{
Sleep(100); // === Даем терминалу время прогрузить символ
if(::ArrayResize(symbols_all, counter + 1, 5000)) // === Увеличиваем массив
if((symbols_all[counter] = name) != "") // === Сохраняем имя
{
counter++; // === Счетчик инкрементируем
::Print("Прогружаем цены ", name);
}
if(i >= 4999)
{
::Print("Достигли лимита 5000 символов");
break;
}
}
//
// === Теперь выкидываем в топку не нужное
for(int i = 0; i <::ArraySize(symbols_all); i++)
if(::SymbolInfoTick(symbols_all[i], tick))
{
if(iSelectTypePrice == eBid)
if(tick.bid > iPriceMax || tick.bid < iPriceMin)
if(::SymbolSelect(symbols_all[i], false))
::Print("Убрали ", symbols_all[i]);
if(iSelectTypePrice == eAsk)
if(tick.ask > iPriceMax || tick.ask < iPriceMin)
if(::SymbolSelect(symbols_all[i], false))
::Print("Убрали ", symbols_all[i]);
if(iSelectTypePrice == eLast)
if(tick.last > iPriceMax || tick.last < iPriceMin)
if(::SymbolSelect(symbols_all[i], false))
::Print("Убрали ", symbols_all[i]);
}
}
//+------------------------------------------------------------------+