densityscalperea.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.