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

densityscalperea.mq4

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

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

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

О программе

Density Scalper EA — торговый советник для MetaTrader 4, использующий индикаторные каналы Envelopes для формирования сигналов на покупку и продажу. Советник анализирует два набора каналов (внутренний и внешний) на выбранном таймфрейме и определяет моменты для открытия позиций при пересечении ценовых экстремумов с границами каналов. Поддерживаются как рыночные ордера, так и отложенные лимитные ордера с настраиваемым количеством и расстоянием между ними.

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

НастройкаОписание
indicatorstrategy Стратегия — Текстовый заголовок группы настроек стратегии
EaTimeFrame Таймфрейм — Таймфрейм, на котором работает советник; при ненулевом значении советник проверяет соответствие текущего графика
innerlimits Внутренние пределы — Текстовый заголовок группы настроек внутреннего канала
innerperiod Период внутреннего канала — Период расчёта внутреннего индикатора Envelopes
innermethod Метод внутреннего канала — Метод сглаживания для расчёта внутреннего канала
innershift Сдвиг внутреннего канала — Горизонтальный сдвиг внутреннего канала по оси времени
innerprice Цена внутреннего канала — Тип цены, используемой для расчёта внутреннего канала
innerdensity Плотность внутреннего канала — Коэффициент отклонения для ширины внутреннего канала
innermagic Магический номер внутреннего — Магический номер, присваиваемый внутренним ордерам для их идентификации
outerlimits Внешние пределы — Текстовый заголовок группы настроек внешнего канала
outerperiod Период внешнего канала — Период расчёта внешнего индикатора Envelopes
outermethod Метод внешнего канала — Метод сглаживания для расчёта внешнего канала
outershift Сдвиг внешнего канала — Горизонтальный сдвиг внешнего канала по оси времени
outerprice Цена внешнего канала — Тип цены, используемой для расчёта внешнего канала
outerdensity Плотность внешнего канала — Коэффициент отклонения для ширины внешнего канала
outermagic Магический номер внешнего — Магический номер, присваиваемый внешним ордерам для их идентификации
moneymanagement Управление деньгами — Текстовый заголовок группы настроек управления размером лота
retries Количество повторных попыток — Максимальное число попыток повторного выполнения торговой операции
slippage Допустимый проскальзывание — Максимально допустимое проскальзывание в пунктах при исполнении ордера
spreadlimit Лимит спреда — Максимально допустимый спред в пунктах; при нулевом или отрицательном значении проверка отключается
marketorders Рыночные ордера — Включает или отключает исполнение рыночных ордеров
limitorders Лимитные ордера — Включает или отключает размещение отложенных лимитных ордеров
limitquantity Количество лимитных ордеров — Число лимитных ордеров, размещаемых при срабатывании сигнала
limitbuffer Буфер лимитных ордеров — Расстояние в пунктах между последовательными лимитными ордерами
lotoption Режим лота — Режим расчёта размера лота: фиксированный, процент от баланса или от эквити с вариантами полного или разделённого распределения
lotsize Размер лота — Фиксированный размер лота при соответствующем режиме
percentofbalance Процент от баланса — Процент от баланса счёта, используемый для расчёта размера лота
percentofequity Процент от эквити — Процент от эквити счёта, используемый для расчёта размера лота
miscellaneous Разное — Текстовый заголовок группы дополнительных настроек
doSignalLines Линии сигналов — Включает отрисовку вертикальных линий на графике в местах возникновения сигналов
doSignalPrices Цены сигналов — Включает размещение стрелок на графике в точках сигналов
InnerDn Цвет внутренней продажи — Цвет маркера для сигнала внутренней продажи
OuterDn Цвет внешней продажи — Цвет маркера для сигнала внешней продажи
InnerUp Цвет внутренней покупки — Цвет маркера для сигнала внутренней покупки
OuterUp Цвет внешней покупки — Цвет маркера для сигнала внешней покупки
Получить полный код

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

#property description "Density $calper"

#property version   "1.00"
#property strict

/*************************************************************||
*** GLOBAL VARIABLES *****************************************
**************************************************************/

const int SELL=2,
          BUY=1,
          NA=0;

bool isNewBar;
int min,sec;

int intSpreadMultiplier;

bool bOuterUpper,bOuterLower,bInnerUpper,bInnerLower;
bool SignalThisBar=false;
int Signal;

bool OrdersOpen;
int iInnerB,iOuterB,iInnerS,iOuterS;
int iInnerBL,iOuterBL,iInnerSL,iOuterSL;

double CumulativePL;
string EaComment="D$";

