LSMA_Daily_EA
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «lsma_daily_ea_v1.12.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
LSMA_Daily_EA — торговый советник для MetaTrader 4, работающий на дневных временных рамках. Советник анализирует направление тренда и открывает сделки на покупку или продажу при смене направления сигнальных линий. Позиции закрываются при изменении соотношения между быстрой и медленной линиями в обратном направлении.
Работа советника ограничена определённым периодом в течение года. Одновременно может быть открыта только одна позиция по одному символу. Советник поддерживает как ручное управление размером лота, так и автоматический расчёт с учётом процента риска от средств счёта.
Доступны настройки для различных типов брокерских счетов: стандартный, мини и микро. Советник учитывает ограничения брокера на дробные лоты и минимальный размер позиции. Также предусмотрены контроль убытков и фиксация прибыли через стоп-лосс и тейк-профит, а также настройка допустимого проскальзывания при исполнении ордеров.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert_Name | Имя советника — Имя, используемое в комментариях к ордерам и в заголовке настройки. |
| MagicNumberBase | Базовый магический номер — Базовое значение, используемое для формирования уникального идентификатора ордеров. |
| mm | Группа управления денежными средствами — Разделитель группы настроек управления денежными средствами. |
| Lots | Размер лота — Базовый размер лота для сделки при ручном управлении. |
| Change to false to shutdown money management controls. (UseMoneyManagement) | Использовать управление денежными средствами — Включает или отключает автоматический расчёт размера лота. |
| Change to whatever percent of equity you wish to risk. (TradeSizePercent) | Процент риска — Процент от средств счёта, используемый для расчёта размера лота при управлении рисками. |
| BrokerPermitsFractionalLots | Брокер разрешает дробные лоты — Указывает, разрешает ли брокер дробные значения лота. |
| m1 | Настройка типа счёта — Подсказка для настройки учёта типа торгового счёта. |
| BrokerIsIBFX | Брокер IBFX — Флаг, указывающий, что брокер является IBFX, что активирует соответствующую логику расчёта лота. |
| BrokerIsCrownForex | Брокер CrownForex — Флаг, указывающий, что брокер является CrownForex, что активирует соответствующую логику расчёта лота. |
| fm | Группа расчёта лота — Подсказка для выбора базы расчёта размера лота. |
| UseFreeMargin | Использовать свободный маржинал — При включении размер лота рассчитывается на основе свободного маржи, при выключении — на основе баланса счёта. |
| st6 | Группа контроля прибыли — Разделитель группы настроек контроля прибыли и убытков. |
| StopLoss | Стоп-лосс — Фиксированный размер стоп-лосса в пунктах; ноль отключает стоп-лосс. |
| TakeProfit | Тейк-профит — Фиксированный размер тейк-профита в пунктах; ноль отключает тейк-профит. |
| Slippage | Проскальзывание — Максимально допустимое проскальзывание при открытии и закрытии ордеров в пунктах. |
Поиск по коду файла
#include <stdlib.mqh>
#include <stderror.mqh>
extern string Expert_Name = "LSMA_Daily";
extern int MagicNumberBase = 200000;
string UserComment = "LSMA_EA";
string in="---Indicator settings---";
int LSMAShortPeriod=7;
int LSMALongPeriod=16;
int MonthStart = 9;
int MonthEnd = 11;
bool UseFreshCross = true;
extern string mm = "---Money Management---";
extern double Lots=0.1;
extern bool UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern double TradeSizePercent = 10; // Change to whatever percent of equity you wish to risk.
extern bool BrokerPermitsFractionalLots = true;
extern string m1="Set mini and micro to false for standard account";
extern bool AccountIsMini = false;
extern bool AccountIsMicro = false;
extern bool BrokerIsIBFX = false;
extern bool BrokerIsCrownForex = false;
extern string fm="UseFreeMargin = false to use Account Balance";
extern bool UseFreeMargin = false;
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;
bool YesStop;
double myPoint;
int totalTries = 5;
int retryDelay = 1000;
int myTradeErr;
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;
double L_FastPrev,L_SlowPrev;
L_Fast=LSMADaily(LSMAShortPeriod,1);
L_Slow=LSMADaily(LSMALongPeriod,1);
YesTrade = false;
if (TradeType == OP_BUY)
{
if ( L_Fast > L_Slow)
{
if (UseFreshCross == true)
{
L_FastPrev=LSMADaily(LSMAShortPeriod,2);
L_SlowPrev=LSMADaily(LSMALongPeriod,2);
if (L_FastPrev < L_SlowPrev) YesTrade = true; else YesTrade = false;
}
else
YesTrade = true;
}
}
if (TradeType == OP_SELL)
{
if ( L_Fast < L_Slow)
{
if (UseFreshCross == true)
{
L_FastPrev=LSMADaily(LSMAShortPeriod,2);
L_SlowPrev=LSMADaily(LSMALongPeriod,2);
if (L_FastPrev > L_SlowPrev) YesTrade = true; else YesTrade = false;
}
else
YesTrade = true;
}
}
return (YesTrade);
}
int start()
{
// код доступен только после оплаты
}
double GetLots()
{
double lot;
double myMaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
if(UseMoneyManagement == false) return(Lots);
if (BrokerIsIBFX == true)
{
lot = Calc_Money_Management();
return(lot);
}
if (BrokerIsCrownForex == true)
{
lot = Calc_CrownMoney_Management();
return(lot);
}
lot = LotsOptimized();
if (AccountIsMicro == true)
{
lot = MathFloor(lot*100)/100;
if (lot < 0.01) lot = 0.01;
if (lot > myMaxLot) lot = myMaxLot;
return(lot);
}
if(AccountIsMini == true)
{
lot = MathFloor(lot*10)/10;
if (lot < 0.1) lot = 0.1;
if (lot > myMaxLot) lot = myMaxLot;
return(lot);
}
if( BrokerPermitsFractionalLots == false)
{
if (lot >= 1.0) lot = MathFloor(lot); else lot = 1.0;
}
if (lot < 1.0) lot = 1.0;
if (lot > myMaxLot) lot = myMaxLot;
return(lot);
}
double LotsOptimized()
{
double lot=Lots;
if (UseFreeMargin == true)
lot=NormalizeDouble(MathFloor(AccountFreeMargin()*TradeSizePercent/10000)/10,2);
else
lot=NormalizeDouble(MathFloor(AccountBalance()*TradeSizePercent/10000)/10,2);
return(lot);
}
double Calc_CrownMoney_Management()
{
double lot;
lot=NormalizeDouble((AccountEquity()*TradeSizePercent/10000)/10,1);
if(AccountIsMini == true)
{
lot = MathFloor(lot*10)/10 * 10000;
if (lot < 10000) lot = 10000;
return(lot);
}
lot = lot * 100000;
if (lot < 100000) lot = 100000;
return(lot);
}
double Calc_Money_Management()
{
double MM_MinLotSize=0;
double MM_MaxLotSize=0;
double MM_LotStep=0;
double MM_Decimals=0;
int MM_AcctLeverage=0;
int MM_CurrencyLotSize=0;
double OrderLotSize;
MM_AcctLeverage = AccountLeverage();
MM_MinLotSize = MarketInfo(Symbol(),MODE_MINLOT);
MM_MaxLotSize = MarketInfo(Symbol(),MODE_MAXLOT);
MM_LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
MM_CurrencyLotSize = MarketInfo(Symbol(),MODE_LOTSIZE);
if(MM_LotStep == 0.01) {MM_Decimals = 2;}
if(MM_LotStep == 0.1) {MM_Decimals = 1;}
OrderLotSize = AccountEquity() * (TradeSizePercent * 0.01) / (MM_CurrencyLotSize / MM_AcctLeverage);
if(BrokerPermitsFractionalLots == true)
OrderLotSize = StrToDouble(DoubleToStr(OrderLotSize, MM_Decimals));
else
OrderLotSize = MathRound(OrderLotSize);
if (OrderLotSize < MM_MinLotSize) {OrderLotSize = MM_MinLotSize;}
if (OrderLotSize > MM_MaxLotSize) {OrderLotSize = MM_MaxLotSize;}
return(OrderLotSize);
}
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;
double TPprice, STprice;
RefreshRates();
myStopLoss = StopLong(Bid,mStopLoss, myPoint);
myTakeProfit = TakeLong(Bid,mTakeProfit, myPoint);
if (Digits > 0)
{
myPrice = NormalizeDouble( Ask, Digits);
myStopLoss = NormalizeDouble( myStopLoss, Digits);
myTakeProfit = NormalizeDouble( myTakeProfit, Digits);
}
ticket=myOrderSend(Symbol(),OP_BUY,mLots,myPrice,mSlippage,0,0,mComment,mMagic,0,mColor);
if (ticket > 0)
{
if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) )
{
Print("BUY order opened : ", OrderOpenPrice( ));
if (myStopLoss != 0 || myTakeProfit != 0)
{
TPprice = 0;
if (myTakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), myTakeProfit, myPoint);
STprice = 0;
if (myStopLoss > 0)
{
STprice = StopLong(OrderOpenPrice(), myStopLoss, myPoint);
STprice = ValidStopLoss(Symbol(), OP_BUY,Bid, STprice, myPoint);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else
{
err = GetLastError();
if(err==0)
{
return(ticket);
}
else
{
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
return(ticket);
}
void OpenSellOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
int err, ticket;
double myPrice, myStopLoss = 0, myTakeProfit = 0;
double STprice, TPprice;
RefreshRates();
myStopLoss = StopShort(Ask,mStopLoss, myPoint);
myTakeProfit = TakeShort(Ask,mTakeProfit, myPoint);
if (Digits > 0)
{
myPrice = NormalizeDouble( Bid, Digits);
myStopLoss = NormalizeDouble( myStopLoss, Digits);
myTakeProfit = NormalizeDouble( myTakeProfit, Digits);
}
ticket=myOrderSend(Symbol(),OP_SELL,mLots,myPrice,mSlippage,0,0,mComment,mMagic,0,mColor);
if (ticket > 0)
{
if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) )
{
Print("Sell order opened : ", OrderOpenPrice());
if (myStopLoss != 0 || myTakeProfit != 0)
{
TPprice = 0;
Показано первые 50% кода (символов: 13457)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.