MA_Angle_EA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ma_angle_eav3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MA_Angle_EA — это торговый советник для MetaTrader 4, написанный на MQL4. Он анализирует направление и наклон скользящей средней и на основе этого принимает решения об открытии и закрытии позиций. Советник работает по барам: новые решения принимаются только после закрытия очередного бара, а в каждый момент времени по одному символу допускается не более одной открытой позиции.
Советник поддерживает несколько типов скользящих средних (SMA, EMA, SMMA, LWMA и LSMA) и различные варианты применяемой цены. Для входа в рынок используется порог угла наклона средней, для выхода — отдельный порог. Управление позицией включает настраиваемые стоп-лосс и тейк-профит, а также несколько режимов трейлинг-стопа: немедленный, отложенный, трёхуровневый и режим перевода стопа в безубыток с фиксацией прибыли.
Имеется блок управления капиталом: можно задавать фиксированный лот либо рассчитывать размер позиции как процент от средств счёта с учётом максимального лота и особенностей брокера. Дополнительно реализован фильтр торговых часов по азиатской, европейской и нью-йоркской сессиям, а также отладочный вывод сообщений в журнал.
Настройки программы
| Настройка | Описание |
|---|---|
| Change to true to allow print (Debug) | Отладка — Включает вывод отладочных сообщений в журнал. |
| MA_Period | Период MA — Период скользящей средней. |
| m | Заголовок типов MA — Заголовок группы настроек типов скользящей средней. |
| m0 | Пояснение SMA — Пояснение: значение 0 соответствует SMA. |
| m1 | Пояснение EMA — Пояснение: значение 1 соответствует EMA. |
| m2 | Пояснение SMMA — Пояснение: значение 2 соответствует SMMA. |
| m3 | Пояснение LWMA — Пояснение: значение 3 соответствует LWMA. |
| m4 | Пояснение LSMA — Пояснение: значение 4 соответствует LSMA. |
| MA_Type | Тип MA — Тип скользящей средней: SMA, EMA, SMMA, LWMA или LSMA. |
| p | Заголовок применяемой цены — Заголовок группы настроек применяемой цены. |
| p0 | Пояснение close — Пояснение: значение 0 соответствует цене закрытия. |
| p1 | Пояснение open — Пояснение: значение 1 соответствует цене открытия. |
| p2 | Пояснение high — Пояснение: значение 2 соответствует максимуму. |
| p3 | Пояснение low — Пояснение: значение 3 соответствует минимуму. |
| p4 | Пояснение median — Пояснение: значение 4 соответствует медианной цене. |
| p5 | Пояснение typical — Пояснение: значение 5 соответствует типичной цене. |
| p6 | Пояснение weighted — Пояснение: значение 6 соответствует взвешенной цене. |
| MA_AppliedPrice | Применяемая цена MA — Тип применяемой цены для расчёта скользящей средней. |
| What size angle to trigger a trade (EntryAngle_Threshold) | Порог угла входа — Порог угла наклона скользящей средней для открытия сделки. |
| ExitAngle_Threshold | Порог угла выхода — Порог угла наклона скользящей средней для закрытия сделки. |
| PrevMAShift | Сдвиг предыдущей MA — Сдвиг предыдущего значения скользящей средней в барах. |
| CurMAShift | Сдвиг текущей MA — Сдвиг текущего значения скользящей средней в барах. |
| mm | Заголовок управления капиталом — Заголовок группы настроек управления капиталом. |
| Lots | Размер лота — Фиксированный размер лота при отключённом управлении капиталом. |
| MaxLot | Максимальный лот — Максимально допустимый размер лота при управлении капиталом. |
| Change to false to shutdown money management controls. (UseMoneyManagement) | Управление капиталом — Включает управление капиталом для расчёта размера позиции. |
| BrokerIsIBFX | Брокер IBFX — Указывает, что брокер — IBFX, и включает соответствующий расчёт размера позиции. |
| mm1 | Пояснение по типу счёта — Пояснение о выборе мини- или микро-счёта для стандартного счёта. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска — Процент от средств счёта, используемый для расчёта размера позиции. |
| BrokerPermitsFractionalLots | Дробные лоты брокера — Разрешает использование дробных лотов при расчёте размера позиции. |
| Maximum pips willing to lose per position. (StopLoss) | Стоп-лосс — Максимальный убыток в пунктах на одну позицию. |
| TakeProfit | Тейк-профит — Уровень тейк-профита в пунктах. |
| Possible fix for not getting filled or closed (Slippage) | Проскальзывание — Допустимое проскальзывание цены в пунктах при открытии и закрытии сделок. |
| tsp | Заголовок типов трейлинг-стопа — Заголовок группы настроек типов трейлинг-стопа. |
| tsp0 | Пояснение: нет трейлинга — Пояснение: значение 0 — трейлинг-стоп отключён. |
| tsp1 | Пояснение: немедленный — Пояснение: значение 1 — немедленный трейлинг-стоп. |
| tsp2 | Пояснение: отложенный — Пояснение: значение 2 — отложенный трейлинг-стоп. |
| tsp3 | Пояснение: три уровня — Пояснение: значение 3 — трёхуровневый трейлинг-стоп. |
| tsp4 | Пояснение: безубыток — Пояснение: значение 4 — безубыток с фиксацией прибыли. |
| TrailingStopType | Тип трейлинг-стопа — Тип трейлинг-стопа: 1 — немедленный, 2 — отложенный, 3 — трёхуровневый, 4 — безубыток с фиксацией прибыли. |
| ts2 | Заголовок типа 2 — Заголовок группы настроек трейлинг-стопа типа 2. |
| Change to whatever number of pips you wish to trail your position with. (TrailingStop) | Трейлинг-стоп — Количество пунктов трейлинг-стопа для режима типа 2. |
| ts3 | Заголовок типа 3 — Заголовок группы настроек трейлинг-стопа типа 3. |
| Type 3 first level pip gain (FirstMove) | Первый уровень прибыли — Прибыль в пунктах для первого уровня трейлинг-стопа типа 3. |
| Move Stop to Breakeven (FirstStopLoss) | Первый стоп-лосс — Уровень стоп-лосса в пунктах для первого уровня трейлинг-стопа типа 3. |
| Type 3 second level pip gain (SecondMove) | Второй уровень прибыли — Прибыль в пунктах для второго уровня трейлинг-стопа типа 3. |
| Move stop to lock is profit (SecondStopLoss) | Второй стоп-лосс — Уровень стоп-лосса в пунктах для второго уровня трейлинг-стопа типа 3. |
| type 3 third level pip gain (ThirdMove) | Третий уровень прибыли — Прибыль в пунктах для третьего уровня трейлинг-стопа типа 3. |
| Move stop and trail from there (TrailingStop3) | Трейлинг-стоп типа 3 — Количество пунктов трейлинг-стопа для третьего уровня режима типа 3. |
| ts4 | Заголовок типа 4 — Заголовок группы настроек трейлинг-стопа типа 4. |
| BreakEven | Уровень безубытка — Прибыль в пунктах, после достижения которой стоп-лосс переводится в безубыток в режиме трейлинг-стопа типа 4. |
| Profit Lock in pips (LockInPips) | Фиксация прибыли в пунктах — Количество пунктов прибыли, фиксируемых при переводе стопа в безубыток. |
| sm0 | Заголовок фильтра часов — Заголовок группы настроек фильтра торговых часов. |
| sm2 | Пояснение фильтра часов — Пояснение по включению фильтра торговых часов. |
| UseTradingHours | Использовать торговые часы — Включает фильтр торговых часов (0 — нет, 1 — да). |
| sm4 | Пояснение азиатской сессии — Пояснение по включению торговли в азиатскую сессию. |
| TradeAsianMarket | Торговля в азиатскую сессию — Разрешает торговлю в азиатскую сессию (0 — нет, 1 — да). |
| Start trades after time (AsianStart) | Начало азиатской сессии — Время начала торговли в азиатскую сессию в формате часы-минуты. |
| Stop trading after time (AsianStop) | Окончание азиатской сессии — Время окончания торговли в азиатскую сессию в формате часы-минуты. |
| sm5 | Пояснение европейской сессии — Пояснение по включению торговли в европейскую сессию. |
| TradeEuropeanMarket | Торговля в европейскую сессию — Разрешает торговлю в европейскую сессию (0 — нет, 1 — да). |
| Start trades after time (EurStart) | Начало европейской сессии — Время начала торговли в европейскую сессию в формате часы-минуты. |
| Stop trading after time (EurStop) | Окончание европейской сессии — Время окончания торговли в европейскую сессию в формате часы-минуты. |
| sm6 | Пояснение нью-йоркской сессии — Пояснение по включению торговли в нью-йоркскую сессию. |
| TradeNewYorkMarket | Торговля в нью-йоркскую сессию — Разрешает торговлю в нью-йоркскую сессию (0 — нет, 1 — да). |
| Start trades after time (NYStart) | Начало нью-йоркской сессии — Время начала торговли в нью-йоркскую сессию в формате часы-минуты. |
| Stop trading after time (NYStop) | Окончание нью-йоркской сессии — Время окончания торговли в нью-йоркскую сессию в формате часы-минуты. |
Поиск по коду файла
#include <stdlib.mqh>
#define UP 1
#define DOWN 2
#define LONG 1
#define SHORT -1
#define FLAT 0
#define SMA 0
#define EMA 1
#define SMMA 2
#define LWMA 3
#define LSMA 4
extern bool Debug = false; // Change to true to allow print
extern int MA_Period=34;
extern string m = "--Moving Average Types--";
extern string m0 = " 0 = SMA";
extern string m1 = " 1 = EMA";
extern string m2 = " 2 = SMMA";
extern string m3 = " 3 = LWMA";
extern string m4 = " 4 = LSMA";
extern int MA_Type = 1;
extern string p = "--Applied Price Types--";
extern string p0 = " 0 = close";
extern string p1 = " 1 = open";
extern string p2 = " 2 = high";
extern string p3 = " 3 = low";
extern string p4 = " 4 = median(high+low)/2";
extern string p5 = " 5 = typical(high+low+close)/3";
extern string p6 = " 6 = weighted(high+low+close+close)/4";
extern int MA_AppliedPrice = 0;
extern double EntryAngle_Threshold=10; // What size angle to trigger a trade
extern double ExitAngle_Threshold=2;
extern int PrevMAShift=3;
extern int CurMAShift=1;
extern string mm = "---Money Management---";
extern double Lots=0.1;
extern double MaxLot = 30;
extern bool UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern bool BrokerIsIBFX = false;
extern string mm1="Set mini and micro to false for standard account";
extern bool AccountIsMini = true;
extern bool AccountIsMicro = false;
extern double TradeSizePercent = 1; // Change to whatever percent of equity you wish to risk.
extern bool BrokerPermitsFractionalLots = true;
extern double StopLoss = 0; // Maximum pips willing to lose per position.
extern int TakeProfit = 0;
extern int Slippage = 3; // Possible fix for not getting filled or closed
extern string tsp = "--Trailing Stop Types--";
extern string tsp0 = " 0 = None";
extern string tsp1 = " 1 = Trail immediately";
extern string tsp2 = " 2 = Wait to trail";
extern string tsp3 = " 3 = Uses 3 levels before trail";
extern string tsp4 = " 4 = Breakeven + Lockin";
extern int TrailingStopType = 4;
extern string ts2 = "Settings for Type 2";
extern double TrailingStop = 15; // Change to whatever number of pips you wish to trail your position with.
extern string ts3 = "Settings for Type 3";
extern double FirstMove = 20; // Type 3 first level pip gain
extern double FirstStopLoss = 50; // Move Stop to Breakeven
extern double SecondMove = 30; // Type 3 second level pip gain
extern double SecondStopLoss = 30; // Move stop to lock is profit
extern double ThirdMove = 40; // type 3 third level pip gain
extern double TrailingStop3 = 20; // Move stop and trail from there
extern string ts4 = "Settings for Type 4";
extern double BreakEven = 30;
extern int LockInPips = 1; // Profit Lock in pips
int SignalCandle = 1;
extern string sm0="--Trading Hours Filter--";
extern string sm2="UseTradingHours - Enter 0 for false, 1 for true";
extern int UseTradingHours = 0;
extern string sm4="TradeAsian - Enter 0 for false, 1 for true";
extern int TradeAsianMarket = 1;
extern int AsianStart = 100; // Start trades after time
extern int AsianStop = 400; // Stop trading after time
extern string sm5="Trade Europe - Enter 0 for false, 1 for true";
extern int TradeEuropeanMarket = 1;
extern int EurStart = 1000; // Start trades after time
extern int EurStop = 1200; // Stop trading after time
extern string sm6="Trade NY - Enter 0 for false, 1 for true";
extern int TradeNewYorkMarket = 1;
extern int NYStart = 1600; // Start trades after time
extern int NYStop = 1800; // Stop trading after time
string setup;
double lotMM;
int TradesInThisSymbol;
int MagicNumber;
bool YesStop;
double myPoint, mFactor;
double MACurrent, MAPrevious;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double fLSMA(int LSMAPeriod, int LSMAPrice,int shift)
{
double wt;
double ma1=iMA(NULL,0,LSMAPeriod,0,MODE_SMA ,LSMAPrice,shift);
double ma2=iMA(NULL,0,LSMAPeriod,0,MODE_LWMA,LSMAPrice,shift);
wt = MathFloor((3.0*ma2-2.0*ma1)/myPoint)*myPoint;
return(wt);
}
double Get_mFactor()
{
string Sym;
double Factor;
int ShiftDif;
Factor = 100000.0;
Sym = StringSubstr(Symbol(),3,3);
if (Sym == "JPY") Factor = 1000.0;
ShiftDif = PrevMAShift-CurMAShift;
Factor /= ShiftDif;
return (Factor);
}
void GetMAs (int TrendMethod, int MAPeriod, int Prev, int Cur)
{
switch (TrendMethod)
{
case LSMA : MACurrent=fLSMA(MAPeriod,MA_AppliedPrice,Cur);
MAPrevious=fLSMA(MAPeriod,MA_AppliedPrice,Prev);
break;
default : MACurrent=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Cur);
MAPrevious=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Prev);
}
}
bool CheckExitCondition(int cmd)
{
double maAngle;
GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = mFactor * (MACurrent - MAPrevious)/2.0;
switch (cmd)
{
case OP_BUY : if (maAngle < ExitAngle_Threshold) return(true);
break;
case OP_SELL : if (maAngle > -ExitAngle_Threshold) return(true);
}
return(false);
}
int GetSignal()
{
double maAngle;
GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = mFactor * (MACurrent - MAPrevious)/2.0;
if (maAngle > EntryAngle_Threshold) return(LONG);
if (maAngle < -EntryAngle_Threshold) return(SHORT);
return(FLAT);
}
bool NewBar()
{
static datetime dt = 0;
if (Time[0] != dt)
{
dt = Time[0];
return(true);
}
return(false);
}
int start()
{
// код доступен только после оплаты
}
void OpenBuyOrder()
{
int err,ticket, digits;
double TPprice,STprice;
ticket=OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,0,0,setup,MagicNumber,0,Green);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
if (Debug) Print("BUY order opened : ", OrderOpenPrice());
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopLong(OrderOpenPrice(), StopLoss);
STprice = ValidStopLoss(OP_BUY,Bid, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else
{
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription( err) );
}
}
void OpenSellOrder()
{
int err, ticket, digits;
double TPprice,STprice;
ticket=OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,0,0,setup,MagicNumber,0,Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
if (Debug) Print("SELL order opened : ", OrderOpenPrice());
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeShort(OrderOpenPrice(),TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopShort(OrderOpenPrice() ,StopLoss);
STprice = ValidStopLoss(OP_SELL,Ask, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else
{
err = GetLastError();
Print("Error opening Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
int CheckOpenPositions()
{
int cnt, total, NumPositions;
int NumBuyTrades, NumSellTrades; // Number of buy and sell trades in this symbol
NumBuyTrades = 0;
NumSellTrades = 0;
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol() != Symbol()) continue;
if ( OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == OP_BUY ) NumBuyTrades++;
if(OrderType() == OP_SELL ) NumSellTrades++;
}
NumPositions = NumBuyTrades + NumSellTrades;
return (NumPositions);
}
int CloseOrder(int ticket,double numLots,int type)
{
int CloseCnt, err;
double close_price;
CloseCnt = 0;
while (CloseCnt < 3)
{
switch (type)
{
case OP_BUY : close_price = MarketInfo(Symbol(),MODE_BID);
break;
case OP_SELL : close_price = MarketInfo(Symbol(),MODE_ASK);
}
if (!OrderClose(ticket,numLots,close_price,Slippage,Violet))
{
err=GetLastError();
Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));
if (err > 0) CloseCnt++;
}
else
{
CloseCnt = 3;
}
}
}
int ModifyOrder(int ord_ticket,double op, double price,double tp, color mColor)
{
int CloseCnt, err;
CloseCnt=0;
while (CloseCnt < 3)
{
if (OrderModify(ord_ticket,op,price,tp,0,mColor))
{
CloseCnt = 3;
}
else
{
err=GetLastError();
Print(CloseCnt," Error modifying order : (", err , ") " + ErrorDescription(err));
if (err>0) CloseCnt++;
}
}
}
int HandleTrailingStop(int type, int ticket, double op, double os, double tp)
{
switch (TrailingStopType)
{
case 1 : Immediate_TrailingStop (type, ticket, op, os, tp);
break;
case 2 : Delayed_TrailingStop (type, ticket, op, os, tp);
break;
case 3 : ThreeLevel_TrailingStop (type, ticket, op, os, tp);
break;
case 4 : BreakEven_TrailingStop (type, ticket, op, os, tp);
break;
break;
}
return(0);
}
void BreakEven_TrailingStop(int type, int ticket, double op, double os, double tp)
{
int digits;
double pBid, pAsk, BuyStop, SellStop;
digits = MarketInfo(Symbol(Показано первые 50% кода (символов: 16182)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.