MegaDroid
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «megadroid13.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MegaDroid — торговый советник для MetaTrader 4, использующий внешнюю библиотеку MegaDroid.dll для аутентификации, расчёта часовых смещений и проверки торгового времени. Советник реализует две независимые торговые стратегии, каждая из которых работает с собственным набором технических индикаторов и фильтров.
Первая стратегия использует таймфрейм M15 и опирается на индикаторы RSI, CCI и SMA, а также фильтры по времени и дневному диапазону цен. Вторая стратегия работает на таймфрейме M5 с применением CCI и анализа ценовых экстремумов. Обе стратегии поддерживают открытие и закрытие позиций Buy/Sell с управлением стоп-лоссом и тейк-профитом.
Советник включает управление размером лота на основе свободной маржи, режим восстановления позиций, опциональное соблюдение правил FIFO, отправку email-уведомлений и отображение статуса на графике. Также реализована проверка торгового контекста и обработка ошибок при выполнении ордеров.
Настройки программы
| Настройка | Описание |
|---|---|
| _1 | _1 — Группа системных параметров |
| Stealth | Stealth — Режим скрытия — отключение тейк-профита и стоп-лосса при открытии |
| Aggressive | Aggressive — Агрессивный режим (включает вторую стратегию при активной первой) |
| GmtOffset | GmtOffset — Смещение GMT в часах |
| NFA | NFA — Режим NFA — ограничение на одновременные позиции |
| AutoLocalGmtOffset | AutoLocalGmtOffset — Автоматическое определение локального смещения GMT |
| S1_Reference | S1_Reference — Магический номер для идентификации ордеров первой стратегии |
| S2_Reference | S2_Reference — Магический номер для идентификации ордеров второй стратегии |
| ReceiptCode | ReceiptCode — Код активации для аутентификации |
| _2 | _2 — Группа настроек комментариев позиций |
| TopPadding | TopPadding — Верхний отступ элементов интерфейса на графике |
| LeftPadding | LeftPadding — Левый отступ элементов интерфейса на графике |
| TextColor1 | TextColor1 — Основной цвет текста на графике |
| TextColor2 | TextColor2 — Вспомогательный цвет текста на графике |
| _3 | _3 — Группа параметров стратегий |
| Slippage | Slippage — Допустимое проскальзывание в пунктах |
| SendEmails | SendEmails — Отправка email-уведомлений об открытии ордеров |
| OrderComments | OrderComments — Комментарий, добавляемый к ордерам |
| _4 | _4 — Группа настроек управления ордерами |
| LotSize | LotSize — Фиксированный размер лота по умолчанию |
| _5 | _5 — Группа настроек соотношения лотов |
| RiskLevel | RiskLevel — Уровень риска для расчёта размера лота |
| RecoveryMode | RecoveryMode — Режим восстановления — удвоение лота при убыточных сделках |
Поиск по коду файла
#include <WinUser32.mqh>
#include <stdlib.mqh>
#import "MegaDroid.dll"
int GetGmtOffset(int a0, int a1, int a2, double& a3[], int& a4[]);
void Activate(string a0, int a1, int a2, string a3, int a4);
int GetState();
int GetStatus();
int Increment(string a0);
bool Decrement(int a0);
bool IsTradeTime(int a0, int a1, int a2, int a3, int a4);
bool s1_Buy(double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, int a8, int a9);
bool s1_Sell(double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, int a8, int a9);
bool s2_Buy(double a0, double a1, double a2, double a3, double a4, double a5, int a6, int a7);
bool s2_Sell(double a0, double a1, double a2, double a3, double a4, double a5, int a6, int a7);
bool s1_Init(int a0, int& a1[], int& a2[], int& a3[], int& a4[], int& a5[], int& a6[], int& a7[], int& a8[], int& a9[], int& a10[], int& a11[], double& a12[], double& a13[], double& a14[], double& a15[], int& a16[], int& a17[], int& a18[], int& a19[], int& a20[], int& a21[]);
bool s2_Init(int a0, int& a1[], int& a2[], int& a3[], double& a4[], int& a5[], int& a6[], int& a7[], int& a8[], double& a9[], double& a10[], double& a11[], int& a12[], int& a13[], int& a14[], int& a15[], int& a16[], int& a17[]);
#import "kernel32.dll"
int GetCurrentProcess();
int WriteProcessMemory(int handle, int address, int& buffer[], int size, int& written);
int GetModuleHandleA(string module);
int LoadLibraryA(string module);
#import
extern string Ver.1.30 = "";
extern string _1 = "System Parameters";
extern bool Stealth = TRUE;
extern bool Aggressive = TRUE;
extern double GmtOffset = 0.0;
extern bool NFA = FALSE;
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 = WhiteSmoke;
extern color TextColor2 = LightGray;
extern string _3 = "Strategy Parameters";
extern int Slippage = 3;
extern bool SendEmails = FALSE;
extern string OrderComments = "";
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;
bool gi_220 = FALSE;
double gd_224 = 1000.0;
double gd_232 = 0.2;
bool gi_240 = FALSE;
bool gi_244 = TRUE;
bool gi_248 = TRUE;
int gi_252 = 3;
bool gi_256 = TRUE;
int gi_260;
int g_datetime_264;
int gi_268;
double g_hour_272;
int gi_280;
int g_spread_284;
int g_spread_288;
int g_stoplevel_292;
double gd_296;
double gd_304;
double gd_312;
bool gi_320 = TRUE;
int gi_324 = 0;
int gi_328 = 0;
int gi_332 = 0;
int gi_336;
int gi_340 = 1;
string gs_344;
string gs_352;
string gs_360;
int g_timeframe_368 = PERIOD_M15;
int gi_372 = 10;
int gi_376 = 50;
int gi_380 = 200;
int gi_384 = 20;
int gi_388 = 0;
int gi_392 = 16711680;
int gi_396 = 255;
int g_period_400 = 6;
int g_period_404 = 20;
int g_period_408 = 8;
double gd_412 = 70.0;
double gd_420 = 30.0;
double gd_428 = 64.0;
double gd_436 = 36.0;
bool gi_444 = TRUE;
bool gi_448 = TRUE;
bool gi_452 = TRUE;
int gi_456 = 12;
bool gi_460 = TRUE;
int gi_464 = 20;
bool gi_468 = TRUE;
bool gi_472 = FALSE;
double gd_476 = 1.0;
double gd_484 = 24.0;
bool gi_492 = TRUE;
double gd_496 = 1.0;
double gd_504 = 1.0;
bool gi_512 = FALSE;
int gi_516 = 0;
bool gi_520 = TRUE;
bool gi_524 = TRUE;
int gi_528 = 21;
int gi_532 = 1;
int gi_536 = 21;
int gi_540 = 0;
int g_timeframe_544 = PERIOD_M5;
int gi_548 = 35;
int gi_552 = 60;
int gi_556 = 200;
int gi_560 = 20;
double gd_564 = 1.0;
int gi_572 = 0;
int gi_576 = 16748574;
int gi_580 = 9639167;
int gi_584 = 36;
int g_period_588 = 168;
int g_period_592 = 275;
bool gi_596 = TRUE;
bool gi_600 = FALSE;
bool gi_604 = TRUE;
double gd_608 = 1.0;
double gd_616 = 12.0;
double gd_624 = 24.0;
bool gi_632 = FALSE;
bool gi_636 = FALSE;
int gi_640 = 0;
bool gi_644 = TRUE;
bool gi_648 = TRUE;
int gi_652 = 21;
int gi_656 = 4;
int gi_660 = 21;
int gi_664 = 0;
int gi_668 = 0;
int gi_672 = 0;
int gi_676 = 0;
int gi_680;
int gi_684;
int gi_688;
int gi_692;
double gd_696 = 0.0;
double gd_704 = 0.0;
bool gi_712 = FALSE;
bool gi_716;
bool gi_720;
int gi_724;
int g_count_728 = 0;
int g_ticket_732 = -2;
int g_ticket_736 = -2;
double g_ord_profit_740 = 0.0;
double g_ord_profit_748 = 0.0;
int g_ticket_756 = -2;
int g_ticket_760 = -2;
double g_ord_profit_764 = 0.0;
double g_ord_profit_772 = 0.0;
int gi_780 = 0;
int gi_784 = 0;
int gi_788 = 0;
int gi_792 = 0;
double g_irsi_796;
double g_irsi_804;
double g_irsi_812;
double g_irsi_820;
double g_icci_828;
double g_icci_836;
double g_icci_844;
double g_ima_868;
bool gi_876 = TRUE;
bool gi_880 = TRUE;
double g_ihigh_884 = 0.0;
double g_ilow_892 = 0.0;
bool gi_900 = FALSE;
int gi_904 = 0;
int gi_908 = 0;
int gi_912 = 0;
int gi_916 = 0;
int gi_920;
int gi_924;
int gi_928 = 0;
int gi_932 = 0;
int gi_936;
int g_datetime_940 = 0;
int g_datetime_944 = 0;
int g_ticket_948 = 0;
int g_datetime_952 = 0;
int g_ticket_956 = 0;
int g_datetime_960 = 0;
int gi_964 = 0;
bool gi_968 = TRUE;
int g_datetime_972 = 0;
int g_datetime_976 = 0;
int gi_980 = 0;
double g_icci_984;
double g_icci_992;
double g_ihigh_1000;
double g_ilow_1008;
double g_ihigh_1016;
double g_ilow_1024;
bool gi_1032 = FALSE;
int gi_1036 = 0;
int gi_1040 = 0;
int gi_1044 = 0;
int gi_1048 = 0;
int gi_1052;
int gi_1056;
int g_ticket_1060 = -1;
int gi_1064;
int gi_1068;
int g_datetime_1072;
int g_datetime_1076;
double g_ord_open_price_1080;
int g_ticket_1088 = -1;
int gi_1092;
int gi_1096;
int g_datetime_1100;
int g_datetime_1104;
double g_ord_open_price_1108;
int gi_1116 = 0;
bool gi_1120 = TRUE;
int g_datetime_1124 = 0;
int g_datetime_1128 = 0;
string gsa_1132[] = {".", "..", "...", "....", "....."};
int gi_unused_1136 = 0;
int gi_unused_1140 = 0;
string gs_1144 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int gi_unused_1152 = 0;
int gi_unused_1156 = 0;
double gda_unused_1160[];
bool gi_1164 = FALSE;
int S1_CheckSymbol() {
int lia_0[1];
int lia_4[1];
int lia_8[1];
int lia_12[1];
int lia_16[1];
int lia_20[1];
int lia_24[1];
int lia_28[1];
int lia_32[1];
int lia_36[1];
int lia_40[1];
double lda_44[1];
double lda_48[1];
double lda_52[1];
double lda_56[1];
int lia_60[1];
int lia_64[1];
int lia_68[1];
int lia_72[1];
int lia_76[1];
int lia_80[1];
if (s1_Init(gi_336, lia_0, lia_4, lia_8, lia_12, lia_16, lia_20, lia_24, lia_28, lia_32, lia_36, lia_40, lda_44, lda_48, lda_52, lda_56, lia_60, lia_64, lia_68, lia_72, lia_76, lia_80)) {
gi_372 = lia_0[0];
gi_380 = lia_4[0];
gi_384 = lia_8[0];
gi_388 = lia_12[0];
g_period_400 = lia_16[0];
g_period_404 = lia_20[0];
g_period_408 = lia_24[0];
gd_412 = lia_28[0];
gd_420 = lia_32[0];
gd_428 = lia_36[0];
gd_436 = lia_40[0];
gd_476 = lda_44[0];
gd_484 = lda_48[0];
gd_496 = lda_52[0];
gd_504 = lda_56[0];
gi_516 = lia_60[0];
gi_528 = lia_64[0];
gi_532 = lia_68[0];
gi_536 = lia_72[0];
gi_540 = lia_76[0];
g_timeframe_368 = lia_80[0];
return (1);
}
return (0);
}
int S2_CheckSymbol() {
int lia_0[1];
int lia_4[1];
int lia_8[1];
int lia_12[1];
double lda_16[1];
int lia_20[1];
int lia_24[1];
int lia_28[1];
double lda_32[1];
double lda_36[1];
double lda_40[1];
int lia_44[1];
int lia_48[1];
int lia_52[1];
int lia_56[1];
int lia_60[1];
int lia_64[1];
if (s2_Init(gi_336, lia_0, lia_4, lia_8, lda_16, lia_12, lia_20, lia_24, lia_28, lda_32, lda_36, lda_40, lia_44, lia_48, lia_52, lia_56, lia_60, lia_64)) {
gi_548 = lia_0[0];
gi_556 = lia_4[0];
gi_560 = lia_8[0];
gd_564 = lda_16[0];
gi_572 = lia_12[0];
gi_584 = lia_20[0];
g_period_588 = lia_24[0];
g_period_592 = lia_28[0];
gd_608 = lda_32[0];
gd_616 = lda_36[0];
gd_624 = lda_40[0];
gi_640 = lia_44[0];
gi_652 = lia_48[0];
gi_656 = lia_52[0];
gi_660 = lia_56[0];
gi_664 = lia_60[0];
g_timeframe_544 = lia_64[0];
return (1);
}
return (0);
}
int init() {
// код доступен только после оплаты
}
int deinit() {
Decrement(gi_336);
if (IsTesting()) {
if (!IsVisualMode()) {
PrintLN("GmtOffset:");
PrintLN(DoubleToStr(GmtOffset, 1), TextColor2, gi_672, gi_668 - 1, 55);
PrintSep();
PrintLN("Digits:");
PrintLN(Digits, TextColor2, gi_672, gi_668 - 1, 35);
PrintLN("Spread:");
PrintLN(StringConcatenate(DoubleToStr(g_spread_284 / gd_296, 1), " (", g_spread_284, " pips)"), TextColor2, gi_672, gi_668 - 1, 40);
PrintSep();
}
return (0);
}
switch (UninitializeReason()) {
case REASON_CHARTCLOSE:
case REASON_REMOVE:
Deleteobjects(0, gi_676);
gi_676 = 0;
break;
case REASON_RECOMPILE:
case REASON_CHARTCHANGE:
case REASON_PARAMETERS:
case REASON_ACCOUNT:
Deleteobjects(1, gi_676);
gi_676 = 1;
}
return (0);
}
int waitForContext() {
for (int l_count_0 = 0; IsTradeContextBusy() && l_count_0 < 20; l_count_0++) Sleep(15);
if (l_count_0 >= 20) Print("Trade context is buisy more than ", DoubleToStr(15 * l_count_0 / 1000, 2), " seconds");
else
if (l_count_0 > 0) Print("Trade context was buisy ", DoubleToStr(15 * l_count_0 / 1000, 2), " seconds");
return (l_count_0);
}
int openOrder(int a_cmd_0, double a_lots_4, double a_price_12, double a_price_20, double a_price_28, int a_magic_36, color a_color_40, bool ai_44) {
int l_error_68;
double l_price_48 = 0;
double l_price_56 = 0;
if (!ai_44) {
l_price_48 = a_price_20;
l_price_56 = a_price_28;
}
waitForContext();
int l_ticket_64 = OrderSend(Symbol(), a_cmd_0, a_lots_4, a_price_12, Slippage * gd_296, l_price_56, l_price_48, OrderComments, a_magic_36, 0, a_color_40);
if (l_ticket_64 > 0) {
if (ai_44) {
if (OrderSelect(l_ticket_64, SELECT_BY_TICKET)) {
Sleep(1000);
waitForContext();
OrderModify(l_ticket_64, OrderOpenPrice(), a_price_28, a_price_20, 0, a_color_40);
}
}
if (SendEmails) SendMail(gs_344, "Open " + OpPrint(a_cmd_0) + ": [" + Symbol() + "] " + NormalizeDouble(a_price_12, Digits));
} else {
l_error_68 = GetLastError();
if (!ai_44) return (openOrder(a_cmd_0, a_lots_4, a_price_12, a_price_20, a_price_28, a_magic_36, a_color_40, 1));
Print(OpPrint(a_cmd_0) + " operation failed - error(", l_error_68, "): ", ErrorDescription(l_error_68));
}
return (l_ticket_64);
}
int closeOrder(int ai_0, color a_color_4) {
double l_price_8;
int l_error_20;
for (int l_count_16 = 0; l_count_16 < 20; l_count_16++) {
if (waitForContext() > 5) RefreshRates();
if (ai_0 == 0) l_price_8 = Bid;
else l_price_8 = Ask;
if (OrderClose(OrderTicket(), OrderLots(), l_price_8, Slippage * gd_296, a_color_4)) return (-1);
l_error_20 = GetLastError();
Print("Order close operation failed - error(", l_error_20, "): ", ErrorDescription(l_error_20));
RefreshRates();
}
Print("Order close operation failed");
return (OrderTicket());
}
double MMLots(double ad_0, double ad_8, int &ai_16) {
return (NormalizeLots(ad_0 * ad_8 / MarketInfo(Symbol(), MODE_MARGINREQUIRED) / (AccountLeverage() / 100.0), ai_16));
}
double NormalizeLots(double ad_0, int &ai_8) {
double l_lotstep_20 = MarketInfo(Symbol(), MODE_LOTSTEP);
double l_minlot_28 = MarketInfo(Symbol(), MODE_MINLOT);
double l_maxlot_36 = MarketInfo(Symbol(), MODE_MAXLOT);
double ld_ret_12 = MathCeil(ad_0 / l_lotstep_20) * l_lotstep_20;
ai_8 = 0;
if (ld_ret_12 < l_minlot_28) {
ld_ret_12 = l_minlot_28;
ai_8 = -1;
}
if (ld_ret_12 > l_maxlot_36) {
ld_ret_12 = l_maxlot_36;
ai_8 = 1;
}
return (ld_ret_12);
}
void CountBalance(double ad_0) {
gd_696 += ad_0;
if (gd_704 < gd_696) gd_704 = gd_696;
}
double RecoveryLot(double ad_0) {
int li_8;
if (gd_704 > gd_696 && gi_780 > gi_788) return (NormalizeLots(2.0 * ad_0, li_8));
gi_788 = gi_780;
return (ad_0);
}
int RecoverTrades() {
int l_count_0 = 0;
gd_696 = 0;
gd_704 = 0;
for (int l_pos_4 = OrdersHistoryTotal() - 1; l_pos_4 >= 0; l_pos_4--) {
if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderMagicNumber() != S1_Reference && OrderMagicNumber() != S2_Reference) continue;
CountBalance(OrderProfit());
l_count_0++;
}
}
return (l_count_0);
}
int Recover(int a_magic_0, int a_cmd_4) {
for (int l_pos_8 = OrdersTotal() - 1; l_pos_8 >= 0; l_pos_8--) {
if (OrderSelect(l_pos_8, SELECT_BY_POS)) {
if (OrderMagicNumber() == a_magic_0) {
if (OrderSymbol() == Symbol())
if (OrderType() == a_cmd_4) return (OrderTicket());
}
}
}
return (-1);
}
void RefreshOrders() {
g_count_728 = 0;
for (int l_pos_0 = OrdersTotal() - 1; l_pos_0 >= 0; l_pos_0--) {
if (OrderSelect(l_pos_0, SELECT_BY_POS)) {
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() != S1_Reference && OrderMagicNumber() != S2_Reference) g_count_728++;
}
}
}
int FIFOrule() {
return (g_count_728 <= 0 && g_ticket_732 < 0 && g_ticket_736 < 0 && g_ticket_756 < 0 && g_ticket_760 < 0);
}
int s1_direction() {
if (g_icci_828 >= 0.0 || g_irsi_796 >= 50.0) g_datetime_944 = g_datetime_264;
if (g_icci_828 <= 0.0 || g_irsi_796 <= 50.0) g_datetime_940 = g_datetime_264;
if (g_datetime_944 > 0 && g_datetime_264 - g_datetime_944 > 3600.0 * gd_496) return (2);
if (g_datetime_940 > 0 && g_datetime_264 - g_datetime_940 > 3600.0 * gd_496) return (3);
if (g_datetime_944 == 0 || g_datetime_940 == 0) return (0);
return (1);
}
void s1_dayRange() {
int l_shift_0;
if (g_datetime_264 - gi_280 < 3600.0 * gi_456) l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
else l_shift_0 = iBarShift(NULL, g_timeframe_368, gi_280);
g_ihigh_884 = iHigh(NULL, g_timeframe_368, iHighest(NULL, g_timeframe_368, MODE_HIGH, l_shift_0 - gi_260, gi_260));
g_ilow_892 = iLow(NULL, g_timeframe_368, iLowest(NULL, g_timeframe_368, MODE_LOW, l_shift_0 - gi_260, gi_260));
}
void s1_setRules() {
int li_0;
HideTestIndicators(TRUE);
g_irsi_796 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260);
g_irsi_804 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260 + 1);
g_irsi_812 = iRSI(NULL, g_timeframe_368, g_period_400, PRICE_CLOSE, gi_260 + 2);
if (gi_444) g_irsi_820 = iRSI(NULL, PERIOD_M1, g_period_404, PRICE_CLOSE, gi_260);
g_icci_828 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260);
g_icci_836 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260 + 1);
g_icci_844 = iCCI(NULL, g_timeframe_368, g_period_408, PRICE_TYPICAL, gi_260 + 2);
g_ima_868 = iMA(NULL, g_timeframe_368, g_period_408, 0, MODE_SMA, PRICE_MEDIAN, gi_260);
if (gi_460) {
if (g_irsi_796 >= 50 - gi_464 / 2 && g_irsi_796 <= gi_464 / 2 + 50) {
gi_876 = TRUE;
gi_880 = TRUE;
}
}
if (gi_452) s1_dayRange();
if (gi_492) {
li_0 = gi_928;
gi_928 = s1_direction();
if (li_0 != gi_928) {
gi_932 = li_0;
if (gi_928 == 1) gi_936 = g_datetime_264 + 3600.0 * gd_504;
}
}
if (gi_516 > 0) {
if (g_spread_284 > gi_516 * gd_296) {
if (g_spread_288 < g_spread_284) {
Print("Strategy1: Safe spread limit exceeded: spread = ", g_spread_284);
if (gi_520) Print("Strategy1: Using DayDirection filter");
}
gi_900 = TRUE;
} else gi_900 = FALSE;
}
HideTestIndicators(FALSE);
if (gi_900) {
gi_920 = gi_536;
gi_924 = gi_540;
return;
}
gi_920 = gi_528;
gi_924 = gi_532;
}
int s1_openBuyRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (!gi_876) return (0);
if (gi_900 && !gi_520) return (0);
if (gi_492) {
if (gi_928 == 2) return (0);
if (g_datetime_264 <= gi_936)
if (gi_932 == 2) return (0);
}
if (gi_512 || gi_900) {
if (g_datetime_264 - gi_280 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_280);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280);
l_shift_20 = gi_260;
}
l_iclose_8 = iClose(NULL, g_timeframe_368, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_368, l_shift_20);
if (l_iclose_0 < l_iclose_8) return (0);
}
return (s1_Buy(Ask, g_icci_828, g_irsi_796, g_irsi_820, g_ima_868, gd_420, gd_436, gi_372 * gd_296 * Point, gi_448, gi_444));
}
int s1_openSellRule() {
double l_iclose_0;
double l_iclose_8;
int l_shift_16;
int l_shift_20;
if (!gi_880) return (0);
if (gi_900 && !gi_520) return (0);
if (gi_492) {
if (gi_928 == 3) return (0);
if (g_datetime_264 <= gi_936)
if (gi_932 == 3) return (0);
}
if (gi_512 || gi_900) {
if (g_datetime_264 - gi_280 < 43200.0) {
l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280 - 86400);
l_shift_20 = iBarShift(NULL, g_timeframe_368, gi_280);
} else {
l_shift_16 = iBarShift(NULL, g_timeframe_368, gi_280);
l_shift_20 = gi_260;
}
l_iclose_8 = iClose(NULL, g_timeframe_368, l_shift_16);
l_iclose_0 = iClose(NULL, g_timeframe_368, l_shift_20);
if (l_iclose_0 > l_iclose_8) return (0);
}
return (s1_Sell(Bid, g_icci_828, g_irsi_796, g_irsi_820, g_ima_868, gd_412, gd_428, gi_372 * gd_296 * Point, gi_448, gi_444));
}
bool s1_closeBuyRule() {
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_372 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_372 * Point * gd_296, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_908 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_908 * Point * gd_296, Digits)) return (TRUE);
}
if (gi_472) {
if (g_ticket_948 != OrderTicket()) {
g_datetime_952 = OrderOpenTime();
g_ticket_948 = OrderTicket();
}
if (g_icci_828 >= 0.0 || g_irsi_796 >= 50.0) g_datetime_952 = g_datetime_264;
if (g_icci_844 < g_icci_836 && g_irsi_812 < g_irsi_804) g_datetime_952 = iTime(NULL, g_timeframe_368, gi_260);
if (g_datetime_264 - g_datetime_952 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
}
if (gi_468) {
if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_476) {
if (g_icci_828 > 0.0 && g_irsi_796 > 50.0 && OrderProfit() > 0.0) return (TRUE);
if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_484) return (TRUE);
}
}
return (FALSE);
}
bool s1_closeSellRule() {
if (Stealth || OrderTakeProfit() == 0.0) {
if (gi_372 > 0)
if (NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= NormalizeDouble(gi_372 * Point * gd_296, Digits)) return (TRUE);
}
if (OrderStopLoss() == 0.0) {
if (gi_916 > 0)
if (NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= NormalizeDouble(gi_916 * Point * gd_296, Digits)) return (TRUE);
}
if (gi_472) {
if (g_ticket_956 != OrderTicket()) {
g_datetime_960 = OrderOpenTime();
g_ticket_956 = OrderTicket();
}
if (g_icci_828 <= 0.0 || g_irsi_796 <= 50.0) g_datetime_960 = g_datetime_264;
if (g_icci_844 > g_icci_836 && g_irsi_812 > g_irsi_804) g_datetime_960 = iTime(NULL, g_timeframe_368, gi_260);
if (g_datetime_264 - g_datetime_960 > 3600.0 * gd_476 && OrderProfit() < 0.0) return (TRUE);
}
if (gi_468) {
if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_476) {
if (g_icci_828 < 0.0 && g_irsi_796 < 50.0 && OrderProfit() > 0.0) return (TRUE);
if (g_datetime_264 - OrderOpenTime() > 3600.0 * gd_484) return (TRUE);
}
}
return (FALSE);
}
int s1_openBuy() {
double ld_0 = 0;
double ld_8 = 0;
if (g_ilow_892 > 0.0) {
gi_908 = (Bid - g_ilow_892 + Point * gd_296) / Point;
if (gi_380 > 0 && gi_908 > gi_380 * gd_296) gi_908 = gi_380 * gd_296;
if (gi_908 < gi_384 * gd_296) gi_908 = gi_384 * gd_296;
} else gi_908 = gi_384 * gd_296;
if (gi_908 < g_stoplevel_292) gi_908 = g_stoplevel_292;
if (Stealth) gi_904 = gi_376 * gd_296;
else gi_904 = gi_372 * gd_296;
if (gi_904 < g_stoplevel_292) gi_904 = g_stoplevel_292;
ld_8 = NormalizeDouble(Bid - gi_908 * Point, Digits);
ld_0 = NormalizeDouble(Ask + gi_904 * Point, Digits);
return (openOrder(OP_BUY, gd_304, Ask, ld_0, ld_8, S1_Reference, gi_392, 0));
}
int s1_openSell() {
double ld_0 = 0;
double ld_8 = 0;
if (g_ihigh_884 > 0.0) {
gi_916 = (g_ihigh_884 - Ask + Point * gd_296) / Point;
if (gi_380 > 0 && gi_916 > gi_380 * gd_296) gi_916 = gi_380 * gd_296;
if (gi_916 < gi_384 * gd_296) gi_916 = gi_384 * gd_296;
} else gi_916 = gi_384 * gd_296;
if (gi_916 < g_stoplevel_292) gi_916 = g_stoplevel_292;
if (Stealth) gi_912 = gi_376 * gd_296;
else gi_912 = gi_372 * gd_296;
if (gi_912 < g_stoplevel_292) gi_912 = g_stoplevel_292;
ld_8 = NormalizeDouble(Ask + gi_916 * Point, Digits);
ld_0 = NormalizeDouble(Bid - gi_912 * Point, Digits);
return (openOrder(OP_SELL, gd_304, Bid, ld_0, ld_8, S1_Reference, gi_396, 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_904 < g_stoplevel_292) gi_904 = g_stoplevel_292;
l_ord_takeprofit_0 = NormalizeDouble(Ask + gi_904 * Point, Digits);
}
if (l_ord_stoploss_8 == 0.0) {
if (gi_908 < g_stoplevel_292) gi_908 = g_stoplevel_292;
l_ord_stoploss_8 = NormalizeDouble(Bid - gi_908 * 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_388 > 0) {
if (Bid - OrderOpenPrice() > Point * gd_296 * gi_388) {
if (OrderStopLoss() < Bid - Point * gd_296 * gi_388 || OrderStopLoss() == 0.0) {
waitForContext();
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gd_296 * gi_388, 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_912 < g_stoplevel_292) gi_912 = g_stoplevel_292;
l_ord_takeprofit_0 = NormalizeDouble(Bid - gi_912 * Point, Digits);
}
if (l_ord_stoploss_8 == 0.0) {
if (gi_916 < g_stoplevel_292) gi_916 = g_stoplevel_292;
l_ord_stoploss_8 = NormalizeDouble(Ask + gi_916 * 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 (Показано первые 50% кода (символов: 40580)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.