trade_protector-1.2.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «trade_protector-1.2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для MetaTrader 4, предназначенный для мониторинга и управления открытыми позициями. Советник отслеживает текущие ордера на текущем символе и модифицирует уровни стоп-лосса и тейк-профита в соответствии с заданными параметрами. Поддерживается фиксированный начальный стоп-лосс, фиксированный трейлинг-стоп, пропорциональный трейлинг-стоп, активирующийся после достижения определённого уровня прибыли, а также механизм аварийного выхода (escape), устанавливающий тейк-профит при достижении позиции заданного убытка. Все действия записываются в лог-файлы в формате CSV.
Настройки программы
| Настройка | Описание |
|---|---|
| logging | Логирование — Уровень записи логов: 0 — без логирования, 1 — основной лог операций, 2 и выше — расширенный лог изменений стоп-лосса. |
| nInitialSL | Начальный стоп-лосс — Начальный уровень стоп-лосса в пунктах, устанавливаемый для новых позиций при отсутствии установленного стоп-лосса. |
| nTrailingStop | Фиксированный трейлинг-стоп — Расстояние трейлинг-стопа в пунктах, используемое до достижения позиции заданного уровня прибыли. |
| nPropSLThreshold | Порог пропорционального стоп-лосса — Уровень прибыли в пунктах, после активации которого включается пропорциональный трейлинг-стоп. |
| dPropSLRatio | Коэффициент пропорционального стоп-лосса — Множитель для расчёта пропорционального уровня стоп-лосса на основе текущей прибыли позиции. |
| nUseEscape | Использовать аварийный выход — Включает или отключает механизм аварийного выхода (1 — включён, 0 — выключен). |
| nEscapeLevel | Уровень аварийного выхода — Глубина убытка в пунктах, при достижении которой срабатывает механизм аварийного выхода. |
| nEscapeTP | Тейк-профит аварийного выхода — Уровень тейк-профита в пунктах, устанавливаемый при срабатывании аварийного выхода; может быть отрицательным. |
| nSleep | Задержка после нового бара — Время задержки в миллисекундах после обработки нового бара перед началом работы. |
| nSlip | Максимальный проскальзывание — Допустимое максимальное отклонение цены при исполнении ордеров в пунктах. |
Поиск по коду файла
extern int logging=1;
extern int nInitialSL=15;
extern int nTrailingStop=35;
extern int nPropSLThreshold=12;
extern double dPropSLRatio=0.35;
extern int nUseEscape=0;
extern int nEscapeLevel=0;
extern int nEscapeTP=35;
extern int nSleep=0;
extern int nSlip = 2;
double dEscapeLevel;
double dInitialSL;
double dTrailingStop;
double dEscapeTP;
double dPropSLThreshold;
double dTakeProfit;
double dTakeProfitMin;
double dTakeProfitMax;
double dTakeProfitT;
int nBars, nSpread, nDigits, nBarsSameTrend, nCloseErr, nOpenErr, i;
double dDeltaPrice, dnBid, dnAsk, dSpread, dStopLevel, dMax, dMin, dMacdDelta, dMacd1, dMacd2;
int nTakeProfitMax=100;
int nBarsSinceTrade=0;
string strExpert;
int init ()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
void ModifyOrders()
{
double dSl;
double arrSL[4];
double arrTP[4];
dTrailingStop = NormalizeDouble(nTrailingStop * Point,4);
dEscapeTP = NormalizeDouble(nEscapeTP * Point,4);
dPropSLThreshold = nPropSLThreshold * Point;
dSpread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
dStopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * Point;
dInitialSL = NormalizeDouble(nInitialSL * Point,4);
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
{
OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() ) //(OrderMagicNumber() == nMagic)
{
if(OrderType() == OP_BUY)
{
dSl=OrderStopLoss();
if( dSl == 0 )
if( dInitialSL != 0)
dSl = dnAsk - dInitialSL;
ArrayResize(arrSL,5);
ArrayInitialize(arrSL,dSl);
LogSL("OP_BUY-check",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);
if( dPropSLRatio > 0 )
{
if( Bid >= (OrderOpenPrice() + dPropSLThreshold) )
{
dSl = NormalizeDouble( OrderOpenPrice() + dPropSLRatio*(Bid - OrderOpenPrice()) - dSpread,4 );
if(OrderStopLoss() < dSl)
arrSL[1]=dSl;
}
else
{
if(dTrailingStop != 0)
arrSL[2]=dnBid - dTrailingStop;
}
}
dSl=arrSL[ArrayMaximum(arrSL)];
LogSL("OP_BUY - max",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);
if( dSl > OrderStopLoss() || OrderStopLoss() == 0 )
{
OrderModify(OrderTicket(), OrderOpenPrice(),
dSl, OrderTakeProfit(), 0, Yellow);
Log("Buy - modify", OrderOpenPrice(), dSl, OrderTakeProfit());
}
Показано первые 50% кода (символов: 4346)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.