/*************************************************************||
*** ENUMERATED LISTS *****************************************
**************************************************************/

enum OptLot{Fixed=0,/*Fixed Lot*/EquityFull=1,/*% Equity Full*/EquitySplit=2,/*% Equity Split*/BalanceFull=3,/*% Balance Full*/BalanceSplit=4,/*% Balance Split*/};

/*************************************************************||
*** EXTERNAL INPUTS ******************************************
**************************************************************/

input string             indicatorstrategy = "< - - - - ";
input ENUM_TIMEFRAMES    EaTimeFrame       = PERIOD_M1;
      bool               trailexits        = true;

input string             innerlimits       = "< - - - - ";
input int                innerperiod       = 81;
input ENUM_MA_METHOD     innermethod       = MODE_SMMA;
input int                innershift        = 0;
input ENUM_APPLIED_PRICE innerprice        = PRICE_OPEN;
input double             innerdensity      = 0.06;
input int                innermagic        = 1;

input string             outerlimits       = "< - - - - ";
input int                outerperiod       = 9;
input ENUM_MA_METHOD     outermethod       = MODE_SMMA;
input int                outershift        = 0;
input ENUM_APPLIED_PRICE outerprice        = PRICE_OPEN;
input double             outerdensity      = 0.09;
input int                outermagic        = 2;

input string             moneymanagement   = "< - - - - ";
input int                retries           = 10;
input int                slippage          = 40;
input int                spreadlimit       = 25;
input bool               marketorders      = TRUE;
input bool               limitorders       = TRUE;
input int                limitquantity     = 40;
input int                limitbuffer       = 20;
input OptLot             lotoption         = EquitySplit;
input double             lotsize           = 0.01;
input double             percentofbalance  = 0.45;
input double             percentofequity   = 1.67;

input string             miscellaneous     = "<-- -- -- -- ";
      bool               doLabels          = FALSE;
      color              FontColor         = DarkKhaki;
      string             Font              = "Calibri";
      int                FontSize          = 7;
      int                Corner            = 1;

input bool               doSignalLines     = FALSE;

input bool               doSignalPrices    = FALSE;
input color              InnerDn           = Aqua;
input color              OuterDn           = Blue;
input color              InnerUp           = Gold;
input color              OuterUp           = Red;

/*************************************************************||
*** INDICATOR CODE *******************************************
**************************************************************/

double inner(int buffer,int bar){ return( iEnvelopes(NULL,0,innerperiod,innermethod,innershift,innerprice,innerdensity,buffer,bar) ); }
double outer(int buffer,int bar){ return( iEnvelopes(NULL,0,outerperiod,outermethod,outershift,outerprice,outerdensity,buffer,bar) ); }
void getSignals(int i)
 {
  Signal=NA; 
  double OuterUpper=outer(MODE_UPPER,i); bOuterUpper=false;
  double OuterLower=outer(MODE_LOWER,i); bOuterLower=false;
  double InnerUpper=inner(MODE_UPPER,i); bInnerUpper=false;
  double InnerLower=inner(MODE_LOWER,i); bInnerLower=false;
  if( Low[i]<=OuterLower && High[i]>=OuterLower ) //outer signals
   { Signal=BUY; bOuterLower=TRUE; 
     if(doSignalLines){ VLINE("VLINEO"+IntegerToString(i),Time[i],Red,3); } 
     if(doSignalPrices){ ARROW("ARROWO"+IntegerToString(i),Time[i],OuterLower,4,OuterUp); } }
  if( High[i]>=OuterUpper && Low[i]<=OuterUpper )
   { Signal=SELL; bOuterUpper=TRUE; 
     if(doSignalLines){ VLINE("VLINEO"+IntegerToString(i),Time[i],Blue,3); } 
     if(doSignalPrices){ ARROW("ARROWO"+IntegerToString(i),Time[i],OuterUpper,4,OuterDn); } }
  if( OuterUpper>InnerUpper && OuterLower<InnerLower ) //inner signals
   {
   if( Low[i]<=InnerLower && High[i]>=InnerLower )
    { Signal=BUY; bInnerLower=TRUE; 
      if(doSignalLines){ VLINE("VLINEI"+IntegerToString(i),Time[i],Gold,1); } 
      if(doSignalPrices){ ARROW("ARROWI"+IntegerToString(i),Time[i],InnerLower,4,InnerUp); } }
   if( High[i]>=InnerUpper && Low[i]<=InnerUpper )
    { Signal=SELL; bInnerUpper=TRUE; 
      if(doSignalLines){ VLINE("VLINEI"+IntegerToString(i),Time[i],Aqua,1); } 
      if(doSignalPrices){ ARROW("ARROWI"+IntegerToString(i),Time[i],InnerUpper,4,InnerDn); } }
   } 
 }

