Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
PivotStrategy_v2_4
//+------------------------------------------------------------------+
//| PivotStrategy v2.mq4 |
//| Àëåêñåé Ðîìàíîâ |
//| seolink@list.ru |
//+------------------------------------------------------------------+
#property copyright "Àëåêñåé Ðîìàíîâ"
#property link "seolink@list.ru"
extern string s1 = "Íàñòðîéêè ñîâåòíèêà";
extern int Magic = 13022011;
extern double Lot = 0.0;
extern double Klot = 2.0;
extern double LotProcentClose = 50.0;
extern double Risk = 1.0;
extern int Slip = 30;
extern string s2 = "Ôèëüòð Moving Average";
extern int ma_period = 4;
extern int ma_method = MODE_SMA;
extern int ma_price = PRICE_CLOSE;
extern string s3 = "Ôèëüòð MACD BUY";
extern int macd1_fast_period = 8;
extern int macd1_slow_period = 17;
extern string s4 = "Ôèëüòð MACD SELL";
extern int macd2_fast_period = 12;
extern int macd2_slow_period = 26;
extern string s5 = "Ôèëüòð Pivot";
extern int FiltrPivot = 25;
double PivotD1;
double PivotD2;
double MA;
int flet;
int Signal = -1;
double R1;
double R2;
double S1;
double S2;
bool flagNewSeries=true;
bool flagProcent = false;
bool flagModify = false;
datetime LastBar;
double OpenPrice;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
Signal=GetSignal();
Comment("Ôëåò = ",flet,"\nÑèãíàë = ",Signal,"\nÏèâîò ¹1 = ",PivotD1,"\nÏèâîò ¹2 = ",PivotD2,"\nR1 = ",R1,"\nR2 = ",R2,"\nS1 = ",S1,"\nS2 = ",S2);
datetime NewBar = iTime(Symbol(),PERIOD_D1,0);
if(NewBar!=LastBar)
{
ClosePosition();
LastBar=NewBar;
flagNewSeries=true;
}
if(flagNewSeries)OpenPosition(Signal);
if(!flagNewSeries)
{
if(flagProcent)ClosePositionProcent();
if(flagModify)ModifyOrder();
}
//----
return(0);
}
//+------------------------------------------------------------------+
int GetSignal()
{
double LastHigh = iHigh(Symbol(),PERIOD_D1,1);
double LastLow = iLow(Symbol(),PERIOD_D1,1);
double LastClose = iClose(Symbol(),PERIOD_D1,1);
double LastHigh2 = iHigh(Symbol(),PERIOD_D1,2);
double LastLow2 = iLow(Symbol(),PERIOD_D1,2);
double LastClose2 = iClose(Symbol(),PERIOD_D1,2);
PivotD1 = (LastHigh+LastLow+LastClose)/3.0;
PivotD2 = (LastHigh2+LastLow2+LastClose2)/3.0;
R1 = (2.0*PivotD1)-LastLow;
R2 = PivotD1+(LastHigh - LastLow);
S1 = (2.0*PivotD1)-LastHigh;
S2 = PivotD1-(LastHigh - LastLow);
MA = iMA(Symbol(),0,ma_period,0,ma_method,ma_price,1);
double MACD1 = iMACD(Symbol(),0,macd1_fast_period,macd1_slow_period,9,PRICE_CLOSE,MODE_MAIN,0);
double MACD2 = iMACD(Symbol(),0,macd1_fast_period,macd1_slow_period,9,PRICE_CLOSE,MODE_MAIN,1);
double MACD3 = iMACD(Symbol(),0,macd2_fast_period,macd2_slow_period,9,PRICE_CLOSE,MODE_MAIN,0);
double MACD4 = iMACD(Symbol(),0,macd2_fast_period,macd2_slow_period,9,PRICE_CLOSE,MODE_MAIN,1);
flet = MathAbs((PivotD1-PivotD2)/Point);
if(flet>=FiltrPivot&&Close[0]>PivotD1&&MA>PivotD1&&MACD1>MACD2)return(OP_BUY);
if(flet>=FiltrPivot&&Close[0]<PivotD1&&MA<PivotD1&&MACD3<MACD4)return(OP_SELL);
return(-1);
}
void OpenPosition(int type)
{
int t=-1;
double price;
double sl;
double tp;
double lot = NormalizeDouble(Klot*LotPercent(Risk),Okr());
if(type==-1)return;
if(type==OP_BUY)
{
RefreshRates();
price=NormalizeDouble(Ask,Digits);
sl=NormalizeDouble(S1,Digits);
tp=NormalizeDouble(R2,Digits);
}
if(type==OP_SELL)
{
RefreshRates();
price=NormalizeDouble(Bid,Digits);
sl=NormalizeDouble(R1,Digits);
tp=NormalizeDouble(S2,Digits);
}
t=OrderSend(Symbol(),type,lot,price,Slip,sl,tp,NULL,Magic);
if(t<0)ErrorBlock(GetLastError());
else {flagNewSeries=false;flagProcent=true;}
}
void ClosePosition()
{
int total=OrdersTotal();
bool res;
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
RefreshRates();
res=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip);
if(!res)ErrorBlock(GetLastError());
}
if(OrderType()==OP_SELL)
{
RefreshRates();
res=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip);
if(!res)ErrorBlock(GetLastError());
}
}
}
}
}
void ClosePositionProcent()
{
double lots;
int total=OrdersTotal();
bool res;
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OpenPrice=OrderOpenPrice();
if(OrderType()==OP_BUY)
{
if(Bid>=R1)
{
lots = NormalizeDouble((OrderLots()/100.0)*LotProcentClose,Okr());
RefreshRates();
res=OrderClose(OrderTicket(),lots,NormalizeDouble(Bid,Digits),Slip);
if(!res)ErrorBlock(GetLastError());
else {flagProcent=false;flagModify=true;}
}
}
if(OrderType()==OP_SELL)
{
if(Ask<=S1)
{
lots = NormalizeDouble((OrderLots()/100.0)*LotProcentClose,Okr());
RefreshRates();
res=OrderClose(OrderTicket(),lots,NormalizeDouble(Ask,Digits),Slip);
if(!res)ErrorBlock(GetLastError());
else {flagProcent=false;flagModify=true;}
}
}
}
}
}
}
void ModifyOrder()
{
bool res;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OpenPrice!=OrderStopLoss())
{
res = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OpenPrice,Digits),OrderTakeProfit(),0);
if(!res)ErrorBlock(GetLastError());
else {flagModify=false;}
}
}
if(OrderType()==OP_SELL)
{
if(OpenPrice!=OrderStopLoss())
{
res = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OpenPrice,Digits),OrderTakeProfit(),0);
if(!res)ErrorBlock(GetLastError());
else {flagModify=false;}
}
}
}
}
}
}
double LotPercent(double risk)
{
double vol=0.0;
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
if(Lot==0.0)vol=(AccountFreeMargin()*risk)/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100.0);
else vol=Lot;
if(vol<MinLot)vol=MinLot;
if(vol>MaxLot)vol=MaxLot;
return(vol);
}
int Okr()
{
double LotsStep=MarketInfo(Symbol(),MODE_LOTSTEP);
if(LotsStep==0.01)return(2);
if(LotsStep==0.1)return(1);
if(LotsStep==1.0)return(0);
return(0);
}
int ErrorBlock(int error)
{
switch(error)
{
case 0: return(0);
case 1: {Print("Îøèáêà: 1 - ïîïûòêà èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè");return(2);}
case 2: {Print("Îøèáêà: 2 - Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ");return(3);}
case 3: {Print("Îøèáêà: 3 - Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû ");return(3);}
case 4: {Print("Îøèáêà: 4 - Òîðãîâûé ñåðâåð çàíÿò");return(1);}
case 5: {Print("Îøèáêà: 5 - Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");return(3);}
case 6: {Print("Îøèáêà: 6 - Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");return(2);}
case 7: {Print("Îøèáêà: 7 - Íåäîñòàòî÷íî ïðàâ");return(3);}
case 8: {Print("Îøèáêà: 8 - Ñëèøêîì ÷àñòûå çàïðîñû");return(2);}
case 9: {Print("Îøèáêà: 9 - Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà");return(3);}
case 64: {Print("Îøèáêà: 64 - Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");return(3);}
case 65: {Print("Îøèáêà: 65 - Íåïðàâèëüíûé íîìåð ñ÷åòà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");return(3);}
case 128: {Print("Îøèáêà: 128 - Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè");return(1);}
case 129: {Print("Îøèáêà: 129 - Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà");return(1);}
case 130: {Print("Îøèáêà: 130 - Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ (èëè â öåíå îòêðûòèÿ îòëîæåííîãî îðäåðà)");return(1);}
case 131: {Print("Îøèáêà: 131 - Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà");return(3);}
case 132: {Print("Îøèáêà: 132 - Ðûíîê çàêðûò");return(2);}
case 133: {Print("Îøèáêà: 133 - Òîðãîâëÿ çàïðåùåíà");return(3);}
case 134: {Print("Îøèáêà: 134 - Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè");return(3);}
case 135: {Print("Îøèáêà: 135 - Öåíà èçìåíèëàñü");return(1);}
case 136: {Print("Îøèáêà: 136 - Íåò öåí");return(1);}
case 137: {Print("Îøèáêà: 137 - Áðîêåð çàíÿò");return(1);}
case 138: {Print("Îøèáêà: 138 - Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask");return(1);}
case 139: {Print("Îøèáêà: 139 - Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ");return(2);}
case 140: {Print("Îøèáêà: 140 - Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ");return(2);}
case 141: {Print("Îøèáêà: 141 - Ñëèøêîì ìíîãî çàïðîñîâ");return(2);}
case 142: {Print("Îøèáêà: 142 - Îðäåð ïîñòàâëåí â î÷åðåäü");return(2);}
case 143: {Print("Îøèáêà: 143 - Îðäåð ïðèíÿò äèëåðîì ê èñïîëíåíèþ");return(2);}
case 144: {Print("Îøèáêà: 144 - Îðäåð àííóëèðîâàí ñàìèì êëèåíòîì ïðè ðó÷íîì ïîäòâåðæäåíèè ñäåëêè");return(2);}
case 145: {Print("Îøèáêà: 145 - Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ");return(2);}
case 146: {Print("Îøèáêà: 146 - Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïîâòîðèòü ïîïûòêó òîëüêî ïîñëå òîãî, êàê ôóíêöèÿ IsTradeContextBusy âåðíåò FALSE.");return(1);}
case 147: {Print("Îøèáêà: 147 - Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì");return(2);}
case 148: {Print("Îøèáêà: 148 - Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì");return(2);}
case 149: {Print("Îøèáêà: 149 - Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî");return(2);}
case 4000: return(0);
case 4001: {Print("Îøèáêà: 4001 - Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè");return(3);}
case 4002: {Print("Îøèáêà: 4002 - Èíäåêñ ìàññèâà - âíå äèàïàçîíà");return(3);}
case 4003: {Print("Îøèáêà: 4003 - Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé");return(3);}
case 4004: {Print("Îøèáêà: 4004 - Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà");return(3);}
case 4005: {Print("Îøèáêà: 4005 - Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ");return(3);}
case 4006: {Print("Îøèáêà: 4006 - Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà");return(3);}
case 4007: {Print("Îøèáêà: 4007 - Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè");return(3);}
case 4008: {Print("Îøèáêà: 4008 - Íåèíèöèàëèçèðîâàííàÿ ñòðîêà");return(3);}
case 4009: {Print("Îøèáêà: 4009 - Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå");return(3);}
case 4010: {Print("Îøèáêà: 4010 - Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà");return(3);}
case 4011: {Print("Îøèáêà: 4011 - Ñëèøêîì äëèííàÿ ñòðîêà");return(3);}
case 4012: {Print("Îøèáêà: 4012 - Îñòàòîê îò äåëåíèÿ íà íîëü");return(3);}
case 4013: {Print("Îøèáêà: 4013 - Äåëåíèå íà íîëü");return(3);}
case 4014: {Print("Îøèáêà: 4014 - Íåèçâåñòíàÿ êîìàíäà");return(3);}
case 4015: {Print("Îøèáêà: 4015 - Íåïðàâèëüíûé ïåðåõîä");return(3);}
case 4016: {Print("Îøèáêà: 4016 - Íåèíèöèàëèçèðîâàííûé ìàññèâ");return(3);}
case 4017: {Print("Îøèáêà: 4017 - Âûçîâû DLL íå ðàçðåøåíû");return(3);}
case 4018: {Print("Îøèáêà: 4018 - Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó");return(3);}
case 4019: {Print("Îøèáêà: 4019 - Íåâîçìîæíî âûçâàòü ôóíêöèþ");return(3);}
case 4020: {Print("Îøèáêà: 4020 - Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû");return(3);}
case 4021: {Print("Îøèáêà: 4021 - Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè");return(3);}
case 4022: {Print("Îøèáêà: 4022 - Ñèñòåìà çàíÿòà");return(3);}
case 4050: {Print("Îøèáêà: 4050 - Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè");return(3);}
case 4051: {Print("Îøèáêà: 4051 - Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè");return(3);}
case 4052: {Print("Îøèáêà: 4052 - Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè");return(3);}
case 4053: {Print("Îøèáêà: 4053 - Îøèáêà ìàññèâà");return(3);}
case 4054: {Print("Îøèáêà: 4054 - Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè");return(3);}
case 4055: {Print("Îøèáêà: 4055 - Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà");return(3);}
case 4056: {Print("Îøèáêà: 4056 - Ìàññèâû íåñîâìåñòèìû");return(3);}
case 4057: {Print("Îøèáêà: 4057 - Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ");return(3);}
case 4058: {Print("Îøèáêà: 4058 - Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà");return(3);}
case 4059: {Print("Îøèáêà: 4059 - Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå");return(3);}
case 4060: {Print("Îøèáêà: 4060 - Ôóíêöèÿ íå ðàçðåøåíà");return(3);}
case 4061: {Print("Îøèáêà: 4061 - Îøèáêà îòïðàâêè ïî÷òû");return(3);}
case 4062: {Print("Îøèáêà: 4062 - Îæèäàåòñÿ ïàðàìåòð òèïà string");return(3);}
case 4063: {Print("Îøèáêà: 4063 - Îæèäàåòñÿ ïàðàìåòð òèïà integer");return(3);}
case 4064: {Print("Îøèáêà: 4064 - Îæèäàåòñÿ ïàðàìåòð òèïà double");return(3);}
case 4065: {Print("Îøèáêà: 4065 -  êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ");return(3);}
case 4066: {Print("Îøèáêà: 4066 - Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ");return(3);}
case 4067: {Print("Îøèáêà: 4067 - Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè");return(3);}
case 4099: {Print("Îøèáêà: 4099 - Êîíåö ôàéëà");return(3);}
case 4100: {Print("Îøèáêà: 4100 - Îøèáêà ïðè ðàáîòå ñ ôàéëîì");return(3);}
case 4101: {Print("Îøèáêà: 4101 - Íåïðàâèëüíîå èìÿ ôàéëà");return(3);}
case 4102: {Print("Îøèáêà: 4102 - Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ");return(3);}
case 4103: {Print("Îøèáêà: 4103 - Íåâîçìîæíî îòêðûòü ôàéë");return(3);}
case 4104: {Print("Îøèáêà: 4104 - Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó");return(3);}
case 4105: {Print("Îøèáêà: 4105 - Íè îäèí îðäåð íå âûáðàí");return(3);}
case 4106: {Print("Îøèáêà: 4106 - Íåèçâåñòíûé ñèìâîë");return(3);}
case 4107: {Print("Îøèáêà: 4107 - Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè");return(2);}
case 4108: {Print("Îøèáêà: 4108 - Íåâåðíûé íîìåð òèêåòà");return(2);}
case 4109: {Print("Îøèáêà: 4109 - Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü â ñâîéñòâàõ ýêñïåðòà");return(3);}
case 4110: {Print("Îøèáêà: 4110 - Äëèííûå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");return(2);}
case 4111: {Print("Îøèáêà: 4111 - Êîðîòêèå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");return(2);}
case 4200: {Print("Îøèáêà: 4200 - Îáúåêò óæå ñóùåñòâóåò");return(3);}
case 4201: {Print("Îøèáêà: 4201 - Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà");return(3);}
case 4202: {Print("Îøèáêà: 4202 - Îáúåêò íå ñóùåñòâóåò");return(2);}
case 4203: {Print("Îøèáêà: 4203 - Íåèçâåñòíûé òèï îáúåêòà");return(3);}
case 4204: {Print("Îøèáêà: 4204 - Íåò èìåíè îáúåêòà");return(3);}
case 4205: {Print("Îøèáêà: 4205 - Îøèáêà êîîðäèíàò îáúåêòà");return(3);}
case 4206: {Print("Îøèáêà: 4206 - Íå íàéäåíî óêàçàííîå ïîäîêíî");return(3);}
case 4207: {Print("Îøèáêà: 4207 - Îøèáêà ïðè ðàáîòå ñ îáúåêòîì");return(3);}
default: {Print("Íåèçâåñòíàÿ îøèáêà: ",error);return(3);}
}
}
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
---