Smart_Algoritm
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smart_algoritm_kod.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Smart_Algoritm — это торговый советник для MetaTrader 4, автоматизирующий открытие и управление позициями на семи валютных парах. Советник обрабатывает событие OnTick, рассчитывает лоты в двух режимах (фиксированный или зависящий от баланса) и размещает рыночные и отложенные ордера через стандартный торговый API MetaTrader 4.
В состав входят модули трейлинг-стопа, управления просадками и модификации отложенных ордеров. Система просадок анализирует прибыль/убыток открытых позиций и при достижении заданного порога закрывает убыточные сделки для ограничения убытков. Трейлинг-стоп периодически перемещает стоп-лоссы в пользу позиции.
Все торговые операции идентифицируются магическим числом Magic, а параметры слипажа, дистанций и таймфреймов задаются через пользовательские настройки. Советник отображает на графике информацию о счёте при включённом параметре Info.
Настройки программы
| Настройка | Описание |
|---|---|
| t0 | Описание режима расчёта лота: постоянный или зависящий от баланса. |
| ModeLot | Режим расчёта лота: 0 — фиксированный лот (LotPost), 1 — лот рассчитывается на основе баланса и LotProc. |
| LotPost | Фиксированный размер лота при режиме ModeLot = 0 (постоянный лот). |
| LotProc | Процент от баланса, используемый для расчёта размера лота при режиме ModeLot = 1 (лота зависят от баланса). |
| t3 | Описание настроек системы управления просадками. |
| Level | Количество позиций, учитываемых при расчёте совокупного убытка для системы управления просадками. |
| Max | Коэффициент от баланса, задающий порог совокупного убытка для принудительного закрытия позиций в системе управления просадками. |
| STOPmax | Коэффициент от баланса, задающий порог убытка для полного закрытия всех позиций советника. |
| t5 | Описание настроек трейлинг-стопа. |
| Tral | Расстояние в пунктах от точки безубыточности, после которого активируется трейлинг-стоп. |
| TralStep | Шаг в пунктах для перемещения стоп-лосса при работе трейлинг-стопа. |
| t6 | Описание настроек доливок (дополнительных ордеров). |
| Lim | Основание степени для расчёта размера лота при увеличении количества открытых позиций по символу. |
| Step | Дистанция в пунктах от текущей цены для размещения рыночных ордеров при достижении условий открытия. |
| t7 | Описание настроек отложенных ордеров. |
| Modify | Интервал в минутах между допустимыми модификациями отложенных ордеров. |
| Dist | Дистанция в пунктах от текущей цены для размещения и модификации отложенных ордеров (BuyLimit, SellLimit, BuyStop, SellStop). |
| Use_Modyfy | Переключатель, включающий автоматическую модификацию отложенных ордеров при отсутствии открытых позиций по символу. |
| Use_Limit | Переключатель, включающий размещение отложенных ордеров BuyLimit и SellLimit при отсутствии открытых позиций. |
| Use_Stop | Переключатель, включающий размещение отложенных ордеров BuyStop и SellStop при отсутствии открытых позиций. |
| t8 | Описание настроек торговых пар. |
| P1 | Символ первой торговой пары (по умолчанию EURUSD). |
| P2 | Символ второй торговой пары (по умолчанию GBPUSD). |
| P3 | Символ третьей торговой пары (по умолчанию USDCHF). |
| P4 | Символ четвёртой торговой пары (по умолчанию EURGBP). |
| P5 | Символ пятой торговой пары (по умолчанию USDCAD). |
| P6 | Символ шестой торговой пары (по умолчанию GBPCHF). |
| P7 | Символ седьмой торговой пары (по умолчанию NZDUSD). |
| t9 | Описание дополнительных мелких настроек. |
| Slip | Максимально допустимое отклонение цены исполнения от запрашиваемой цены (в пунктах). |
| Magic | Магическое число для идентификации ордеров, открытых советником, на торговом счёте. |
| Name | Комментарий, присваиваемый ордерам при их открытии через торговый API. |
| Info | Переключатель отображения информации о счёте (брокер, баланс, свободные средства, номер счёта) на графике через функцию Comment. |
Поиск по коду файла
#property strict
input string t0 = "Лоты 0 - постоянный, 1 - зависит от баланса";
input int ModeLot = 1;
input double LotPost = 1.0;
input double LotProc = 2.0;
input string t3 = "Система выхода из просадок";
input int Level = 1;
input double Max = 0.5;
input double STOPmax = 2.0;
input string t5 = "Настройки Трейлинг стопа";
input int Tral = 250;
input int TralStep = 0;
input string t6 = "Настройки доливок";
input double Lim = 2.0;
input int Step = 500;
input string t7 = "Настройки отложек";
input int Modify = 60;
input int Dist = 250;
input bool Use_Modyfy = TRUE;
input bool Use_Limit = TRUE;
input bool Use_Stop = FALSE;
input string t8 = "Настройки пар";
input string P1 = "EURUSD";
input string P2 = "GBPUSD";
input string P3 = "USDCHF";
input string P4 = "EURGBP";
input string P5 = "USDCAD";
input string P6 = "GBPCHF";
input string P7 = "NZDUSD";
input string t9 = "Мелкие настройки";
input int Slip = 100;
input int Magic = 123;
input string Name = "Smart_Algoritm";
input bool Info = TRUE;
int G_datetime_288;
int G_datetime_292;
int G_datetime_296;
int G_datetime_300;
int Gi_304;
double Gd_308;
double G_lots_316;
int Li_8;
int ticket;
bool modtic, closetic, deltic;
int OnInit()
{
// код доступен только после оплаты
}
void OnTick()
{
// код доступен только после оплаты
}
double lots_0 = 0;
if(ModeLot == 0) lots_0 = LotPost;
if(ModeLot == 1) lots_0 = NormalizeDouble(AccountBalance() / 100.0 * LotProc / (100.0 * MarketInfo(Symbol(), MODE_TICKVALUE) * Gi_304), 2);
if(lots_0 < MarketInfo(Symbol(), MODE_MINLOT)) lots_0 = MarketInfo(Symbol(), MODE_MINLOT);
if(MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) Li_8 = 2;
if(MarketInfo(Symbol(), MODE_LOTSTEP) == 0.1) Li_8 = 1;
if(MarketInfo(Symbol(), MODE_LOTSTEP) == 1.0) Li_8 = 0;
if(Info)
{
Comment(""
+ "\n"
+ "Smart_Algoritm"
+ "\n"
+ "________________________________"
+ "\n"
+ "Брокер: " + AccountCompany()
+ "\n"
+ "Время брокера: " + TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS)
+ "\n"
+ "________________________________"
+ "\n"
+ "Счёт: " + AccountName()
+ "\n"
+ "Номер счёт " + (string)AccountNumber()
+ "\n"
+ "_______________________________"
+ "\n"
+ "Баланс: " + DoubleToStr(AccountBalance(), 2)
+ "\n"
+ "Свободные средства: " + DoubleToStr(AccountEquity(), 2)
+ "\n"
+"_______________________________");
}
double Ld_12 = AccountBalance() / 100.0 * STOPmax;
if(f0_2(-1) >= Ld_12 && Ld_12 != 0.0) f0_9(Magic, -1);
Gd_308 = AccountBalance() / 100.0 * Max;
f0_5();
if(f0_8(-1) == 1) f0_12(Magic, P1);
if(f0_3(-1) == 1) f0_12(Magic, P2);
if(f0_10(-1) == 1) f0_12(Magic, P3);
if(f0_6(-1) == 1) f0_12(Magic, P4);
if(f0_15(-1) == 1) f0_12(Magic, P5);
if(f0_4(-1) == 1) f0_12(Magic, P6);
if(f0_0(-1) == 1) f0_12(Magic, P7);
if(f0_8(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P1, MODE_ASK) + Step * MarketInfo(P1, MODE_POINT), Digits) <= f0_14(P1))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_8(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P1, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P1, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_8(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P1, MODE_BID) - Step * MarketInfo(P1, MODE_POINT), Digits) >= f0_1(P1))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_8(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P1, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P1, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_3(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P2, MODE_ASK) + Step * MarketInfo(P2, MODE_POINT), Digits) <= f0_14(P2))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_3(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P2, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P2, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_3(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P2, MODE_BID) - Step * MarketInfo(P2, MODE_POINT), Digits) >= f0_1(P2))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_3(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P2, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P2, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_10(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P3, MODE_ASK) + Step * MarketInfo(P3, MODE_POINT), Digits) <= f0_14(P3))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_10(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P3, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P3, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_10(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P3, MODE_BID) - Step * MarketInfo(P3, MODE_POINT), Digits) >= f0_1(P3))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_10(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P3, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P3, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_6(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P4, MODE_ASK) + Step * MarketInfo(P4, MODE_POINT), Digits) <= f0_14(P4))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_6(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P4, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P4, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_6(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P4, MODE_BID) - Step * MarketInfo(P4, MODE_POINT), Digits) >= f0_1(P4))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_6(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P4, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P4, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_15(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P5, MODE_ASK) + Step * MarketInfo(P5, MODE_POINT), Digits) <= f0_14(P5))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_15(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P5, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P5, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_15(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P5, MODE_BID) - Step * MarketInfo(P5, MODE_POINT), Digits) >= f0_1(P5))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_15(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P5, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P5, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_4(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P6, MODE_ASK) + Step * MarketInfo(P6, MODE_POINT), Digits) <= f0_14(P6))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_4(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P6, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P6, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_4(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P6, MODE_BID) - Step * MarketInfo(P6, MODE_POINT), Digits) >= f0_1(P6))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_4(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P6, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P6, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_0(OP_BUY) > 0 && NormalizeDouble(MarketInfo(P7, MODE_ASK) + Step * MarketInfo(P7, MODE_POINT), Digits) <= f0_14(P7))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_0(OP_BUY)) * lots_0, Li_8);
ticket = OrderSend(P7, OP_BUY, G_lots_316, NormalizeDouble(MarketInfo(P7, MODE_ASK), Digits), Slip, 0, 0, Name, Magic, 0, Green);
}
if(f0_0(OP_SELL) > 0 && NormalizeDouble(MarketInfo(P7, MODE_BID) - Step * MarketInfo(P7, MODE_POINT), Digits) >= f0_1(P7))
{
G_lots_316 = NormalizeDouble(MathPow(Lim, f0_0(OP_SELL)) * lots_0, Li_8);
ticket = OrderSend(P7, OP_SELL, G_lots_316, NormalizeDouble(MarketInfo(P7, MODE_BID), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(f0_8(OP_BUY) > 0) f0_13(Magic, P1);
if(f0_8(OP_SELL) > 0) f0_11(Magic, P1);
if(f0_3(OP_BUY) > 0) f0_13(Magic, P2);
if(f0_3(OP_SELL) > 0) f0_11(Magic, P2);
if(f0_10(OP_BUY) > 0) f0_13(Magic, P3);
if(f0_10(OP_SELL) > 0) f0_11(Magic, P3);
if(f0_6(OP_BUY) > 0) f0_13(Magic, P4);
if(f0_6(OP_SELL) > 0) f0_11(Magic, P4);
if(f0_15(OP_BUY) > 0) f0_13(Magic, P5);
if(f0_15(OP_SELL) > 0) f0_11(Magic, P5);
if(f0_4(OP_BUY) > 0) f0_13(Magic, P6);
if(f0_4(OP_SELL) > 0) f0_11(Magic, P6);
if(f0_0(OP_BUY) > 0) f0_13(Magic, P7);
if(f0_0(OP_SELL) > 0) f0_11(Magic, P7);
if(Use_Modyfy && f0_8(OP_BUY) == 0 && f0_8(OP_SELL) == 0) f0_7(P1);
if(Use_Modyfy && f0_3(OP_BUY) == 0 && f0_3(OP_SELL) == 0) f0_7(P2);
if(Use_Modyfy && f0_10(OP_BUY) == 0 && f0_10(OP_SELL) == 0) f0_7(P3);
if(Use_Modyfy && f0_6(OP_BUY) == 0 && f0_6(OP_SELL) == 0) f0_7(P4);
if(Use_Modyfy && f0_15(OP_BUY) == 0 && f0_15(OP_SELL) == 0) f0_7(P5);
if(Use_Modyfy && f0_4(OP_BUY) == 0 && f0_4(OP_SELL) == 0) f0_7(P6);
if(Use_Modyfy && f0_0(OP_BUY) == 0 && f0_0(OP_SELL) == 0) f0_7(P7);
if(Use_Limit) {
if(f0_8(OP_BUY) == 0 && f0_8(OP_SELL) == 0 && f0_8(OP_BUYLIMIT) == 0) ticket = OrderSend(P1, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P1, MODE_ASK) - Dist * MarketInfo(P1, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_8(OP_SELL) == 0 && f0_8(OP_BUY) == 0 && f0_8(OP_SELLLIMIT) == 0) ticket = OrderSend(P1, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P1, MODE_BID) + Dist * MarketInfo(P1, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_3(OP_BUY) == 0 && f0_3(OP_SELL) == 0 && f0_3(OP_BUYLIMIT) == 0) ticket = OrderSend(P2, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P2, MODE_ASK) - Dist * MarketInfo(P2, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_3(OP_SELL) == 0 && f0_3(OP_BUY) == 0 && f0_3(OP_SELLLIMIT) == 0) ticket = OrderSend(P2, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P2, MODE_BID) + Dist * MarketInfo(P2, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_10(OP_BUY) == 0 && f0_10(OP_SELL) == 0 && f0_10(OP_BUYLIMIT) == 0) ticket = OrderSend(P3, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P3, MODE_ASK) - Dist * MarketInfo(P3, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_10(OP_SELL) == 0 && f0_10(OP_BUY) == 0 && f0_10(OP_SELLLIMIT) == 0) ticket = OrderSend(P3, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P3, MODE_BID) + Dist * MarketInfo(P3, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_6(OP_BUY) == 0 && f0_6(OP_SELL) == 0 && f0_6(OP_BUYLIMIT) == 0) ticket = OrderSend(P4, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P4, MODE_ASK) - Dist * MarketInfo(P4, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_6(OP_SELL) == 0 && f0_6(OP_BUY) == 0 && f0_6(OP_SELLLIMIT) == 0) ticket = OrderSend(P4, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P4, MODE_BID) + Dist * MarketInfo(P4, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_15(OP_BUY) == 0 && f0_15(OP_SELL) == 0 && f0_15(OP_BUYLIMIT) == 0) ticket = OrderSend(P5, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P5, MODE_ASK) - Dist * MarketInfo(P5, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_15(OP_SELL) == 0 && f0_15(OP_BUY) == 0 && f0_15(OP_SELLLIMIT) == 0) ticket = OrderSend(P5, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P5, MODE_BID) + Dist * MarketInfo(P5, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_4(OP_BUY) == 0 && f0_4(OP_SELL) == 0 && f0_4(OP_BUYLIMIT) == 0) ticket = OrderSend(P6, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P6, MODE_ASK) - Dist * MarketInfo(P6, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_4(OP_SELL) == 0 && f0_4(OP_BUY) == 0 && f0_4(OP_SELLLIMIT) == 0) ticket = OrderSend(P6, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P6, MODE_BID) + Dist * MarketInfo(P6, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
if(f0_0(OP_BUY) == 0 && f0_0(OP_SELL) == 0 && f0_0(OP_BUYLIMIT) == 0) ticket = OrderSend(P7, OP_BUYLIMIT, lots_0, NormalizeDouble(MarketInfo(P7, MODE_ASK) - Dist * MarketInfo(P7, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_0(OP_SELL) == 0 && f0_0(OP_BUY) == 0 && f0_0(OP_SELLLIMIT) == 0) ticket = OrderSend(P7, OP_SELLLIMIT, lots_0, NormalizeDouble(MarketInfo(P7, MODE_BID) + Dist * MarketInfo(P7, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Red);
}
if(Use_Stop)
{
if(f0_8(OP_BUY) == 0 && f0_8(OP_SELL) == 0 && f0_8(OP_BUYSTOP) == 0) ticket = OrderSend(P1, OP_BUYSTOP, lots_0, NormalizeDouble(MarketInfo(P1, MODE_BID) + Dist * MarketInfo(P1, MODE_POINT), Digits), Slip, 0, 0, Name, Magic, 0, Green);
if(f0_8(OP_SELL) == 0 && f0_8(OP_BUY) == 0 && f0_8(OP_SELLSTOP) == 0) ticket = OrderSend(P1, OP_SELLSTOP, lots_0, NormalizeDoubleПоказано первые 50% кода (символов: 20543)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.