LSMA_EA
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «lsma_ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Этот торговый советник для платформы MetaTrader 4 использует индикатор LSMA (Least Squares Moving Average) для формирования сигналов на вход и выход из сделок. Советник рассчитывает разницу между двумя линиями LSMA, сдвинутыми на разные периоды, и сравнивает её с заданными порогами для принятия решений о покупке или продаже. Поддерживается управление размером лота как фиксированным значением, так и через встроенные механизмы управления рисками. Советник работает с ордерами типа buy и sell, устанавливает стоп-лосс и тейк-профит, а также контролирует количество открытых позиций по одному символу.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert_Name | Имя советника — Текстовый идентификатор советника, используется в комментариях к ордерам. |
| MagicNumberBase | База магического числа — Целочисленное базовое значение, из которого формируется уникальный магический номер для ордеров с учётом символа и таймфрейма. |
| UserComment | Комментарий пользователя — Текстовый комментарий, присваиваемый каждому открываемому ордеру. |
| in | Разделитель настроек индикатора — Текстовый разделитель, группирующий параметры, связанные с расчётом индикатора. |
| p | Группа типов цены — Текстовый заголовок группы, описывающий доступные варианты применяемой цены. |
| p0 | Тип цены — Close — Вариант применяемой цены: цена закрытия свечи. |
| p1 | Тип цены — Open — Вариант применяемой цены: цена открытия свечи. |
| p2 | Тип цены — High — Вариант применяемой цены: максимальная цена свечи. |
| p3 | Тип цены — Low — Вариант применяемой цены: минимальная цена свечи. |
| p4 | Тип цены — Median — Вариант применяемой цены: среднее между высоким и низким ценой. |
| p5 | Тип цены — Typical — Вариант применяемой цены: среднее из высокого, низкого и цен закрытия. |
| p6 | Тип цены — Weighted — Вариант применяемой цены: взвешенное среднее по четырём ценам свечи. |
| LSMA_Period | Период LSMA — Период расчёта линии регрессии LSMA, используемой для формирования сигналов. |
| LSMA_AppliedPrice | Применяемая цена LSMA — Целочисленный индекс типа цены, используемой при расчёте LSMA (соответствует одному из вариантов p0–p6). |
| What size angle to trigger a trade (EntryDif_Threshold) | Порог входа — Числовое значение углового разделения LSMA, при превышении которого генерируется сигнал на вход в сделку. |
| ExitDif_Threshold | Порог выхода — Числовое значение углового разделения LSMA, при котором срабатывает условие закрытия позиции. |
| PrevMAShift | Сдвиг предыдущей MA — Сдвиг относительно текущего бара для расчёта предыдущего значения LSMA. |
| CurMAShift | Сдвиг текущей MA — Сдвиг относительно текущего бара для расчёта текущего значения LSMA. |
| mm | Разделитель настроек управления денежными средствами — Текстовый разделитель, группирующий параметры управления размером позиции. |
| Lots | Размер лота — Фиксированный размер лота для каждой сделки при отключённом управлении рисками. |
| MaxLots | Максимальный лот — Верхний предел размера лота, который не может быть превышен при расчёте. |
| Change to false to shutdown money management controls. (UseMoneyManagement) | Использовать управление рисками — Переключатель: при значении true размер лота рассчитывается автоматически, при false используется фиксированное значение Lots. |
| BrokerIsIBFX | Брокер IBFX — Переключатель, активирующий специальную корректировку размера лота для брокера IBFX. |
| m1 | Подсказка по типу счёта — Текстовая подсказка о необходимости отключения мини- и микро-счетов для стандартного аккаунта. |
| fm | Подсказка по свободному марже — Текстовая подсказка: при UseFreeMargin=false для расчёта лота используется баланс счёта. |
| UseFreeMargin | Использовать свободный маржу — Переключатель: при true расчёт лота базируется на свободном марже, при false — на балансе счёта. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска — Процент от средств счёта, используемый при автоматическом расчёте размера лота. |
| BrokerPermitsFractionalLots | Брокер разрешает дробные лоты — Переключатель, определяющий, допускает ли брокер дробные значения лота. |
| st6 | Разделитель настроек контроля прибыли — Текстовый разделитель, группирующий параметры стоп-лосса, тейк-профита и проскальзывания. |
| StopLoss | Стоп-лосс — Размер стоп-лосса в пунктах для каждой сделки; ноль означает отсутствие стоп-лосса. |
| TakeProfit | Тейк-профит — Размер тейк-профита в пунктах для каждой сделки; ноль означает отсутствие тейк-профита. |
| Slippage | Проскальзывание — Максимально допустимое проскальзывание в пунктах при открытии и закрытии ордеров. |
| db0 | Разделитель одноразового запуска — Текстовый разделитель для группы настроек одноразового запуска на бар. |
| db1 | Подсказка по стоп-лоссу — Текстовая подсказка о необходимости отключить UseOncePerBar при использовании стоп-лосса. |
| db2 | Подсказка по тейк-профиту — Текстовая подсказка о необходимости отключить UseOncePerBar при использовании тейк-профита или трейлинг-стопа. |
| UseOncePerBar | Одноразовый запуск на бар — Переключатель: при true советник выполняет торговые операции не более одного раза на завершённый бар. |
Поиск по коду файла
#include <stdlib.mqh>
extern string Expert_Name = "LSMA_EA";
extern int MagicNumberBase = 200000;
extern string UserComment = "LSMA_EA";
extern string in="---Indicator settings---";
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 LSMA_Period=7;
extern int LSMA_AppliedPrice = 0;
extern double EntryDif_Threshold=10; // What size angle to trigger a trade
extern double ExitDif_Threshold=2;
extern int PrevMAShift=3;
extern int CurMAShift=1;
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;
extern string db0="---Flag to run start once per bar---";
extern string db1=" Set to false when using stoploss";
extern string db2=" takeprofit or trailing stop";
extern bool UseOncePerBar = true;
int MagicNumber=0;
string setup;
int TradesInThisSymbol = 0;
double mLots=0;
datetime timeprev = 0;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double LSMA(int Rperiod, int prMode, int shift)
{
int i, myShift;
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;
myShift = length - i + shift;
switch (prMode)
{
case 0: pr = iClose(NULL,0,myShift);break;
case 1: pr = iOpen(NULL,0,myShift);break;
case 2: pr = iHigh(NULL,0,myShift);break;
case 3: pr = iLow(NULL,0,myShift);break;
case 4: pr = (iHigh(NULL,0,myShift) + iLow(NULL,0,myShift))/2;break;
case 5: pr = (iHigh(NULL,0,myShift) + iLow(NULL,0,myShift) + iClose(NULL,0,myShift))/3;break;
case 6: pr = (iHigh(NULL,0,myShift) + iLow(NULL,0,myShift) + iClose(NULL,0,myShift) + iClose(NULL,0,myShift))/4;break;
}
tmp = ( i - lengthvar)*pr;
sum+=tmp;
}
wt = sum*6/(length*(length+1));
wt = MathFloor(wt/Point)*Point;
return(wt);
}
double MA_Dif( int PrevShift, int CurShift)
{
double fDif, mFactor;
double fCurMA, fPrevMA;
string Sym;
int ShiftDif;
mFactor = 100000.0;
Sym = StringSubstr(Symbol(),3,3);
if (Sym == "JPY") mFactor = 1000.0;
ShiftDif = PrevShift-CurShift;
mFactor /= ShiftDif;
fCurMA=LSMA(LSMA_Period,LSMA_AppliedPrice,CurShift);
fPrevMA=LSMA(LSMA_Period,LSMA_AppliedPrice,PrevShift);
fDif = mFactor * (fCurMA - fPrevMA)/2.0;
return(fDif);
}
bool CheckExitCondition(int cmd)
{
double maDif;
maDif = MA_Dif(PrevMAShift, CurMAShift);
switch (cmd)
{
case OP_BUY : if (maDif < ExitDif_Threshold) return(true);
break;
case OP_SELL : if (maDif > -ExitDif_Threshold) return(true);
}
return(false);
}
bool CheckEntryCondition(int cmd)
{
double maDif;
maDif = MA_Dif(PrevMAShift, CurMAShift);
switch (cmd)
{
case OP_BUY : if (maDif > EntryDif_Threshold) return(true);
break;
case OP_SELL : if (maDif < -EntryDif_Threshold) return(true);
}
return(false);
}
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 (DigПоказано первые 50% кода (символов: 9189)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.