Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Martingail breakdowning 0.9.4
//+------------------------------------------------------------------+
//| Breakdowning martingail v 0.9.4.mq4 |
//| Copyright © 2006, B@ss & Steve |
//| albass@mail333.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, B@ss & Steve"
#property link "albass@mail333.com, http://forum.alpari-idc.ru"
//----
#include <stdlib.mqh>
// åñëè false, òî ïðè çàêðûòèè òåêóùåé ñåðèè, íîâûå îðäåðà íå áóäóò
// îòêðûâàòüñÿ.
extern bool TradeAllowed = true;
// øàã â ïóíêòàõ óðîâíåé
extern int Shag = 20;
// ðàçìåð òîðãóåìîãî ëîòà, ïðè âûêëþ÷åííîì ÌÌ
extern double startLots = 0.1;
// âêëþ÷åíèå MoneyManagement
extern bool MoneyManagement = true;
// ëîãàðèôìè÷åñêèé MoneyManagement
extern bool LogariphmicMM = true;
// ðàçìåð ëîòà â ïðîöåíòàõ îò äåïîçèòà
extern double Riskfactor = 4;
// ðàçìåð íóæíîãî ïðîôèòà â ïðîöåíòàõ îò äåïîçèòà
extern double ProfitPercent = 0.4;
// âêëþ÷åíèå îïòèìàëüíîãî çàêðûòèÿ îðäåðîâ (ïîâûøàåò äîõîäíîñòü)
extern bool OptimalTakeProfit = true;
// çàêðûòèå îðäåðîâ ïî òåéêïðîôèòàì è ñòîï-ëîññàì
extern bool Close_on_TP = false;
/* äâà ðåæèìà Close_on_TP:
true - äâèãàÿ ïåðâûé óðîâåíü ïðè äîñòèæåíèè TP
(åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû)
false - èäåíòè÷íûé òîìó, åñëè Close_on_TP âûêëþ÷åí
(åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû, òî TP=0)*/
extern bool Mode_Close_on_TP = true;
// ïîêàçûâàòü ñëóæåáíóþ èíôîðìàöèþ ïî îðäåðàì â æóðíàëå òåðìèíàëà
extern bool ShowLog = false;
//----
int timeOut = 5000;
int maxLevel = 9; // ìàêñèìàëüíûé îòêðûòûé óðîâåíü
double LotsLevel_2 = 1; // øàã ïðèðàùåíèÿ ëîòîâ ñ óâåëè÷åíèåì óðîâíÿ
double LotsLevel_3 = 2;
double LotsLevel_4 = 4;
double LotsLevel_5 = 8;
double LotsLevel_6 = 16;
double LotsLevel_7 = 32;
double LotsLevel_8 = 64;
double LotsLevel_9 = 128;
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ïðîâåðÿåò íàëè÷èå îðäåðà ñ äàííûì ìàãè÷åñêèì íîìåðîì |
//+------------------------------------------------------------------+
bool isMgNum(int num)
{
int t, cnt1;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderMagicNumber() == num && OrderSymbol() == Symbol())
{
return (True); // âîçâðàùàåìîå çíà÷åíèå
}
}
return (False);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ óäàëåíèÿ îðäåðà ïî ìàãè÷åñêîìó íîìåðó |
//+------------------------------------------------------------------+
bool deleteOrderNum(int num)
{
int t, cnt1, err;
bool tic;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
// òîëüêî äëÿ äàííîãî èíñòðóìåíòà
if(OrderMagicNumber() == num && (OrderType()==OP_BUYSTOP ||
OrderType() == OP_SELLSTOP))
{
int start = GetTickCount();
tic = OrderDelete(OrderTicket());
Print("Âðåìÿ óäàëåíèÿ ", (GetTickCount() - start) / 1000, " ñåêóíä.");
//----
if(tic)
PlaySound("timeout.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
return(True); // âîçâðàùàåìîå çíà÷åíèå
}
}
}
return (False);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ, ïðîâåðÿþùàÿ, àêòèâèðîâàí ëè äàííûé îðäåð â îòêðûòóþ |
//| ïîçèöèþ |
//+------------------------------------------------------------------+
bool isOrderActive(int num) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
{
int t, cnt1;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderMagicNumber()== num)
{
//----
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
return(True); // âîçâðàùàåìîå çíà÷åíèå
}
}
}
}
return (False);
}
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå ìàêñèìàëüíî îòêðûòûõ ëîòîâ ïî äàííîìó èíñòðóìåíòó |
//+------------------------------------------------------------------+
double getTopLots (int mode) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
{
int t, cnt1;
double topL, topL_buy, topL_sell;
t = OrdersTotal();
topL = 0;
for(cnt1 = 0; cnt1 < t; cnt1++)
//----
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderType() == OP_BUY && mode == 1) // äëÿ áàé
{
//----
if(OrderLots() > topL)
{
topL = OrderLots();
}
}
//----
if(OrderType() == OP_SELL && mode == 2) // äëÿ ñåëë
{
if(OrderLots() > topL)
{
topL = OrderLots();
}
}
// ðàçíèöà â ëîòàõ ìåæäó áàé è ñåëë (äëÿ âû÷èñëåíèÿ ïðîôèòà íóæíîãî)
if(mode == 3)
{
//----
if(OrderType() == OP_SELL && OrderLots() > topL_sell)
{
topL_sell = OrderLots();
}
//----
if(OrderType() == OP_BUY && OrderLots() > topL_buy)
{
topL_buy = OrderLots();
}
topL = MathAbs(topL_sell - topL_buy);
}
}
}
return (topL);
}
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå ìàñèìàëüíîãî óðîâíÿ äëÿ äëèííûõ èëè êîðîòêèõ ïîçèöèé| |
//+------------------------------------------------------------------+
int getTopLevel (int mode) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
{
int t, cnt1, tLev, cLev;
t = OrdersTotal();
cLev = 0;
tLev = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
//òîëüêî àêòèâèðîâàííûå ïîçèöèè
if(mode == 1)
{
//ïðîâåðêà óðîâíÿ äëÿ ëîíãîâ
if(OrderMagicNumber() == 851)
cLev = 9;
//----
if(OrderMagicNumber() == 841)
cLev = 8;
//----
if(OrderMagicNumber() == 831)
cLev = 7;
//----
if(OrderMagicNumber() == 821)
cLev = 6;
//----
if(OrderMagicNumber() == 811)
cLev = 5;
//----
if(OrderMagicNumber() == 801)
cLev = 4;
//----
if(OrderMagicNumber() == 791)
cLev = 3;
//----
if(OrderMagicNumber() == 781)
cLev = 2;
//----
if(OrderMagicNumber() == 771)
cLev = 1;
}
else
{
//ïðîâåðêà óðîâíÿ äëÿ øîðòîâ
if(OrderMagicNumber() == 852)
cLev = 9;
//----
if(OrderMagicNumber() == 842)
cLev = 8;
//----
if(OrderMagicNumber() == 832)
cLev = 7;
//----
if(OrderMagicNumber() == 822)
cLev = 6;
//----
if(OrderMagicNumber() == 812)
cLev = 5;
//----
if(OrderMagicNumber() == 802)
cLev = 4;
//----
if(OrderMagicNumber() == 792)
cLev = 3;
//----
if(OrderMagicNumber() == 782)
cLev = 2;
//----
if(OrderMagicNumber() == 772)
cLev = 1;
}
}
}
//----
if(cLev > tLev)
tLev = cLev;
}
return (tLev);
}
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå, ñêîëüêî ëîòîâ îòêðûâàòü ïî çàäàííîìó íîìåðó óðîâíÿ |
//+------------------------------------------------------------------+
double getLotByLevel (int level) // ôóíêöèÿ äëÿ âû÷èñëåíèÿ ëîòà ïî óðîâíþ
{
double lot1;
lot1 = startLots; // çíà÷åíèå ïî óìîë÷àíèþ
// ïåðâûå îðäåðà - òîëüêî äëÿ îòñ÷åòà óðîâíåé, ïîçèöèè ðàçìåðîì 0,1 ëîòà
if(level == 1)
lot1 = 0.1;
//----
if(level == 2)
lot1 = NormalizeDouble(startLots*LotsLevel_2, 1);
//----
if(level == 3)
lot1 = NormalizeDouble(startLots*LotsLevel_3, 1);
//----
if(level == 4)
lot1 = NormalizeDouble(startLots*LotsLevel_4, 1);
//----
if(level == 5)
lot1 = NormalizeDouble(startLots*LotsLevel_5, 1);
//----
if(level == 6)
lot1 = NormalizeDouble(startLots*LotsLevel_6, 1);
//----
if(level == 7)
lot1 = NormalizeDouble(startLots*LotsLevel_7, 1);
//----
if(level == 8)
lot1 = NormalizeDouble(startLots*LotsLevel_8, 1);
//----
if(level == 9)
lot1 = NormalizeDouble(startLots*LotsLevel_9, 1);
return(lot1);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äëÿ ïîëó÷åíèÿ öåíû îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó |
//| íîìåðó |
//+------------------------------------------------------------------+
double getOrderPriceByNum (int num)
{
int t, cnt1;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderMagicNumber() == num)
{
return(OrderOpenPrice());
}
}
}
return (0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äëÿ ïîëó÷åíèÿ âðåìåíè îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó|
//| íîìåðó |
//+------------------------------------------------------------------+
datetime getOrderOpenTimeByNum (int num)
{
int t, cnt1;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderMagicNumber() == num)
{
return(OrderOpenTime());
}
}
}
return (0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ ëîíãîâ ïî äàííîìó èíñòðóìåíòó |
//+------------------------------------------------------------------+
double getBuyLotsSum(int mode)
{
int t, cnt1;
double sm;
t = OrdersTotal();
sm = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(mode != 1)
{
//----
if(OrderType() == OP_BUY && OrderSymbol() == Symbol())
{
sm = sm + OrderLots();
}
}
else
{
//à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà
if(OrderType() == OP_BUY)
{
sm = sm + OrderLots();
}
}
}
return(sm);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ øîðòîâ ïî äàííîìó èíñòðóìåíòó |
//+------------------------------------------------------------------+
double getSellLotsSum(int mode)
{
int t, cnt1;
double sm;
t = OrdersTotal();
sm = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(mode != 1)
{
//----
if(OrderType() == OP_SELL && OrderSymbol() == Symbol())
{
sm = sm + OrderLots();
}
}
else
{
//à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà
if(OrderType() == OP_SELL)
{
sm = sm + OrderLots();
}
}
}
return(sm);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äëÿ ìîäèôèêàöèè îòëîæåííûõ îðäåðîâ ëîíãîâ. Çäåñü |
//| îïðåäåëÿåì ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî îðäåðà äëÿ |
//| ëîíãîâ |
//+------------------------------------------------------------------+
int getMaxLongNum()
{
int t, cnt1;
int topL;
t = OrdersTotal();
topL = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderType() == OP_BUY)
{
//----
if(OrderMagicNumber() > topL)
topL = OrderMagicNumber();
}
}
}
return (topL);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îïðåäåëÿåò ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî |
//| îðäåðà äëÿ øîðòîâ |
//+------------------------------------------------------------------+
int getMaxShortNum()
{
int t, cnt1;
int topL;
t = OrdersTotal();
topL = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderType() == OP_SELL)
{
//----
if(OrderMagicNumber() > topL)
topL = OrderMagicNumber();
}
}
}
return (topL);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îïðåäåëÿåò ñëåäóþùèé ìàãè÷åñêèé íîìåð ïî äàííîìó |
//+------------------------------------------------------------------+
int getNextOrderNum(int n1)
{
//----
if(n1 == 771)
return(781);
//----
if(n1 == 781)
return(791);
//----
if(n1 == 791)
return(801);
//----
if(n1 == 801)
return(811);
//----
if(n1 == 811)
return(821);
//----
if(n1 == 821)
return(831);
//----
if(n1 == 831)
return(841);
//----
if(n1 == 841)
return(851);
//----
if(n1 == 772)
return(782);
//----
if(n1 == 782)
return(792);
//----
if(n1 == 792)
return(802);
//----
if(n1 == 802)
return(812);
//----
if(n1 == 812)
return(822);
//----
if(n1 == 822)
return(832);
//----
if(n1 == 832)
return(842);
//----
if(n1 == 842)
return(852);
return (0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ âû÷èñëåíèÿ ìàãè÷åñêîãî íîìåðà ïî íîìåðó óðîâíÿ |
//+------------------------------------------------------------------+
int getNum(int dir, int level)
{
//----
if(dir == 1)
{
//äëÿ ëîíãîâ
if(level == 1)
return(771);
//----
if(level == 2)
return(781);
//----
if(level == 3)
return(791);
//----
if(level == 4)
return(801);
//----
if(level == 5)
return(811);
//----
if(level == 6)
return(821);
//----
if(level == 7)
return(831);
//----
if(level == 8)
return(841);
//----
if(level == 9)
return(851);
}
else
{
//----
if(level == 1)
return(772);
//----
if(level == 2)
return(782);
//----
if(level == 3)
return(792);
//----
if(level == 4)
return(802);
//----
if(level == 5)
return(812);
//----
if(level == 6)
return(822);
//----
if(level == 7)
return(832);
//----
if(level == 8)
return(842);
//----
if(level == 9)
return(852);
}
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ìîäèôèêàöèè îòëîæåííîãî îðäåðà. Çäåñü ïîëó÷àåì |
//| âû÷èñëåííûå öåíû îòêðûòèÿ è òýéêïðîôèòà äëÿ îòëîæåííûõ îðäåðîâ |
//| è åñëè îíè îòëè÷àþòñÿ îò öåí ìîäèôèöèðóåìîãî îðäåðà, èçìåíÿåì èõ|
//+------------------------------------------------------------------+
int modOrder(int num, double oprice, double prprice)
{
int t, cnt1, err, start;
bool tic;
double p1, p2;
t = OrdersTotal();
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol() && OrderMagicNumber() == num)
{
//----
if((OrderOpenPrice() != oprice || OrderTakeProfit() != prprice) && oprice != 0)
{
//----
if(OrderType() == OP_BUYSTOP)
{
p1 = oprice;
p2 = prprice;
NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS));
NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS));
//----
if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits)
|| NormalizeDouble(OrderTakeProfit(), Digits) !=
NormalizeDouble(p2, Digits))
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green);
//----
if(ShowLog)
{
Print("ìîäèô BUYSTOP ", OrderOpenPrice(), "->", p1, " t/p ",
OrderTakeProfit(),"->", p2);
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000,
" ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
//----
if(OrderType() == OP_SELLSTOP)
{
p1 = oprice;
p2 = prprice;
NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS));
NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS));
//----
if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits)
|| NormalizeDouble(OrderTakeProfit(), Digits) !=
NormalizeDouble(p2, Digits))
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green);
//----
if(ShowLog)
{
Print("ìîäèô SELLSTOP ", OrderOpenPrice(), "->", p1, " t/p ",
OrderTakeProfit(),"->", p2);
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000,
" ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
}
}
}
return (1);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ïîäñ÷åò ïðîôèòà ïî ïîçèöèÿì â çàâèñèìîñòè îò ðåæèìà. Ïðè|
//| mode=1 òîëüêî äëÿ òåêóùåãî èíñòðóìåíòà, ïðè ëþáîì äðóãîì äëÿ |
//| âñåõ ïîçèöèé ñ÷åòà |
//+------------------------------------------------------------------+
double getAllProfit(int mode)
{
int t, cnt1;
double pf;
t = OrdersTotal();
pf = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(mode == 1)
{
//----
if(OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL))
{
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
}
else
{
//----
if(mode == 2 && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
{
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
//----
if(mode == 3 && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
{
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
return (pf);
}
//+------------------------------------------------------------------+
//| ïðè ëþáîì äðóãîì äëÿ âñåõ ïîçèöèé ñ÷åòà |
//+------------------------------------------------------------------+
double getDayProfit(int mode, int dayShift)
{
int t, cnt1, cyear, cmonth, cday;
double pf;
datetime ctm;
t = HistoryTotal();
pf = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY);
ctm = OrderCloseTime();
cyear = TimeYear(ctm);
cmonth = TimeMonth(ctm);
cday = TimeDay(ctm);
//----
if(cyear == Year() && cmonth == Month() && cday == (Day() - dayShift))
{
//----
if(mode==1)
{
//ïðèáûëü ïî ëîíãàì è øîðòàì
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
}
else
{
//----
if(mode == 2 && OrderType() == OP_BUY)
{
//ïðèáûëü òîëüêî ïî ëîíãàì
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
//----
if(mode == 3 && OrderType() == OP_SELL)
{
//ïðèáûëü òîëüêî ïî øîðòàì
pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
}
return (pf);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double getLevelPositions(int mode, int level)
{
int t, cnt1;
double pf;
t = HistoryTotal();
pf = 0;
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY);
//----
if(OrderSymbol() == Symbol())
{
//ïðîâåðêà èíñòðóìåíòà
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
//----
if(mode == 1 && (OrderMagicNumber() == level ||
OrderMagicNumber() == (level + 1)))
{
//ñ÷èòàåì òîëüêî ñäåëêè îäíîãî óðîâíÿ
pf = pf + 1;
}
//----
if(mode == 2)
{
//ñ÷åò ñäåëîê ïî âñåì óðîâíÿì
pf = pf + 1;
}
}
}
}
return (pf);
}
//+------------------------------------------------------------------+
//| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð SellStop |
//+------------------------------------------------------------------+
double setPriceSellStop()
{
double topPrice, PriceSetka, HighestPriceInRange;
int NumPoloski, NumBarsAfterOpenedOrder;
datetime OpenOrderTime;
topPrice = getOrderPriceByNum(getMaxShortNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxShortNum());
NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);
HighestPriceInRange = Highest(NULL, 0, MODE_HIGH, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè ïîä òåêóùåé öåíîé BID
NumPoloski = MathAbs(MathFloor((Bid - topPrice) / (Shag*Point)));
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå
PriceSetka = topPrice + NumPoloski*Shag*Point;
//----
if(HighestPriceInRange < PriceSetka + Shag*Point && PriceSetka >= topPrice+Shag*Point &&
Bid > topPrice)
{
return(NormalizeDouble(PriceSetka - Shag*Point,Digits));
}
}
//+------------------------------------------------------------------+
//| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð BuyStop |
//+------------------------------------------------------------------+
double setPriceBuyStop()
{
double lowPrice, PriceSetka, LowestPriceInRange;
int NumPoloski, NumBarsAfterOpenedOrder;
datetime OpenOrderTime;
lowPrice = getOrderPriceByNum(getMaxLongNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxLongNum());
NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);
LowestPriceInRange = Lowest(NULL, 0, MODE_LOW, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè íàä òåêóùåé öåíîé ASK
NumPoloski = MathAbs(MathFloor((lowPrice - Ask) / (Shag*Point)));
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå
PriceSetka = lowPrice - NumPoloski*Shag*Point;
//----
if(LowestPriceInRange > PriceSetka - Shag*Point && PriceSetka <= lowPrice - Shag*Point &&
Ask < lowPrice)
{
return(NormalizeDouble(PriceSetka + Shag*Point,Digits));
}
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ çàêðûòèÿ îðäåðîâ ïî äîñòèæåíèþ ïðîôèòà |
//+------------------------------------------------------------------+
bool getProfitOrdersClose()
{
int cnt1, err, tic1,tic2, LotBy, LotBy1,i;
bool ticdone;
int T1[10], T2[10], a;
a = 0;
//----
for(cnt1 = 0; cnt1 < OrdersTotal(); cnt1++)
{
//ïðîâåðÿåì, ìîæíî ëè çàêðûòü âñòðå÷íûå îðäåðà áåç ïîòåðè ñïðåäà
OrderSelect(cnt1, SELECT_BY_POS);
tic1 = OrderTicket();
LotBy = OrderLots();
//----
if(OrderType() == OP_SELL)
{
//----
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
tic2 = OrderTicket();
LotBy1 = OrderLots();
//----
if(OrderType() == OP_BUY && LotBy == LotBy1 &&
OrderSelect(tic1, SELECT_BY_TICKET) && OrderSelect(tic2, SELECT_BY_TICKET))
{
T1[a] = tic1;
T2[a] = tic2;
a++;
}
}
}
}
for(cnt1 = 0; cnt1 < a; cnt1++)
{
// çàêðûâàåì âñòðå÷íûå îðäåðà
if(OrderSelect(T1[cnt1], SELECT_BY_TICKET) && OrderSelect(T2[cnt1], SELECT_BY_TICKET))
{
ticdone = OrderCloseBy(T1[cnt1], T2[cnt1], Green);
//----
if(!ticdone)
{
err = GetLastError();
//----
if(err != 0 && err != 1)
Print ("Îøèáêà çàêðûòèÿ âñòðå÷íîãî îðäåðà = ", ErrorDescription(err));
}
Sleep(timeOut);
}
}
for(cnt1 = OrdersTotal(); cnt1 >= 0; cnt1--)
{
// çàêðûâàåì âñå îñòàâøèåñÿ îðäåðà
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
//----
if(OrderType() == OP_BUY)
{
ticdone = OrderClose(OrderTicket(), OrderLots(), Ask, 3, Green);
//----
if(ticdone)
PlaySound("timeout.wav");
//----
if(!ticdone)
{
err = GetLastError();
if(err != 0)
Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
}
Sleep(timeOut);
}
//----
if(OrderType() == OP_SELL)
{
ticdone = OrderClose(OrderTicket(), OrderLots(), Bid, 3, Green);
//----
if(ticdone)
PlaySound("timeout.wav");
//----
if(!ticdone)
{
err = GetLastError();
//----
if(err != 0)
Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
}
Sleep(timeOut);
}
}
}
return (False);
}
//+------------------------------------------------------------------+
//| Ñóììà ëîòîâ âñåõ îòêðûòûõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ |
//| çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè |
//+------------------------------------------------------------------+
double getSumLots(int mode)
{
int i;
double sumLots;
//----
for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
//----
if(OrderType() == OP_BUY && mode == 1)
{
sumLots = sumLots + OrderLots();
}
//----
if(OrderType() == OP_SELL && mode == 2)
{
sumLots = sumLots + OrderLots();
}
}
return(sumLots);
}
//+------------------------------------------------------------------+
//| Âçâåøåííàÿ öåíà äëÿ âñåõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ |
//| çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè |
//+------------------------------------------------------------------+
double getSumWeightedPrice(int mode)
{
int i;
double sumWeightedPrice;
//----
for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
//----
if(OrderType() == OP_BUY && mode == 1)
{
sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice();
}
//----
if(OrderType() == OP_SELL && mode == 2)
{
sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice();
}
}
return(sumWeightedPrice);
}
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå öåí çàêðûòèÿ âñåõ îðäåðîâ, íåîáõîäèìûõ äëÿ |
//| âûñòàâëåíèÿ òåéêïðîôèòîâ è ñòîïëîññîâ äëÿ îðäåðîâ |
//+------------------------------------------------------------------+
double getOptimalTakeProfit(bool mode, bool SELL_BUY)
{
//ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
double TempOptimalTP, TempOptimalTP_sell, TempOptimalTP_buy, NeedTP_points, lots;
int i;
double multiplier, profit_money, price_tick;
//----
if(mode)
{
multiplier = MathSqrt(getTopLots(3));
}
//----
if(!mode)
{
multiplier=1;
}
profit_money = AccountBalance()*ProfitPercent*multiplier / 100;
price_tick = MarketInfo(Symbol(), MODE_TICKVALUE);
// íåîáõîäèìîå êîëè÷åñòâî ïóíêòîâ (ïðè ëîòå=1) äëÿ äîñòèæåíèÿ ïðîôèòà
NeedTP_points = profit_money*Point / price_tick;
lots = getSumLots(1) + getSumLots(2);
//----
if(getSumLots(2) != 0)
{
TempOptimalTP_sell = (getSumWeightedPrice(2) - NeedTP_points) / getSumLots(2);
}
else
{
TempOptimalTP_sell=0;
} // áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
//----
if(getSumLots(1) != 0)
{
TempOptimalTP_buy = (getSumWeightedPrice(1) + NeedTP_points) / getSumLots(1);
}
else
{
TempOptimalTP_buy = 0;
} //áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
//----
if(!SELL_BUY)
{
//----
if(getTopLevel(1) == getTopLevel(2))
{
TempOptimalTP = TempOptimalTP_buy;
}
else
{
//----
if(lots != 0)
{
TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) +
TempOptimalTP_sell*getSumLots(2) + NeedTP_points) / lots;
}
else
{
TempOptimalTP = 0;
}
}
//ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
return(NormalizeDouble(TempOptimalTP_buy, Digits));
}
//----
if(SELL_BUY)
{
//----
if(getTopLevel(1) == getTopLevel(2))
{
TempOptimalTP=TempOptimalTP_sell;
}
else
{
//----
if(lots != 0)
{
TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) +
TempOptimalTP_sell*getSumLots(2) - NeedTP_points) / lots;
}
else
{
TempOptimalTP = 0;
}
}
// ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
return(NormalizeDouble(TempOptimalTP_sell, Digits));
}
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ èçìåíÿåò òåêóùèé òýéêïðîôèò äëÿ âñåõ îòêðûòûõ ïîçèöèé íà|
//| öåíó óðîâíÿ òðåáóåìîé äîõîäíîñòè | |
//+------------------------------------------------------------------+
void setNewTakeProfit()
{
int t, cnt1, err, start;
bool tic;
double priceTP_buy, priceTP_sell, priceSL_buy, priceSL_sell, s, spread;
t = OrdersTotal();
s = MarketInfo(Symbol(), MODE_SPREAD);
spread = s*Point;
priceTP_buy = getOptimalTakeProfit(OptimalTakeProfit, false);
priceTP_sell = getOptimalTakeProfit(OptimalTakeProfit, true);
priceSL_buy = priceTP_sell;
priceSL_sell = priceTP_buy;
//----
if(getTopLevel(1) > getTopLevel(2))
{
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
//----
if(OrderType() == OP_BUY && OrderTakeProfit() != priceTP_buy - spread)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread,
0, Green);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->",
priceTP_buy-spread, " lots= ", OrderLots(), " ticket= ",
OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//----
if(OrderType() == OP_SELL && OrderStopLoss() != priceSL_sell)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_sell, 0, 0, Yellow);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé SL OP_SELL -", OrderTakeProfit(), "->",
priceSL_sell, " lots= ", OrderLots(), " ticket= ", OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
}
//----
if(getTopLevel(1) < getTopLevel(2))
{
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
//----
if(OrderType() == OP_BUY && OrderStopLoss() != priceSL_buy)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_buy, 0, 0, Green);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé SL OP_BUY -", OrderTakeProfit(), "->",
priceSL_buy, " lots= ", OrderLots(), " ticket= ", OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//----
if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread,
0, Yellow);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->",
priceTP_sell + spread, " lots= ", OrderLots(), " ticket= ",
OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
}
//----
if(getTopLevel(1) == getTopLevel(2) && !Mode_Close_on_TP)
{
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
//----
if(OrderType() == OP_BUY && OrderTakeProfit() != 0)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Green);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", 0,
" lots= ", OrderLots(), " ticket= ", OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//----
if(OrderType() == OP_SELL && OrderTakeProfit() != 0)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Yellow);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", 0,
" lots= ", OrderLots(), " ticket= ", OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
}
//----
if(getTopLevel(1) == getTopLevel(2) && Mode_Close_on_TP)
{
//----
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
//----
if(OrderType()==OP_BUY && OrderTakeProfit()!=priceTP_buy-spread)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread,
0, Green);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->",
priceTP_buy-spread, " lots= ", OrderLots(), " ticket= ",
OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//----
if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread)
{
start = GetTickCount();
tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread,
0, Yellow);
//----
if(ShowLog)
{
Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->",
priceTP_sell+spread, " lots= ", OrderLots(), " ticket= ",
OrderTicket());
Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(tic)
PlaySound("alert.wav");
//----
if(!tic)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
}
}
}
//+------------------------------------------------------------------+
//| Breakdowning martingail v 0.9.4 |
//+------------------------------------------------------------------+
int start()
{
double s, spread, allDeals=0,Risk, level;
int total, err, i, start;
string level_str;
bool ticket;
s = MarketInfo(Symbol(), MODE_SPREAD);
spread = s*Point;
// Âêëþ÷åíèå ìàíèìåíåäæìåíòà (âû÷èñëåíèå ëîòîâ)
if(MoneyManagement == true && LogariphmicMM == true)
{
Risk = MathCeil(Riskfactor*100 / MathSqrt(AccountBalance()));
//----
if(Risk >= 20)
Risk = 20;
startLots = MathCeil(AccountBalance()*Risk / 10000) / 10;
//----
if(startLots > MarketInfo(Symbol(), MODE_MAXLOT))
{
startLots = MarketInfo(Symbol(), MODE_MAXLOT);
}
//----
if(startLots < MarketInfo(Symbol(), MODE_MINLOT))
{
startLots = MarketInfo(Symbol(), MODE_MINLOT);
}
}
//----
if(MoneyManagement == true && LogariphmicMM == false)
{
startLots = NormalizeDouble(AccountBalance()*Riskfactor / 100000, 1);
//----
if(startLots > MarketInfo(Symbol(), MODE_MAXLOT))
{
startLots = MarketInfo(Symbol(), MODE_MAXLOT);
}
//----
if(startLots < MarketInfo(Symbol(), MODE_MINLOT))
{
startLots = MarketInfo(Symbol(), MODE_MINLOT);
}
}
//----
if(MoneyManagement == false && LogariphmicMM == false)
{
startLots = startLots;
}
//Ðàñïå÷àòêà ðàçëè÷íîé èíôîðìàöèè íà ýêðàíå
allDeals = getLevelPositions(2,0);
//----
if(getTopLevel(1) > getTopLevel(2))
{
level = getOptimalTakeProfit(OptimalTakeProfit, false) - spread;
}
//----
if(getTopLevel(1) < getTopLevel(2))
{
level = getOptimalTakeProfit(OptimalTakeProfit, true) + spread;
}
//----
if(level != 0)
{
level_str = DoubleToStr(level, Digits);
}
else
{
level_str = " ïîêà íåò, æäåì...";
}
// ðàñïå÷àòêà óðîâíÿ çàêðûòèÿ âñåõ îðäåðîâ
Comment("", "\n",
" B R E A K D O W N I N G M A R T I N G A I L v. 0.9.4",
" Ïëàíèðóåìûé óðîâåíü çàêðûòèÿ ñåðèè : ",level_str,"\n",
" Ïðîôèò ïî ëîíãàì = ", NormalizeDouble(getAllProfit(2),2)," $", "\n",
" Ïðîôèò ïî øîðòàì = ", NormalizeDouble(getAllProfit(3),2)," $", "\n",
" ---------------------------------------------------", "\n",
" Ïðîôèò ñåãîäíÿ = ", NormalizeDouble(getDayProfit(1, 0),2), " $","\n",
" Ïðîôèò â÷åðà = ", NormalizeDouble(getDayProfit(1, 1),2)," $", "\n",
" Ïðîôèò ïîçàâ÷åðà = ", NormalizeDouble(getDayProfit(1, 2),2)," $", "\n",
" ---------------------------------------------------", "\n",
" Balance = ",NormalizeDouble(AccountBalance(),2)," $","\n",
" Equity = ",NormalizeDouble(AccountEquity(),2)," $","\n",
" Free Margin = ",NormalizeDouble(AccountFreeMargin(),2)," $","\n",
" ______________________________", "\n",
" Sell Lots = ", getSellLotsSum(1), " | Buy Lots = ", getBuyLotsSum(1), "\n"
);
// ïðîâåðêà äîñòàòî÷íîãî êîëè÷åñòâà ìàðæè íà ñ÷åòå
if(AccountFreeMargin() < (1000) && ShowLog)
{
Print("Ìàëî äåíåã íà ñ÷åòå. Free Margin = ", AccountFreeMargin());
PlaySound("timeout.wav");
return(0);
}
total = OrdersTotal();
// âûñòàâëåíèå ïåðâîãî óðîâíÿ, êîãäà Mode_Close_on_TP=true èëè îðäåðà ïåðâîãî óðîâíÿ
// ñòîÿò ñëèøêîì äàëåêî äðóã îò äðóãà
if(MathAbs(getOrderPriceByNum(getNum(1, 1)) - getOrderPriceByNum(getNum(0, 1))) >
(MarketInfo(Symbol(), MODE_SPREAD) + 10)*Point && Mode_Close_on_TP && Close_on_TP)
{
getProfitOrdersClose();
}
//âûñòàâëåíèå ïåðâûõ îðäåðîâ ñåðèè, åñëè òàêèõ åùå íåò
if(isMgNum(getNum(1, 1)) == False && TradeAllowed)
{
start = GetTickCount();
ticket = OrderSend(Symbol(), OP_BUY, getLotByLevel(1), NormalizeDouble(Ask, Digits),
3, 0, 0, "ïåðâàÿ ëîíã", getNum(1, 1), 0, Green);
//----
if(ShowLog)
{
Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè ëîíãîâ ", Symbol(), " ask= ", Ask,
" ticket=", ticket);
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(ticket)
PlaySound("alert.wav");
//----
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (",ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//----
if(isMgNum(getNum(0, 1)) == False && TradeAllowed)
{
start = GetTickCount();
ticket = OrderSend(Symbol(), OP_SELL, getLotByLevel(1), NormalizeDouble(Bid, Digits),
3, 0, 0, "ïåðâàÿ øîðò", getNum(0, 1), 0, Green);
//----
if(ShowLog)
{
Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè øîðòîâ ", Symbol(), " Bid= ", Bid,
" ticket=", ticket);
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(ticket)
PlaySound("alert.wav");
//----
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
}
//âûñòàâëÿåì îðäåðà äëÿ ëîíãîâ
if(getTopLevel(1) < maxLevel)
{
//----
for(i = 1; i < 9; i++)
{
//----
if(getTopLevel(1) == i && isMgNum(getNum(1, i + 1)) == False &&
isOrderActive(getNum(1, i)) == True && setPriceBuyStop() != 0
&& getOrderPriceByNum(getMaxLongNum())!=setPriceBuyStop())
{
start = GetTickCount();
ticket = OrderSend(Symbol(), OP_BUYSTOP, getLotByLevel(getTopLevel(1) + 1),
setPriceBuyStop(), 3, 0, 0, StringConcatenate(i + 1, " ëîíã"),
getNum(1, i + 1), 0, Green);
//----
if(ShowLog)
{
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(ticket)
PlaySound("alert.wav");
//----
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
return(1);
}
}
}
//âûñòàâëÿåì îðäåðà äëÿ øîðòîâ
if(getTopLevel(2) < maxLevel)
{
//----
for(i = 1; i < 9; i++)
{
//----
if(getTopLevel(2) == i && isMgNum(getNum(0, i + 1)) == False &&
isOrderActive(getNum(0, i)) == True && setPriceSellStop() != 0
&& getOrderPriceByNum(getMaxShortNum()) != setPriceSellStop())
{
start = GetTickCount();
ticket = OrderSend(Symbol(), OP_SELLSTOP, getLotByLevel(getTopLevel(2) + 1),
setPriceSellStop(), 3, 0, 0,
StringConcatenate(i + 1, " øîðò"), getNum(0, i + 1), 0, Red);
//----
if(ShowLog)
{
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");
}
//----
if(ticket)
PlaySound("alert.wav");
//----
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
Sleep(timeOut);
return(1);
}
}
}
//ìîäèôèêàöèÿ îòëîæåííûõ îðäåðîâ BuyStop è SellStop
if(getOrderPriceByNum(getNextOrderNum(getMaxShortNum())) < setPriceSellStop() &&
setPriceSellStop() != 0) // äëÿ øîðòîâ
{
modOrder(getNextOrderNum(getMaxShortNum()), setPriceSellStop(), 0);
}
//----
if(getOrderPriceByNum(getNextOrderNum(getMaxLongNum())) > setPriceBuyStop() &&
setPriceBuyStop() != 0) // äëÿ ëîíãîâ
{
modOrder(getNextOrderNum(getMaxLongNum()), setPriceBuyStop(), 0);
}
//----
if(getAllProfit(1) > AccountBalance()*ProfitPercent*MathSqrt(getTopLots(3)) / 100 &&
!Close_on_TP)
{
//ïðè äîñòèæåíèè íåîáõîäèìîãî ïðîôèòà çàêðûâàåì âñå îðäåðà
getProfitOrdersClose();
}
//----
if(Close_on_TP)
{
//ïðîâåðÿåì, ìîæíî ëè èçìåíèòü óðîâíè òåéêïðîôèòà è ñòîïëîññà äëÿ âñåõ îòêðûòûõ îðäåðîâ
setNewTakeProfit();
}
// Óäàëåíèå âñåõ ëèøíèõ îðäåðîâ â ñëó÷àå, åñëè ñåðèÿ çàêðûëàñü ïðîôèòîì, òî åñòü åñëè
// íåò îòêðûòûõ îðäåðîâ ïåðâîé ñòóïåíè. Óäàëåíèå ëèøíèõ ëîíãîâ, åñëè íåò îðäåðà ïåðâîé ñòóïåíè
if(isOrderActive(getNum(1, 1)) == False)
{
//----
for(i = getNum(1, 2); i < getNum(1, 9); i += 10)
{
//íà÷èíàåì ïåðåáèðàòü âñå ñî âòîðîãî óðîâíÿ
deleteOrderNum(i);
}
}
//----
if(isOrderActive(getNum(0, 1)) == False)
{
//äëÿ øîðòîâ
for(i = getNum(0, 2); i < getNum(0, 9); i += 10)
{
deleteOrderNum(i);
}
}
return(0);
}
//+------------------------------------------------------------------+
// the end.
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
---