LSMA_Daily
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «lsma_daily_ea1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
LSMA_Daily — это торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Робот использует скользящую среднюю наименьших квадратов (Least Squares Moving Average) для формирования торговых сигналов на дневном таймфрейме. Советник автоматически открывает и закрывает позиции, отслеживая текущие ордера по заданному символу и магическому номеру.
В работе используются два периода скользящей средней для определения точек входа и выхода из сделок. Робот запускает обработки только после завершения формирования нового бара, что исключает повторные действия внутри одного тика. Поддерживается ограничение в одну активную позицию на символ.
Советник оснащён системой управления денежными средствами с возможностью расчёта размера лота на основе процента от баланса или свободного маржа. Доступны стандартные защитные параметры: стоп-лосс, тейк-профит и проскальзывание. Работа может быть адаптирована под мини-, микро- и стандартные счета.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert_Name | Имя советника — Текстовый параметр, задающий имя советника, используемое в комментариях ордеров и для формирования идентификатора настройки. |
| LSMAShortPeriod | Короткий период LSMA — Целочисленный параметр, задающий короткий период расчёта скользящей средней для формирования сигналов. |
| LSMALongPeriod | Длинный период LSMA — Целочисленный параметр, задающий длинный период расчёта скользящей средней для формирования сигналов. |
| mm | Группа: управление денежными средствами — Текстовый параметр, служащий заголовком группы настроек управления денежными средствами. |
| Lots | Размер лота — Числовой параметр, задающий начальный размер лота при отключённом управлении денежными средствами. |
| MaxLots | Максимальный лот — Числовой параметр, задающий максимально допустимый размер лота для одной сделки. |
| Change to false to shutdown money management controls. (UseMoneyManagement) | Управление денежными средствами — Переключатель, включающий или отключающий систему управления денежными средствами. При значении false размер лота фиксируется параметром Lots. |
| BrokerIsIBFX | Брокер IBFX — Переключатель, указывающий, что брокер является IBFX (используется для корректировки расчёта размера лота). |
| m1 | Группа: тип счёта — Текстовый параметр, служащий заголовком группы настроек, связанных с типом счёта (мини/микро). |
| fm | Группа: расчёт лота — Текстовый параметр, служащий заголовком группы настроек, связанных с расчётом лота на основе остатка средств. |
| UseFreeMargin | Использовать свободный маржа — Переключатель. При значении true расчёт размера лота выполняется на основе свободного маржа, при false — на основе баланса счёта. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска от остатка — Числовой параметр, задающий процент от остатка средств, который следует рисковать при расчёте размера лота. |
| BrokerPermitsFractionalLots | Дробные лоты разрешены — Переключатель, определяющий, разрешает ли брокер дробные лоты. При значении false размер лота округляется до целого числа. |
| st6 | Группа: параметры прибыли — Текстовый параметр, служащий заголовком группы настроек, связанных с параметрами прибыли (стоп-лосс и тейк-профит). |
| StopLoss | Стоп-лосс — Числовой параметр, задающий уровень стоп-лосса для сделок (в пунктах). Значение 0 означает отсутствие стоп-лосса. |
| TakeProfit | Тейк-профит — Числовой параметр, задающий уровень тейк-профита для сделок (в пунктах). Значение 0 означает отсутствие тейк-профита. |
| Slippage | Проскальзывание — Целочисленный параметр, задающий допустимое проскальзывание цены при исполнении ордеров (в пунктах). |
Поиск по коду файла
#include <stdlib.mqh>
extern string Expert_Name = "LSMA_Daily";
extern int LSMAShortPeriod=7;
extern int LSMALongPeriod=16;
extern string mm = "---Money Management---";
extern double Lots=1.0;
extern double MaxLots = 100;
extern bool UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern bool BrokerIsIBFX = false;
extern string m1="Set mini and micro to false for standard account";
extern bool AccountIsMini = false;
extern bool AccountIsMicro = false;
extern string fm="UseFreeMargin = false to use Account Balance";
extern bool UseFreeMargin = false;
extern double TradeSizePercent = 10; // Change to whatever percent of equity you wish to risk.
extern bool BrokerPermitsFractionalLots = true;
extern string st6 = "--Profit Controls--";
extern double StopLoss=0;
extern double TakeProfit=0;
extern int Slippage=3;
int MagicNumber=0;
string setup;
int TradesInThisSymbol = 0;
double mLots=0;
datetime timeprev = 0;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double LSMADaily(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)*iClose(NULL,1440,length-i+shift);
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
bool CheckExitCondition(int TradeType)
{
bool YesClose;
double L_Fast,L_Slow;
YesClose = false;
L_Fast=LSMADaily(LSMAShortPeriod,1);
L_Slow=LSMADaily(LSMALongPeriod,1);
if (TradeType == OP_BUY)
{
if (L_Fast < L_Slow) YesClose = true;
}
if (TradeType == OP_SELL)
{
if (L_Fast > L_Slow) YesClose = true;
}
return (YesClose);
}
bool CheckEntryCondition(int TradeType)
{
bool YesTrade;
double L_Fast,L_Slow;
L_Fast=LSMADaily(LSMAShortPeriod,1);
L_Slow=LSMADaily(LSMALongPeriod,1);
YesTrade = false;
if (TradeType == OP_BUY)
{
if ( L_Fast > L_Slow) YesTrade = true;
}
if (TradeType == OP_SELL)
{
if ( L_Fast < L_Slow) YesTrade = true;
}
return (YesTrade);
}
int start()
{
// код доступен только после оплаты
}
double GetLots()
{
double lot;
if(UseMoneyManagement == true)
{
lot = LotsOptimized();
}
else
{
lot = Lots;
}
if (AccountIsMicro == true)
{
if (lot < 0.01) lot = 0.01;
if (lot > MaxLots) lot = MaxLots * 100;
if (BrokerIsIBFX == true) lot = lot * 10;
return(lot);
}
if(AccountIsMini == true)
{
if (lot < 0.1) lot = 0.1;
if (lot > MaxLots) lot = MaxLots;
if (BrokerIsIBFX == true) lot = lot * 10;
return(lot);
}
if( BrokerPermitsFractionalLots == false)
{
if (lot >= 1.0) lot = MathFloor(lot); else lot = 1.0;
}
if (lot > MaxLots) lot = MaxLots;
return(lot);
}
double LotsOptimized()
{
double lot=Lots;
if (UseFreeMargin == true)
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/10000)/10,1);
else
lot=NormalizeDouble(MathFloor(AccountBalance()*TradeSizePercent/10000)/10,1);
if(AccountIsMini == true)
{
lot = MathFloor(lot*10)/10;
}
return(lot);
}
int OpenBuyOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
int err,ticket;
double myPrice, myStopLoss = 0, myTakeProfit = 0;
RefreshRates();
myStopLoss = StopLong(Bid,mStopLoss);
myTakeProfit = TakeLong(Bid,mTakeProfit);
if (Digits > 0)
{
myPrice = NormalizeDouble( Ask, Digits);
myStopLoss = NormalizeDouble( myStopLoss, Digits);
myTakeProfit = NormalizeDouble( myTakeProfit, Digits);
}
ticket=OrderSend(Symbol(),OP_BUY,mLots,myPrice,mSlippage,myStopLoss,myTakeProfit,mComment,mMagic,0,mColor);
if (ticket > 0)
{
if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) )
{
Print("BUY order opened : ", OrderOpenPrice( ));
}
}
else
{
err = GetLastError();
if(err==0)
{
return(ticket);
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
}
else //normal error
{
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
}
return(ticket);
}
void OpenSellOrder(Показано первые 50% кода (символов: 7751)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.