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

lsma_daily_ea_slmm.mq4

Вы автор или правообладатель?

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

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

О программе

Советник для MetaTrader 4, работающий на основе индикатора LSMA (Least Squares Moving Average). Он рассчитывает значения LSMA для двух периодов — короткого и длинного — и формирует сигналы на покупку или продажу при пересечении этих линий. Советник управляет позициями: проверяет открытые ордера, закрывает их при смене направления сигнала и открывает новые сделки раз в бар. Поддерживается ручное управление лотами, а также варианты контроля риска через стоп-лосс, тейк-профит и управление денежными средствами.

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

НастройкаОписание
Expert_Name Имя советника — Текстовый идентификатор, используемый в комментариях к ордерам и логировании.
LSMAShortPeriod Короткий период LSMA — Целое число, задающее период расчёта краткой LSMA-линии.
LSMALongPeriod Длинный период LSMA — Целое число, задающее период расчёта длинной LSMA-линии.
mm Разделитель управления денежными средствами — Текстовый разделитель-группировка в интерфейсе настроек.
Lots Размер лота — Базовый размер лота для сделки при ручном управлении.
MaxLots Максимальный лот — Ограничение максимального размера лота.
BrokerIsIBFX Брокер IBFX — Переключатель, активирующий специальную корректировку лота для брокера IBFX.
m1 Настройка мини/микро счёта — Текстовый разделитель с подсказкой о настройках для стандартного счёта.
Change to whatever percent of equity you wish to risk. (TradeSizePercent) Процент риска — Процент от средств счёта, используемый для расчёта размера лота при управлении риском.
BrokerPermitsFractionalLots Брокер разрешает дробные лоты — Переключатель, определяющий, допускает ли брокер дробные значения лота.
st6 Разделитель контроля прибыли — Текстовый разделитель-группировка в интерфейсе настроек.
StopLoss Стоп-лосс — Фиксированный размер стоп-лосса в пунктах; ноль означает отключение.
TakeProfit Тейк-профит — Фиксированный размер тейк-профита в пунктах; ноль означает отключение.
Slippage Допустимое проскальзывание — Максимально допустимое проскальзывание цены при открытии и закрытии ордера в пунктах.
st8 Разделитель управления рисками — Текстовый разделитель-группировка в интерфейсе настроек.
UseMoneyManagement Использовать управление денежными средствами — Переключатель, включающий автоматический расчёт размера лота на основе риска.
UseStopLossMM Использовать стоп-лосс в расчёте лота — Переключатель: при включении размер лота рассчитывается с учётом стоп-лосса; при выключении — по свободному маржиналу или балансу.
UseFreeMargin Использовать свободный маржинал — Переключатель, определяющий, расчёт лота ведётся от свободного маржинала или от баланса счёта.
Risk Риск — Числовой параметр, задающий процентный размер риска для расчёта лота.
max pips loss possible if you don't use a stopploss (maxPipsLoss) Максимальная потеря в пунктах — Максимально допустимая потеря в пунктах, используемая при расчёте размера лота при отсутствии стоп-лосса.
Получить полный код

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

#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    BrokerIsIBFX = false;
extern string  m1="Set mini and micro to false for standard account";
extern bool    AccountIsMini = false;
extern bool    AccountIsMicro = 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  st8 = "-- Money Management --";
extern bool    UseMoneyManagement = true;
extern bool    UseStopLossMM = true;
extern bool    UseFreeMargin = true;
extern double  Risk = 5;
extern int     maxPipsLoss=100; //max pips loss possible if you don't use a stopploss

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)
   {
     if (UseStopLossMM) lot = GetSLMMLots();
     else lot = GetMMLots();
   }
   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 GetSLMMLots()
  {
   double lot=Lots;
   if (StopLoss!=0) maxPipsLoss=StopLoss;
   if (UseFreeMargin == true)
        lot = NormalizeDouble((Risk/100)*AccountFreeMargin()/(maxPipsLoss*MarketInfo(Symbol(),MODE_TICKVALUE)),2);
   else
        lot = NormalizeDouble((Risk/100)*AccountBalance()/(maxPipsLoss*MarketInfo(Symbol(),MODE_TICKVALUE)),2);

   Print("next SL >"+(lot * MarketInfo(Symbol(),MODE_TICKVALUE)*(StopLoss+((Ask-Bid)*2))));
   Print("MarketInfo(Symbol(),MODE_TICKVALUE) "+MarketInfo(Symbol(),MODE_TICKVALUE));
   return(lot);
} 

double GetMMLots()
  {
   double lot=Lots;
   if (UseFreeMargin == true)
        lot = NormalizeDouble((Risk)*AccountFreeMargin()/MarketInfo(Symbol(),MODE_LOTSIZE),2);
   else
        lot = NormalizeDouble((Risk)*AccountBalance()/MarketInfo(Symbol(),MODE_LOTSIZE),2);
        Print("Lotsize >"+MarketInfo(Symbol(),MODE_LOTSIZE));
   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
      {

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

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

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

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

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

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

Стоимость полного кода
832,20₽ ≈ $10.17