/*************************************************************||
*** MINI-FUNCTIONS *******************************************
**************************************************************/

bool bGoodSpread(){ if((spreadlimit>0 && NormalizeDouble((Ask-Bid)*intSpreadMultiplier,1)<=spreadlimit) || spreadlimit<=0){return(TRUE);} return(FALSE); }
bool bWrongTF(){ if(EaTimeFrame!=0){ if(strPeriod(Period())!=strPeriod(EaTimeFrame)){ return(TRUE); } } return(false); }
string strSignal(int iSS){if(iSS==1 || iSS==3){return("BUY");}if(iSS==2 || iSS==4){return("SELL");}return("NA");}
bool bNewBar(){ static datetime B1T; if(B1T!=Time[0]){ B1T=Time[0]; return(true); } return(false); }
bool Expire(){ if(CurTime()>=StrToTime("2018.08.11")){return(TRUE);} return(false); } 
string strPeriod(int Per)
  {
   if(Per==0){ Per=Period(); } if(Per==1){ return("M1"); } if(Per==5){ return("M5"); }
   if(Per==15){ return("M15"); } if(Per==30){ return("M30"); } if(Per==60){ return("H1"); }
   if(Per==240){ return("H4"); } if(Per==1440){ return("D1"); } if(Per==10080){ return("W1"); }
   if(Per==43200){ return("MN"); } return("{ Unknown Timeframe }");
  }

/*************************************************************||
*** OPEN AND CLOSED TRADE POOL *******************************
**************************************************************/

bool OpenOrdersFound()
 {
 iInnerBL=0; iOuterBL=0; iInnerSL=0; iOuterSL=0; 
 iInnerB=0; iOuterB=0; iInnerS=0; iOuterS=0;
 CumulativePL=0;
 int OrdersOT=OrdersTotal(); 
 for(int X=0; X<OrdersOT; X++)
  {
  if(!OrderSelect(X,SELECT_BY_POS,MODE_TRADES) ){continue;}
  if( OrderMagicNumber()==innermagic )
   {
   if( OrderType()==OP_SELLLIMIT ){ iInnerSL++; }else if( OrderType()==OP_BUYLIMIT ){ iInnerBL++; }
   if( OrderType()==OP_SELL ){ iInnerS++; }else if( OrderType()==OP_BUY ){ iInnerB++; }
   }
  else
   {
   if( OrderMagicNumber()==outermagic )
    { 
    if( OrderType()==OP_SELLLIMIT ){ iOuterSL++; }else if( OrderType()==OP_BUYLIMIT ){ iOuterBL++; }
    if( OrderType()==OP_SELL ){ iOuterS++; }else if( OrderType()==OP_BUY ){ iOuterB++; }
    }
   }
  CumulativePL+=OrderProfit()+OrderCommission()+OrderSwap();
  }
 if( iInnerS+iInnerB+iOuterS+iOuterB>0 ){ return(true); }
 return(false);
 }

/*************************************************************||
*** INITIALIZE ***********************************************
**************************************************************/

int OnInit()
  {
      // код доступен только после оплаты
   }

/*************************************************************||
*** ONTICK ***************************************************
**************************************************************/

void OnTick()
  {
      // код доступен только после оплаты
   }
   if( Expire() ){ Comment("The trial version has expired!"); return; }
   if(bWrongTF()){ Comment("ERROR: Wrong Timeframe"); return; }
   isNewBar=bNewBar(); if(isNewBar){ if( CumulativePL>0 ){ CloseAllOrders(innermagic); CloseAllOrders(outermagic); } SignalThisBar=false; }
   OrdersOpen=OpenOrdersFound();
   getSignals(0);

   if( CumulativePL>0 ){ CloseAllOrders(innermagic); CloseAllOrders(outermagic); }

   if( Signal!=0 && !SignalThisBar && bGoodSpread() )
    {
    switch(Signal)
     {
     case 1: //BUY
      if( bInnerLower )
       {
       if( iInnerSL+iOuterSL>0 ){ DeleteOrders(innermagic); }
       if( iInnerS+iOuterS>0 ){ CloseAllOrders(innermagic); }
       Trade(innermagic);
       }
      if( bOuterLower )
       {
       if( iInnerSL+iOuterSL>0 ){ DeleteOrders(innermagic); }
       if( iInnerS+iOuterS>0 ){ CloseAllOrders(inner

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

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

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

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

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

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

Стоимость полного кода
1 509,80₽ ≈ $18.45