cpiv1.5 eng.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «cpiv1.5 eng.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для распознавания японских свечных паттернов на графиках MetaTrader 5. Анализирует ценовые бары в заданном диапазоне и отмечает обнаруженные паттерны текстовыми метками и стрелочными маркерами на графике. Поддерживает фильтрацию по категориям паттернов и отправку уведомлений.
Включает 39 предопределённых свечных паттернов, разделённых на четыре категории: сильные разворотные, слабые разворотные, продолжения и неклассифицированные. Пользователь может выбирать, какие категории отображать на графике, настраивая видимый диапазон баров и цвета маркеров.
При обнаружении паттерна индикатор создаёт текстовые объекты на графике с указанием имени паттерна. Также поддерживается отправка email-уведомлений и звуковых сигналов при появлении новых сигналов на текущем баре.
Настройки программы
| Настройка | Описание |
|---|---|
| ShowStrongReversalPatterns | Отображение сильных разворотных паттернов на графике. |
| ShowWeakReversalPatterns | Отображение слабых разворотных паттернов на графике. |
| ShowContinuationPatterns | Отображение паттернов продолжения тренда на графике. |
| ShowUnclassified | Отображение паттернов, не отнесённых к категориям разворота или продолжения. |
| ViewBars | Количество баров, анализируемых индикатором на графике. |
| SoundAlert | Включение звукового уведомления при обнаружении нового паттерна. |
| EmailAlert | Включение email-уведомления при обнаружении нового паттерна. |
| SellColor | Цвет маркеров и текстовых меток для медвежьих (продажных) сигналов. |
| BuyColor | Цвет маркеров и текстовых меток для бычьих (покупательских) сигналов. |
| TextColor | Цвет текстовых меток паттернов на графике. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 LimeGreen
extern bool ShowStrongReversalPatterns = TRUE;
extern bool ShowWeakReversalPatterns = FALSE;
extern bool ShowContinuationPatterns = FALSE;
extern bool ShowUnclassified = FALSE;
extern int ViewBars = 350;
extern bool SoundAlert = TRUE;
extern bool EmailAlert = FALSE;
extern color SellColor = Red;
extern color BuyColor = LimeGreen;
extern color TextColor = Yellow;
double g_ibuf_116[];
double g_ibuf_120[];
datetime g_time_124;
bool gi_128 = FALSE;
string gs_unused_132 = "10.";
string gs_unused_140 = "20";
int gi_148 = -1;
int gi_152 = 0;
int gi_156 = 1;
int gi_160 = 2;
int gi_164 = 3;
int gi_unused_168 = 39;
int gia_172[];
int gia_176[];
string gs_mymmobj_180 = "MyMMObj";
int gi_188 = 0;
int gi_192 = 1;
int gi_196 = 2;
int gi_200 = 3;
int gi_204 = 4;
int gi_208 = 5;
int gi_212 = 6;
int gi_216 = 7;
int gi_220 = 8;
int gi_224 = 9;
int gi_228 = 10;
int gi_232 = 11;
int gi_236 = 12;
int gi_240 = 13;
int gi_244 = 14;
int gi_248 = 15;
int gi_252 = 16;
int gi_256 = 17;
int gi_260 = 18;
int gi_264 = 19;
int gi_268 = 20;
int gi_272 = 21;
int gi_276 = 22;
int gi_280 = 23;
int gi_284 = 24;
int gi_288 = 25;
int gi_292 = 26;
int gi_296 = 27;
int gi_300 = 28;
int gi_304 = 29;
int gi_308 = 30;
int gi_312 = 31;
int gi_316 = 32;
int gi_320 = 33;
int gi_324 = 34;
int gi_328 = 35;
int gi_332 = 36;
int gi_336 = 37;
int gi_340 = 38;
string gsa_344[39];
int gia_348[39];
int gia_352[39];
int initDefine() {
gsa_344[gi_188] = "Hammer";
gia_352[gi_188] = 0;
gsa_344[gi_304] = "Hanging";
gia_352[gi_304] = 0;
gsa_344[gi_192] = "Engulfing";
gia_352[gi_192] = 0;
gsa_344[gi_196] = "Morning star";
gia_352[gi_196] = 0;
gsa_344[gi_200] = "Evening star";
gia_352[gi_200] = 0;
gsa_344[gi_212] = "Dark-cloud cover";
gia_352[gi_212] = 0;
gsa_344[gi_216] = "Piercing pattern";
gia_352[gi_216] = 0;
gsa_344[gi_204] = "Shooting star";
gia_352[gi_204] = 0;
gsa_344[gi_208] = "Inverted hammer";
gia_352[gi_208] = 0;
gsa_344[gi_220] = "Harami";
gia_352[gi_220] = 1;
gsa_344[gi_224] = "Tweezers top";
gia_352[gi_224] = 1;
gsa_344[gi_228] = "Tweezers bottom";
gia_352[gi_228] = 1;
gsa_344[gi_232] = "Belt-hold line";
gia_352[gi_232] = 1;
gsa_344[gi_236] = "Upside gap two crow";
gia_352[gi_236] = 1;
gsa_344[gi_244] = "Three crows";
gia_352[gi_244] = 1;
gsa_344[gi_240] = "Mot-hold";
gia_352[gi_240] = 2;
gsa_344[gi_248] = "Counterattack lines";
gia_352[gi_248] = 3;
gsa_344[gi_252] = "Separating lines";
gia_352[gi_252] = 2;
gsa_344[gi_256] = "Gravestone doji";
gia_352[gi_256] = 3;
gsa_344[gi_260] = "Long-legged doji";
gia_352[gi_260] = 3;
gsa_344[gi_264] = "Bear doji";
gia_352[gi_264] = 0;
gsa_344[gi_324] = "Bull doji";
gia_352[gi_324] = 0;
gsa_344[gi_268] = "Tasuki gap";
gia_352[gi_268] = 2;
gsa_344[gi_272] = "Eide-by-side tuhite lines";
gia_352[gi_272] = 2;
gsa_344[gi_276] = "Three methods";
gia_352[gi_276] = 2;
gsa_344[gi_280] = "Three river bottom";
gia_352[gi_280] = 3;
gsa_344[gi_284] = "GAP Buy";
gia_352[gi_284] = 3;
gsa_344[gi_288] = "GAP Sell";
gia_352[gi_288] = 3;
gsa_344[gi_292] = "Three white soldiers";
gia_352[gi_292] = 3;
gsa_344[gi_296] = "Advance block";
gia_352[gi_296] = 1;
gsa_344[gi_300] = "Stalled pattern";
gia_352[gi_300] = 3;
gsa_344[gi_316] = "Doji Absorption";
gia_352[gi_316] = 3;
gsa_344[gi_320] = "Inverted hammer";
gia_352[gi_320] = 3;
gsa_344[gi_328] = "Upside Gap";
gia_352[gi_328] = 2;
gsa_344[gi_332] = "Downside Gap ";
gia_352[gi_332] = 2;
gsa_344[gi_336] = "Three-line strike";
gia_352[gi_336] = 1;
gsa_344[gi_340] = "on-neckline";
gia_352[gi_340] = 1;
gia_348[gi_316] = -150;
gia_348[gi_188] = -100;
gia_348[gi_304] = -100;
gia_348[gi_192] = -100;
gia_348[gi_196] = -100;
gia_348[gi_200] = -100;
gia_348[gi_212] = -100;
gia_348[gi_216] = -100;
gia_348[gi_204] = -90;
gia_348[gi_208] = -90;
gia_348[gi_220] = -80;
gia_348[gi_224] = -50;
gia_348[gi_228] = -50;
gia_348[gi_232] = -80;
gia_348[gi_236] = -80;
gia_348[gi_244] = -90;
gia_348[gi_240] = 0;
gia_348[gi_248] = -80;
gia_348[gi_252] = 0;
gia_348[gi_256] = 0;
gia_348[gi_260] = 0;
gia_348[gi_264] = 0;
gia_348[gi_324] = 0;
gia_348[gi_268] = 0;
gia_348[gi_272] = 0;
gia_348[gi_276] = 0;
gia_348[gi_280] = -90;
gia_348[gi_284] = 100;
gia_348[gi_288] = 100;
gia_348[gi_292] = 100;
gia_348[gi_296] = -80;
gia_348[gi_300] = -80;
return (0);
}
double GetUpperShadowHeight(int ai_0) {
return (MathAbs(High[ai_0] - MathMax(Close[ai_0], Open[ai_0])));
}
double GetLowerShadowHeight(int ai_0) {
return (MathAbs(MathMin(Close[ai_0], Open[ai_0]) - Low[ai_0]));
}
double GetBodyHeight(int ai_0) {
return (MathAbs(Close[ai_0] - Open[ai_0]));
}
double GetAllHeight(int ai_0) {
return (MathAbs(High[ai_0] - Low[ai_0]));
}
bool IsHigher(int ai_0) {
if (High[ai_0] >= High[ai_0 + 1] + 2.0 * Point && High[ai_0] >= High[ai_0 + 2] + 2.0 * Point && High[ai_0] >= High[ai_0 + 3] + 2.0 * Point) return (TRUE);
return (FALSE);
}
int IsBodyHigher(int ai_0) {
if (Close[ai_0] > GetHighCloseOpen(ai_0 + 1) + 2.0 * Point && Close[ai_0] > GetHighCloseOpen(ai_0 + 2) + 2.0 * Point) return (1);
return (0);
}
bool IsLower(int ai_0) {
if (Low[ai_0] + 2.0 * Point < Low[ai_0 + 1] && Low[ai_0] + 2.0 * Point < Low[ai_0 + 2] && Low[ai_0] + 2.0 * Point < Low[ai_0 + 3]) return (TRUE);
return (FALSE);
}
int IsYing(int ai_0) {
if (Close[ai_0] < Open[ai_0]) return (1);
return (0);
}
int IsYang(int ai_0) {
if (Close[ai_0] > Open[ai_0]) return (1);
return (0);
}
int RemoveObjects() {
for (int li_0 = GetFirstMyObjectandText(); li_0 > -1; li_0 = GetFirstMyObjectandText()) ObjectDelete(ObjectName(li_0));
return (0);
}
int GetFirstMyObjectandText() {
for (int li_ret_0 = 0; li_ret_0 < ObjectsTotal(); li_ret_0++)
if (StringFind(ObjectName(li_ret_0), "My", 0) >= 0) return (li_ret_0);
return (-1);
}
double GetLowCloseOpen(int ai_0) {
return (MathMin(Close[ai_0], Open[ai_0]));
}
double GetHighCloseOpen(int ai_0) {
return (MathMax(Close[ai_0], Open[ai_0]));
}
string GetNextObjectName(string as_0) {
return (as_0 + DoubleToStr(ObjectsTotal(), 0));
}
int testBodyHeight(int ai_0, int ai_4) {
if (GetBodyHeight(ai_0) >= ai_4 * Point) return (1);
return (0);
}
int AlmostSameBodyHeight(int ai_0, int ai_4) {
if (MathAbs(GetBodyHeight(ai_0) - GetBodyHeight(ai_4)) < 5.0 * Point) return (1);
return (0);
}
void CreateTextObject(int a_datetime_0, double a_price_4, color a_color_12, string a_text_16) {
string l_name_24 = GetNextObjectName(gs_mymmobj_180);
ObjectCreate(l_name_24, OBJ_TEXT, 0, a_datetime_0, a_price_4);
ObjectSetText(l_name_24, a_text_16, 7);
ObjectSet(l_name_24, OBJPROP_COLOR, a_color_12);
}
int AddintoCFArray(int ai_0, int ai_4) {
int l_arr_size_8 = ArraySize(gia_172);
ArrayResize(gia_172, l_arr_size_8 + 1);
ArrayResize(gia_176, l_arr_size_8 + 1);
gia_172[l_arr_size_8] = ai_0;
gia_176[l_arr_size_8] = ai_4;
return (0);
}
bool IsHammer(int ai_0) {
if (GetAllHeight(ai_0) >= 10.0 * Point && GetUpperShadowHeight(ai_0) < GetAllHeight(ai_0) / 5.0 && GetLowerShadowHeight(ai_0) > 2.0 * GetBodyHeight(ai_0) && GetUpperShadowHeight(ai_0) > 2.0 * Point)
if (IsHigher(ai_0)) return (TRUE);
return (FALSE);
}
bool IsHammerCFM(int ai_0) {
if (IsHammer(ai_0 + 1) && Open[ai_0] < GetLowCloseOpen(ai_0 + 2) && Close[ai_0] < GetLowCloseOpen(ai_0 + 2)) return (TRUE);
return (FALSE);
}
bool IsHangMan(int ai_0) {
if (GetAllHeight(ai_0) >= 10.0 * Point && GetUpperShadowHeight(ai_0) < GetAllHeight(ai_0) / 5.0 && GetLowerShadowHeight(ai_0) > 2.0 * GetBodyHeight(ai_0))
if (IsHigher(ai_0)) return (TRUE);
return (FALSE);
}
bool IsHangManCFM(int ai_0) {
if (IsHangMan(ai_0 + 1) && Open[ai_0] > GetHighCloseOpen(ai_0 + 2) && Close[ai_0] > GetHighCloseOpen(ai_0 + 2)) return (TRUE);
return (FALSE);
}
bool IsDoji(int ai_0) {
if (MathAbs(Open[ai_0] - Close[ai_0]) < 3.0 * Point) return (TRUE);
return (FALSE);
}
bool IsInvertHammer(int ai_0) {
if (GetLowerShadowHeight(ai_0) < GetAllHeight(ai_0) / 5.0) {
if (GetUpperShadowHeight(ai_0) > 2.0 * GetBodyHeight(ai_0))
if (IsLower(ai_0)) return (TRUE);
}
return (FALSE);
}
bool IsInvertHammerCFM(int ai_unused_0) {
return (FALSE);
}
bool IsThree_Crows(int ai_0) {
if (IsHigher(ai_0 + 2) && High[ai_0 + 1] > High[ai_0 + 2] && IsYing(ai_0 + 2) && IsYing(ai_0 + 1) && IsYing(ai_0) && Open[ai_0 + 1] < Open[ai_0 + 2] && Close[ai_0 +
1] < Close[ai_0 + 2] && Open[ai_0] < Open[ai_0 + 1] && Close[ai_0] < Close[ai_0 + 1]) return (TRUE);
return (FALSE);
}
bool IsThree_White_Soldiers(int ai_0) {
if (IsYang(ai_0 + 2) && IsYang(ai_0 + 1) && IsYang(ai_0 + 0) && Open[ai_0 + 1] > Open[ai_0 + 2] + GetBodyHeight(ai_0 + 2) / 2.0 && Open[ai_0 + 0] > Open[ai_0 + 1] +
GetBodyHeight(ai_0 + 1) / 2.0 && Close[ai_0 + 1] > Close[ai_0 + 2] && Close[ai_0 + 0] > Close[ai_0 + 1] && High[ai_0 + 1] > High[ai_0 + 2] && High[ai_0 + 0] > High[ai_0 + 1] && testBodyHeight(ai_0 + 2, 20) && testBodyHeight(ai_0 + 1, 20) && testBodyHeight(ai_0 + 0, 20) && AlmostSameBodyHeight(ai_0 + 2, ai_0 + 1) && AlmostSameBodyHeight(ai_0 + 1, ai_0 + 0)) return (TRUE);
return (FALSE);
}
int MMCFCondition(int ai_0) {
int l_count_4;
if (!IsDoji(ai_0 + 2)) {
if (IsYang(ai_0 + 2) != IsYang(ai_0 + 1)) {
if (MathMax(Close[ai_0 + 1], Open[ai_0 + 1]) > MathMax(Close[ai_0 + 2], Open[ai_0 + 2]) && MathMin(Close[ai_0 + 1], Open[ai_0 + 1]) < MathMin(Close[ai_0 + 2], Open[ai_0 +
2])) {
if (IsLower(ai_0 + 2) || IsLower(ai_0 + 1) && IsYang(ai_0 + 1)) AddintoCFArray(gi_192, gi_152);
if (IsHigher(ai_0 + 2) || IsHigher(ai_0 + 1) && IsYing(ai_0 + 1)) AddintoCFArray(gi_192, gi_156);
if (GetBodyHeight(ai_0 + 2) >= 15.0 * Point || IsLower(ai_0 + 1) && IsYang(ai_0 + 1)) AddintoCFArray(gi_192, gi_152);
if (GetBodyHeight(ai_0 + 2) >= 15.0 * Point || IsHigher(ai_0 + 1) && IsYing(ai_0 + 1)) AddintoCFArray(gi_192, gi_156);
}
}
}
if (IsDoji(ai_0 + 2)) {
if (MathMax(Close[ai_0 + 1], Open[ai_0 + 1]) > MathMax(Close[ai_0 + 2], Open[ai_0 + 2]) && MathMin(Close[ai_0 + 1], Open[ai_0 + 1]) < MathMin(Close[ai_0 + 2], Open[ai_0 +
2])) {
if (IsLower(ai_0 + 2) || IsLower(ai_0 + 1) && IsYang(ai_0 + 1)) AddintoCFArray(gi_316, gi_152);
if (IsHigher(ai_0 + 2) || IsHigher(ai_0 + 1) && IsYing(ai_0 + 1)) AddintoCFArray(gi_316, gi_156);
}
}
if (IsYang(ai_0 + 2) && IsYing(ai_0 + 1) && IsHigher(ai_0 + 2) && GetBodyHeight(ai_0 + 2) >= 20.0 * Point && Open[ai_0 + 1] > High[ai_0 + 2] && Close[ai_0 + 1] < Open[ai_0 +
2] + (Close[ai_0 + 2] - (Open[ai_0 + 2])) / 2.0 && GetLowCloseOpen(ai_0 + 1) > GetLowCloseOpen(ai_0 + 2)) AddintoCFArray(gi_212, gi_156);
if (MathAbs(Close[ai_0 + 2] - (Open[ai_0 + 2])) > 5.0 * Point) {
if (MathMax(Close[ai_0 + 1], Open[ai_0 + 1]) < MathMax(Close[ai_0 + 2], Open[ai_0 + 2]) && MathMin(Close[ai_0 + 1], Open[ai_0 + 1]) > MathMin(Close[ai_0 + 2], Open[ai_0 +
2])) {
if ((IsYang(ai_0 + 2) && IsHigher(ai_0 + 2)) || (IsYang(ai_0 + 2) && GetBodyHeight(ai_0 + 2) >= 15.0 * Point)) AddintoCFArray(gi_220, gi_156);
if ((IsYing(ai_0 + 2) && IsLower(ai_0 + 2)) || (IsYing(ai_0 + 2) && GetBodyHeight(ai_0 + 2) >= 15.0 * Point)) AddintoCFArray(gi_220, gi_152);
}
}
if (IsHammer(ai_0 + 1)) AddintoCFArray(gi_188, gi_160);
if (IsHangMan(ai_0 + 1)) AddintoCFArray(gi_304, gi_164);
if (IsHammerCFM(ai_0 + 1)) AddintoCFArray(gi_308, gi_152);
if (IsHangManCFM(ai_0 + 1)) AddintoCFArray(gi_312, gi_156);
if (IsInvertHammer(ai_0 + 1)) AddintoCFArray(gi_208, gi_160);
if (IsInvertHammerCFM(ai_0 + 1)) AddintoCFArray(gi_320, gi_152);
if (IsYang(ai_0 + 1) && IsYing(ai_0 + 2) && GetBodyHeight(ai_0 + 2) >= 10.0 * Point && Open[ai_0 + 1] < Low[ai_0 + 2] && Close[ai_0 + 1] > Close[ai_0 + 2] + (Open[ai_0 +
2] - (Close[ai_0 + 2])) / 2.0 && GetHighCloseOpen(ai_0 + 1) < GetHighCloseOpen(ai_0 + 2)) AddintoCFArray(gi_216, gi_152);
if (IsYing(ai_0 + 3) && IsYang(ai_0 + 1) && IsLower(ai_0 + 3)) {
if (GetLowCloseOpen(ai_0 + 3) > GetHighCloseOpen(ai_0 + 2) || GetLowCloseOpen(ai_0 + 1) > GetHighCloseOpen(ai_0 + 2) && GetHighCloseOpen(ai_0 + 1) > GetLowCloseOpen(ai_0 +
3) && GetBodyHeight(ai_0 + 2) <= 10.0 * Point && GetBodyHeight(ai_0 + 3) >= 8.0 * Point && GetBПоказано первые 50% кода (символов: 20267)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.