Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
EXP_FIBO_ZZ_V1en
//+------------------------------------------------------------------+
//| EXP_FIBO_ZZ_V0.mq4 |
//| Copyright © 2009, Tokman Yuriy |
//| yuriytokman@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Tokman Yuriy"
#property link "yuriytokman@gmail.com"
extern string ____1___ = "Íàñòðîéêè èíäèêàòîðà ZigZag";
extern int ExtDepth = 12;
extern int ExtDeviation = 5;
extern int ExtBackstep = 3;
extern string ____2___ = "Âðåìÿ ðàáîòû ñîâåòíèêà";
extern int StartHour = 00; // Ñòàðò ðàáîòû ÷àñû
extern int StartMinute = 01; // Ñòàðò ðàáîòû ìèíóòû
extern int StopHour = 23; // Ñòîï ðàáîòû ÷àñû
extern int StopMinute = 59; // Ñòîï ðàáîòû ìèíóòû
extern string ____3___ = "Íàñòðîéêè êîðèäîðà è îòñòóïà";
extern int n_pips = 5; // Îòñòóï â ïóíêòàõ
extern int Min_Corridor = 20; // Ìèíèìàëüíûé ðàçìåð êîðèäîðà
extern int Max_Corridor = 100; // Ìàêñèìàëüíûé ðàçìåð êîðèäîðà
extern string ____4___ = "Íàñòðîéêè ÌÌ";
extern bool Choice_method = true; // Âûáîð ìåòîäà true - áàëàíññ , false - câîáîäíûå ñðåäñòâà
extern double Risk = 1; //% çàäà¸ì ïðîöåíò îò äåïîçèòà, åñëè 0 ðàáîòàåì ôèêñèðîâàíûì ëîòîì Lots
extern double Lots = 0.1; // Ðàçìåð ëîòà
extern bool MovingInWL = true; // Ïåðåâîä â áåçóáûòîê
extern int LevelProfit = 13; // Óðîâåíü ïðîôèòà â ïóíêòàõ, êîòîðîãî äîëæíà äîñòèãíóòü ïîçèöèÿ äëÿ òîãî, ÷òîáû å¸ ñòîï áûë ïåðåíåñ¸í íà óðîâåíü áåçóáûòêà.
extern int LevelWLoss = 2; // Óðîâåíü áåçóáûòêà â ïóíêòàõ, íà êîòîðûé áóäåò ïåðåíåñ¸í ñòîï ïîçèöèè ïîñëå òîãî, êàê å¸ ïðîôèò äîñòèãíåò óðîâíÿ LevelProfit â ïóíêòàõ.
extern string _____5_____ = "Íàñòðîéêè ñîâåòíèêà";
extern double Fibo_StopLoss = 61.8; // Ðàçìåð ñòîïà â ïðîöåíòàõ
extern double Fibo_TakeProfit = 161.8; // Ðàçìåð òåéêà â ïðîöåíòàõ
extern int MagicNumber = 28081975; // Ìàãè÷åñêîå ÷èñëî îðäåðîâ
extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
extern int NumberOfTry = 5; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
extern string _____6_____ = "Äðóãèå íàñòðîéêè";
extern bool Line = false; // Ïîêàçûâàòü ëèíèè êàíàëà
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
extern color clDelete = LightBlue; // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
extern color clOpenBuy = LightBlue; // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
extern color clOpenSell = LightCoral; // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà
bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4
string txt;
double current_high = 0, current_low = 0;
double ppB = 0, ppS = 0;
int StopLoss = 0;
int TakeProfit = 0;
string comment = "yuriytokman@gmail.com";
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
gbNoInit=False;
if (!IsTradeAllowed()) {
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if (!IsLibrariesAllowed()) {
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if (!IsTesting()) {
if (IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
//----
string char[256]; int i;
for (i = 0; i < 256; i++) char[i] = CharToStr(i);
txt =
char[70]+char[97]+char[99]+char[116]+char[111]+char[114]+char[121]+char[32]
+char[111]+char[102]+char[32]+char[116]+char[104]+char[101]+char[32]+char[97]
+char[100]+char[118]+char[105]+char[115]+char[101]+char[114]+char[115]+char[58]
+char[32]+char[121]+char[117]+char[114]+char[105]+char[121]+char[116]+char[111]
+char[107]+char[109]+char[97]+char[110]+char[64]+char[103]+char[109]+char[97]
+char[105]+char[108]+char[46]+char[99]+char[111]+char[109];
Label("label",txt);
comment = txt;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (!IsTesting()) Comment("");
ObjectDelete("00");
ObjectDelete("high");
ObjectDelete("low");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(MovingInWL) MovingInWL( NULL, -1, MagicNumber);
//----
if(!isTradeTimeInt(StartHour,StartMinute,StopHour,StopMinute))
{
Comment("Ñîâåòíèê îñòàíîâëåí! Ìîæíî ïîéòè ïîñïàòü èëè ñäåëàòü ïîëåçíîå äåëî.");
return(-1);
}
//----
if (gbDisabled) {
Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
}
if (gbNoInit) {
Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if (!IsTesting()) {
if (NumberAccount>0 && NumberAccount!=AccountNumber()) {
Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
return;
} else Comment("");}
//----
double Lotsi;
if(Risk<=0)Lotsi=Lots;
else Lotsi=GetLot();
//----
//----
double high = 0, low = 0;
double room_0 = GetExtremumZZPrice(NULL, 0, 0, ExtDepth, ExtDeviation, ExtBackstep);
double room_1 = GetExtremumZZPrice(NULL, 0, 1, ExtDepth, ExtDeviation, ExtBackstep);
double room_2 = GetExtremumZZPrice(NULL, 0, 2, ExtDepth, ExtDeviation, ExtBackstep);
if(room_1>room_2){high = room_1; low = room_2;}//íàõîäèì âåðõ è íèç
else {high = room_2; low = room_1;} //íàõîäèì âåðõ è íèç
double size_corridor = high - low ; //øèðèíà êîðèäîðà
double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;//Comment("STOPLEVEL=",STOPLEVEL);
//------âû÷èñëÿåì ÑÒ è ÒÏ
StopLoss = (size_corridor/100*Fibo_StopLoss)/Point;
TakeProfit = ((size_corridor/100*Fibo_TakeProfit)-size_corridor)/Point;
ppB = MathRound(high/Point + n_pips )*Point;
ppS = MathRound(low/Point - n_pips )*Point;
//------ïðîðèñîâêà ëèíèé äëÿ àíàëèçà
if(Line){
SetHLine(Yellow, "00", room_0, 0, 2);
SetHLine(Lime, "high", high, 0, 2);
SetHLine(Red, "low", low, 0, 2);}
//-----óäàëÿåì îòëîæêó åñëè åñòü ðûíî÷íûé îðäåð
if(ExistPositions(NULL,-1,MagicNumber))//åñòü îòêðûòàÿ ïîçèöèÿ
DeleteOrders(NULL, -1, MagicNumber);//óäàëÿåì îòëîæêè
//---------------------------------------------
double sl=0, tp=0, ti=0;
if(size_corridor>Min_Corridor*Point && size_corridor<Max_Corridor*Point //êîðèäîð äîïóñòèìîé âåëè÷èíû
&& high>room_0+STOPLEVEL && low<room_0-STOPLEVEL) //íóëåâàÿ òî÷êà çèãà íàõîäèòñÿ â êîðèäîðå
{
if(!ExistPositions(NULL,-1,MagicNumber))//íåò îòêðûòûõ ïîçèöèé
{
if(!ExistOrders(NULL,OP_BUYSTOP,MagicNumber))//íåò áàéñòîïà
{
if (StopLoss >0) sl=ppB-StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0;
SetOrder(NULL,OP_BUYSTOP,Lotsi,ppB,sl,tp,MagicNumber,0,txt);//óñòàíàâëèâàåì áàé ñòîï
}
else // åñòü áàéñòîï
{
if(GetOrderOpenPrice(NULL, OP_BUYSTOP, MagicNumber)!=ppB)
{//ìîäèôèöèðóåì
ti = TicketPos(NULL,OP_BUYSTOP,MagicNumber);
if (OrderSelect(ti, SELECT_BY_TICKET))
{
if (StopLoss >0) sl=ppB-StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0;
ModifyOrder(ppB,sl,tp,Turquoise);
}
}
}
if(!ExistOrders(NULL,OP_SELLSTOP,MagicNumber))//íåò ñåëëñòîïà
{
if (StopLoss >0) sl=ppS+StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0;
SetOrder(NULL,OP_SELLSTOP,Lotsi,ppS,sl,tp,MagicNumber,0,txt);// óñòàíàâëèâàåì
}
else // åñòü ñåëëñòîï
{
if(GetOrderOpenPrice(NULL, OP_SELLSTOP, MagicNumber)!=ppS)
{//ìîäèôèöèðóåì
ti = TicketPos(NULL,OP_SELLSTOP,MagicNumber);
if (OrderSelect(ti, SELECT_BY_TICKET))
{
if (StopLoss >0) sl=ppS+StopLoss*Point; else sl=0;
if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0;
ModifyOrder(ppS,sl,tp,Turquoise);
}
}
}
}
}
//-----------------------------------------------------------------
if (ShowComment) {
string st="CurTime="+TimeToStr(TimeCurrent(), TIME_MINUTES)
+" Ñòàðò="+StartHour+":"+StartMinute
+" Ñòîï="+StopHour+":"+StopMinute
+" Øèðèíà êàíàëà="+DoubleToStr(size_corridor/Point,0)+"p"
+" ÑË="+DoubleToStr(Fibo_StopLoss,0)+"%="+StopLoss+"p"
+" ÒÏ="+DoubleToStr(Fibo_TakeProfit,0)+"%="+TakeProfit+"p"
+" Lots="+DoubleToStr(Lotsi,2)
//+"\n\n Áàëàíñ="+DoubleToStr(AccountBalance(), 2)
//+"\n Ýêâèòè="+DoubleToStr(AccountEquity(), 2)
//+"\n Ïðèáûëü="+DoubleToStr(AccountEquity()-AccountBalance(),3)+" $"
//+"\n Ïðèáûëü="+DoubleToStr((AccountEquity()/AccountBalance()-1)*100,3)+" %"
;
Comment(st);
} else Comment("");
//-------------------------------------------------------------------
return(0);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 07.10.2006 |
//| Îïèñàíèå : Âîçâðàùàåò ýêñòðåìóì ÇèãÇàãà ïî åãî íîìåðó. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) |
//| tf - òàéìôðåéì ( 0 - òåêóùèé ÒÔ) |
//| ne - íîìåð ýêñòðåìóìà ( 0 - ïîñëåäíèé) |
//| dp - ExtDepth |
//| dv - ExtDeviation |
//| bs - ExtBackstep |
//+----------------------------------------------------------------------------+
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=0; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Ýêñòðåìóì ÇèãÇàãà íîìåð ",ne," íå íàéäåí");
return(0);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 30.03.2008 |
//| Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_HLINE ãîðèçîíòàëüíàÿ ëèíèÿ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| cl - öâåò ëèíèè |
//| nm - íàèìåíîâàíèå ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà) |
//| p1 - öåíîâîé óðîâåíü (0 - Bid) |
//| st - ñòèëü ëèíèè (0 - ïðîñòàÿ ëèíèÿ) |
//| wd - øèðèíà ëèíèè (0 - ïî óìîë÷àíèþ) |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+ |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðîâ. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ óñòàíîâêè) |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Óäàëåíèå îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ( "" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ ( -1 - ëþáîé îðäåð) |
//| mn - MagicNumber ( -1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
bool fd;
int err, i, it, k=OrdersTotal(), ot;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(), clDelete);
if (fd) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
Print("Error(",err,") delete order ",GetNameOP(ot),
": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| TimeFrame - òàéìôðåéì (êîëè÷åñòâî ñåêóíä) (0 - òåêóùèé ÒÔ) |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
if (TimeFrame==0) TimeFrame=Period();
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| m - òåêñò ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+ |
//| Îïèñàíèå : Óñòàíîâêà îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ |
//| ll - ëîò |
//| pp - öåíà |
//| sl - óðîâåíü ñòîï |
//| tp - óðîâåíü òåéê |
//| mn - Magic Number |
//| ex - Ñðîê èñòå÷åíèÿ |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
double sl=0, double tp=0, int mn=0, datetime ex=0, string com="") {
color clOpen;
datetime ot;
double pa, pb, mp;
int err, it, ticket, msl;
string lsComm= com+" /"+ WindowExpertName()+" "+GetNameTF(Period());
if (sy=="" || sy=="0") sy=Symbol();
msl=MarketInfo(sy, MODE_STOPLEVEL);
if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
if (ex>0 && ex<TimeCurrent()) ex=0;
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;
}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ot=TimeCurrent(); if(ObjectFind("label")>-1)
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);
if (ticket>0) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (err==128 || err==142 || err==143) {
Sleep(1000*66);
if (ExistOrders(sy, op, mn, ot)) {
if (UseSound) PlaySound(NameFileSound); break;
}
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
continue;
}
mp=MarketInfo(sy, MODE_POINT);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
// Íåïðàâèëüíûå ñòîïû
if (err==130) {
switch (op) {
case OP_BUYLIMIT:
if (pp>pa-msl*mp) pp=pa-msl*mp;
if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_BUYSTOP:
if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_SELLLIMIT:
if (pp<pb+msl*mp) pp=pb+msl*mp;
if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
case OP_SELLSTOP:
if (pp>pb-msl*mp) pp=pb-msl*mp;
if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
}
Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè");
}
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if (err==2 || err==64 || err==65 || err==133) {
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
// Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
if (err==8 || err==141) Sleep(1000*100);
if (err==139 || err==140 || err==148) break;
// Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
// Îáíóëåíèå äàòû èñòå÷åíèÿ
if (err==147) {
ex=0; continue;
}
if (err!=135 && err!=138) Sleep(1000*7.7);
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Âîçâðàùàåò öåíó óñòàíîâêè ïîñëåäíåãî îðäåðà èëè 0. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()>1 && OrderType()<6) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);
}
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò òèêåò ïîñëåäíåé îòêðûòîé ïîçèöèè èëè -1 |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
int TicketPos(string sy="", int op=-1, int mn=-1) {
datetime o;
int i, k=OrdersTotal(), r=-1;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (o<OrderOpenTime()) {
o=OrderOpenTime();
r=OrderTicket();
}
}
}
}
}
}
}
return(r);
}
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| pp - öåíà óñòàíîâêè îðäåðà |
//| sl - öåíîâîé óðîâåíü ñòîïà |
//| tp - öåíîâîé óðîâåíü òåéêà |
//| cl - öâåò çíà÷êà ìîäèôèêàöèè |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
bool fm;
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
if (fm) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
er=GetLastError();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Sleep(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 30.04.2009 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ðàçðåøåíèÿ òîðãîâëè ïî âðåìåíè. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| hb - ÷àñû âðåìåíè íà÷àëà òîðãîâëè |
//| mb - ìèíóòû âðåìåíè íà÷àëà òîðãîâëè |
//| he - ÷àñû âðåìåíè îêîí÷àíèÿ òîðãîâëè |
//| me - ìèíóòû âðåìåíè îêîí÷àíèÿ òîðãîâëè |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
datetime db, de; // Âðåìÿ íà÷àëà è îêîí÷àíèÿ ðàáîòû
int hc; // ×àñû òåêóùåãî âðåìåíè òîðãîâîãî ñåðâåðà
db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
hc=TimeHour(TimeCurrent());
if (db>=de) {
if (hc>=he) de+=24*60*60; else db-=24*60*60;
}
if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
else return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Þðèé Òîêìàíü , yuriytokman@gmail.com |
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : ðàñ÷¸ò ëîòà îò ïðîöåíòà äåïîçèòà |
//+----------------------------------------------------------------------------+
double GetLot()
{
double metod = 0;
if(Choice_method)metod = AccountBalance();
else metod = AccountFreeMargin();
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
double Prots = Risk/100;
double Lotsi=MathFloor(metod*Prots/MarketInfo(Symbol(),MODE_MARGINREQUIRED)
/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);// Ëîòû
if(Lotsi<MinLot)Lotsi=MinLot;
if(Lotsi>MaxLot)Lotsi=MaxLot;
return(Lotsi);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 11.09.2008 |
//| Îïèñàíèå : Ïåðåíîñ óðîâíÿ ñòîïà â áåçóáûòîê |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ( "" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ ( -1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber ( -1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
//+----------------------------------------------------------------------+
//| Îïèñàíèå: Ñîçäàíèå òåêñòîâîé ìåòêè |
//| Àâòîð: Þðèé Òîêìàíü |
//| e-mail: yuriytokman@gmail.com |
//+----------------------------------------------------------------------+
void Label(string name_label, //Èìÿ îáúåêòà.
string text_label, //Òåêñò îáüåêòà.
int corner = 2, //Hîìåð óãëà ïðèâÿçêè
int x = 3, //Pàññòîÿíèå X-êîîðäèíàòû â ïèêñåëÿõ
int y = 15, //Pàññòîÿíèå Y-êîîðäèíàòû â ïèêñåëÿõ
int font_size = 10, //Ðàçìåð øðèôòà â ïóíêòàõ.
string font_name = "Arial", //Íàèìåíîâàíèå øðèôòà.
color text_color = LimeGreen //Öâåò òåêñòà.
)
{
if (ObjectFind(name_label)!=-1) ObjectDelete(name_label);
ObjectCreate(name_label,OBJ_LABEL,0,0,0,0,0);
ObjectSet(name_label,OBJPROP_CORNER,corner);
ObjectSet(name_label,OBJPROP_XDISTANCE,x);
ObjectSet(name_label,OBJPROP_YDISTANCE,y);
ObjectSetText(name_label,text_label,font_size,font_name,text_color);
}
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
---