iCustom Marty EA Template
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «icustom_ea1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 4, предназначенный для автоматической торговли бинарными опционами на основе сигнала внешнего пользовательского индикатора, вызываемого через iCustom. Использует функции OnTick для обработки рыночных событий и OrderSend для размещения рыночных ордеров на покупку (OP_BUY) и продажу (OP_SELL). Поддерживает фильтрацию по времени суток, дням недели и минимальному интервалу между сделками.
Встроенная система управления рисками реализует мартингейл-логику с возможностью сброса лотности после серии убыточных сделок. Размер позиции корректируется в зависимости от результата последней закрытой сделки с учётом множителей прибыли и убытка, а также ограничений по минимальному и максимальному лоту биржи.
Советник отправляет торговые уведомления в лог и через системные алерты при размещении ордеров и возникновении ошибок. Настраиваемые параметры позволяют ограничить количество одновременных позиций, задать уровни стоп-лосса и тейк-профита в пунктах, а также включить или отключить звуковые оповещения.
Настройки программы
| Настройка | Описание |
|---|---|
| IndicatorShortName | Имя индикатора — Название внешнего пользовательского индикатора, сигналы которого используются для принятия торговых решений |
| MaxOpenTrades | Максимум открытых сделок — Ограничение на общее количество одновременно открытых позиций |
| BO_Expiry | Срок истечения бинарной опции — Время действия бинарной опции в минутах |
| MagicNumber | Магический номер — Идентификатор ордеров советника для фильтрации позиций |
| next open trade after time (NextOpenTradeAfterBars) | Минимум баров между сделками — Минимальное количество баров, которое должно пройти перед открытием следующей сделки |
| TakeProfit_pips | Тейк-профит в пунктах — Уровень фиксации прибыли в пунктах |
| StopLoss_pips | Стоп-лосс в пунктах — Уровень ограничения убытка в пунктах |
| time of the day (TOD_From_Hour) | Час начала торгового окна — Начальный час периода, в течение которого разрешено открытие сделок |
| time of the day (TOD_From_Min) | Минута начала торгового окна — Начальная минута периода, в течение которого разрешено открытие сделок |
| time of the day (TOD_To_Hour) | Час окончания торгового окна — Конечный час периода, в течение которого разрешено открытие сделок |
| time of the day (TOD_To_Min) | Минута окончания торгового окна — Конечная минута периода, в течение которого разрешено открытие сделок |
| MM_Martingale_Start | Начальный размер лота — Базовый размер лота для новой позиции |
| MM_Martingale_LossFactor | Множитель лота при убытке — Коэффициент увеличения лота после убыточной сделки |
| MM_Martingale_RestartLoss | Сброс лота после убытков — Включает сброс размера лота после серии убыточных сделок |
| MM_Martingale_RestartLosses | Количество убытков для сброса — Число последовательных убыточных сделок, после которых лот сбрасывается до начального значения |
| TradeMonday | Торговля в понедельник — Разрешает открытие сделок в понедельник |
| TradeTuesday | Торговля во вторник — Разрешает открытие сделок во вторник |
| TradeWednesday | Торговля в среду — Разрешает открытие сделок в среду |
| TradeThursday | Торговля в четверг — Разрешает открытие сделок в четверг |
| TradeFriday | Торговля в пятницу — Разрешает открытие сделок в пятницу |
| Audible_Alerts | Звуковые оповещения — Включает звуковые уведомления при торговых событиях |
Поиск по коду файла
#property version "1.00"
#property description "Coded JimTang"
#include <stdlib.mqh>
#include <stderror.mqh>
extern string IndicatorShortName = "super-arrow-indicator1";
extern int MaxOpenTrades = 2;
extern int BO_Expiry = 240;
int LotDigits; //initialized in OnInit
extern int MagicNumber = 847636;
extern int NextOpenTradeAfterBars = 0; //next open trade after time
extern double TakeProfit_pips = 150;
extern double StopLoss_pips = 70;
double takeprofit=0,stoploss=0;
datetime LastTradeTime = 0;
extern int TOD_From_Hour = 00; //time of the day
extern int TOD_From_Min = 00; //time of the day
extern int TOD_To_Hour = 23; //time of the day
extern int TOD_To_Min = 59; //time of the day
extern double MM_Martingale_Start = 0.1;
double MM_Martingale_ProfitFactor = 1;
extern double MM_Martingale_LossFactor = 2;
bool MM_Martingale_RestartProfit = true;
extern bool MM_Martingale_RestartLoss = true;
extern int MM_Martingale_RestartLosses = 4;
int MaxSlippage = 3; //adjusted in OnInit
extern bool TradeMonday = true;
extern bool TradeTuesday = true;
extern bool TradeWednesday = true;
extern bool TradeThursday = true;
extern bool TradeFriday = true;
bool TradeSaturday = false;
bool TradeSunday = false;
extern bool Audible_Alerts = true;
int MaxLongTrades = 1000;
int MaxShortTrades = 1000;
int MaxPendingOrders = 1000;
bool Hedging = false;
int OrderRetry = 5; //# of retries if sending order returns error
int OrderWait = 5; //# of seconds to wait if sending order returns error
double myPoint; //initialized in OnInit
bool inTimeInterval(datetime t, int TOD_From_Hour, int TOD_From_Min, int TOD_To_Hour, int TOD_To_Min)
{
string TOD = TimeToString(t, TIME_MINUTES);
string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min);
string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min);
return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0)
|| (StringCompare(TOD_From, TOD_To) > 0
&& ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59") <= 0)
|| (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0))));
}
bool SelectLastHistoryTrade()
{
int lastOrder = -1;
int total = OrdersHistoryTotal();
for(int i = total-1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
lastOrder = i;
break;
}
}
return(lastOrder >= 0);
}
double BOProfit(int ticket) //Binary Options profit
{
int total = OrdersHistoryTotal();
for(int i = total-1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if(StringSubstr(OrderComment(), 0, 2) == "BO" && StringFind(OrderComment(), "#"+ticket+" ") >= 0)
return OrderProfit();
}
return 0;
}
bool ConsecutiveLosses(int n)
{
int count = 0;
int total = OrdersHistoryTotal();
for(int i = total-1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
double orderprofit = OrderProfit();
double boprofit = BOProfit(OrderTicket());
if(orderprofit + boprofit >= 0)
break;
count++;
}
}
return(count >= n);
}
double MM_Size() //martingale / anti-martingale
{
double lots = MM_Martingale_Start;
double MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double MinLot = MarketInfo(Symbol(), MODE_MINLOT);
if(SelectLastHistoryTrade())
{
double orderprofit = OrderProfit();
double orderlots = OrderLots();
double boprofit = BOProfit(OrderTicket());
if(orderprofit + boprofit > 0 && !MM_Martingale_RestartProfit)
lots = orderlots * MM_Martingale_ProfitFactor;
else if(orderprofit + boprofit < 0 && !MM_Martingale_RestartLoss)
lots = orderlots * MM_Martingale_LossFactor;
else if(orderprofit + boprofit == 0)
lots = orderlots;
}
if(ConsecutiveLosses(MM_Martingale_RestartLosses))
lots = MM_Martingale_Start;
if(lots > MaxLot) lots = MaxLot;
if(lots < MinLot) lots = MinLot;
return(lots);
}
bool TradeDayOfWeek()
{
int day = DayOfWeek();
return((TradeMonday && day == 1)
|| (TradeTuesday && day == 2)
|| (TradeWednesday && day == 3)
|| (TradeThursday && day == 4)
|| (TradeFriday && day == 5)
|| (TradeSaturday && day == 6)
|| (TradeSunday && day == 0));
}
void myAlert(string type, string message)
{
if(type == "print")
Print(message);
else if(type == "error")
{
}
else if(type == "order")
{
Print(type+" | iCustom Marty EA Template @ "+Symbol()+","+Period()+" | "+message);
if(Audible_Alerts) Alert(type+" | iCustom Marty EA Template @ "+Symbol()+","+Period()+" | "+message);
}
else if(type == "modify")
{
}
}
int TradesCount(int type) //returns # of open trades for order type, current symbol and magic number
{
Показано первые 50% кода (символов: 7950)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.