Ichimoku Scanner
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ichimoku scanner v1.1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Ichimoku Scanner — индикатор для MetaTrader 4, отображающий панель сканирования сигналов Ишимоку в отдельном окне графика. Он анализирует выбранные валютные пары на нескольких таймфреймах и показывает маркеры BUY, SELL или нейтральный статус на основе пересечения линий Тенкан-сен и Киджун-сен. Индикатор строит таблицу-решётку с настраиваемыми парами и таймфреймами, обновляя отображение при каждом перерисовывании графика.
Настройки программы
| Настройка | Описание |
|---|---|
| Tenkan_Sen_Period | Период Тенкан-сен — Период расчёта линии Тенкан-сен (конверсионной линии) Ишимоку |
| Kijun_Sen_Period | Период Киджун-сен — Период расчёта линии Киджун-сен (базовой линии) Ишимоку |
| Senkou_Span_B_Period | Период Сенкоу Спан Б — Период расчёта линии Сенкоу Спан Б (линии опережающего облака) |
| Comment1 | Описание списка пар — Текстовая подсказка с примером формата перечисления пар через запятую |
| Pairs | Список пар — Перечень валютных пар через запятую для сканирования в индикаторе |
| Include_M1 | Включить M1 — Добавить таймфрейм M1 в таблицу сканера |
| Include_M5 | Включить M5 — Добавить таймфрейм M5 в таблицу сканера |
| Include_M15 | Включить M15 — Добавить таймфрейм M15 в таблицу сканера |
| Include_M30 | Включить M30 — Добавить таймфрейм M30 в таблицу сканера |
| Include_H1 | Включить H1 — Добавить таймфрейм H1 в таблицу сканера |
| Include_H4 | Включить H4 — Добавить таймфрейм H4 в таблицу сканера |
| Include_D1 | Включить D1 — Добавить таймфрейм D1 в таблицу сканера |
| Include_W1 | Включить W1 — Добавить таймфрейм W1 в таблицу сканера |
| Include_MN1 | Включить MN1 — Добавить таймфрейм MN1 в таблицу сканера |
| Labels_Color | Цвет подписей — Цвет текста в ячейках таблицы индикатора |
| Up_Color | Цвет сигнала вверх — Цвет маркера сигнала на покупку |
| Dn_Color | Цвет сигнала вниз — Цвет маркера сигнала на продажу |
| Neutral_Color | Цвет нейтрального состояния — Цвет маркера при отсутствии сигнала |
| X coordinate (x_shift) | Смещение по X — Горизонтальное смещение начала таблицы на графике |
| Font Size; (font_size) | Размер шрифта — Размер шрифта текста в ячейках таблицы |
| Cell width (cell_width) | Ширина ячейки — Ширина одной ячейки таблицы |
| Cell height (cell_height) | Высота ячейки — Высота одной строки таблицы |
| == Alerts == (AlertsSection) | Раздел уведомлений — Разделитель группы настроек уведомлений в окне параметров |
| Popup message (popup_alert) | Всплывающее окно — Показывать всплывающее окно с уведомлением о сигнале |
| Push notification (notification_alert) | Push-уведомление — Отправлять push-уведомление на мобильное устройство |
| Email (email_alert) | Email-уведомление — Отправлять уведомление на электронную почту |
| Play sound on alert (play_sound) | Звуковой сигнал — Воспроизводить звуковой файл при появлении сигнала |
| Sound file (sound_file) | Файл звука — Путь к звуковому файлу для оповещения |
| Start external program (start_program) | Запуск программы — Запускать внешнюю программу при срабатывании сигнала |
| Advanced alert (Telegram/Discord/other platform (like another MT4)) (advanced_alert) | Расширенное уведомление — Использовать расширенные уведомления через DLL (Telegram, Discord и др.) |
| Comment2 | Подсказка по ключу — Текстовая подсказка о получении ключа для расширенных уведомлений |
| Comment3 | Подсказка по DLL — Текстовая подсказка о необходимости разрешить использование DLL |
| Comment4 | Подсказка по установке — Текстовая подсказка об установке необходимой библиотеки |
Поиск по коду файла
#property version "1.1"
#property strict
#property indicator_separate_window
#property strict
extern int Tenkan_Sen_Period = 9;
extern int Kijun_Sen_Period = 26;
extern int Senkou_Span_B_Period = 52;
input string Comment1 = "- Comma Separated Pairs - Ex: EURUSD,EURJPY,GBPUSD - ";
input string Pairs = "EURUSD,EURJPY,USDJPY,GBPUSD,GBPJPY,EURGBP,AUDUSD,NZDUSD";
input bool Include_M1 = true;
input bool Include_M5 = true;
input bool Include_M15 = true;
input bool Include_M30 = true;
input bool Include_H1 = true;
input bool Include_H4 = true;
input bool Include_D1 = true;
input bool Include_W1 = true;
input bool Include_MN1 = true;
input color Labels_Color = clrWhite;
input color Up_Color = clrLime;
input color Dn_Color = clrRed;
input color Neutral_Color = clrDarkGray;
input int x_shift = 1000; // X coordinate
input int font_size = 10; // Font Size;
input int cell_width = 120; // Cell width
input int cell_height = 30; // Cell height
extern string AlertsSection = ""; // == Alerts ==
extern bool popup_alert = false; // Popup message
extern bool notification_alert = false; // Push notification
extern bool email_alert = false; // Email
extern bool play_sound = false; // Play sound on alert
extern string sound_file = ""; // Sound file
extern bool start_program = false; // Start external program
extern string program_path = ""; // Path to the external program executable
extern bool advanced_alert = false; // Advanced alert (Telegram/Discord/other platform (like another MT4))
extern string advanced_key = ""; // Advanced alert key
extern string Comment2 = "- You can get a key via @profit_robots_bot Telegram Bot. Visit ProfitRobots.com for discord/other platform keys -";
extern string Comment3 = "- Allow use of dll in the indicator parameters window -";
extern string Comment4 = "- Install AdvancedNotificationsLib.dll -";
#import "AdvancedNotificationsLib.dll"
void AdvancedAlert(string key, string text, string instrument, string timeframe);
#import
#import "shell32.dll"
int ShellExecuteW(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd);
#import
class Signaler
{
string _symbol;
ENUM_TIMEFRAMES _timeframe;
datetime _lastDatetime;
string _prefix;
public:
Signaler(const string symbol, ENUM_TIMEFRAMES timeframe)
{
_symbol = symbol;
_timeframe = timeframe;
}
void SetMessagePrefix(string prefix)
{
_prefix = prefix;
}
string GetSymbol()
{
return _symbol;
}
ENUM_TIMEFRAMES GetTimeframe()
{
return _timeframe;
}
string GetTimeframeStr()
{
switch (_timeframe)
{
case PERIOD_M1: return "M1";
case PERIOD_M5: return "M5";
case PERIOD_D1: return "D1";
case PERIOD_H1: return "H1";
case PERIOD_H4: return "H4";
case PERIOD_M15: return "M15";
case PERIOD_M30: return "M30";
case PERIOD_MN1: return "MN1";
case PERIOD_W1: return "W1";
}
return "M1";
}
void SendNotifications(const string subject, string message = NULL, string symbol = NULL, string timeframe = NULL)
{
if (message == NULL)
message = subject;
if (_prefix != "" && _prefix != NULL)
message = _prefix + message;
if (symbol == NULL)
symbol = _symbol;
if (timeframe == NULL)
timeframe = GetTimeframeStr();
if (start_program)
ShellExecuteW(0, "open", program_path, "", "", 1);
if (popup_alert)
Alert(message);
if (email_alert)
SendMail(subject, message);
if (play_sound)
PlaySound(sound_file);
if (notification_alert)
SendNotification(message);
if (advanced_alert && advanced_key != "" && !IsTesting())
AdvancedAlert(advanced_key, message, symbol, timeframe);
}
};
#define MAX_LOOPBACK 500
string WindowName;
int WindowNumber;
interface ICondition
{
public:
virtual bool IsPass(const int period) = 0;
};
class InstrumentInfo
{
string _symbol;
double _mult;
double _point;
double _pipSize;
int _digits;
double _tickSize;
public:
InstrumentInfo(const string symbol)
{
_symbol = symbol;
_point = MarketInfo(symbol, MODE_POINT);
_digits = (int)MarketInfo(symbol, MODE_DIGITS);
_mult = _digits == 3 || _digits == 5 ? 10 : 1;
_pipSize = _point * _mult;
_tickSize = MarketInfo(_symbol, MODE_TICKSIZE);
}
static double GetBid(const string symbol) { return MarketInfo(symbol, MODE_BID); }
double GetBid() { return GetBid(_symbol); }
static double GetAsk(const string symbol) { return MarketInfo(symbol, MODE_ASK); }
double GetAsk() { return GetAsk(_symbol); }
static double GetPipSize(const string symbol)
{
double point = MarketInfo(symbol, MODE_POINT);
double digits = (int)MarketInfo(symbol, MODE_DIGITS);
double mult = digits == 3 || digits == 5 ? 10 : 1;
return point * mult;
}
double GetPipSize() { return _pipSize; }
double GetPointSize() { return _point; }
string GetSymbol() { return _symbol; }
double GetSpread() { return (GetAsk() - GetBid()) / GetPipSize(); }
int GetDigits() { return _digits; }
double GetTickSize() { return _tickSize; }
double GetMinLots() { return SymbolInfoDouble(_symbol, SYMBOL_VOLUME_MIN); };
double RoundRate(const double rate)
{
return NormalizeDouble(MathFloor(rate / _tickSize + 0.5) * _tickSize, _digits);
}
};
class ABaseCondition : public ICondition
{
protected:
ENUM_TIMEFRAMES _timeframe;
InstrumentInfo *_instrument;
string _symbol;
public:
ABaseCondition(const string symbol, ENUM_TIMEFRAMES timeframe)
{
_instrument = new InstrumentInfo(symbol);
_timeframe = timeframe;
_symbol = symbol;
}
~ABaseCondition()
{
delete _instrument;
}
};
class UpCondition : public ABaseCondition
{
public:
UpCondition(const string symbol, ENUM_TIMEFRAMES timeframe)
:ABaseCondition(symbol, timeframe)
{
}
virtual bool IsPass(const int period)
{
double TENKANSEN_0 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 1, period);
double KIJUNSEN_0 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 2, period);
double TENKANSEN_1 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 1, period + 1);
double KIJUNSEN_1 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 2, period + 1);
return TENKANSEN_0 > KIJUNSEN_0 && TENKANSEN_1 <= KIJUNSEN_1;
}
};
class DownCondition : public ABaseCondition
{
public:
DownCondition(const string symbol, ENUM_TIMEFRAMES timeframe)
:ABaseCondition(symbol, timeframe)
{
}
virtual bool IsPass(const int period)
{
double TENKANSEN_0 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 1, period);
double KIJUNSEN_0 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 2, period);
double TENKANSEN_1 = iIchimoku(_symbol, _timeframe, Tenkan_Sen_Period, Kijun_Sen_Period, Senkou_Span_B_Period, 1, period + 1);
double KIJUNSEПоказано первые 50% кода (символов: 11559)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.