ma_angle_eav2.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ma_angle_eav2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 4, работающий на основе угла наклона скользящей средней (включая LSMA). Он вычисляет угол между двумя значениями MA на заданном таймфрейме и открывает сделки при превышении пороговых значений. Используются стандартные торговые функции OrderSend, OrderClose и OrderModify для исполнения и управления позициями. Советник поддерживает управление рисками, стоп-лосс, тейк-профит, трейлинг-стоп и фильтрацию по торговым часам.
Настройки программы
| Настройка | Описание |
|---|---|
| Change to true to allow print (Debug) | Отладка — Включает вывод отладочных сообщений в журнал терминала. |
| Change to false to shutdown money management controls. (MoneyManagement) | Управление капиталом — Включает или отключает автоматический расчёт размера лота на основе риска. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска — Процент от баланса, который советник готов рисковать на одну сделку. |
| standard lot size. (Lots) | Размер лота — Фиксированный размер лота при отключённом управлении капиталом. |
| MaxLots | Максимальный лот — Ограничение максимального размера лота для открытой позиции. |
| Maximum pips willing to lose per position. (StopLoss) | Стоп-лосс — Максимальное количество пунктов убытка на позицию. |
| UseTrailingStop | Использовать трейлинг-стоп — Включает или отключает автоматическое перемещение стоп-лосса. |
| TrailingStopType | Тип трейлинг-стопа — Номер типа алгоритма трейлинг-стопа (от 1 до 5). |
| Change to whatever number of pips you wish to trail your position with. (TrailingStop) | Трейлинг-стоп — Расстояние в пунктах для трейлинга позиции. |
| Possible fix for not getting filled or closed (Slippage) | Допустимое проскальзывание — Максимально допустимое проскальзывание при открытии или закрытии ордера. |
| TakeProfit | Тейк-профит — Фиксированный уровень прибыли в пунктах на позицию. |
| Expert will stop trading if equity level decreases to that level. (Margincutoff) | Порог маржи — Советник прекращает торговлю, если уровень средств опустится ниже этого значения. |
| SignalTimeFrame | Таймфрейм сигнала — Таймфрейм, на котором рассчитываются значения скользящей средней. |
| MA_Period | Период MA — Количество баров для расчёта скользящей средней. |
| m | Разделитель типов MA — Текстовая метка группы типов скользящих средних. |
| m0 | Тип MA 0 — Описание типа скользящей средней (SMA). |
| m1 | Тип MA 1 — Описание типа скользящей средней (EMA). |
| m2 | Тип MA 2 — Описание типа скользящей средней (SMMA). |
| m3 | Тип MA 3 — Описание типа скользящей средней (LWMA). |
| m4 | Тип MA 4 — Описание типа скользящей средней (LSMA). |
| 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA (MA_Type) | Тип MA — Выбранный тип скользящей средней: 0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA, 4 — LSMA. |
| p | Разделитель типов цены — Текстовая метка группы типов применяемой цены. |
| p0 | Тип цены 0 — Применяемая цена — close. |
| p1 | Тип цены 1 — Применяемая цена — open. |
| p2 | Тип цены 2 — Применяемая цена — high. |
| p3 | Тип цены 3 — Применяемая цена — low. |
| p4 | Тип цены 4 — Применяемая цена — median(high+low)/2. |
| p5 | Тип цены 5 — Применяемая цена — typical(high+low+close)/3. |
| p6 | Тип цены 6 — Применяемая цена — weighted(high+low+close+close)/4. |
| MA_AppliedPrice | Применяемая цена MA — Индекс типа цены, используемой для расчёта скользящей средней. |
| What size angle to trigger a trade (EntryAngle_Threshold) | Порог входа — Минимальный угол наклона MA для открытия сделки. |
| ExitAngle_Threshold | Порог выхода — Угол наклона MA, при достижении которого позиция закрывается. |
| PrevMAShift | Сдвиг предыдущей MA — Смещение бара для расчёта предыдущего значения скользящей средней. |
| CurMAShift | Сдвиг текущей MA — Смещение бара для расчёта текущего значения скользящей средней. |
| UseTradingHours | Использовать торговые часы — Включает фильтрацию торгов по времени суток. |
| Start trades after time (StartHour) | Час начала — Час, после которого советник начинает торговлю. |
| Stop trading after time (StopHour) | Час окончания — Час, после которого советник прекращает торговлю. |
Поиск по коду файла
#include <stdlib.mqh>
#define UP 1
#define DOWN 2
#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 bool AccountIsMini = true; // Change to true if trading mini account
extern bool MoneyManagement = true; // Change to false to shutdown money management controls.
extern double TradeSizePercent = 10; // Change to whatever percent of equity you wish to risk.
extern double Lots = 0.1; // standard lot size.
extern double MaxLots = 30;
extern double StopLoss = 0; // Maximum pips willing to lose per position.
extern bool UseTrailingStop = false;
extern int TrailingStopType = 1;
extern double TrailingStop = 20; // Change to whatever number of pips you wish to trail your position with.
double FirstMove = 20; // Type 3 first level pip gain
double FirstStopLoss = 50; // Move Stop to Breakeven
double SecondMove = 30; // Type 3 second level pip gain
double SecondStopLoss = 30; // Move stop to lock is profit
double ThirdMove = 40; // type 3 third level pip gain
double TrailingStop3 = 20; // Move stop and trail from there
extern int Slippage = 10; // Possible fix for not getting filled or closed
extern int TakeProfit = 0;
extern double Margincutoff = 800; // Expert will stop trading if equity level decreases to that level.
int SignalCandle = 1;
extern int SignalTimeFrame = 60;
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; //0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA
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 bool UseTradingHours = true;
extern int StartHour = 2; // Start trades after time
extern int StopHour = 15; // Stop trading after time
string setup;
double lotMM;
int TradesInThisSymbol;
int MagicNumber;
bool YesStop;
double MACurrent, MAPrevious;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double fLSMA(int Rperiod, int prMode, int shift)
{
int i;
double sum, pr;
int length;
double lengthvar;
double tmp;
double wt;
length = Rperiod;
sum = 0;
for(i = length; i >= 1 ; i--)
{
lengthvar = length + 1;
lengthvar /= 3;
tmp = 0;
switch (prMode)
{
case 0: pr = iClose(NULL, SignalTimeFrame,length-i+shift);break;
case 1: pr = iOpen(NULL, SignalTimeFrame,length-i+shift);break;
case 2: pr = iHigh(NULL, SignalTimeFrame,length-i+shift);break;
case 3: pr = iLow(NULL, SignalTimeFrame,length-i+shift);break;
case 4: pr = (iHigh(NULL, SignalTimeFrame,length-i+shift) + iLow(NULL, SignalTimeFrame,length-i+shift))/2;break;
case 5: pr = (iHigh(NULL, SignalTimeFrame,length-i+shift) + iLow(NULL, SignalTimeFrame,length-i+shift) + iClose(NULL, SignalTimeFrame,length-i+shift))/3;break;
case 6: pr = (iHigh(NULL, SignalTimeFrame,length-i+shift) + iLow(NULL, SignalTimeFrame,length-i+shift) + iClose(NULL, SignalTimeFrame,length-i+shift) + iClose(NULL, SignalTimeFrame,length-i+shift))/4;break;
}
tmp = ( i - lengthvar)*pr;
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
double MA_Angle( int PrevShift, int CurShift, double fPrevMA, double fCurMA)
{
double fAngle, mFactor;
string Sym;
int ShiftDif;
mFactor = 100000.0;
Sym = StringSubstr(Symbol(),3,3);
if (Sym == "JPY") mFactor = 1000.0;
ShiftDif = PrevShift-CurShift;
mFactor /= ShiftDif;
fAngle = mFactor * (fCurMA - fPrevMA)/2.0;
return(fAngle);
}
void GetMA(int MAPeriod, int Prev, int Cur)
{
MACurrent=iMA(NULL,SignalTimeFrame,MAPeriod,0,MA_Type,MA_AppliedPrice,Cur);
MAPrevious=iMA(NULL,SignalTimeFrame,MAPeriod,0,MA_Type,MA_AppliedPrice,Prev);
}
void GetLSMA(int MAPeriod, int Prev, int Cur)
{
MACurrent=fLSMA(MAPeriod,MA_AppliedPrice,Cur);
MAPrevious=fLSMA(MAPeriod,MA_AppliedPrice,Prev);
}
void GetMA_Trend (int TrendMethod, int myPeriod, int PrevShift, int CurShift)
{
switch (TrendMethod)
{
case LSMA : GetLSMA(myPeriod, PrevShift, CurShift);
break;
default : GetMA( myPeriod, PrevShift, CurShift);
}
}
bool CheckExitCondition(int cmd)
{
double maAngle;
GetMA_Trend(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = MA_Angle(PrevMAShift, CurMAShift, MAPrevious, MACurrent);
switch (cmd)
{
case OP_BUY : if (maAngle < ExitAngle_Threshold) return(true);
break;
case OP_SELL : if (maAngle > -ExitAngle_Threshold) return(true);
}
return(false);
}
bool CheckEntryCondition(int cmd)
{
double maAngle;
GetMA_Trend(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = MA_Angle(PrevMAShift, CurMAShift, MAPrevious, MACurrent);
switch (cmd)
{
case OP_BUY : if (maAngle > EntryAngle_Threshold) return(true);
break;
case OP_SELL : if (maAngle < -EntryAngle_Threshold) return(true);
}
return(false);
}
int start()
{
// код доступен только после оплаты
}
void OpenBuyOrder()
{
int err,ticket, digits;
double myPrice, myStopLoss = 0, myTakeProfit = 0;
myPrice = MarketInfo(Symbol( ), MODE_ASK);
myStopLoss = 0;
if ( StopLoss > 0 ) myStopLoss = myPrice - StopLoss * Point ;
myTakeProfit = 0;
if (TakeProfit>0) myTakeProfit = myPrice + TakeProfit * Point;
digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
if (digits > 0)
{
myPrice = NormalizeDouble( myPrice, digits);
myStopLoss = NormalizeDouble( myStopLoss, digits);
myTakeProfit = NormalizeDouble( myTakeProfit, digits);
}
ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Green);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
if (Debug) Print("BUY order opened : ", OrderOpenPrice());
}
}
else
{
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription( err) );
}
}
void OpenSellOrder()
{
int err, ticket, digits;
double myPrice, myStopLoss = 0, myTakeProfit = 0;
myPrice = MarketInfo(Symbol( ), MODE_BID);
myStopLoss = 0;
if ( StopLoss > 0 ) myStopLoss = myPrice + StopLoss * Point;
myTakeProfit = 0;
if (TakeProfit > 0) myTakeProfit = myPrice - TakeProfit * Point;
digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
if (digits > 0)
{
myPrice = NormalizeDouble( myPrice, digits);
myStopLoss = NormalizeDouble( myStopLoss, digits);
myTakeProfit = NormalizПоказано первые 50% кода (символов: 11366)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.