TripleMA Crossover EA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «triplema_crossover_expert2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торговый советник для платформы MetaTrader 4, основанный на стратегии пересечения трёх скользящих средних (Fast, Middle, Slow). Открытие позиции BUY происходит при пересечении быстрой средней сверху средней с учётом распространённости и одновременном пересечении средней сверху медленной; для SELL условия инвертированы. Советник поддерживает несколько методов расчёта скользящих средних, включая пользовательскую реализацию LSMA (наименьших квадратов).
Советник предоставляет гибкие настройки управления денежными средствами: размер лота может рассчитываться как процент от баланса счёта с ограничением максимального размера и поддержкой мини-аккаунтов. Также реализована проверка уровня маржи для остановки торговли при недостаточности средств.
Система управления рисками включает стоп-лосс, тейк-профит и многоуровневый трейлинг-стоп с тремя типами и тремя уровнями фиксации прибыли. Все позиции идентифицируются магическим числом, а входные параметры проверяются на корректность перед началом торговой сессии. Советник обрабатывает события тиков через функцию start().
Настройки программы
| Настройка | Описание |
|---|---|
| MagicNumber | Магическое число — Магическое число для идентификации позиций, открытых советником. |
| Change to false to shutdown money management controls. (MoneyManagement) | Управление денежными средствами — Переключатель управления денежными средствами. При значении false размер лота фиксируется равным Lots. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска от баланса — Процент баланса счёта, рискуемый на одну позицию при включённом управлении денежными средствами. |
| standard lot size. (Lots) | Размер лота — Стандартный размер лота при отключённом управлении денежными средствами. |
| MaxLots | Максимальный размер лота — Максимально допустимый размер лота при расчёте через управление денежными средствами. |
| 0=sma, 1=ema, 2=smma, 3=lwma , 4=LSMA (FastMA_Method) | Метод быстрой СС — Метод расчёта быстрой скользящей средней: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA. |
| FastMAPeriod | Период быстрой СС — Период расчёта быстрой скользящей средней. |
| FastMA_Shift | Сдвиг быстрой СС — Сдвиг быстрой скользящей средней в барах. |
| 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4) (FastMA_AppliedPrice) | Применяемая цена быстрой СС — Тип цены для быстрой скользящей средней: 0=close, 1=open, 2=high, 3=low, 4=median, 5=typical, 6=weighted. |
| 0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA (MiddleMA_Method) | Метод средней СС — Метод расчёта средней скользящей средней: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA. |
| MiddleMAPeriod | Период средней СС — Период расчёта средней скользящей средней. |
| MiddleMA_Shift | Сдвиг средней СС — Сдвиг средней скользящей средней в барах. |
| 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4) (MiddleMA_AppliedPrice) | Применяемая цена средней СС — Тип цены для средней скользящей средней: 0=close, 1=open, 2=high, 3=low, 4=median, 5=typical, 6=weighted. |
| 0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA (SlowMA_Method) | Метод медленной СС — Метод расчёта медленной скользящей средней: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA. |
| SlowMAPeriod | Период медленной СС — Период расчёта медленной скользящей средней. |
| SlowMA_Shift | Сдвиг медленной СС — Сдвиг медленной скользящей средней в барах. |
| 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4) (SlowMA_AppliedPrice) | Применяемая цена медленной СС — Тип цены для медленной скользящей средней: 0=close, 1=open, 2=high, 3=low, 4=median, 5=typical, 6=weighted. |
| Fast_MiddleSpread | Распространённость быстрой и средней СС — Распространённость между быстрой и средней скользящими для определения сигнала на вход в позицию. |
| Middle_SlowSpread | Распространённость средней и медленной СС — Распространённость между средней и медленной скользящими для определения сигнала на вход в позицию. |
| Which candle to use for signal - 0 for current, 1 for prior (SignalCandle) | Свеча сигнала — Свеча для формирования сигнала: 0=текущая, 1=предыдущая. |
| Maximum pips willing to lose per position. (StopLoss) | Стоп-лосс — Максимальное количество пунктов убытка, допустимое на одну позицию. |
| UseTrailingStop | Использовать трейлинг-стоп — Переключатель включения/отключения трейлинг-стопа. |
| Type 1 moves stop immediately, Type 2 waits til value of TS is reached (TrailingStopType) | Тип трейлинг-стопа — Тип трейлинг-стопа: 1=без задержки, 2=ожидание достижения значения трейла, 3=трёхуровневый. |
| Change to whatever number of pips you wish to trail your position with. (TrailingStop) | Расстояние трейлинг-стопа — Расстояние трейлинг-стопа в пунктах для типов 1 и 2. |
| Type 3 first level pip gain (TRStopLevel_1) | Уровень 1 фиксации прибыли — Первый уровень фиксации прибыли в пунктах для трейлинг-стопа типа 3. |
| Move Stop to Breakeven (TrailingStop1) | Фиксация стопа на уровне 1 — Расстояние фиксации стопа в пунктах при достижении первого уровня прибыли для типа 3. |
| Type 3 second level pip gain (TRStopLevel_2) | Уровень 2 фиксации прибыли — Второй уровень фиксации прибыли в пунктах для трейлинг-стопа типа 3. |
| Move stop to lock is profit (TrailingStop2) | Фиксация стопа на уровне 2 — Расстояние фиксации стопа в пунктах при достижении второго уровня прибыли для типа 3. |
| type 3 third level pip gain (TRStopLevel_3) | Уровень 3 фиксации прибыли — Третий уровень фиксации прибыли в пунктах для трейлинг-стопа типа 3. |
| Move stop and trail from there (TrailingStop3) | Фиксация стопа на уровне 3 — Расстояние фиксации стопа и трейлинга в пунктах при достижении третьего уровня прибыли для типа 3. |
| Maximum profit level achieved. (TakeProfit) | Тейк-профит — Максимальный уровень прибыли в пунктах для закрытия позиции. |
| Expert will stop trading if equity level decreases to that level. (Margincutoff) | Порог маржинального контроля — Минимальный уровень баланса, при достижении которого советник прекращает торговлю. |
| Possible fix for not getting closed (Slippage) | Проскальгивание — Допустимое проскальгивание цены при открытии и закрытии ордеров. |
Поиск по коду файла
#include <stdlib.mqh>
extern int MagicNumber = 3333;
extern bool AccountIsMini = false; // Change to true if trading mini account
extern bool MoneyManagement = false; // Change to false to shutdown money management controls.
extern double TradeSizePercent = 5; // Change to whatever percent of equity you wish to risk.
extern double Lots = 10; // standard lot size.
extern double MaxLots = 100;
extern int FastMA_Method = 0; //0=sma, 1=ema, 2=smma, 3=lwma , 4=LSMA
extern int FastMAPeriod = 9;
extern int FastMA_Shift = 0;
extern int FastMA_AppliedPrice = 0; // 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
extern int MiddleMA_Method = 0; //0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA
extern int MiddleMAPeriod = 14;
extern int MiddleMA_Shift = 0;
extern int MiddleMA_AppliedPrice = 0; // 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
extern int SlowMA_Method = 0; //0=sma, 1=ema, 2=smma, 3=lwma, 4=LSMA
extern int SlowMAPeriod = 29;
extern int SlowMA_Shift = 0;
extern int SlowMA_AppliedPrice = 0; // 0=close, 1=open, 2=high, 3=low, 4=median((h+l/2)), 5=typical((h+l+c)/3), 6=weighted((h+l+c+c)/4)
extern int Fast_MiddleSpread=0;
extern int Middle_SlowSpread=0;
extern int SignalCandle=1; // Which candle to use for signal - 0 for current, 1 for prior
extern double StopLoss = 0; // Maximum pips willing to lose per position.
extern bool UseTrailingStop = false;
extern int TrailingStopType = 3; // Type 1 moves stop immediately, Type 2 waits til value of TS is reached
extern double TrailingStop = 40; // Change to whatever number of pips you wish to trail your position with.
extern double TRStopLevel_1 = 20; // Type 3 first level pip gain
extern double TrailingStop1 = 20; // Move Stop to Breakeven
extern double TRStopLevel_2 = 30; // Type 3 second level pip gain
extern double TrailingStop2 = 20; // Move stop to lock is profit
extern double TRStopLevel_3 = 50; // type 3 third level pip gain
extern double TrailingStop3 = 20; // Move stop and trail from there
extern int TakeProfit = 0; // Maximum profit level achieved.
extern double Margincutoff = 800; // Expert will stop trading if equity level decreases to that level.
extern int Slippage = 10; // Possible fix for not getting closed
string setup;
double lotMM;
int TradesInThisSymbol;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
}
double LSMA(int Rperiod,int prMode, int TimeFrame, int mshift)
{
int i;
double sum, price;
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: price = iClose(NULL,TimeFrame,length-i+mshift);break;
case 1: price = iOpen(NULL,TimeFrame,length-i+mshift);break;
case 2: price = iHigh(NULL,TimeFrame,length-i+mshift);break;
case 3: price = iLow(NULL,TimeFrame,length-i+mshift);break;
case 4: price = (iHigh(NULL,TimeFrame,length-i+mshift) + iLow(NULL,TimeFrame,length-i+mshift))/2;break;
case 5: price = (iHigh(NULL,TimeFrame,length-i+mshift) + iLow(NULL,TimeFrame,length-i+mshift) + iClose(NULL,TimeFrame,length-i+mshift))/3;break;
case 6: price = (iHigh(NULL,TimeFrame,length-i+mshift) + iLow(NULL,TimeFrame,length-i+mshift) + iClose(NULL,TimeFrame,length-i+mshift) + iClose(NULL,TimeFrame,length-i+mshift))/4;break;
}
tmp = ( i - lengthvar)*price;
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
bool CheckExitCondition(string TradeType)
{
bool YesClose;
double fMA, mMA;
YesClose = false;
if (FastMA_Method == 4)
{
fMA = LSMA(FastMAPeriod,FastMA_AppliedPrice,0,SignalCandle);
}
else
{
fMA = iMA(NULL, 0, FastMAPeriod, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, SignalCandle);
}
if (SlowMA_Method == 4)
{
mMA = LSMA(MiddleMAPeriod,MiddleMA_AppliedPrice,0,SignalCandle);
}
else
{
mMA = iMA(NULL, 0, MiddleMAPeriod, MiddleMA_Shift, MiddleMA_Method, FastMA_AppliedPrice, SignalCandle);
}
if (TradeType == "BUY" && fMA < mMA) YesClose = true;
if (TradeType == "SELL" && fMA > mMA) YesClose =true;
return (YesClose);
}
bool CheckEntryCondition(string TradeType)
{
bool YesTrade;
double fMA, mMA, sMA;
YesTrade = false;
if (FastMA_Method == 4)
{
fMA = LSMA(FastMAPeriod,FastMA_AppliedPrice,0,SignalCandle);
}
else
{
fMA = iMA(NULL, 0, FastMAPeriod, FastMA_Shift, FastMA_Method, FastMA_AppliedPrice, SignalCandle);
}
if (MiddleMA_Method == 4)
{
mMA = LSMA(MiddleMAPeriod,MiddleMA_AppliedPrice,0,SignalCandle);
}
else
{
mMA = iMA(NULL, 0, MiddleMAPeriod, MiddleMA_Shift, MiddleMA_Method, FastMA_AppliedPrice, SignalCandle);
}
if (SlowMA_Method == 4)
{
sMA = LSMA(SlowMAPeriod,SlowMA_AppliedPrice,0,SignalCandle);
}
else
{
sMA = iMA(NULL, 0, SlowMAPeriod, SlowMA_Shift, SlowMA_Method, FastMA_AppliedPrice, SignalCandle);
}
if (TradeType == "BUY" && fMA > (mMA + Fast_MiddleSpread*Point) && mMA > (sMA + Middle_SlowSpread * Point)) YesTrade = true;
if (TradeType == "SELL" && fMA < (mMA - Fast_MiddleSpread*Point) && mMA < (sMA - Middle_SlowSpread * Point) ) YesTrade = true;
return (YesTrade);
}
int start()
{
// код доступен только после оплаты
}
void OpenBuyOrder()
{
int err,ticket;
double myStopLoss = 0, myTakeProfit = 0;
myStopLoss = 0;
if ( StopLoss > 0 ) myStopLoss = Ask - StopLoss * Point ;
myTakeProfit = 0;
if (TakeProfit>0) myTakeProfit = Ask + TakeProfit * Point;
ticket=OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Green);
if(ticket<=0)
{
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
void OpenSellOrder()
{
int err, ticket;
double myStopLoss = 0, myTakeProfit = 0;
myStopLoss = 0;
if ( StopLoss > 0 ) myStopLoss = Bid + StopLoss * Point;
myTakeProfit = 0;
if (TakeProfit > 0) myTakeProfit = Bid - TakeProfit * Point;
ticket=OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Red);
if(ticket<=0)
{
err = GetLastError();
Показано первые 50% кода (символов: 9610)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.