Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
TrendAndDiver
//+------------------------------------------------------------------+
//| TrendAndDiver |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#include <WinUser32.mqh>
#include <stderror.mqh>
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| EX4 imports |
//+------------------------------------------------------------------+
#import "Diver.ex4"
int BreackUpTrendCondition (int TimeFrame, int MaxWaveNum);
int BreackDownTrendCondition (int TimeFrame, int WaveNum);
bool SeachDiv(int TimeFrame, int MaxWaveNum, int StartBar);
bool SeachConv(int TimeFrame,int cMaxWaveNum,int StartBar);
bool DiverKind(int SeekBar, int TimeFrame);
bool ConvKind(int SeekBar, int TimeFrame);
void dinstall(int StrBar);
void cinstall(int StrBar);
void AddpipsInit(int spips,int bpips);
void PeriodInit(int P1,int P2);
#import
//+------------------------------------------------------------------+
#property copyright "Mikhail Sapozhnikov "
#property link "http://www.metaquotes.net"
//---- input parameters
//extern int trend = 1;
extern double Lots = 1;
extern double StopLoss = 150;
extern double TakeProfit = 0;
extern double dADX0 = 65;
extern double dADX1 = 30 ;
extern double cADX0 = 30;
extern double Bulls100=0.041 ;
//extern double Bears100=-0.02;
extern double MaxStStopSellonDn= 25;
extern double MinStSellonDn=53;
extern int cWaveTopNum = 12;
extern int dWaveTopNum = 8;
extern double dMinTp = 600;
extern int Days=5 ;
extern int OrderNum=3;
extern int MainOrderNum=2;
extern int LocalOrderNum=2;
extern int LocalOrderNum1=3;
extern double Boundary=0.5;
extern int Spips=25;
extern int Bpips=0;
// ----- Òðåíäîâûå êîíñòàíòû ------
#define Up 3
#define Flat 2
#define Down 1
#define Unknown -1
#define NoSignal 9
#define Ready 8
#define Ready1 7
#define Ready2 6
#define Go 1
#define TakeYourTime 10
#define MainLongMagic 234
#define LongMagic 2345
#define LongMagic1 2346
#define LongMagic2 2347
#define MainShortMagic 123
#define ShortMagic 1235
#define ShortMagic1 1236
#define ShortMagic2 1237
int cMainFrame=PERIOD_D1;
int cSlaveFrame=PERIOD_W1;
int dMainFrame=PERIOD_W1;
int dSlaveFrame=PERIOD_H4;
int shift=0; //Ãîòîâèìñÿ ê àíàëèçó íà ïðîøëûõ áàðàõ
double W1MinBears=-0.055 ;
int Week = 5;
bool Gb,test1;
int total,OrderCount; //îáùåå êîë-âî îòêðûòûõ îðäåðîâ
int lastCloseMagic, lastCloseProf;
int sMagicNum,sMagicNum1, sMagicNum2, sMainMagicNum,
lMagicNum, lMagicNum1, lMagicNum2, lMainMagicNum;
int lWaitMagicCnt;
int sWeekMnMagicCnt,lWeekMnMagicCnt,lDayMagicCnt, sDayMagicCnt;
int sDaySmallMagicCnt, sDaySmallMagic2Cnt, lDaySmallMagicCnt,lDaySmallMagic2Cnt;
datetime LastMainDnGoWeek,LastMainUpGoWeek;
datetime LastLocDnGoDay,LastLocUpGoDay;
datetime LastSmallUpDay, LastSmallUpDay2, LastSmallDnDay, LastSmallDn2Day;
double StartBalance, HPR, SumHPR, AHPR, GHPR;
int BarsNum=500, BullsP=13, BearsP=13, ADXperiod=13, adx55step=16;
//== ñèãíàëû ===
double buyADX, sellADX,sellADXDmax, sellADXWmax;
int WaitUp, WaitDn, WaitCorre, WaitCont, WaitSmallCorr,WaitSmallCont,
WaitSmallUp, WaitSmallDn;
int sStartWaitingTime,bStartWaitingTime,sStartCorreTime, sStartTakeYourTime; //íà÷àëî îòñ÷åòà
int MainTrend, LocalTrend, SmallTrend,MA100Vector;
int WaveNum, LongCall, ShortCall;
bool SetGlobVar(string Name, int Val)
{ datetime Now=TimeCurrent(), r=0;
while (!(r>0 || TimeCurrent()-Now>10))
r=GlobalVariableSet(Name,Val);
if(r==0)
{ Print("Oøèáêà ",GetLastError()," ãëîáàëüíîé ïåðåìåííîé ",Name);
return(false);
}
return(true);
}
//--------------------------
bool LastCloseParam()
{ int i , histotal= OrdersHistoryTotal();
int mag;
bool Y;
for( i=histotal-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{ Print("Error in history!");lastCloseProf=0 ;break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
lastCloseMagic=OrderMagicNumber();
if ((lastCloseMagic!=MainLongMagic
&& lastCloseMagic!=LongMagic
&& lastCloseMagic!=LongMagic1
&& lastCloseMagic!=LongMagic2
&& lastCloseMagic!=MainShortMagic
&& lastCloseMagic!=ShortMagic
&& lastCloseMagic!=ShortMagic1
&& lastCloseMagic!=ShortMagic2 ))
{Y=false;continue;}
Y=true;
lastCloseProf=OrderProfit();
break;
}
if(lastCloseProf>=0) Y=true;
else Y=false;
return(Y);
}
//--------------------------
void OrdersMagic()
{ int cn;
double Prof;
lMagicNum=0;
lMagicNum1=0;
lMagicNum2=0;
lMainMagicNum=0;
lWeekMnMagicCnt=0;
lDayMagicCnt=0;
lDaySmallMagicCnt=0;
lDaySmallMagic2Cnt=0;
sMagicNum=0;
sMagicNum1=0;
sMagicNum2=0;
sMainMagicNum=0;
sWeekMnMagicCnt=0;
sDayMagicCnt=0;
sDaySmallMagicCnt=0;
sDaySmallMagic2Cnt=0;
lWaitMagicCnt=0;
for(cn=0;cn<total;cn++)
{//for
if( OrderSelect(cn, SELECT_BY_POS, MODE_TRADES)==true)
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol()) // check for symbol
{//1
if(OrderType()==OP_BUY) // long position is opened
{//2
if(OrderMagicNumber()==MainLongMagic)
{ lMainMagicNum++; LastMainUpGoWeek=OrderOpenTime();
if(TimeCurrent()- LastMainUpGoWeek<86400*10)
lWeekMnMagicCnt++;
continue;
}
if(OrderMagicNumber()==LongMagic)
{lMagicNum++; LastLocUpGoDay=OrderOpenTime();
if(TimeCurrent()- LastLocUpGoDay<86400*3)
lDayMagicCnt++;
continue;
}
if(OrderMagicNumber()==LongMagic1)
{lMagicNum1++; LastSmallUpDay=OrderOpenTime();
if( TimeCurrent()-LastSmallUpDay<86400*2)
lDaySmallMagicCnt++;
if(Bid-OrderOpenPrice()>90*Point && !(OrderStopLoss()==OrderOpenPrice()) )
OrderModify(OrderTicket(),Bid-20*Point,OrderOpenPrice(),OrderTakeProfit(),0,Gold);
if(Bid-OrderOpenPrice()>200*Point)
{LocalTrend=Up; GlobalVariableSet("gLocalTrend"+Symbol(),Up);}
continue;
}
if(OrderMagicNumber()==LongMagic2)
{lMagicNum2++; LastSmallUpDay2=OrderOpenTime();
if( TimeCurrent()-LastSmallUpDay2<86400*2)
lDaySmallMagic2Cnt++;
continue;
}
}
if(OrderType()==OP_SELL)
{if(OrderMagicNumber()==MainShortMagic)
{sMainMagicNum++;LastMainDnGoWeek=OrderOpenTime();
if(TimeCurrent()- LastMainDnGoWeek<86400*10)
sWeekMnMagicCnt++;
continue;
}
if(OrderMagicNumber()==ShortMagic)
{sMagicNum++;LastLocDnGoDay=OrderOpenTime();
if(TimeCurrent()- LastLocDnGoDay<86400*5)
sDayMagicCnt++;
if( TimeCurrent()-LastLocDnGoDay>86400*Days
)
{ if(iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1)
>iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,10))
{Prof=MathFloor(10000*iIchimoku(NULL, dMainFrame, 9, 26, 52, MODE_KIJUNSEN, 0))/10000;
if (Prof-MathFloor(10000*iIchimoku(NULL, dMainFrame, 9, 26, 52, MODE_KIJUNSEN, 1))/10000>3*Point
&& Prof!=OrderTakeProfit() )
{ if(sellADXDmax>=59)
{ if( (sellADXDmax<=68 || MainTrend==Down) && OrderOpenPrice()-Bid >15*Point
&& OrderStopLoss()!=OrderOpenPrice())
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),Prof,0,Gold);
}
}
}
}
continue;
}
if(OrderMagicNumber()==ShortMagic1)
{sMagicNum1++; LastSmallDnDay=OrderOpenTime();
if(TimeCurrent()- LastSmallDnDay<86400*3)
sDaySmallMagicCnt++;
continue;
}
if(OrderMagicNumber()==ShortMagic2)
{sMagicNum2++; LastSmallDn2Day=OrderOpenTime();
if(TimeCurrent()- LastSmallDn2Day<86400*1)
sDaySmallMagic2Cnt++;
if( iMA(NULL,240,21,0,MODE_EMA,PRICE_CLOSE,21)-
iMA(NULL,240,21,0,MODE_EMA,PRICE_CLOSE,1)>=90*Point
&& OrderTakeProfit()>0)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,Gold);
}
continue;
}
}
}
}
//==============================
int CheckADX (int TimeFrame, int P, int Start, int adxStep)
{
if ( iADX(NULL,TimeFrame,P,PRICE_HIGH,MODE_MAIN,Start)<
iADX(NULL,TimeFrame,P,PRICE_HIGH,MODE_MAIN,Start+adxStep)
)
return(Down);
else
{if ( iADX(NULL,TimeFrame,P,PRICE_HIGH,MODE_MAIN,Start)>
iADX(NULL,TimeFrame,P,PRICE_HIGH,MODE_MAIN,Start+adxStep))
return(Up);}
return(Flat);
}
//--------------------------------------------------------------
int CheckiMa(int TimeFrame, int P, int Mode, int Start, int Step)
{
if ( iMA(NULL,TimeFrame,P,0,PRICE_CLOSE,Mode,Start)<
iMA(NULL,TimeFrame,P,0,PRICE_CLOSE,Mode,Start+Step)
)
return(Down);
else
{if (iMA(NULL,TimeFrame,P,0,PRICE_CLOSE,Mode,Start)>
iMA(NULL,TimeFrame,P,0,PRICE_CLOSE,Mode,Start+Step))
return(Up);}
return(Flat);
}
//===================================================================+
double minStoch(int Frame, int StartBar, int BarCnt )
{ int i,j;
double minStoch;
minStoch=iStochastic(NULL,Frame,8,3,3,MODE_SMA,0,MODE_MAIN, StartBar);
for (i=StartBar+1;i<=StartBar+BarCnt;i++)
{ if(minStoch>iStochastic(NULL,Frame,8,3,3,MODE_SMA,0,MODE_MAIN, i))
minStoch=iStochastic(NULL,Frame,8,3,3,MODE_SMA,0,MODE_MAIN, i);
}//for
return(minStoch);
}
//===================================================================+
double maxADX(int Frame, int StartBar, int BarCnt )
{ int i,j;
double maxAD=iADX(NULL,Frame,13,PRICE_HIGH,MODE_MAIN,StartBar);
for (i=StartBar+1;i<=StartBar+BarCnt;i++)
{ if(maxAD<iADX(NULL,Frame,13,PRICE_HIGH,MODE_MAIN,i))
maxAD=iADX(NULL,Frame,13,PRICE_HIGH,MODE_MAIN,i);
}//for
return(maxAD);
}
//===================================================================+
double BearForce(int Frame, int BarCnt )
{ int i,j;
double Bear;
Bear= iBearsPower( NULL, Frame, 13, PRICE_CLOSE, 1);
for (i=2;i<=BarCnt;i++)
{ if(Bear>iBearsPower( NULL, Frame, 13, PRICE_CLOSE, i))
Bear=iBearsPower( NULL, Frame, 13, PRICE_CLOSE, i);
}//for
return(Bear);
}
double BullDecline(int Frame, int BarCnt )
{ int i,j;
double Bull;
Bull= iBullsPower( NULL, Frame, 13, PRICE_CLOSE, 1);
for (i=2;i<=BarCnt;i++)
{ if(Bull>iBullsPower( NULL, Frame, 13, PRICE_CLOSE, i))
Bull=iBullsPower( NULL, Frame, 13, PRICE_CLOSE, i);
}//for
return(Bull);
}
//+------------------------------------------------------------------+
// óñëîâèÿ äëÿ äèâåðãåíöèè
//+------------------------------------------------------------------+
double dStrongCond (int TimeFrame, double dADXhigh, int StBar)
{ double tmpADX;
tmpADX=iADX(NULL,TimeFrame,ADXperiod,PRICE_HIGH,MODE_MAIN,StBar);
if ( ( tmpADX>dADXhigh
&& iADX(NULL,TimeFrame,ADXperiod,PRICE_HIGH,MODE_PLUSDI,StBar+1)>
iADX(NULL,TimeFrame,ADXperiod,PRICE_HIGH,MODE_MINUSDI,StBar+1))
)
return(tmpADX);
else
return(0);
}
//+------------------------------------------------------------------+
// óñëîâèÿ äëÿ êîíâåðãåíöèè
//+------------------------------------------------------------------+
double cMidlCond(int TimeFrame,int applied_price, double cADXhigh, int StBar)
{
double tmpADX;
tmpADX=iADX(NULL,TimeFrame,ADXperiod,applied_price,MODE_MAIN,StBar);
if ( ( tmpADX>cADXhigh
&& iADX(NULL,TimeFrame,ADXperiod,applied_price,MODE_PLUSDI,StBar+1)<
iADX(NULL,TimeFrame,ADXperiod,applied_price,MODE_MINUSDI,StBar+1))
)
return(tmpADX);
else
return(0);
}
//+------------------------------------------------------------------+
//| expert function for short
//+------------------------------------------------------------------+
int MainShortOrder(int OrderCnt, int MagNum, double sTP=0)
{ datetime Begin=TimeCurrent();
double SL; // StopLoss â ïóíêòàõ
int mg, error,result;
bool Y;
//----
if( total<OrderNum )
{Y=true;
mg=MagNum;
switch (mg)
{
case MainShortMagic :
{ if (
sMainMagicNum>=MainOrderNum
|| sWeekMnMagicCnt>=1 )
Y=false;
else SL= iHigh(NULL,dMainFrame,0)+250*Point;
}
break;
case ShortMagic :
if (sMagicNum>=LocalOrderNum
|| sDayMagicCnt>=1)
Y=false;
else SL= iHigh(NULL,dMainFrame,0)+StopLoss*Point;
break;
case ShortMagic1 :
if (sMagicNum1>=LocalOrderNum1
|| sDaySmallMagicCnt>=1 )
Y=false;
else SL= iHigh(NULL,dMainFrame,0)+StopLoss*Point;
break;
case ShortMagic2 :
{if (sMagicNum2>=LocalOrderNum1
|| sDaySmallMagic2Cnt>=1 )
Y=false;
else SL= iHigh(NULL,dMainFrame,0)+80*Point;
}
break;
}//sw
}else Y=false;
if(Y )
{
result= OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,
sTP,"",mg,0,White);
if (result==-1)
{error=GetLastError();
Print("error(",error,"): ",ErrorDescription(error));
if(!IsTesting())
{while(!( result>0 || TimeCurrent()-Begin>20))
{Sleep(1000); RefreshRates();
result= OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,
sTP,"",mg,0,White); }
}
}
else
{ total=OrdersTotal();ChangeLot();
SelectData();
}
}
return(result);
}
//-----------------------------------------
// Ïðîôèò äëÿ äëèííûõ ïîçèöèé íà êîíâåðãåíöèè D1
//-----------------------------------------
double bProfit( double Adx)
{ double Level;
double Level1;
if (
CheckADX(1440,13,0,adx55step)==Up
|| MainTrend==Up)
{
Level=0;
return(0); }
else
{
//Åñëè äâèæåíèå íàèñõîäå, îãðàíè÷èâàåì Profit
if (CheckADX(1440,13,0,adx55step)==Down)
{Level1 = iMA(NULL,cMainFrame,55,0,MODE_EMA,PRICE_HIGH, 0 );
Level=Level1 + iMA(NULL,cMainFrame,55,0,MODE_EMA,PRICE_HIGH,1)-
iMA(NULL,cMainFrame,55,0,MODE_SMA,PRICE_HIGH, 10);
return(Level);
}
}
return(Level);
}
int MainLongOrder(double bTkP=0, int Mag=MainLongMagic)
{ datetime Begin=TimeCurrent();
double StL;
int magic, res, err;
res=-1;
if( total<OrderNum )
{
magic=Mag;
switch (magic)
{case MainLongMagic :
{if (lMainMagicNum>=MainOrderNum
|| lWeekMnMagicCnt>=1
) return;
else StL=iLow(NULL,cMainFrame,0)-StopLoss*Point;
}
break;
case LongMagic :
{if (lMagicNum>=LocalOrderNum
|| lDayMagicCnt>=1)return;
else StL=iLow(NULL,cMainFrame,0)-StopLoss*Point;
}
break;
case LongMagic1 :
{if (lMagicNum1>=LocalOrderNum1
|| lDaySmallMagicCnt>=1)return;
else StL=iLow(NULL,cMainFrame,0)-80*Point;
}
break;
case LongMagic2 :
{if (lMagicNum2>=LocalOrderNum1
|| lDaySmallMagic2Cnt>=1)return;
else StL=iLow(NULL,cMainFrame,0)-80*Point;
}
}
res= OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StL,
bTkP,"",magic,0,Lime);
if (res<0)
{err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
if(!IsTesting())
{while(!( res>0 || TimeCurrent()-Begin>20))
{Sleep(1000); RefreshRates();
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StL,
bTkP,"",magic,0,Lime);
}
}
}
else { total=OrdersTotal();ChangeLot(); SelectData(); }
}
return(res);
}
void SelectData()
{ double BullTop, BearTop, AdxD1,AdxD2;
Print("WaveNum=",WaveNum);
int Move=CheckADX(1440,13,1,2);
if (Move==Up) Print("ADX Up");
else
if (Move==Down) Print("ADX Down");
else
if (Move==Flat) Print("ADX Flat");
AdxD1= iADX(NULL,1440,13,PRICE_HIGH,MODE_MAIN,1);
AdxD2= iADX(NULL,1440,13,PRICE_HIGH,MODE_MAIN,2);
Print("AdxD1=",AdxD1," AdxD2=",AdxD2);
Print("sellADXDmax=",sellADXDmax);
BullTop=iBullsPower( NULL, dMainFrame, 13, PRICE_CLOSE, 0);
for (int i=1;i==10;i++)
{if(iBullsPower( NULL, dMainFrame, 13, PRICE_CLOSE, i)>BullTop)
BullTop=iBullsPower( NULL, dMainFrame, 13, PRICE_CLOSE, i);
}
BearTop=iBearsPower( NULL, dMainFrame, 13, PRICE_CLOSE, 0);
for ( i=1;i==10;i++)
{if(iBearsPower( NULL, dMainFrame, 13, PRICE_CLOSE, i)>BearTop)
BearTop=iBearsPower( NULL, dMainFrame, 13, PRICE_CLOSE, i);
}
if(WaitDn==Ready) Print("WaitDn=Ready");
else
if(WaitDn==NoSignal) Print("WaitDn=NoSignal");
else
if(WaitDn==Go) {Print("WaitDn=Go");
Print("Bid=", Bid);}
if(WaitUp==Ready) Print("WaitUp=Ready");
else
if(WaitUp==NoSignal) Print("WaitUp=NoSignal");
else
if(WaitUp==Go) {Print("WaitUp=Go");
Print("Ask=", Ask);}
Print("BullTop=",BullTop," BearTop=",BearTop);
if(WaitCorre==Ready) Print("WaitCorre=Ready");
else
if(WaitCorre==NoSignal) Print("WaitCorre=NoSignal");
else
if(WaitCorre==Go) {Print("WaitCorre=Go");
Print("Bid=", Bid);}
if(WaitCont==Ready) Print("WaitCont=Ready");
else
if(WaitCont==Go)
{Print("WaitCont=Go"); Print("Ask=", Ask); }
Print("");
Print("========================= New Data =======================================");
return;
}
void ChangeLot()
{ int histtotal=OrdersHistoryTotal();
if(histtotal>0)
{HPR=(AccountBalance()/(AccountBalance()-lastCloseProf));
SumHPR=SumHPR+HPR;
AHPR=(SumHPR)/histtotal;
}
if(lastCloseProf>0) Lots+=0.1;
if(lastCloseProf<0) Lots-=0.1;
if(Lots>5) Lots=5;
if(Lots<0.1) Lots=0.1;
}
void TestInstall()
{ if(TimeCurrent()<StrToTime("2006.10.10 00:00"))
{WaveNum=0;
WaitUp=NoSignal; WaitDn=NoSignal; WaitCorre=NoSignal;
MainTrend=Unknown;
LocalTrend=Unknown;
SmallTrend=Unknown;
WaitSmallUp=NoSignal;
WaitSmallDn=NoSignal;
WaitSmallCont=NoSignal;}
else
{ if( TimeCurrent()<StrToTime("2007.9.21 00:00"))
{MainTrend=Up;SetGlobVar("gMainTrend"+Symbol(),MainTrend);}
if(TimeCurrent()<StrToTime("2006.12.08 16:01"))
{LocalTrend=Up;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=1;SetGlobVar("gWaveNum"+Symbol(),1);}
else
if(TimeCurrent()<StrToTime("2007.01.11 15:20"))
{LocalTrend=Down;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=2;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
else
if(TimeCurrent()<StrToTime("2007.04.25 00:00"))
{LocalTrend=Up;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=3;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
else
if(TimeCurrent()<StrToTime("2007.06.2 00:00"))
{LocalTrend=Down;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=4;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
else
if(TimeCurrent()<StrToTime("2007.07.17 00:00"))
{LocalTrend=Up;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=5;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
else
if(TimeCurrent()<StrToTime("2007.08.20 00:00"))
{LocalTrend=Down;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=6;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
else
if(TimeCurrent()<StrToTime("2007.09.21 00:00"))
{LocalTrend=Up;SetGlobVar("gLocalTrend"+Symbol(),LocalTrend);
WaveNum=7;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}
}
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{ LastMainUpGoWeek=0;
LastMainDnGoWeek=0;
LastLocUpGoDay=0;
LastLocDnGoDay=0;
LastSmallUpDay=0;
LastSmallUpDay2=0;
LastSmallDnDay=0;
LastSmallDn2Day=0;
StartBalance=AccountBalance(); HPR=0; SumHPR=0;
AHPR=0; GHPR=0;
test1=true;
Gb=true;
if (!GlobalVariableCheck("gMainTrend"+Symbol()))
Gb= SetGlobVar("gMainTrend"+Symbol(),Unknown);
if (!GlobalVariableCheck("gLocalTrend"+Symbol()))
Gb= Gb && SetGlobVar("gLocalTrend"+Symbol(),Unknown);
if (!GlobalVariableCheck("gSmallTrend"+Symbol()))
Gb= Gb && SetGlobVar("gSmallTrend"+Symbol(),Unknown);
if (!GlobalVariableCheck("gWaitUp"+Symbol()))
Gb= Gb && SetGlobVar("gWaitUp"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaitDn"+Symbol()))
Gb= Gb && SetGlobVar("gWaitDn"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaitCorre"+Symbol()))
Gb= Gb && SetGlobVar("gWaitCorre"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaitSmallUp"+Symbol()))
Gb= Gb && SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaitSmallDn"+Symbol()))
Gb= Gb && SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaitSmallCont"+Symbol()))
Gb= Gb && SetGlobVar("gWaitSmallCont"+Symbol(),NoSignal);
if (!GlobalVariableCheck("gWaveNum"+Symbol()))
Gb= Gb && SetGlobVar("gWaveNum"+Symbol(),0);
if (!GlobalVariableCheck("sWaitTime"+Symbol()))
Gb= Gb && SetGlobVar("sWaitTime"+Symbol(),0);
if (!GlobalVariableCheck("bWaitTime"+Symbol()))
Gb= Gb && SetGlobVar("bWaitTime"+Symbol(),0);
WaitCont=NoSignal;
if (! IsTesting())
{ MainTrend=GlobalVariableGet("gMainTrend"+Symbol());
LocalTrend=GlobalVariableGet("gLocalTrend"+Symbol());
WaitUp=GlobalVariableGet("gWaitUp"+Symbol());
WaitDn=GlobalVariableGet("gWaitDn"+Symbol());
WaitCorre=GlobalVariableGet("gWaitCorre"+Symbol());
WaitSmallUp=GlobalVariableGet("gWaitSmallUp"+Symbol());
WaitSmallDn=GlobalVariableGet("gWaitSmallDn"+Symbol());
WaitSmallCont=GlobalVariableGet("gWaitSmallCont"+Symbol());
sStartWaitingTime=GlobalVariableGet("sWaitTime"+Symbol());
bStartWaitingTime=GlobalVariableGet("bWaitTime"+Symbol());
} else
{WaveNum=0;
WaitUp=NoSignal; WaitDn=NoSignal; WaitCorre=NoSignal;
MainTrend=Unknown;
LocalTrend=Unknown;
SmallTrend=Unknown;
WaitSmallUp=NoSignal;
WaitSmallDn=NoSignal;
WaitSmallCont=NoSignal;
}
//----
AddpipsInit(Spips, Bpips);
PeriodInit(BearsP,BullsP);
OrderCount=OrdersTotal();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{int histtotal=OrdersHistoryTotal();
if(histtotal>0)
{GHPR=MathPow(StartBalance/AccountBalance(),1/histtotal);
Print("AHPR=",AHPR," GHPR=",GHPR);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{if (!Gb)
{Print("Begin againe!!");
return(0);}
//MainTrend=trend;SetGlobVar("gMainTrend"+Symbol(),MainTrend);
//LocalTrend=trend;SetGlobVar("gMainTrend"+Symbol(),MainTrend);
int cnt;//ñ÷åò÷èê îðäåðîâ
int res; // ðåçóëüòàò óñòàíîâêì îðäåðà
int err,i,j;
int shift55; //ñäâèã íà H4 ñ ïåðèîäîì ADX 55
double maxAdx;
double Adx;
double StL; // StopLoss â ïóíêòàõ
double bTkP; // TakeProfit â ïóíêòàõ
double sTkP; // TakeProfit â ïóíêòàõ
int magic;
//----
if(Bars<BarsNum) return(0);
if (IsTesting() && test1)
{ TestInstall(); test1=false;}
MA100Vector=Up;
res=0;//âñïîìîãàòåëüíàÿ ïåðåì. äëÿ ñîõð. ðóçóëüòàòîâ óñòàíîâêè îðäåðîâ
total=OrdersTotal();
LastCloseParam();
OrdersMagic();
if (OrderCount<total)
OrderCount=total;
//Ãîòîâèìñÿ àíàëèçèðîâàòü ãðàôèê íà çàêðûòûõ áàðàõ
if (shift>0)
shift55=(shift-1)*6+1+TimeHour(TimeCurrent())/4;
else
shift55=0;
//==============================================================
// Äî òåõ ïîð ïîêà êîëè÷åñòâî ïèêîâ èíäèêàòîðà íà áóäåò ðàâíûì WaveTopNum
// èññëåäóåì ãðàôèê íà íàëè÷èå äèâåðãåíöèè ì-äó èíäèêàòîðì è High(Low)_
//Ïðîâåðÿåòñÿ äèâåðãåíöèÿ è-äó áàðîì 0 è 1 è åñëè äèâåðãåíöèè íåò,
// à áûêè íà áàðå 1 ñèëüíåå, òî áàð 1 ñòàíîâèòñÿ íà÷àëîì ïîèñêà äèâåðãåíöèè.
// Åñëè äèâåðãåíöèÿ åñòü - óâåëè÷èâàåì ñ÷åò÷èê äèâåðãåíöèé è ñîõðàíÿåì íîìåð åå áàðà.
// "Ïî ïóòè" íàõîäÿòñÿ ïèêè èíäèêàòîðà ñèëû áûêîâ(ìåäâåäåé). Íà íèõ ñ÷åò÷èê
//âîëí óâåëè÷èâàåòñÿ íà 1
// Òàê ïðîäîëæàåòñÿ äî òåõ ïîð, ïîêà íå îáíàðóæåíî òðè äèâåðãååíöèè (Div=3),
// èëè íå íàéäåíî WaveTopNum ïèêîâ èíäèêàòîðà.
//==============================================================
//-----------Ïðèíÿòèå ðåøåíèÿ ïî êîðîòêèì ïîçèöèÿì ------------
switch(WaitDn)
{//sw
case NoSignal :
{
sellADX=dStrongCond(dMainFrame,dADX0,0) ;
if ( sellADX>0 )
{ AddpipsInit(Spips, Bpips);
if ( SeachDiv(dMainFrame,dWaveTopNum,shift)
&& DiverKind(0, dMainFrame)
)
{
if ( CheckADX(240,55,shift,adx55step)==Down
&& maxADX(1440, 1, 30 )<81)
{//Print("sellADXDmax=",sellADXDmax);
WaitDn=Go; SetGlobVar("gWaitDn"+Symbol(), Go);
sStartWaitingTime = TimeCurrent();
}
else
{WaitDn=Ready; SetGlobVar("gWaitDn"+Symbol(), Ready);}
}// if Seach
}
}//case NoSignal
break;
case Ready :
{//case Ready
if (maxADX(1440, 1, 30 )<81)
{WaitDn=Go; sStartWaitingTime = TimeCurrent();SetGlobVar("sWaitTime"+Symbol(), sStartWaitingTime);
SetGlobVar("gWaitDn"+Symbol(), Go);
}
else
{WaitDn=TakeYourTime;SetGlobVar("gWaitDn"+Symbol(), TakeYourTime);
sStartTakeYourTime = TimeCurrent();}
}//case Ready
break;
case Go :
{//case Go
// Alert("Ïðîäàåì!");
MainShortOrder(OrderNum,MainShortMagic);
if(MainTrend!=Down)
{WaveNum=1;SetGlobVar("gWaveNum"+Symbol(),1);}
else if(TimeCurrent()- LastMainDnGoWeek>86400*40)
{WaveNum++;SetGlobVar("gWaveNum"+Symbol(),WaveNum);}//Wave counter
MainTrend=Down;
GlobalVariableSetOnCondition("gMainTrend"+Symbol(), Down, Up);
GlobalVariableSetOnCondition("gMainTrend"+Symbol(), Down, Flat);
LocalTrend=Down;GlobalVariableSet("gLocalTrend"+Symbol(),Down);
if((TimeCurrent()-sStartWaitingTime) > 864000 )
WaitDn=NoSignal; SetGlobVar("gWaitDn"+Symbol(),NoSignal);
sStartWaitingTime=NoSignal;SetGlobVar("sWaitTime"+Symbol(), sStartWaitingTime);
}//case Go
break;
case TakeYourTime :
{
if(iClose(NULL, cMainFrame,1)-iOpen(NULL, cMainFrame,1)<=0
|| MathAbs(iClose(NULL, cMainFrame,1)-iOpen(NULL, cMainFrame,1))<=15*Point)
{ WaitCorre=NoSignal; sellADXDmax=0; sStartTakeYourTime =0;
WaitDn=Go; sStartWaitingTime = TimeCurrent(); SetGlobVar("sWaitTime"+Symbol(), sStartWaitingTime);
SetGlobVar("gWaitDn"+Symbol(),Go);
SetGlobVar("gWaitCorre"+Symbol(),NoSignal);
}
}//TakeYourTime
break;
}//sw
//==========================================================
maxAdx=iADX(NULL,cMainFrame,13,PRICE_HIGH,MODE_MAIN,0);
if(((maxAdx>=58 && MainTrend==Up) //58
||
(maxAdx>27 && MainTrend==Down)
||
(maxAdx>25 && MainTrend==Flat)
)
&& CheckADX(1440,13,1,2)==Up
&& WaitCorre!=Go)
{
sellADXDmax=maxAdx; sellADXWmax=iADX(NULL,dMainFrame,13,PRICE_HIGH,MODE_MAIN,0);
WaitCorre=Ready;SetGlobVar("gWaitCorre"+Symbol(),Ready);
} else
{ //SelectData();
if( iBearsPower( NULL, 1440, 13, PRICE_CLOSE,3)<0 )
{WaitCorre=NoSignal;GlobalVariableSet("gWaitCorre"+Symbol(),NoSignal);}
}//else
if ( iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1)
<iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,10)
&&
MathAbs(iBands(NULL,1440,100,2,0,PRICE_CLOSE,MODE_UPPER,0)-iHigh(NULL,1440,0))
<100*Point && WaitCorre==NoSignal
)
{WaitCorre=Ready;SetGlobVar("gWaitCorre"+Symbol(),Ready);}
if( iBearsPower( NULL, 1440, 13, PRICE_CLOSE,3)<0 && WaitCorre<NoSignal)
{WaitCorre=NoSignal;SetGlobVar("gWaitCorre"+Symbol(),NoSignal);}
if(WaitCorre<NoSignal )
{if(MainTrend==Up &&
iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1)
>iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,10))
WaitCorre=sellSw(WaitCorre);
else WaitCorre=sellSw(WaitCorre,0);
SetGlobVar("gWaitCorre"+Symbol(),WaitCorre);
}
//==============Long================================
if(LocalTrend==Down)
{ double Bulls=BullDecline(1440, 32 );
double Bears=BearForce(1440, 32 );
if(MainTrend==Up && LocalTrend==Down
&& WaitUp==NoSignal
&& CheckADX(10080,13,1,5)==Up
&& dStrongCond(dMainFrame,dADX0,0)>0
)
if(
sellADXDmax>50
&& MathAbs(iMA(NULL,cMainFrame,21,0,MODE_EMA,PRICE_CLOSE,0)-
iClose(NULL,1440,0 ))<100*Point
)
{WaitUp=Go; SetGlobVar("gWaitUp"+Symbol(),Go); LongCall=0;
bStartWaitingTime =TimeCurrent(); SetGlobVar("bWaitTime"+Symbol(), bStartWaitingTime);}
if(((MainTrend!=Up && WaveNum==1) ||
(MainTrend==Up && (WaveNum==4 || WaveNum==6 || WaveNum==8)))
&& WaitUp>Ready && CheckiMa(1440, 100, MODE_SMA, 1, 40)== Up &&
MathAbs(iClose(NULL,1440,1)-
iIchimoku(NULL, dMainFrame, 9, 26, 52, MODE_KIJUNSEN, 1))<=50*Point)
{ if(Bears+Bulls>-0.06) {WaitUp=Ready;SetGlobVar("gWaitUp"+Symbol(),WaitUp);
bStartWaitingTime=TimeCurrent();SetGlobVar("bWaitTime"+Symbol(), bStartWaitingTime);
}
else {WaitSmallUp=Ready;SetGlobVar("gWaitSmallUp"+Symbol(),Ready);}
}
else
{ if((MainTrend==Up || (MainTrend==Flat && WaveNum==1)) && WaitUp==NoSignal
&&
MathAbs(iLow(NULL,1440,0 )-
iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1))<=50*Point)
{if(MainTrend!=Flat)
{WaitUp=Ready;GlobalVariableSet("gWaitUp"+Symbol(),Ready); }
}
}
}
WaitUp=LongSwich( WaitUp, cADX0);
SetGlobVar("gWaitUp"+Symbol(),WaitUp);
//=== Äîáàâî÷íûå îðäåðà Buy
//+++++++++++++++++++++++++++++++++++++++++++
//1
if(LocalTrend==Down && MainTrend==Up)
{
if (iTime(NULL,cMainFrame,0)-LastLocDnGoDay>86400*3
&& iMFI(NULL, cMainFrame,7,0)>15 )
WaitSmallCont=buySw(WaitSmallCont,6,cMainFrame,cMainFrame);
}
//==========================================================
if(MainTrend!=Unknown && LocalTrend!=Unknown)
{
switch (WaitSmallUp)
{
case NoSignal :
{ if(LocalTrend==Up)
SmallBuyonUp();
}
break;
case Ready :
{ AddpipsInit(0, 5);WaitSmallDn=NoSignal; SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
if ( SeachConv(240,cWaveTopNum,shift)
&& ConvKind(0, 240))
{WaitSmallUp=Go; SetGlobVar("gWaitSmallUp"+Symbol(),WaitSmallUp);}
else StopSmallBuyonUp();
AddpipsInit(Spips, Bpips);
}
break;
case Ready1 :
{ AddpipsInit(0, 0);WaitSmallDn=NoSignal; SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
if ( SeachConv(60,cWaveTopNum,0)
&& ConvKind(0, 60))
{WaitSmallUp=Go; SetGlobVar("gWaitSmallUp"+Symbol(),Go);}
else StopSmallBuyonUp();
AddpipsInit(Spips, Bpips);
}
break;
}//sw
if(WaitSmallUp==Go)
//if(MainTrend==Up )
{ SmallTrend=Up;SetGlobVar("gSmallTrend"+Symbol(),Up);
StopSmallBuyonUp();
if ( AccountFreeMargin()/AccountBalance()>0.90)
{if(LocalTrend==Up) bTkP=Ask+250*Point;
else bTkP=Ask+180*Point;
if(WaitDn>Go && WaitCorre>Go)
MainLongOrder(bTkP,LongMagic2);
}
}
//++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++Small+++++++++++++++++++++
if(!(WaitDn==TakeYourTime || WaitDn==Ready))
switch (WaitSmallDn)
{case NoSignal :
{if(LocalTrend==Down)
SmallSellonDn();}
break;
case Ready :
{ AddpipsInit(10, 0); WaitSmallUp=NoSignal;SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
StopSmallSellonDn();
if ( SeachDiv(240,cWaveTopNum,1) )
{//if(LocalTrend==Up)
//WaitSmallDn=Ready1;
//else
WaitSmallDn=Go;
SetGlobVar("gWaitSmallDn"+Symbol(),WaitSmallDn);
AddpipsInit(Spips, Bpips);}
else{AddpipsInit(Spips, Bpips);}
break;
}
case Ready1 :
{ AddpipsInit(10, 0); WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
if ( (SeachDiv(60,cWaveTopNum,shift) && LocalTrend==Down)
||
(SeachDiv(60,cWaveTopNum,shift) && LocalTrend==Up && DiverKind(shift, 60))
//SeachDiv(60,cWaveTopNum,shift)
)
{WaitSmallDn=Go; SetGlobVar("gWaitSmallDn"+Symbol(),Go);
AddpipsInit(Spips, Bpips);}
else{AddpipsInit(Spips, Bpips); StopSmallSellonDn();
break;}
}
case Ready2 :
{ AddpipsInit(10, 0); WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
if ( SeachDiv(1440,cWaveTopNum,shift)
&& DiverKind(0, 1440)
)
{WaitSmallDn=Go; SetGlobVar("gWaitSmallDn"+Symbol(),Go);
AddpipsInit(Spips, Bpips);}
else{AddpipsInit(Spips, Bpips); StopSmallSellonDn();
break;}
}
case Go :
{ if( (iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)>
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,2)
&& iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)<10)
||
(LocalTrend==Up
&& iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)<50 )
)
{WaitSmallDn=NoSignal; SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);}
else
if(LocalTrend==Down && iBearsPower(NULL, 240, 13,PRICE_CLOSE,1)>0
)
{SmallTrend=Down;SetGlobVar("gSmallTrend"+Symbol(),Down);}
else if(LocalTrend==Up)
{SmallTrend=Down;SetGlobVar("gSmallTrend"+Symbol(),Down);}
}
break;
}
if (WaitSmallDn==Go)
{SmallTrend=Down; SetGlobVar("gSmallTrend"+Symbol(),Down);
if ( AccountFreeMargin()/AccountBalance()>0.90)
{ if (LocalTrend==Down) sTkP=Bid-200*Point; else sTkP=Bid-150*Point;
if(WaitUp>Go)
MainShortOrder(OrderNum,ShortMagic2,sTkP);}
if(iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)<35)
{WaitSmallDn=NoSignal;SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
if (WaitUp==NoSignal && WaitDn==NoSignal && WaitCorre!=Go
&& iADX(NULL,dMainFrame,13,PRICE_HIGH,MODE_MAIN,0)<65
)
{
if (
( iMA(NULL,dMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1)>
iMA(NULL,dMainFrame,100,0,MODE_SMA,PRICE_CLOSE, 10 )
&&
iClose(NULL, 1440,1)>
iBands(NULL,1440,100,2,0,PRICE_CLOSE,MODE_UPPER,1)
&&
iClose(NULL, 1440,2)>
iBands(NULL,1440,100,2,0,PRICE_CLOSE,MODE_UPPER,2)
)
)
{if(CheckADX(1440,13,1,2)==Up && MainTrend!=Up)
{MainTrend=Up;GlobalVariableSet("gMainTrend"+Symbol(),Up); }
}
}
//---- Óñëîâèÿ çàêðûòèÿ, ìîäèôèêàöèè è óäàëåíèÿ îðäåðîâ------------
for(cnt=0;cnt<total;cnt++)
{//for
if( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{//Seltct
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{//1
//--Îáðàáîòêà äëèííûõ ïîçèöèé ----------------
if(OrderType()==OP_BUY) // long position is opened
{//OP_BUY
//-----------------
if ( AccountFreeMargin()/AccountBalance()<Boundary)
{ res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Gold); continue;}
if ( WaitDn==Go
||
(MainTrend==Down && OrderMagicNumber()==MainLongMagic)
)
res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua);
if ( LocalTrend==Down
&& (OrderMagicNumber()==LongMagic || OrderMagicNumber()==MainLongMagic)
)
res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua);
if ( (OrderMagicNumber()==LongMagic2 || OrderMagicNumber()==LongMagic1)
&& (SmallTrend==Down || WaitSmallDn==Go)
)
res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
//-----------------
}//OP_BUY
//--Êîíåö îáðàáîòêè äëèííûõ ïîçèöèé -----------
//--Îáðàáîòêà êîðîòêèõ ïîçèöèé ------------------
if(OrderType()==OP_SELL) // short position is opened
{//OP_SELL
//-----------------------------
if ( AccountFreeMargin()/AccountBalance()<Boundary)
{if(OrderMagicNumber()!=MainShortMagic)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Gold); continue;
}
if ( OrderMagicNumber()==MainShortMagic && MainTrend==Up)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if ( OrderMagicNumber()==ShortMagic && LocalTrend==Up)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if ( //if
(//2
(TimeCurrent()-OrderOpenTime()>dMainFrame*Week*60)
&&
(TimeCurrent()-OrderOpenTime()<dMainFrame*(Week+2)*60)
&&
(iHigh(NULL,dMainFrame,Highest(NULL,dMainFrame,MODE_HIGH,Week+5,0))-
iLow(NULL,dMainFrame,Lowest(NULL,dMainFrame,MODE_LOW,Week,0)) )
<dMinTp*Point
&& OrderMagicNumber()==MainShortMagic
)//2
)//if
{res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Aqua);
MainTrend=Flat;
GlobalVariableSetOnCondition("gMainTrend"+Symbol(),Flat ,Down);
}
if ( OrderMagicNumber()==MainShortMagic
&& MainTrend==Flat
&& iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)<20
&& SeachConv(240,dWaveTopNum,0)
)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if ( OrderMagicNumber()==ShortMagic2
&& (SmallTrend==Up || WaitSmallUp==Go)
)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}//OP_SELL
//--Êîíåö îáðàáîòêè êîðîòêèõ ïîçèöèé -----------
}
//Êîíåö óñëîâèé äëÿ îòêðûòûõ îðäåðîâ
}//Select
}//for ;
//---------------
//-------------------------------------------------------------------+
return(0);
//+------------------------------------------------------------------+
}
//+------------------------------------------------------------------+
int buySw(int Wait, int MFIperiod, int MFITimeFrame, int ConvTimeFrame)
{ int shf;
if( iMFI(NULL, MFITimeFrame,MFIperiod,0)>30 || WaitUp<NoSignal)
Wait=NoSignal;
switch (Wait)
{case NoSignal :
{ if(MFIperiod<7) shf=0; else shf=1;
if ( iMFI(NULL, MFITimeFrame,MFIperiod,shf)==0) Wait=Ready;
}
break;
case Ready :
{if( iMFI(NULL, MFITimeFrame,MFIperiod,0)>30 || WaitUp<NoSignal) Wait=NoSignal;
else
{if(MFIperiod<7) AddpipsInit(Spips, 5);
if (SeachConv(ConvTimeFrame,cWaveTopNum,shift)
&& ConvKind(shift, ConvTimeFrame)
)Wait= Go;
AddpipsInit(Spips, Bpips);
}
} break;
case Go :
{//SelectData();
if(MFIperiod==7)
{LocalTrend=Up;GlobalVariableSet("gLocalTrend"+Symbol(),Up);
MainLongOrder(0,LongMagic);}
if(MFIperiod<7)
{SmallTrend=Up; GlobalVariableSet("gSmallTrend"+Symbol(),Up);
double Tp=Ask+100*Point;
if(lMagicNum1==1)
Tp=0;
MainLongOrder(Tp,LongMagic1); }
}
break;
}
return(Wait);
}
//+++++++++++++++++++++++++++++++++
int sellSw(int WaitCorr, int StartBar=1)
{switch (WaitCorr)
{//sw
case NoSignal :
ShortCall=0;
break;
case Ready :
{ShortCall=0;
if (
CheckADX(1440,13,StartBar,StartBar+1)==Down
||
( CheckADX(240,55,1,14)==Down
&&
!(MainTrend==Up && iBullsPower( NULL, 1440, 100, PRICE_CLOSE, 0)>Bulls100)
//&& iADX(NULL,240,55,PRICE_HIGH,MODE_MAIN,1)>32
)
)
WaitCorr=Go;
}
break;
case Go :
{ AddpipsInit(10, 0);
if (SeachDiv(cMainFrame,dWaveTopNum,shift)
&& DiverKind(shift, cMainFrame)
)
DownCorrection();
else
if ((MainTrend==Down ||
iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,1)
<iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,10))
&&
TimeCurrent()-sStartCorreTime>86400*5 &&
SeachDiv(dSlaveFrame,dWaveTopNum,shift)
&& DiverKind(shift, dSlaveFrame) )
DownCorrection();
AddpipsInit(Spips, Bpips);
}
break;
}//sw WaitCorr
return(WaitCorr);
}
void DownCorrection(int Frame=1440)
{ double TP;
if(iMA(NULL,Frame,100,0,MODE_SMA,PRICE_CLOSE,1)
>iMA(NULL,cMainFrame,100,0,MODE_SMA,PRICE_CLOSE,10))
{ if( sellADXDmax>75 && MainTrend==Up)
TP=iMA(NULL,cMainFrame,21,0,MODE_EMA,PRICE_CLOSE,0)+20*Point;
else
TP=iIchimoku(NULL, dMainFrame, 9, 26, 52, MODE_KIJUNSEN, 0);
}
else
TP= 0;
//TP= ( iHigh(NULL,cMainFrame,1) +
// iLow(NULL,dMainFrame,iLowest(NULL,dMainFrame,MODE_LOW,12,1)))/2.2;
ShortCall++;
if(ShortCall==1)
{
if(MainTrend==Up
)
WaveNum+=1;
else
if(MainTrend==Down
&& TimeCurrent()- LastLocDnGoDay>86400*30
&& TimeCurrent()- LastMainDnGoWeek>86400*30)
WaveNum+=1;//Wave counter
SetGlobVar("gWaveNum"+Symbol(),WaveNum);
LocalTrend=Down;GlobalVariableSet("gLocalTrend"+Symbol(),Down);
}
if(AccountFreeMargin()/AccountBalance()>0.80)
MainShortOrder(OrderNum,ShortMagic, TP);
}
//-----------------------------------------------------------
int LongSwich(int Wait, double ADX, int magicnum=MainLongMagic, int DayCnt=10 )
{int magic, ret, lastTrend;
double bTkP;
switch(Wait)
{//sw
case NoSignal :
{LongCall=0;
buyADX= cMidlCond(cMainFrame,PRICE_HIGH, ADX, shift );
if ( buyADX>0 )
{
if ( SeachConv(cMainFrame,cWaveTopNum,shift)
&& ConvKind(shift, cMainFrame)
)
{ if (CheckADX(240,55,0,adx55step/2)==Down
&& iBearsPower( NULL, cSlaveFrame, 13, PRICE_CLOSE,1)>W1MinBears)
{Wait=Go; bStartWaitingTime =TimeCurrent();SetGlobVar("bWaitTime"+Symbol(), bStartWaitingTime);}
else
Wait=Ready;
}
}
}//case 0
break;
case Ready :
{//case Ready :
LongCall=0;
if (CheckADX(240,55,0,adx55step/2)==Down
&& iBearsPower( NULL, cSlaveFrame, 13, PRICE_CLOSE,1)>W1MinBears)
{ Wait=Go; bStartWaitingTime = TimeCurrent();SetGlobVar("bWaitTime"+Symbol(), bStartWaitingTime);
}
}//case Ready
break;
case Go :
{//case 2 :
AddpipsInit(Spips, 15 );
if ( ( SeachConv(cMainFrame,cWaveTopNum,0)
&& ConvKind(0, cMainFrame))
||
(SeachConv(dMainFrame,cWaveTopNum,0)
&& ConvKind(0, dMainFrame))
)
{lastTrend=MainTrend; LongCall++;
LocalTrend=Up;GlobalVariableSet("gLocalTrend"+Symbol(),Up);
AddpipsInit(Spips, Bpips);
{ bTkP=bProfit(buyADX);
if (bTkP==0)
{magic=MainLongMagic;MainTrend=Up;GlobalVariableSet("gMainTrend"+Symbol(),Up);
if(LongCall==1){
if(lMainMagicNum==0 && lastTrend!=Up)WaveNum=1;
else if(lWeekMnMagicCnt==0 && lastTrend==Up && TimeCurrent()- LastMainUpGoWeek>86400*30)
WaveNum++;}
}
else
{ magic=LongMagic;
if(LongCall==1 && (TimeCurrent()- LastLocUpGoDay>86400*30))WaveNum++;
}
GlobalVariableSet("gWaveNum"+Symbol(),WaveNum);
if( AccountFreeMargin()/AccountBalance()>0.9)
{ret=MainLongOrder(bTkP,magic);
}
}
}
if((TimeCurrent()-bStartWaitingTime) > 86400*DayCnt )
{
Wait=NoSignal; bStartWaitingTime=NoSignal;SetGlobVar("bWaitTime"+Symbol(), bStartWaitingTime);
}
}//case Go
break;
}//sw
return(Wait);
}
//==========================================================
void StopSmallBuyonUp()
{
if((WaitCorre!=NoSignal && iBullsPower( NULL, 1440, 100, PRICE_CLOSE, 0)<Bulls100)
||WaitDn==Go)
RotUpWaitSmall();
else
{ if (!(MainTrend==Up && iBullsPower( NULL, 1440, 100, PRICE_CLOSE, 0)>Bulls100))
{
if(iMA(NULL,240,100,0,MODE_SMA,PRICE_CLOSE,1)-
iMA(NULL,240,100,0,MODE_SMA,PRICE_CLOSE,5)
<5*Point
&&
iMA(NULL,240,5,0,MODE_SMA,PRICE_CLOSE,1)-
iMA(NULL,240,5,0,MODE_SMA,PRICE_CLOSE,11)
<80*Point
)
{ if(iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>80
&&
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,0)>75
)
{ WaitSmallDn=Ready2;
SetGlobVar("gWaitSmallDn"+Symbol(),Ready2);
WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal); }
}//iMa>
else
if(iMA(NULL,240,21,0,MODE_SMA,PRICE_CLOSE,0)-
iMA(NULL,240,21,0,MODE_SMA,PRICE_CLOSE,6)
<45*Point
)
{if(minStoch(240, 1, 4 )>87
&&
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)<=
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_SIGNAL,1)
)
RotUpWaitSmall();
}
else
Rot1WaitSmall();
}
else
if ( MainTrend==Up && iBullsPower( NULL, 1440, 100, PRICE_CLOSE, 0)>Bulls100
)
if(CheckiMa(60, 21, MODE_SMA, 1, 10)== Up)
{WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);}
}
}
//===========================================================
void SmallBuyonUp()
{
if ( MainTrend==Up && iBullsPower( NULL, 1440, 100, PRICE_CLOSE, 0)>Bulls100)
{if(CheckiMa(60, 21, MODE_SMA, 1, 10)== Down)
Rot1UpWaitSmall();
else
{WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);}
}
else
{if(iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)>=
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,2)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)<25
&&
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,0)<82
)
Rot1WaitSmall();
else
StopSmallBuyonUp();
}
}
//===========================================================
void StopSmallSellonDn()
{ switch (MainTrend)
{//sw
case Flat:
{ if(iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)>=
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,2)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)<25
&&
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,2)<80
)
Rot1WaitSmall();
}
break;
default :
{if((MainTrend==Down && LocalTrend==Down &&
CheckiMa(1440, 100, MODE_SMA, 1, 10)== Down ))
{ if(CheckiMa(60, 21, MODE_SMA, 1, 10)== Up )
{WaitSmallDn=NoSignal;
SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
} else RotDnWaitSmall();
}
else
if(MainTrend==Down && LocalTrend==Down &&
CheckiMa(1440, 100, MODE_SMA, 1, 10)== Up
&& iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,0)<25)
{WaitSmallDn=NoSignal;
SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
}
else
if(!( iMA(NULL,240,21,0,MODE_EMA,PRICE_CLOSE,21)-
iMA(NULL,240,21,0,MODE_EMA,PRICE_CLOSE,1)>=90*Point)
)
{
if( iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)<=MaxStStopSellonDn//25!
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)<25
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>=
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,2)
)
Rot1WaitSmall();
}
else
{if( iRSI(NULL,1440,14,PRICE_CLOSE,1)<=33
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)<20
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,2) )
Rot1WaitSmall();
}
}
break;
}//sw
}
//==============================================================
void SmallSellonDn()
{
if(LocalTrend==Down)
{//1
if(CheckiMa(240, 100, MODE_SMA, 1, 24)== Down
&& SmallTrend==Down
&& WaitUp>Ready )
{//2
if(iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,0)<
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)
&&
iStochastic(NULL,60,8,3,3,MODE_SMA,0,MODE_MAIN,0)<
iStochastic(NULL,60,8,3,3,MODE_SMA,0,MODE_MAIN,1)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)>22
&&
iStochastic(NULL,60,8,3,3,MODE_SMA,0,MODE_MAIN,1)>60
&&
iStochastic(NULL,60,8,3,3,MODE_SMA,0,MODE_MAIN,0)<=
iStochastic(NULL,60,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)
)
RotDnWaitSmall();
}//2
else
if(iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0)<=
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0)
&&
iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,1)>60
&&
iStochastic(NULL,1440,8,3,3,MODE_SMA,0,MODE_MAIN,1)>MinStSellonDn
)
RotWaitSmall();
else
StopSmallSellonDn();
}//1
}
//----------------------------------------------
void RotWaitSmall()
{WaitSmallDn=Ready;
SetGlobVar("gWaitSmallDn"+Symbol(),Ready);
WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
}
//----------------------------------------------
void Rot1WaitSmall()
{WaitSmallUp=Ready;
SetGlobVar("gWaitSmallUp"+Symbol(),Ready);
WaitSmallDn=NoSignal;
SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
}
void RotDnWaitSmall()
{WaitSmallDn=Ready1;
SetGlobVar("gWaitSmallDn"+Symbol(),Ready1);
WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal);
}
void RotUpWaitSmall()
{WaitSmallDn=Ready2;
SetGlobVar("gWaitSmallDn"+Symbol(),Ready2);
WaitSmallUp=NoSignal;
SetGlobVar("gWaitSmallUp"+Symbol(),NoSignal); }
void Rot1UpWaitSmall()
{WaitSmallUp=Ready1;
SetGlobVar("gWaitSmallUp"+Symbol(),Ready1);
WaitSmallDn=NoSignal;
SetGlobVar("gWaitSmallDn"+Symbol(),NoSignal);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---