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