← Назад к списку файлов

densityscalperea.mq4

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

#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 и нажмите кнопку, чтобы перейти к оплате.