ENGULFING
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «engulfing.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
ENGULFING — торговый советник для MetaTrader 4, который анализирует ценовые данные и открывает ордера BUY/SELL на основании совпадения нескольких технических индикаторов: скользящих средних (LWMA), полос Боллинджера, MACD, импульса (Momentum) и фракталов. Советник проверяет наличие новых свечей и корректность параметров перед каждым торговым действием. При недостатке средств или некорректных настройках (например, менее 100 баров на графике или TakeProfit менее 10) работа блокируется.
Советник поддерживает управление рисками: автоматический расчёт оптимального объёма лота с учётом свободного маржинала, коэффициента риска и истории убыточных сделок. Доступны механизмы перевода ордеров в безубыток и трейлинг-стоп, которые работают в зависимости от соответствующих настроек. Перед модификацией ордеров выполняется проверка уровней стоп-лосса и тейк-профита с учётом минимального расстояния и заморозки.
Торговые операции выполняются через стандартные функции MetaTrader 4: OrderSend для открытия позиций, OrderModify для изменения уровней и OrderClose для закрытия. Советник фильтрует ордера по символу и магическому числу, что позволяет использовать несколько экземпляров на одном счёте. Все расчёты уровней нормализуются по точности инструмента.
Настройки программы
| Настройка | Описание |
|---|---|
| USEMOVETOBREAKEVEN | Включает или отключает функцию перевода ордеров в безубыток (move to breakeven). |
| WHENTOMOVETOBE | Прибыль в пипсах, при достижении которой ордер переводится в безубыток. |
| PIPSTOMOVESL | Количество пипсов для сдвига стоп-лосса при переводе ордера в безубыток. |
| Lots | Размер лота по умолчанию, используемый при расчёте оптимального объёма позиции. |
| MaximumRisk | Максимальный риск в процентах от свободного маржинала, используемый для расчёта размера лота. |
| DecreaseFactor | Коэффициент уменьшения лота после серии убыточных сделок. При значении больше нуля лот снижается в зависимости от количества убыточных ордеров в истории. |
| TrailingStop | Расстояние в пипсах для трейлинг-стопа. При значении больше нуля советник автоматически перемещает стоп-лосс вслед за ценой. |
| Stop_Loss | Стоп-лосс в пипсах, задаваемый при открытии ордера. |
| MagicNumber | Магическое число для идентификации ордеров, открытых данным советником. |
| TakeProfit | Тейк-профит в пипсах, задаваемый при открытии ордера. При значении менее 10 советник блокирует работу. |
| FastMA | Период быстрой скользящей средней (LWMA), используемой для определения направления. |
| SlowMA | Период медленной скользящей средней (LWMA), используемой совместно с быстрой для определения направления. |
| Distance | Расстояние в пипсах между скользящими средними для допуска к открытию позиции. |
| Mom_Sell | Пороговое значение импульса (Momentum) для допуска к открытию короткой (SELL) позиции. |
| Mom_Buy | Пороговое значение импульса (Momentum) для допуска к открытию длинной (BUY) позиции. |
Поиск по коду файла
#property version "1.00"
#property strict
extern bool USEMOVETOBREAKEVEN=true;//Enable "no loss"
extern double WHENTOMOVETOBE=10; //When to move break even
extern double PIPSTOMOVESL=5; //How much pips to move sl
extern double Lots=0.01; //Lots size
input double MaximumRisk =0.02;
input double DecreaseFactor=3;
extern double TrailingStop=40; //TrailingStop
extern double Stop_Loss=20; //Stop Loss
extern int MagicNumber=1234; //MagicNumber
input double TakeProfit=50; //TakeProfit
extern int FastMA=6; //FastMA
extern int SlowMA=85; //SlowMA
extern double Distance=5; //Distance
extern double Mom_Sell=0.3; //Momentum_Sell
extern double Mom_Buy=0.3; //Momentum_Buy
bool FractalsUp=false;
bool FractalsDown=false;
double FractalsUpPrice=0;
double FractalsDownPrice=0;
int FractalsLimit=200;
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,MA_3,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;
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(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);
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,Bid-pips*TrailingStop,OrderTakeProfit()))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),Bid-pips*TrailingStop,OrderTakeProfit()))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
Показано первые 50% кода (символов: 13407)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.