← К каталогу
Исходный код · ID 260

LSMA_Daily_wLog

lsma_daily_ea_v1.1.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник использует расчёт LSMA (Least Squares Moving Average) для формирования сигналов на покупку и продажу. Торговля осуществляется на дневном таймфрейме с возможностью однократного запуска обработки на каждой завершённой свече. Советник поддерживает работу в указанном диапазоне месяцев и управляет позициями через стандартные торговые API MetaTrader 4.

Настройки программы

НастройкаОписание
Expert_Name Имя советника — Текстовая строка, используемая в качестве идентификатора советника на графике и в комментариях к ордерам.
MagicNumberBase Базовый магический номер — Целочисленное значение, которое используется как основа для формирования уникального магического номера ордеров данного советника.
UserComment Пользовательский комментарий — Строка комментария, присваиваемая каждому открываемому ордеру.
in Разделитель настроек индикатора — Текстовый разделитель, обозначающий группу параметров, связанных с расчётом индикатора.
LSMAShortPeriod Короткий период LSMA — Целочисленный период для расчёта краткой LSMA, используемой в сигналах.
LSMALongPeriod Длинный период LSMA — Целочисленный период для расчёта длинной LSMA, используемой в сигналах.
MonthStart Начальный месяц — Номер месяца, с которого советник начинает активную торговлю.
MonthEnd Конечный месяц — Номер месяца, до которого советник выполняет торговлю.
UseFreshCross Использовать свежий пересечённый сигнал — При включении советник проверяет наличие свежего пересечения линий LSMA перед открытием новой позиции.
mm Разделитель настроек управления капиталом — Текстовый разделитель, обозначающий группу параметров управления денежными средствами.
Lots Базовый размер лота — Фиксированный размер лота, используемый при отключённом управлении капиталом.
MaxLots Максимальный размер лота — Верхний предел размера лота при расчёте.
Change to false to shutdown money management controls. (UseMoneyManagement) Использовать управление капиталом — Включает или отключает автоматический расчёт размера лота на основе риска.
BrokerIsIBFX Брокер является IBFX — Флаг, учитывающий особенности расчёта лота для брокера IBFX.
m1 Подсказка для мини/микро счёта — Текстовая подсказка, связанная с настройками учёта типа торгового счёта.
fm Подсказка использования свободного маржи — Текстовая подсказка, связанная с выбором базы для расчёта размера лота.
UseFreeMargin Использовать свободный маржинал — При включении расчёт лота производится на основе свободного маржи, иначе — на основе баланса счёта.
Change to whatever percent of equity you wish to risk. (TradeSizePercent) Процент риска — Процент от средств счёта, используемый для определения размера лота при управлении капиталом.
BrokerPermitsFractionalLots Брокер разрешает дробные лоты — Флаг, определяющий, допускает ли брокер дробные значения лота.
st6 Разделитель настроек контроля прибыли — Текстовый разделитель, обозначающий группу параметров контроля прибыли и убытков.
StopLoss Стоп-лосс — Размер стоп-лосса в пунктах для каждой сделки; ноль означает отсутствие стоп-лосса.
TakeProfit Тейк-профит — Размер тейк-профита в пунктах для каждой сделки; ноль означает отсутствие тейк-профита.
Slippage Допустимое проскальзывание — Максимально допустимое проскальзывание цены при открытии и закрытии ордеров в пунктах.
db0 Разделитель однократного запуска — Текстовый разделитель, обозначающий группу параметров однократного запуска на баре.
db1 Подсказка совместимости стоп-лосса — Текстовая подсказка о совместимости стоп-лосса с режимом однократного запуска.
db2 Подсказка совместимости тейк-профита — Текстовая подсказка о совместимости тейк-профита с режимом однократного запуска.
UseOncePerDailyBar Однократный запуск на дневной свече — При включении советник выполняет торговую логику только один раз на каждой завершённой дневной свече.
Получить полный код

Поиск по коду файла

#include <stdlib.mqh>

extern string  Expert_Name    = "LSMA_Daily";
extern int     MagicNumberBase = 200000;
extern string  UserComment = "LSMA_EA";
extern string  in="---Indicator settings---";
extern int     LSMAShortPeriod=7;
extern int     LSMALongPeriod=16;
extern int     MonthStart = 1;
extern int     MonthEnd = 12;
extern bool    UseFreshCross = true;

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    UseOncePerDailyBar = true;

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;
   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;

   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)

Показано первые 50% кода (символов: 8585)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
858,50₽ ≈ $10.49