accelerator trailing tp&sl.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «accelerator trailing tp&sl.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 4, реализующий автоматическую торговлю с трейлинг-стопом и управлением рисками. Использует комбинацию технических индикаторов — скользящих средних, импульса и MACD — для формирования сигналов на вход в длинные и короткие позиции. Поддерживает фиксацию прибыли в денежном и процентном выражении, трейлинг-стоп с денежными параметрами, а также управление рисками на уровне средств счёта.
Советник включает функцию перемещения стоп-лосса в безубыток при достижении заданного уровня прибыли, а также стратегию выхода из сделок по сигналу импульса. Позволяет ограничивать максимальное количество одновременных сделок и контролировать риск через параметры лотности с экспоненциальным увеличением при убытках. Перед открытием и модификацией ордеров выполняются проверки свободных средств, стоп-уровней платформы и допустимого объёма.
Настройки программы
| Настройка | Описание |
|---|---|
| Use_TP_In_Money | Фиксация прибыли в деньгах — Включает или выключает автоматическое закрытие всех сделок при достижении заданной суммы прибыли в денежном выражении |
| TP_In_Money | Сумма прибыли для фиксации — Целевая сумма прибыли в денежном выражении, при достижении которой все сделки закрываются |
| Use_TP_In_percent | Фиксация прибыли в процентах — Включает или выключает автоматическое закрытие всех сделок при достижении заданного процента прибыли от баланса |
| TP_In_Percent | Процент прибыли для фиксации — Процент от текущего баланса, при достижении которого все сделки закрываются |
| ——————————————————————————————————————————— (txt32) | Разделитель группы — Текстовый разделитель, обозначающий начало группы настроек трейлинг-стопа в деньгах |
| Enable_Trailing (Enable_Trailing) | Включить трейлинг-стоп — Активирует или деактивирует функцию трейлинг-стопа для открытых позиций |
| Take Profit In Money (in current currency) (Take_Profit_Money) | Прибыль для трейлинга в деньгах — Целевая сумма прибыли в денежном выражении, используемая при расчёте трейлинг-стопа |
| Stop Loss In Money(in current currency) (Stop_Loss_Money) | Убыток для трейлинга в деньгах — Допустимый размер убытка в денежном выражении, используемый при расчёте трейлинг-стопа |
| Enable Exit strategy (Exit) | Включить стратегию выхода — Активирует закрытие сделок по сигналу импульса на основе MACD при наличии открытых позиций |
| IncreaseFactor (IncreaseFactor) | Множитель увеличения лота — Коэффициент, определяющий скорость увеличения размера лота при последовательных убытках |
| Num.Of Candles For Divergence (CandlesToRetrace) | Свечей для расчёта дивергенции — Количество свечей, используемое для анализа отката и расчёта условий входа |
| Lots size (Lots) | Начальный размер лота — Базовый размер лота для открытия новых сделок |
| Stop Loss (Stop_Loss) | Стоп-лосс в пунктах — Расстояние стоп-лосса от цены входа в пунктах |
| Lots size Exponent (LotExponent) | Показатель степени лота — Степень, используемая для расчёта размера лота с учётом количества открытых сделок |
| MagicNumber (MagicNumber) | Магический номер — Уникальный идентификатор ордеров советника для их фильтрации и управления |
| TakeProfit (Take_Profit) | Тейк-профит в пунктах — Расстояние тейк-профита от цены входа в пунктах |
| FastMA (FastMA) | Период быстрой MA — Период быстрой скользящей средней, используемой для определения направления тренда |
| SlowMA (SlowMA) | Период медленной MA — Период медленной скользящей средней, используемой для определения направления тренда |
| Momentum_Sell (Mom_Sell) | Порог импульса для продажи — Значение импульса, ниже которого считается сигнал на открытие короткой позиции |
| Momentum_Buy (Mom_Buy) | Порог импульса для покупки — Значение импульса, ниже которого считается сигнал на открытие длинной позиции |
| Use Equity Stop (UseEquityStop) | Использовать остановку по средствам — Включает или выключает автоматическое закрытие всех сделок при превышении допустимого риска средств |
| Total Equity Risk (TotalEquityRisk) | Максимальный риск средств — Максимальный допустимый процент убытка от средств счёта, при превышении которого происходит закрытие всех позиций |
| Max_Trades | Максимум сделок — Максимальное количество одновременно открытых сделок, разрешённых советником |
| TrailingStop (TrailingStop) | Трейлинг-стоп в пунктах — Расстояние трейлинг-стопа от текущей цены в пунктах |
| Enable "no loss" (USEMOVETOBREAKEVEN) | Перемещение в безубыток — Включает или выключает автоматическое перемещение стоп-лосса в точку безубытка |
| When to move break even (WHENTOMOVETOBE) | Уровень для перехода в безубыток — Прибыль в пунктах, при достижении которой стоп-лосс перемещается в точку входа |
| How much pips to move sl (PIPSTOMOVESL) | Пункты для сдвига стоп-лосса — Расстояние в пунктах, на которое стоп-лосс сдвигается от точки безубытка при переходе в безубыток |
Поиск по коду файла
#property version "1.00"
#property strict
extern bool Use_TP_In_Money=false;
extern double TP_In_Money=10;
extern bool Use_TP_In_percent=false;
extern double TP_In_Percent=10;
input string txt32 = "------------[Money Trailing Stop]---------------"; //———————————————————————————————————————————
input bool Enable_Trailing = true; //Enable_Trailing
input double Take_Profit_Money = 40.0; //Take Profit In Money (in current currency)
input double Stop_Loss_Money = 10; //Stop Loss In Money(in current currency)
extern bool Exit=false;//Enable Exit strategy
extern double IncreaseFactor=0.001; //IncreaseFactor
extern int CandlesToRetrace=10; //Num.Of Candles For Divergence
extern double Lots=0.01; //Lots size
extern double Stop_Loss=20; //Stop Loss
extern double LotExponent = 1.44; //Lots size Exponent
extern int MagicNumber=1234; //MagicNumber
input double Take_Profit=50; //TakeProfit
extern int FastMA=6; //FastMA
extern int SlowMA=85; //SlowMA
extern double Mom_Sell=0.3; //Momentum_Sell
extern double Mom_Buy=0.3; //Momentum_Buy
input bool UseEquityStop = true; //Use Equity Stop
input double TotalEquityRisk = 1.0; //Total Equity Risk
input int Max_Trades=10;
extern double TrailingStop=40; //TrailingStop
input bool USEMOVETOBREAKEVEN=true;//Enable "no loss"
input double WHENTOMOVETOBE=30; //When to move break even
input double PIPSTOMOVESL=30; //How much pips to move sl
int err;
int total=0;
double
Lot,Dmax,Dmin,// Amount of lots in a selected order
Lts, // Amount of lots in an opened order
Min_Lot, // Minimal amount of lots
Step, // Step of lot size change
Free, // Current free margin
One_Lot, // Price of one lot
Price, // Price of a selected order,
pips,
MA_1,MA_2,MACD_SIGNAL;
int Type,freeze_level,Spread;
double priceopen,stoploss,takeprofit;
int orderticket;
int
Period_MA_2, Period_MA_3, // Calculation periods of MA for other timefr.
Period_MA_02, Period_MA_03, // Calculation periods of supp. MAs
K2,K3,T,L;
int INDEX2=0;
double PROFIT_SUM1=0;
double PROFIT_SUM2=0;
double AccountEquityHighAmt,PrevEquity;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick(void)
{
// код доступен только после оплаты
}
void Trail1()
{
total=OrdersTotal();
for(int cnt=0; cnt<total; cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber()!=MagicNumber)
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>pips*TrailingStop)
{
if(OrderStopLoss()<Bid-pips*TrailingStop)
{
RefreshRates();
stoploss=Bid-(pips*TrailingStop);
takeprofit=OrderTakeProfit();
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips)
stoploss=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)
if(CheckStopLoss_Takeprofit(OP_BUY,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(pips*TrailingStop))
{
if((OrderStopLoss()>(Ask+pips*TrailingStop)) || (OrderStopLoss()==0))
{
RefreshRates();
stoploss=Ask+(pips*TrailingStop);
takeprofit=OrderTakeProfit();
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips)
stoploss=StopLevel*pips;
if(takeprofit<StopLevel*pips)
takeprofit=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)
if(CheckStopLoss_Takeprofit(OP_SELL,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
}
void MOVETOBREAKEVEN()
{
for(int b=OrdersTotal()-1; b>=0; b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(Bid-OrderOpenPrice()>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()>OrderStopLoss())
if(CheckStopLoss_Takeprofit(OP_SELL,OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit()))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit()))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print("eror");
}
for(int s=OrdersTotal()-1; s>=0; s--)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_SELL)
if(OrderOpenPrice()-Ask>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()<OrderStopLoss())
if(CheckStopLoss_Takeprofit(OP_SELL,OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit()))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit()))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print("eror");
}
}
double NDTP(double val)
{
RefreshRates();
double SPREAD=MarketInfo(Symbol(),MODE_SPREAD);
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(val<StopLevel*pips+SPREAD*pips)
val=StopLevel*pips+SPREAD*pips;
return(NormalizeDouble(val, Digits));
}
double ND(double val)
{
return(NormalizeDouble(val, Digits));
}
bool OrderModifyCheck(int ticket,double price,double sl,double tp)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
bool PriceOpenChanged=true;
int type=OrderType();
if(!(type==OP_BUY || type==OP_SELL))
{
PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
}
bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);
if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
return(true); // order can be modified
else
PrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f",
ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
return(false); // no point in modifying
}
bool CheckStopLoss_Takeprofit(ENUM_ORDER_TYPE type,double SL,double TP)
{
int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
if(stops_level!=0)
{
PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must"+Показано первые 50% кода (символов: 20816)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.