MegaDroidPro
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mdpro_v101ee_bbr_v11.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MegaDroidPro — торговый советник для MetaTrader 4, реализующий два независимых торговых алгоритма (Strategy1 и Strategy2), использующих технические индикаторы для генерации сигналов на покупку и продажу. Strategy1 работает на таймфреймах M15/M5 и задействует RSI, CCI и скользящую среднюю; Strategy2 использует CCI на таймфрейме M5.
Советник поддерживает четыре валютные пары (EURUSD, EURCHF, EURGBP, USDCHF) и автоматически подбирает параметры стратегий в зависимости от выбранной пары и режима логики. Доступны четыре варианта логики для разных пар.
Встроены функции управления рисками: расчёт размера лота на основе уровня риска и доступного маржинального баланса, режим восстановления позиций при убытке, фильтрация максимального спреда, ограничения по времени торговли и многопроцессное управление с распределением риска между экземплярами.
Советник включает режим Stealth для управления типом ордеров, режим Aggressive для одновременной работы обеих стратегий, отправку уведомлений по email, отслеживание истории позиций и отображение информации о состоянии торговли на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| Version | Версия — Текстовый параметр, содержащий версию советника. |
| _1 | Заголовок системных параметров — Текстовый параметр-заголовок группы системных настроек. |
| Stealth | Режим Stealth — Переключатель режима Stealth, влияющий на тип размещаемых ордеров — при активации используются ордера с отложенными стоп-лоссом и тейк-профитом. |
| Aggressive | Агрессивный режим — Переключатель режима агрессивной торговли. При активации обе стратегии могут работать одновременно на одном счёте. |
| GmtOffset | Смещение GMT — Числовое значение смещения GMT в часах, используемое для расчёта серверного и локального времени торговли. |
| 1.01 (NFA) | Правило FIFO — Переключатель правила FIFO (NFA), ограничивающего открытие новых позиций при наличии незакрытых ордеров других советников на счёте. |
| AutoLocalGmtOffset | Автоматическое локальное GMT-смещение — Переключатель автоматического определения локального смещения GMT для корректного расчёта торгового времени. |
| S1_Reference | С1: Магическое число — Целочисленное магическое число для идентификации ордеров, открытых первой стратегией. |
| S2_Reference | С2: Магическое число — Целочисленное магическое число для идентификации ордеров, открытых второй стратегией. |
| ReceiptCode | Код активации — Текстовый параметр для ввода кода активации или авторизации советника. |
| _2 | Заголовок настроек комментариев — Текстовый параметр-заголовок группы настроек комментариев позиций. |
| TopPadding | Отступ сверху — Целочисленное значение отступа в пикселях от верхнего края графика для размещения информационных меток. |
| LeftPadding | Отступ слева — Целочисленное значение отступа в пикселях от левого края графика для размещения информационных меток. |
| TextColor1 | Цвет текста 1 — Цвет текста основной информации, отображаемой на графике. |
| TextColor2 | Цвет текста 2 — Цвет вспомогательного текста, отображаемого на графике. |
| _3 | Заголовок параметров стратегии — Текстовый параметр-заголовок группы параметров стратегии. |
| Slippage | Проскальзывание — Целочисленное допустимое отклонение цены исполнения ордера в пунктах. |
| SendEmails | Отправка email-уведомлений — Переключатель отправки уведомлений по электронной почте при открытии новых ордеров. |
| _4 | Заголовок управления ордерами — Текстовый параметр-заголовок группы управления ордерами. |
| LotSize | Размер лота — Числовое значение фиксированного размера лота для торговли при нулевом уровне риска. |
| _5 | Заголовок управления рисками — Текстовый параметр-заголовок группы управления рисками. |
| RiskLevel | Уровень риска — Числовой коэффициент риска, определяющий долю маржи, используемую для расчёта размера торгового лота. |
| RecoveryMode | Режим восстановления — Переключатель режима восстановления лота. При активации и наличии убыточной истории размер лота увеличивается для компенсации убытков. |
| RiskSharingEnabled | Распределение риска — Переключатель режима распределения риска между несколькими одновременно работающими экземплярами советника на одном счёте. |
| _6 | Заголовок настройки спреда — Текстовый параметр-заголовок настройки максимального спреда. |
| MaxSpread | Максимальный спред — Целочисленный лимит максимального допустимого спреда в пунктах. Значение -1 включает автоматический режим, 0 — стандартный, >0 — пользовательский предел. |
| _7 | Заголовок логики — Текстовый параметр-заголовок выбора логики стратегии. |
| Logic | Логика стратегии — Целочисленный параметр выбора логики торговой стратегии: 1 — EU, 2 — EC, 3 — EG, 4 — UC, определяющий набор параметров для конкретной валютной пары. |
| OverrideTradeTimes | Переопределение времени торговли — Переключатель, позволяющий задать пользовательские часы торговли вместо стандартных для каждой стратегии. |
| S1_StartHour | С1: Час начала торговли — Целочисленный час начала торгового окна для первой стратегии в серверном времени. |
| S1_EndHour | С1: Час окончания торговли — Целочисленный час окончания торгового окна для первой стратегии в серверном времени. |
| S2_StartHour | С2: Час начала торговли — Целочисленный час начала торгового окна для второй стратегии в серверном времени. |
| S2_EndHour | С2: Час окончания торговли — Целочисленный час окончания торгового окна для второй стратегии в серверном времени. |
Поиск по коду файла
#include <WinUser32.mqh>
#include <stdlib.mqh>
#import "kernel32.dll"
int GetCurrentProcessId();
void GetLocalTime(int& TimeArray[]);
int GetTimeZoneInformation(int& TZInfoArray[]);
#import
extern string Version = "1.00";
extern string _1 = "System Parameters";
extern bool Stealth = TRUE;
extern bool Aggressive = TRUE;
extern double GmtOffset = 0.0;
extern bool NFA = FALSE; //1.01
extern bool AutoLocalGmtOffset = TRUE;
extern bool AutoServerGmtOffset = TRUE;
extern int S1_Reference = 77777773;
extern int S2_Reference = 33333337;
extern string ReceiptCode = "";
extern string _2 = "Comment Position";
extern int TopPadding = 30;
extern int LeftPadding = 20;
extern color TextColor1 = CadetBlue;
extern color TextColor2 = SkyBlue;
extern string _3 = "Strategy Parameters";
extern int Slippage = 3;
extern bool SendEmails = FALSE;
extern string _4 = "Order Management";
extern double LotSize = 0.1;
extern string _5 = "Ratio Order Management";
extern double RiskLevel = 0.1;
extern bool RecoveryMode = TRUE;
extern bool RiskSharingEnabled = TRUE;
extern string _6 = "MaxSpread: -1 auto, 0 default, >0 your limit";
extern int MaxSpread = 0;
extern string _7 = "Logic: 1: EU, 2: EC, 3: EG, 4: UC";
extern int Logic = 1;
extern bool OverrideTradeTimes = false;
extern int S1_StartHour = 21;
extern int S1_EndHour = 23;
extern int S2_StartHour = 22;
extern int S2_EndHour = 23;
int Gcount = 0;
bool gi_208 = FALSE;
double gd_212 = 1000.0;
double gd_220 = 0.2;
bool gi_228 = FALSE;
bool gi_240 = TRUE;
bool gi_244 = TRUE;
bool gi_248 = TRUE;
int gi_252 = 3;
int g_timeframe_256 = PERIOD_M15;
int gi_260 = 10;
int gi_264 = 50;
int gi_268 = 200;
int gi_272 = 20;
int gi_276 = 0;
int gi_280 = 16711680;
int gi_284 = 255;
int g_period_288 = 6;
int g_period_292 = 20;
int g_period_296 = 8;
double gd_300 = 70.0;
double gd_308 = 30.0;
double gd_316 = 64.0;
double gd_324 = 36.0;
bool gi_332 = TRUE;
bool gi_336 = TRUE;
bool gi_340 = TRUE;
int gi_344 = 12;
bool gi_348 = TRUE;
int gi_352 = 20;
bool gi_356 = TRUE;
bool gi_360 = FALSE;
double gd_364 = 1.0;
double gd_372 = 24.0;
bool gi_380 = TRUE;
double gd_384 = 1.0;
double gd_392 = 1.0;
bool gi_400 = FALSE;
int gi_404 = 0;
bool gi_408 = TRUE;
bool gi_412 = TRUE;
int gi_416 = 21;
int gi_420 = 1;
int gi_424 = 21;
int gi_428 = 0;
int g_timeframe_432 = PERIOD_M5;
int gi_436 = 35;
int gi_440 = 60;
int gi_444 = 200;
int gi_448 = 20;
double gd_452 = 1.0;
int gi_460 = 0;
int gi_464 = 16748574;
int gi_468 = 9639167;
int gi_472 = 36;
int g_period_476 = 168;
int g_period_480 = 275;
bool gi_484 = TRUE;
bool gi_488 = FALSE;
bool gi_492 = TRUE;
double gd_496 = 1.0;
double gd_504 = 12.0;
double gd_512 = 24.0;
bool gi_520 = FALSE;
bool gi_524 = FALSE;
int gi_528 = 0;
bool gi_532 = TRUE;
bool gi_536 = TRUE;
int gi_540 = 21;
int gi_544 = 4;
int gi_548 = 21;
int gi_552 = 0;
bool gi_556 = TRUE;
int gi_560;
int servertime;
int GMT_time;
double GMT_Hour;
int gi_580;
int g_spread_584;
int g_spread_588;
int g_stoplevel_592;
double gd_596;
double gd_604;
int gi_612 = 1;
double gd_616;
bool gi_624 = FALSE;
int gi_628 = 0;
int gi_632 = 0;
string gs_636;
string gs_644;
string gs_652;
int gi_660 = 0;
int gi_664 = 0;
int gi_668 = 0;
int gi_672;
int gi_676;
int gi_680 = 0;
double g_irsi_684;
double g_irsi_692;
double g_irsi_700;
double g_irsi_708;
double g_icci_716;
double g_icci_724;
double g_icci_732;
double g_ima_756;
bool gi_764 = TRUE;
bool gi_768 = TRUE;
double g_ihigh_772 = 0.0;
double g_ilow_780 = 0.0;
bool gi_788 = FALSE;
int gi_792 = 0;
int gi_796 = 0;
int gi_800 = 0;
int gi_804 = 0;
int gi_808;
int gi_812;
int gi_816 = 0;
int gi_820 = 0;
int gi_824;
int gi_828 = 0;
int gi_832 = 0;
int g_ticket_836 = 0;
int g_datetime_840 = 0;
int g_ticket_844 = 0;
int g_datetime_848 = 0;
int gi_852 = 0;
double g_icci_856;
double g_icci_864;
double g_ihigh_872;
double g_ilow_880;
double g_ihigh_888;
double g_ilow_896;
bool gi_904 = FALSE;
int gi_908 = 0;
int gi_912 = 0;
int gi_916 = 0;
int gi_920 = 0;
int gi_924;
int gi_928;
int g_ticket_932 = -1;
int gi_936;
int gi_940;
int g_datetime_944;
int g_datetime_948;
double g_ord_open_price_952;
int g_ticket_960 = -1;
int gi_964;
int gi_968;
int g_datetime_972;
int g_datetime_976;
double g_ord_open_price_980;
double gd_988 = 0.0;
double gd_996 = 0.0;
bool gi_1004 = FALSE;
bool gi_1008;
bool gi_1012;
int gi_1016;
int g_count_1024 = 0;
int g_ticket_1020 = -2;
int g_ticket_1024 = -2;
double g_ord_profit_1028 = 0.0;
double g_ord_profit_1036 = 0.0;
int g_ticket_1044 = -2;
int g_ticket_1048 = -2;
double g_ord_profit_1052 = 0.0;
double g_ord_profit_1060 = 0.0;
bool gi_1068 = FALSE;
int g_datetime_1076 = 0;
int g_datetime_1080 = 0;
bool gi_1084 = TRUE;
int g_datetime_1088 = 0;
int g_datetime_1092 = 0;
string gsa_1096[] = {".", "..", "...", "....", "....."};
string my_symbol ="";
void SetSymbol(){
my_symbol = StringSubstr(Symbol(), 0, 6);
if (Logic < 1 || Logic > 4) Logic = 1;
if(my_symbol != "EURUSD" && my_symbol != "EURCHF" && my_symbol != "EURGBP" && my_symbol != "USDCHF")
{
if (Logic == 1) my_symbol = "EURUSD";
if (Logic == 2) my_symbol = "EURCHF";
if (Logic == 3) my_symbol = "EURGBP";
if (Logic == 4) my_symbol = "USDCHF";
}
}
int S1_CheckSymbol() {
if (my_symbol == "EURUSD")
{
gi_260 = 10;
gi_268 = 150;
gi_272 = 40;
gi_276 = 0;
g_period_288 = 6;
g_period_292 = 20;
g_period_296 = 8;
gd_300 = 70.0;
gd_308 = 30.0;
gd_316 = 70.0;
gd_324 = 30.0;
gd_364 = 1.0;
gd_372 = 12.0;
gd_384 = 1.0;
gd_392 = 1.0;
gi_404 = 4;
gi_416 = 21;
gi_420 = 23;
gi_424 = 21;
gi_428 = 23;
g_timeframe_256 = PERIOD_M15;
return(1);
}
if (my_symbol == "EURCHF")
{
gi_260 = 10;
gi_268 = 120;
gi_272 = 40;
gi_276 = 0;
g_period_288 = 6;
g_period_292 = 20;
g_period_296 = 8;
gd_300 = 70.0;
gd_308 = 30.0;
gd_316 = 64.0;
gd_324 = 36.0;
gd_364 = 1.0;
gd_372 = 4.0;
gd_384 = 1.0;
gd_392 = 1.0;
gi_404 = 6;
gi_416 = 21;
gi_420 = 0;
gi_424 = 21;
gi_428 = 23;
g_timeframe_256 = PERIOD_M5;
return(1);
}
if (my_symbol == "EURGBP")
{
gi_260 = 6;
gi_268 = 120;
gi_272 = 40;
gi_276 = 0;
g_period_288 = 6;
g_period_292 = 20;
g_period_296 = 16;
gd_300 = 70.0;
gd_308 = 30.0;
gd_316 = 64.0;
gd_324 = 36.0;
gd_364 = 1.0;
gd_372 = 3.0;
gd_384 = 1.0;
gd_392 = 1.0;
gi_404 = 6;
gi_416 = 21;
gi_420 = 0;
gi_424 = 21;
gi_428 = 23;
g_timeframe_256 = PERIOD_M5;
return(1);
}
if (my_symbol == "USDCHF")
{
gi_260 = 10;
gi_268 = 150;
gi_272 = 30;
gi_276 = 0;
g_period_288 = 6;
g_period_292 = 20;
g_period_296 = 8;
gd_300 = 70.0;
gd_308 = 30.0;
gd_316 = 70.0;
gd_324 = 30.0;
gd_364 = 1.0;
gd_372 = 12.0;
gd_384 = 1.0;
gd_392 = 1.0;
gi_404 = 6;
gi_416 = 21;
gi_420 = 23;
gi_424 = 21;
gi_428 = 23;
g_timeframe_256 = PERIOD_M5;
return(1);
}
return(0);
}
int S2_CheckSymbol()
{
if (my_symbol == "EURUSD")
{
gi_436 = 15;
gi_444 = 150;
gi_448 = 30;
gd_452 = 2.0;
gi_460 = 0;
gi_472 = 36;
g_period_476 = 168;
g_period_480 = 275;
gd_496 = 1.0;
gd_504 = 10.0;
gd_512 = 12.0;
gi_528 = 4;
gi_540 = 22;
gi_544 = 23;
gi_548 = 22;
gi_552 = 23;
g_timeframe_432 = PERIOD_M5;
return(1);
}
if (my_symbol == "EURCHF")
{
gi_436 = 15;
gi_444 = 150;
gi_448 = 40;
gd_452 = 2.0;
gi_460 = 0;
gi_472 = 12;
g_period_476 = 46;
g_period_480 = 275;
gd_496 = 1.0;
gd_504 = 2.0;
gd_512 = 5.0;
gi_528 = 6;
gi_540 = 22;
gi_544 = 0;
gi_548 = 22;
gi_552 = 0;
g_timeframe_432 = PERIOD_M5;
return(1);
}
if (my_symbol == "EURGBP")
{
gi_436 = 6;
gi_444 = 120;
gi_448 = 60;
gd_452 = 1.0;
gi_460 = 0;
gi_472 = 12;
g_period_476 = 168;
g_period_480 = 275;
gd_496 = 1.0;
gd_504 = 10.0;
gd_512 = 12.0;
gi_528 = 5;
gi_540 = 22;
gi_544 =23;
gi_548 = 22;
gi_552 = 23;
g_timeframe_432 = PERIOD_M5;
return(1);
}
if (my_symbol == "USDCHF")
{
gi_436 = 10;
gi_444 = 100;
gi_448 = 60;
gd_452 = 3.0;
gi_460 = 0;
gi_472 = 12;
g_period_476 = 70;
g_period_480 = 275;
gd_496 = 1.0;
gd_504 = 4.0;
gd_512 = 18.0;
gi_528 = 5;
gi_540 = 22;
gi_544 = 23;
gi_548 = 22;
gi_552 = 23;
g_timeframe_432 = PERIOD_M5;
return(1);
}
return(0);
}
int init() {
// код доступен только после оплаты
}
int deinit() {
if (gi_240 && !IsTesting()) Decrement();
switch (UninitializeReason()) {
case REASON_CHARTCLOSE:
case REASON_REMOVE:
Deleteobjects(0, gi_668);
gi_668 = 0;
break;
case REASON_RECOMPILE:
case REASON_CHARTCHANGE:
case REASON_PARAMETERS:
case REASON_ACCOUNT:
Deleteobjects(1, gi_668);
gi_668 = 1;
}
return (0);
}
int s1_direction() {
if (g_icci_716 >= 0.0 || g_irsi_684 >= 50.0) gi_832 = servertime;
if (g_icci_716 <= 0.0 || g_irsi_684 <= 50.0) gi_828 = servertime;
if (gi_832 > 0 && servertime - gi_832 > 3600.0 * gd_384) return (2);
if (gi_828 > 0 && servertime - gi_828 > 3600.0 * gd_384) return (3);
if (gi_832 == 0 || gi_828 == 0) return (0);
return (1);
}
void s1_dayRange() {
int l_shift_0;
if (servertime - gi_580 < 3600.0 * gi_344) l_shift_0 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
else l_shift_0 = iBarShift(NULL, g_timeframe_256, gi_580);
g_ihigh_772 = iHigh(NULL, g_timeframe_256, iHighest(NULL, g_timeframe_256, MODE_HIGH, l_shift_0 - gi_560, gi_560));
g_ilow_780 = iLow(NULL, g_timeframe_256, iLowest(NULL, g_timeframe_256, MODE_LOW, l_shift_0 - gi_560, gi_560));
}
void s1_setRules() {
int li_0;
HideTestIndicators(TRUE);
g_irsi_684 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560);
g_irsi_692 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560 + 1);
g_irsi_700 = iRSI(NULL, g_timeframe_256, g_period_288, PRICE_CLOSE, gi_560 + 2);
if (gi_332) g_irsi_708 = iRSI(NULL, PERIOD_M1, g_period_292, PRICE_CLOSE, gi_560);
g_icci_716 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560);
g_icci_724 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560 + 1);
g_icci_732 = iCCI(NULL, g_timeframe_256, g_period_296, PRICE_TYPICAL, gi_560 + 2);
g_ima_756 = iMA(NULL, g_timeframe_256, g_period_296, 0, MODE_SMA, PRICE_MEDIAN, gi_560);
if (gi_348) {
if (g_irsi_684 >= 50 - gi_352 / 2 && g_irsi_684 <= gi_352 / 2 + 50) {
gi_764 = TRUE;
gi_768 = TRUE;
}
}
if (gi_340) s1_dayRange();
if (gi_380) {
li_0 = gi_816;
gi_816 = s1_direction();
if (li_0 != gi_816) {
gi_820 = li_0;
if (gi_816 == 1) gi_824 = servertime + 3600.0 * gd_392;
}
}
if (gi_404 > 0) {
if (g_spread_584 > gi_404 * gd_596) {
if (g_spread_588 < g_spread_584) {
Print("Strategy1: Safe spread limit exceeded: spread = ", g_spread_584);
if (gi_408) Print("Strategy1: Using DayDirection filter");
}
gi_788 = TRUE;
} else gi_788 = FALSE;
}
HideTestIndicators(FALSE);
if (gi_788) {
gi_808 = gi_424;
gi_812 = gi_428;
return;
}
gi_808 = gi_416;
gi_812 = gi_420;
}
int s1_openBuyRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (!gi_764) return (0);
if (gi_788 && !gi_408) return (0);
if (gi_380) {
if (gi_816 == 2) return (0);
if (servertime <= gi_824)
if (gi_820 == 2) return (0);
}
if (gi_400 || gi_788) {
if (servertime - gi_580 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_256, gi_580);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580);
l_shift_20 = gi_560;
}
l_iclose_8 = iClose(NULL, g_timeframe_256, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_256, l_shift_20);
if (l_iclose_0 < l_iclose_8) return (0);
}
return (s1_Buy(Ask, g_icci_716, g_irsi_684, g_irsi_708, g_ima_756, gd_308, gd_324, gi_260 * gd_596 * Point, gi_336, gi_332));
}
int s1_openSellRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (!gi_768) return (0);
if (gi_788 && !gi_408) return (0);
if (gi_380) {
if (gi_816 == 3) return (0);
if (servertime <= gi_824)
if (gi_820 == 3) return (0);
}
if (gi_400 || gi_788) {
if (servertime - gi_580 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_256, gi_580);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_256, gi_580);
l_shift_20 = gi_560;
}
l_iclose_8 = iClose(NULL, g_timeframe_256, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_256, l_shift_20);
if (l_iclose_0 > l_iclose_8) return (0);
}
return (s1_Sell(Bid, g_icci_716, g_irsi_684, g_irsi_708, g_ima_756, gd_300, gd_316, gi_260 * gd_596 * Point, gi_336, gi_332));
}
bool s1_closeBuyRule() {
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_260 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_260 * Point * gd_596, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_796 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_796 * Point * gd_596, Digits)) return (TRUE);
}
if (gi_360) {
if (g_ticket_836 != OrderTicket()) {
g_datetime_840 = OrderOpenTime();
g_ticket_836 = OrderTicket();
}
if (g_icci_716 >= 0.0 || g_irsi_684 >= 50.0) g_datetime_840 = servertime;
if (g_icci_732 < g_icci_724 && g_irsi_700 < g_irsi_692) g_datetime_840 = iTime(NULL, g_timeframe_256, gi_560);
if (servertime - g_datetime_840 > 3600.0 * gd_364 && OrderProfit() < 0.0) return (TRUE);
}
if (gi_356) {
if (servertime - OrderOpenTime() > 3600.0 * gd_364) {
if (g_icci_716 > 0.0 && g_irsi_684 > 50.0 && OrderProfit() > 0.0) return (TRUE);
if (servertime - OrderOpenTime() > 3600.0 * gd_372) return (TRUE);
}
}
return (FALSE);
}
bool s1_closeSellRule() {
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_260 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_260 * Point * gd_596, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_804 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_804 * Point * gd_596, Digits)) return (TRUE);
}
if (gi_360) {
if (g_ticket_844 != OrderTicket()) {
g_datetime_848 = OrderOpenTime();
g_ticket_844 = OrderTicket();
}
if (g_icci_716 <= 0.0 || g_irsi_684 <= 50.0) g_datetime_848 = servertime;
if (g_icci_732 > g_icci_724 && g_irsi_700 > g_irsi_692) g_datetime_848 = iTime(NULL, g_timeframe_256, gi_560);
if (servertime - g_datetime_848 > 3600.0 * gd_364 && OrderProfit() < 0.0) return (TRUE);
}
if (gi_356) {
if (servertime - OrderOpenTime() > 3600.0 * gd_364) {
if (g_icci_716 < 0.0 && g_irsi_684 < 50.0 && OrderProfit() > 0.0) return (TRUE);
if (servertime - OrderOpenTime() > 3600.0 * gd_372) return (TRUE);
}
}
return (FALSE);
}
int s1_openBuy() {
double ld_0 = 0;
double ld_8 = 0;
if (g_ilow_780 > 0.0) {
gi_796 = (Bid - g_ilow_780 + Point * gd_596) / Point;
if (gi_268 > 0 && gi_796 > gi_268 * gd_596) gi_796 = gi_268 * gd_596;
if (gi_796 < gi_272 * gd_596) gi_796 = gi_272 * gd_596;
} else gi_796 = gi_272 * gd_596;
if (gi_796 < g_stoplevel_592) gi_796 = g_stoplevel_592;
if (Stealth) gi_792 = gi_264 * gd_596;
else gi_792 = gi_260 * gd_596;
if (gi_792 < g_stoplevel_592) gi_792 = g_stoplevel_592;
ld_8 = NormalizeDouble(Bid - gi_796 * Point, Digits);
ld_0 = NormalizeDouble(Ask + gi_792 * Point, Digits);
return (openOrder(OP_BUY, gd_604, Ask, ld_0, ld_8, S1_Reference, gi_280, 0));
}
int s1_openSell() {
double ld_0 = 0;
double ld_8 = 0;
if (g_ihigh_772 > 0.0) {
gi_804 = (g_ihigh_772 - Ask + Point * gd_596) / Point;
if (gi_268 > 0 && gi_804 > gi_268 * gd_596) gi_804 = gi_268 * gd_596;
if (gi_804 < gi_272 * gd_596) gi_804 = gi_272 * gd_596;
} else gi_804 = gi_272 * gd_596;
if (gi_804 < g_stoplevel_592) gi_804 = g_stoplevel_592;
if (Stealth) gi_800 = gi_264 * gd_596;
else gi_800 = gi_260 * gd_596;
if (gi_800 < g_stoplevel_592) gi_800 = g_stoplevel_592;
ld_8 = NormalizeDouble(Ask + gi_804 * Point, Digits);
ld_0 = NormalizeDouble(Bid - gi_800 * Point, Digits);
return (openOrder(OP_SELL, gd_604, Bid, ld_0, ld_8, S1_Reference, gi_284, 0));
}
int s1_buyControl() {
int li_ret_16;
double l_ord_takeprofit_0 = OrderTakeProfit();
double l_ord_stoploss_8 = OrderStopLoss();
if (l_ord_takeprofit_0 == 0.0 || l_ord_stoploss_8 == 0.0) {
if (l_ord_takeprofit_0 == 0.0) {
if (gi_792 < g_stoplevel_592) gi_792 = g_stoplevel_592;
l_ord_takeprofit_0 = NormalizeDouble(Ask + gi_792 * Point, Digits);
}
if (l_ord_stoploss_8 == 0.0) {
if (gi_796 < g_stoplevel_592) gi_796 = g_stoplevel_592;
l_ord_stoploss_8 = NormalizeDouble(Bid - gi_796 * Point, Digits);
}
waitForContext();
OrderModify(OrderTicket(), OrderOpenPrice(), l_ord_stoploss_8, l_ord_takeprofit_0, 0, Green);
}
if (s1_closeBuyRule()) {
li_ret_16 = closeOrder(0, Violet);
if (li_ret_16 < 0) return (li_ret_16);
}
if (gi_276 > 0) {
if (Bid - OrderOpenPrice() > Point * gd_596 * gi_276) {
if (OrderStopLoss() < Bid - Point * gd_596 * gi_276 || OrderStopLoss() == 0.0) {
waitForContext();
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gd_596 * gi_276, Digits), OrderTakeProfit(), 0, Green);
}
}
}
return (OrderTicket());
}
int s1_sellControl() {
int li_ret_16;
double l_ord_takeprofit_0 = OrderTakeProfit();
double l_ord_stoploss_8 = OrderStopLoss();
if (l_ord_takeprofit_0 == 0.0 || l_ord_stoploss_8 == 0.0) {
if (l_ord_takeprofit_0 == 0.0) {
if (gi_800 < g_stoplevel_592) gi_800 = g_stoplevel_592;
l_ord_takeprofit_0 = NormalizeDouble(Bid - gi_800 * Point, Digits);
}
if (l_ord_stoploss_8 == 0.0) {
if (gi_804 < g_stoplevel_592) gi_804 = g_stoplevel_592;
l_ord_stoploss_8 = NormalizeDouble(Ask + gi_804 * Point, Digits);
}
waitForContext();
OrderModify(OrderTicket(), OrderOpenPrice(), l_ord_stoploss_8, l_ord_takeprofit_0, 0, Red);
}
if (s1_closeSellRule()) {
li_ret_16 = closeOrder(1, Violet);
if (li_ret_16 < 0) return (li_ret_16);
}
if (gi_276 > 0) {
if (OrderOpenPrice() - Ask > Point * gd_596 * gi_276) {
if (OrderStopLoss() > Ask + Point * gd_596 * gi_276 || OrderStopLoss() == 0.0) {
waitForContext();
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gd_596 * gi_276, Digits), OrderTakeProfit(), 0, Red);
}
}
}
return (OrderTicket());
}
void s2_setRules() {
HideTestIndicators(TRUE);
if (gi_484 || gi_492) g_icci_856 = iCCI(NULL, g_timeframe_432, g_period_476, PRICE_TYPICAL, gi_560);
if (gi_488) g_icci_864 = iCCI(NULL, g_timeframe_432, g_period_480, PRICE_TYPICAL, gi_560);
g_ihigh_872 = iHigh(NULL, g_timeframe_432, iHighest(NULL, g_timeframe_432, MODE_HIGH, gi_472, 1));
g_ilow_880 = iLow(NULL, g_timeframe_432, iLowest(NULL, g_timeframe_432, MODE_LOW, gi_472, 1));
if (gi_528 > 0) {
if (g_spread_584 > gi_528 * gd_596) {
if (g_spread_588 < g_spread_584) {
Print("Strategy2: Safe spread limit exceeded: spread = ", g_spread_584);
if (gi_532) Print("Strategy2: Using DayDirection filter");
}
gi_904 = TRUE;
} else gi_904 = FALSE;
}
HideTestIndicators(TRUE);
if (gi_904) {
gi_924 = gi_548;
gi_928 = gi_552;
return;
}
gi_924 = gi_540;
gi_928 = gi_544;
}
int s2_openBuyRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (gi_904 && !gi_532) return (0);
if (gi_524 || gi_904) {
if (servertime - gi_580 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_432, gi_580);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580);
l_shift_20 = gi_560;
}
l_iclose_8 = iClose(NULL, g_timeframe_432, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_432, l_shift_20);
if (l_iclose_0 < l_iclose_8) return (0);
}
return (s2_Buy(Ask, Bid, g_icci_856, g_icci_864, g_ilow_880, g_ihigh_872, gi_484, gi_488));
}
int s2_openSellRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (gi_904 && !gi_532) return (0);
if (gi_524 || gi_904) {
if (servertime - gi_580 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_432, gi_580);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_432, gi_580);
l_shift_20 = gi_560;
}
l_iclose_8 = iClose(NULL, g_timeframe_432, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_432, l_shift_20);
if (l_iclose_0 > l_iclose_8) return (0);
}
return (s2_Sell(Ask, Bid, g_icci_856, g_icci_864, g_ilow_880, g_ihigh_872, gi_484, gi_488));
}
bool s2_closeBuyRule() {
double l_ord_profit_0;
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_436 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_436 * Point * gd_596, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_912 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_912 * Point * gd_596, Digits)) return (TRUE);
}
if (gi_492) {
if (g_ticket_932 != OrderTicket()) {
gi_936 = 0;
gi_940 = 0;
g_datetime_948 = OrderOpenTime();
g_datetime_944 = g_datetime_948;
g_ticket_932 = OrderTicket();
g_ord_open_price_952 = OrderOpenPrice();
}
l_ord_profit_0 = OrderProfit();
if (Ask > g_ord_open_price_952) {
gi_936 += servertime - g_datetime_944;
g_datetime_944 = servertime;
} else {
gi_940 += servertime - g_datetime_944;
g_datetime_944 = servertime;
}
if (servertime - g_datetime_948 > 3600.0 * gd_496) {
if (g_icci_856 > 0.0 && l_ord_profit_0 > 0.0 && gi_936 < gi_940) return (TRUE);
if (g_icci_856 > 100.0 && l_ord_profit_0 > 0.0) return (TRUE);
if (servertime - g_datetime_948 > 3600.0 * gd_504 && l_ord_profit_0 > 0.0) return (TRUE);
if (servertime - g_datetime_948 > 3600.0 * gd_512) return (TRUE);
}
}
if (gi_520) return (Bid >= g_ihigh_872);
return (Bid >= g_ihigh_888);
}
bool s2_closeSellRule() {
double l_ord_profit_0;
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_436 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_436 * Point * gd_596, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_920 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_920 * Point * gd_596, Digits)) return (TRUE);
}
if (gi_492) {
if (g_ticket_960 != OrderTicket()) {
gi_964 = 0;
gi_968 = 0;
g_datetime_976 = OrderOpenTime();
g_datetime_972 = g_datetime_976;
g_ticket_960 = OrderTicket();
g_ord_open_price_980 = OrderOpenPrice();
Показано первые 50% кода (символов: 39764)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.