ma_crossover_expert_v1.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ma_crossover_expert_v1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MA_Crossover_expert_v1 — торговый советник для MetaTrader 4, основанный на стратегии пересечения двух скользящих средних. При пересечении быстрой и медленной линий вверх советник открывает покупку, при пересечении вниз — продажу. Поддерживаются различные типы скользящих средних: SMA, EMA, SMMA, LWMA и LSMA, с настраиваемыми периодами для каждой линии.
Советник включает дополнительный фильтр Juice на основе стандартного отклонения, который может ограничивать торговлю при недостаточной волатильности. Также реализованы стандартные механизмы управления рисками: стоп-лосс, тейк-профит и трейлинг-стоп. Режим управления капиталом автоматически рассчитывает размер лота на основе процента риска от текущего баланса.
Для защиты от серии убытков предусмотрен коэффициент уменьшения размера лота после проигрышных сделок. Советник отслеживает уровень капитала и прекращает торговлю при его падении ниже заданного порога. Встроенный режим отладки позволяет записывать информацию о сделках и событиях в текстовый файл для анализа.
Настройки программы
| Настройка | Описание |
|---|---|
| Change to true to allow print (Debug) | Отладка — Переключатель отладочного режима. При включении записывает информацию о сделках и событиях в текстовый файл. |
| Change to false to shutdown money management controls. (MoneyManagement) | Управление капиталом — Переключатель системы управления капиталом. При отключении используется фиксированный размер лота из параметра Lots. |
| Change to whatever percent of equity you wish to risk. (Riskpercent) | Процент риска — Процент от текущего капитала, рискуемый на одну позицию при включённом управлении капиталом. |
| Used to decrease lot size after a loss is experienced to protect equity. Recommended not to change. (DecreaseFactor) | Коэффициент уменьшения лота — Коэффициент уменьшения размера лота после убыточных сделок для защиты капитала. |
| Maximum pips willing to lose per position. (StopLoss) | Стоп-лосс — Максимальное количество пипсов убытка, допустимое по одной позиции. |
| Change to whatever number of pips you wish to trail your position with. (TrailingStop) | Трейлинг-стоп — Количество пипсов для срабатывания и фиксации трейлинг-стопа. |
| Expert will stop trading if equity level decreases to that level. (Margincutoff) | Минимальный маржинальный уровень — Минимальный уровень свободного маржинального баланса. При падении капитала ниже этого значения советник прекращает торговлю. |
| Total number of positions on all currency pairs. You can change this number as you wish. (Maxtrades) | Максимальное количество сделок — Общее максимальное количество открытых позиций на всех валютных парах. |
| Maximum profit level achieved. (TakeProfit) | Тейк-профит — Максимальный уровень прибыли в пипсах по одной позиции. |
| Possible fix for not getting filled or closed (Slippage) | Проскальзывание — Допустимое проскальзывание цены при выполнении рыночных ордеров. |
| 0=sma, 1=ema, 2=smma, 3=lwma, 4 = lsma (FasterMode) | Тип быстрой скользящей средней — Тип быстрой скользящей средней: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA. |
| FastMAPeriod | Период быстрой скользящей средней — Период быстрой скользящей средней, используемой для определения кроссовера. |
| 0=sma, 1=ema, 2=smma, 3=lwma, 4 = lsma (SlowerMode) | Тип медленной скользящей средней — Тип медленной скользящей средней: 0=SMA, 1=EMA, 2=SMMA, 3=LWMA, 4=LSMA. |
| SlowMAPeriod | Период медленной скользящей средней — Период медленной скользящей средней, используемой для определения кроссовера. |
| UseJuice | Фильтр Juice — Переключатель фильтра Juice. При включении торговля разрешена только при превышении стандартного отклонения заданного уровня. |
| JuicePeriod | Период фильтра Juice — Период расчёта фильтра Juice на основе стандартного отклонения. |
| JuiceLevel | Уровень фильтра Juice — Уровень стандартного отклонения для фильтра Juice. |
| standard lot size. (Lots) | Размер лота — Стандартный размер лота, используемый при отключённом управлении капиталом. |
| Turns expert on, change to false and no trades will take place even if expert is enabled. (Turnon) | Включение советника — Основной переключатель активности советника. При выключении сделки не открываются даже при выполнении условий. |
Поиск по коду файла
#include <stdlib.mqh>
extern bool Debug = false; // Change to true to allow print
extern bool AccountIsMini = false; // Change to true if trading mini account
extern bool MoneyManagement = true; // Change to false to shutdown money management controls.
extern double Riskpercent = 5; // Change to whatever percent of equity you wish to risk.
extern double DecreaseFactor = 3; // Used to decrease lot size after a loss is experienced to protect equity. Recommended not to change.
extern double StopLoss = 35; // Maximum pips willing to lose per position.
extern double TrailingStop = 0; // Change to whatever number of pips you wish to trail your position with.
extern double Margincutoff = 800; // Expert will stop trading if equity level decreases to that level.
extern double Maxtrades = 10; // Total number of positions on all currency pairs. You can change this number as you wish.
extern int TakeProfit = 0; // Maximum profit level achieved.
extern int Slippage = 10; // Possible fix for not getting filled or closed
extern int FasterMode = 3; //0=sma, 1=ema, 2=smma, 3=lwma, 4 = lsma
extern int FastMAPeriod = 5;
extern int SlowerMode = 1; //0=sma, 1=ema, 2=smma, 3=lwma, 4 = lsma
extern int SlowMAPeriod = 120;
extern bool UseJuice = false;
extern int JuicePeriod= 7;
extern int JuiceLevel= 4;
extern double Lots = 1; // standard lot size.
extern bool Turnon = true; // Turns expert on, change to false and no trades will take place even if expert is enabled.
string OrderText = "";
double lotMM;
int TradesInThisSymbol;
datetime LastTime;
double Sl;
double Tr;
bool OK2Buy, OK2Sell; // determines if buy or sell trades are allowed
bool FlatMarket;
int NumBuys, NumSells; // Number of buy and sell trades in this symbol
bool first_time = true; // Used to check if first call to SilverTrend
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int handle;
if (Debug)
{
handle = GlobalVariableGet("MyHandle");
FileFlush(handle);
FileClose(handle);
GlobalVariableDel("MyHandle");
}
return(0);
}
int Write(string str)
{
int handle;
handle = GlobalVariableGet("MyHandle");
FileWrite(handle,str,"\r\n");
}
double Juice(int shift, int period, int level)
{
double osma= 0;
osma= iStdDev(NULL,0, period, MODE_EMA, 0, PRICE_CLOSE,shift) - level*Point;
return (osma); // return last computed value
}
double LSMA(int Rperiod, int shift)
{
int i;
double sum;
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;
tmp = ( i - lengthvar)*Close[length-i+shift];
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
bool CheckExitCondition(string TradeType)
{
bool YesClose;
double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
YesClose = false;
if (FasterMode == 4)
{
fasterMAnow = LSMA(FastMAPeriod, 2);
fasterMAprevious = LSMA(FastMAPeriod,3);
fasterMAafter = LSMA(FastMAPeriod, 1);
}
else
{
fasterMAnow = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 2);
fasterMAprevious = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 3);
fasterMAafter = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 1);
}
if (SlowerMode == 4)
{
slowerMAnow = LSMA(SlowMAPeriod, 2);
slowerMAprevious = LSMA(SlowMAPeriod,3);
slowerMAafter = LSMA(SlowMAPeriod, 1);
}
else
{
slowerMAnow = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 2);
slowerMAprevious = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 3);
slowerMAafter = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 1);
}
if (TradeType == "BUY") // Check for cross down
{
if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > slowerMAprevious) && (fasterMAafter < slowerMAafter))
{
YesClose = true;
}
}
if (TradeType == "SELL") // Check for cross up
{
if ((fasterMAnow > slowerMAnow) && (fasterMAprevious < slowerMAprevious) && (fasterMAafter > slowerMAafter))
{
YesClose =true;
}
}
return (YesClose);
}
bool CheckEntryCondition(string TradeType)
{
bool YesTrade;
double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
YesTrade = false;
if (FasterMode == 4)
{
fasterMAnow = LSMA(FastMAPeriod, 2);
fasterMAprevious = LSMA(FastMAPeriod,3);
fasterMAafter = LSMA(FastMAPeriod, 1);
}
else
{
fasterMAnow = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 2);
fasterMAprevious = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 3);
fasterMAafter = iMA(NULL, 0, FastMAPeriod, 0, FasterMode, PRICE_CLOSE, 1);
}
if (SlowerMode == 4)
{
slowerMAnow = LSMA(SlowMAPeriod, 2);
slowerMAprevious = LSMA(SlowMAPeriod,3);
slowerMAafter = LSMA(SlowMAPeriod, 1);
}
else
{
slowerMAnow = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 2);
slowerMAprevious = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 3);
slowerMAafter = iMA(NULL, 0, SlowMAPeriod, 0, SlowerMode, PRICE_CLOSE, 1);
}
if (TradeType == "BUY") // Check for cross up
{
if ((fasterMAnow > slowerMAnow) && (fasterMAprevious < slowerMAprevious) && (fasterMAafter > slowerMAafter))
{
YesTrade = true;
}
}
if (TradeType == "SELL") // Check for cross down
{
if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > slowerMAprevious) && (fasterMAafter < slowerMAafter))
{
YesTrade =true;
}
}
return (YesTrade);
}
int CheckFilters()
{
if (UseJuice)
{
if (Juice(1, JuicePeriod, JuiceLevel) <= 0) return(0);
}
return (1);
}
int start()
{
// код доступен только после оплаты
}
datetime DoTrades(string OrdText, string SetupStr,int MagicNum,double lotM, double SSl, double TTr, datetime LstTime)
{
double Min_OrderPrice;
int err,tries;
double dtries;
int ticket;
datetime lsttim;
lsttim = LstTime;
if(OrdText == "BUY")
{
Min_OrderPrice=MinOrderPrice(OP_BUY, MagicNum);
if (Min_OrderPrice>0 && Min_OrderPrice<=Ask*1.05) {
Print("Buy too expensive => MinOrderPrice= " + Min_OrderPrice + " Ask=" + Ask);
} else {
tries = 0;
while (tries < 3)
{
ticket = OrderSend(Symbol(),OP_BUY,lotM,Ask,Slippage,SSl,TTr,SetupStr,MagicNum,0,Green);
if (Debug)
{
dtries = tries;
Print ("Buy at ",TimeToStr(CurTime())," for ",Ask, " try:",tries);
Write ("Buy at " + TimeToStr(CurTime()) + " for " + DoubleToStr(Ask,4) +Показано первые 50% кода (символов: 12837)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.