Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Martingail_breakdowning_v1
//+------------------------------------------------------------------+
//| Breakdowning martingail v 1.0.2.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 Step = 18;
extern string _ = "Ïàðàìåòðû MoneyManagement";
// ðàçìåð òîðãóåìîãî ëîòà, ïðè âûêëþ÷åííîì ÌÌ
extern double startLots = 0.1;
// âêëþ÷åíèå MoneyManagement
extern bool MoneyManagement = true;
// ëîãàðèôìè÷åñêèé MoneyManagement
extern bool LogariphmicMM = true;
// ðàçìåð ëîòà â ïðîöåíòàõ îò äåïîçèòà
extern double Riskfactor = 6;
// ðàçìåð íóæíîãî ïðîôèòà â ïðîöåíòàõ îò äåïîçèòà
extern double ProfitPercent = 2;
// âêëþ÷åíèå îïòèìàëüíîãî çàêðûòèÿ îðäåðîâ (ïîâûøàåò äîõîäíîñòü)
extern bool OptimalTakeProfit = true;
extern string __ = "Ïàðàìåòðû ðàáîòû ýêñïåðòà";
// ðåæèì ðàáîòû ýêñïåðòà (0 - ïðîáîéíûé ñ âîçìîæíîñòüþ ñòàâèòü èíâåðñíûå îðäåðà,
// 1 - îòáîéíûé, ñ ïåðåìåùåíèåì îòëîæåííûõ ëèìèòíûõ îðäåðîâ)
extern int mode_work = 0;
// òðåéëèíã-ñòîï äëÿ ïëå÷à, âûøåäøåãî â ïðèáûëü (åñëè 0, òîãäà îòñóòñòâóåò)
extern int TrailingStop = 30;
//íå òîðãîâàòü ïîñëå çàêðûòèÿ ñåðèè äî ñëåäóþùåãî äíÿ
extern bool NoTradeBeforeNewDay = true;
// Ðåæèì èçìåíåíèÿ øàãà Step
// 0 - âñåãäà ðàâåí Step
// 1 - ïåðâûé øàã 15, âñå îñòàëüíûå 40
// 2 - ïëàâíî ìåíÿåòñÿ ñ óìåíüøåíèåì FreeMargin îò 15 äî 40
extern int MinMaxStepMode = 0;
//ïîêàçûâàòü ñëóæåáíóþ èíôîðìàöèþ ïî îðäåðàì â æóðíàëå òåðìèíàëà
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 = 6;
double LotsLevel_6 = 10;
double LotsLevel_7 = 16;
double LotsLevel_8 = 26;
double LotsLevel_9 = 42;
double LotsLevel_10 = 64;
double LotsLevel_11 = 100;
double LotsLevel_12 = 168;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0);
ObjectCreate("label_object1", OBJ_LABEL, 0, 0, 0);
ObjectCreate("label_object2", OBJ_LABEL, 0, 0, 0);
ObjectSet("label_object", OBJPROP_XDISTANCE, 11);
ObjectSet("label_object", OBJPROP_YDISTANCE, 14);
ObjectSet("label_object1", OBJPROP_XDISTANCE, 400);
ObjectSet("label_object1", OBJPROP_YDISTANCE, 20);
ObjectSet("label_object2", OBJPROP_XDISTANCE, 400);
ObjectSet("label_object2", OBJPROP_YDISTANCE, 35);
ObjectSetText("label_object", "Breakdowning Martingail version 1.0.2",
11, "Verdana", White);
return(0);
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ïðîâåðÿåò íàëè÷èå îðäåðà ñ äàííûì ìàãè÷åñêèì íîìåðîì |
//+------------------------------------------------------------------+
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 || OrderType() == OP_SELLLIMIT ||
OrderType() == OP_BUYLIMIT))
{
int start = GetTickCount();
tic = OrderDelete(OrderTicket());
if(ShowLog)
{
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);
}
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå ìàñèìàëüíîãî óðîâíÿ äëÿ äëèííûõ èëè êîðîòêèõ ïîçèöèé|
//+------------------------------------------------------------------+
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() == 881)
cLev = 12;
if(OrderMagicNumber() == 871)
cLev = 11;
if(OrderMagicNumber() == 861)
cLev = 10;
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() == 882)
cLev = 12;
if(OrderMagicNumber() == 872)
cLev = 11;
if(OrderMagicNumber() == 862)
cLev = 10;
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; // çíà÷åíèå ïî óìîë÷àíèþ
if(level == 1)
// ïåðâûå îðäåðà - òîëüêî äëÿ îòñ÷åòà óðîâíåé, ïîçèöèè ðàçìåðîì 0,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);
if(level == 10)
lot1 = NormalizeDouble(startLots*LotsLevel_10, 1);
if(level == 11)
lot1 = NormalizeDouble(startLots*LotsLevel_11, 1);
if(level == 12)
lot1 = NormalizeDouble(startLots*LotsLevel_12, 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 == 851)
return (861);
if(n1 == 861)
return (871);
if(n1 == 871)
return (881);
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);
if(n1 == 852)
return (862);
if(n1 == 862)
return (872);
if(n1 == 872)
return (882);
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);
if(level == 10)
return(861);
if(level == 11)
return(871);
if(level == 12)
return(881);
}
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);
if(level == 10)
return(862);
if(level == 11)
return(872);
if(level == 12)
return(882);
}
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ìîäèôèêàöèè îòëîæåííîãî îðäåðà |
//+------------------------------------------------------------------+
// çäåñü ïîëó÷àåì âû÷èñëåííûå öåíû îòêðûòèÿ è òýéêïðîôèòà äëÿ
// îòëîæåííûõ îðäåðîâ è åñëè îíè îòëè÷àþòñÿ îò öåí ìîäèôèöèðóåìîãî
// îðäåðà, èçìåíÿåì èõ.
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 || OrderType() == OP_SELLLIMIT)
{
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 || OrderType() == OP_BUYLIMIT)
{
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);
}
//+------------------------------------------------------------------+
//| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð SellStop |
//+------------------------------------------------------------------+
double setPriceSellStop()
{
double topPrice, PriceSetka, HighestPriceInRange;
int NumPoloski, NumBarsAfterOpenedOrder;
datetime OpenOrderTime;
if(mode_work == 0)
{
topPrice = getOrderPriceByNum(getMaxShortNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxShortNum());
}
if(mode_work ==1 )
{
topPrice = getOrderPriceByNum(getMaxLongNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxLongNum());
}
NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);
HighestPriceInRange = Highest(NULL, 0, MODE_HIGH, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè ïîä òåêóùåé öåíîé BID
NumPoloski = MathAbs(MathFloor((Bid - topPrice) / (Step*Point)));
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå
PriceSetka = topPrice + NumPoloski*Step*Point;
if(HighestPriceInRange < PriceSetka + Step*Point &&
PriceSetka >= topPrice + Step*Point && Bid > topPrice)
{
return(NormalizeDouble(PriceSetka - Step*Point, Digits));
}
}
//+------------------------------------------------------------------+
//| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð BuyStop |
//+------------------------------------------------------------------+
double setPriceBuyStop()
{
double lowPrice, PriceSetka, LowestPriceInRange;
int NumPoloski, NumBarsAfterOpenedOrder;
datetime OpenOrderTime;
if(mode_work == 0)
{
lowPrice = getOrderPriceByNum(getMaxLongNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxLongNum());
}
if(mode_work == 1)
{
lowPrice = getOrderPriceByNum(getMaxShortNum());
OpenOrderTime = getOrderOpenTimeByNum(getMaxShortNum());
}
NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);
LowestPriceInRange = Lowest(NULL, 0, MODE_LOW, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè íàä òåêóùåé öåíîé ASK
NumPoloski = MathAbs(MathFloor((lowPrice - Ask) / (Step*Point)));
PriceSetka = lowPrice - NumPoloski*Step*Point;
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå
if(LowestPriceInRange > PriceSetka - Step*Point &&
PriceSetka <= lowPrice - Step*Point && Ask < lowPrice)
{
return(NormalizeDouble(PriceSetka + Step*Point,Digits));
}
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ çàêðûòèÿ îðäåðîâ ïî äîñòèæåíèþ ïðîôèòà |
//+------------------------------------------------------------------+
bool getProfitOrdersClose()
{
int cnt1, err, tic1,tic2, LotBy, LotBy1, i;
bool ticdone;
int T_sell[10], T_buy[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))
{
T_sell[a] = tic1;
T_buy[a] = tic2;
a++;
}
}
}
}
for(cnt1 = 0; cnt1 < a; cnt1++)
{
// çàêðûâàåì âñòðå÷íûå îðäåðà
if(OrderSelect(T_sell[cnt1], SELECT_BY_TICKET) &&
OrderSelect(T_buy[cnt1], SELECT_BY_TICKET))
{
ticdone = OrderCloseBy(T_sell[cnt1], T_buy[cnt1], Green);
if(!ticdone)
{
err = GetLastError();
Print("Îøèáêà çàêðûòèÿ âñòðå÷íîãî îðäåðà = ", ErrorDescription(err),
"¹ òèêåòà (sell)= ", T_sell[cnt1], "¹ òèêåòà (buy)= ", T_buy[cnt1]);
}
}
}
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, 5, Green);
if(ticdone)
PlaySound("timeout.wav");
if(!ticdone)
{
err = GetLastError();
if(err != 0)
Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
}
}
if(OrderType() == OP_SELL)
{
ticdone = OrderClose(OrderTicket(), OrderLots(), Bid, 5, Green);
if(ticdone)
PlaySound("timeout.wav");
if(!ticdone)
{
err = GetLastError();
if(err != 0)
Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
}
}
}
}
return (False);
}
//+------------------------------------------------------------------+
//| Âçâåøåííàÿ öåíà äëÿ âñåõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ |
//| çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè |
//+------------------------------------------------------------------+
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(double multiplier, bool SELL_BUY)
{
//ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
double TempOptimalTP, TempOptimalTP_sell, TempOptimalTP_buy, NeedTP_points, lots;
int i;
double profit_money, price_tick;
profit_money = AccountBalance()*ProfitPercent*multiplier / 100;
price_tick = MarketInfo(Symbol(), MODE_TICKVALUE);
// íåîáõîäèìîå êîëè÷åñòâî ïóíêòîâ (ïðè ëîòå=1) äëÿ äîñòèæåíèÿ ïðîôèòà
NeedTP_points = profit_money*Point / price_tick;
lots = getBuyLotsSum(1) + getSellLotsSum(1);
if(getSellLotsSum(1) != 0)
{
TempOptimalTP_sell = (getSumWeightedPrice(2) - NeedTP_points) / getSellLotsSum(1);
}
else
{
// áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
TempOptimalTP_sell = 0;
}
if(getBuyLotsSum(1) != 0)
{
TempOptimalTP_buy = (getSumWeightedPrice(1) + NeedTP_points) / getBuyLotsSum(1);
}
else
{
// áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
TempOptimalTP_buy = 0;
}
if(!SELL_BUY)
{
if(getBuyLotsSum(1) == getSellLotsSum(1))
{
TempOptimalTP = TempOptimalTP_buy;
}
else
{
if(lots != 0)
{
TempOptimalTP = (TempOptimalTP_buy*getBuyLotsSum(1) +
TempOptimalTP_sell*getSellLotsSum(1) +
NeedTP_points) / lots;
}
else
{
TempOptimalTP = 0;
}
}
//ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
return(NormalizeDouble(TempOptimalTP_buy, Digits));
}
if(SELL_BUY)
{
if(getBuyLotsSum(1) == getSellLotsSum(1))
{
TempOptimalTP = TempOptimalTP_sell;
}
else
{
if(lots != 0)
{
TempOptimalTP = (TempOptimalTP_buy*getBuyLotsSum(1) +
TempOptimalTP_sell*getSellLotsSum(1) -
NeedTP_points) / lots;
}
else
{
TempOptimalTP = 0;
}
}
//ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
return(NormalizeDouble(TempOptimalTP_sell,Digits));
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void setPendingOrders(int mode)
{
int i, start, err;
bool ticket;
double lot;
// ïðîáîéíûé ðåæèì
if(mode == 0)
{
//âûñòàâëÿåì îðäåðà äëÿ ëîíãîâ
if(getTopLevel(1) < maxLevel && !isMgNum(100))
{
for(i = 1; i < 12; 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), ")");
}
return(1);
}
}
}
//âûñòàâëÿåì îðäåðà äëÿ øîðòîâ
if(getTopLevel(2) < maxLevel && !isMgNum(101))
{
for(i = 1; i < 12; 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), ")");
}
return(1);
}
}
}
}
// îòáîéíûé ðåæèì
if(mode == 1)
{
//âûñòàâëÿåì îðäåðà äëÿ ëîíãîâ
if(getTopLevel(1) < maxLevel)
{
for(i = 1; i < 12; i++)
{
if(getTopLevel(2) == i && isMgNum(getNum(0, i + 1)) == False &&
isOrderActive(getNum(0, i)) == True && setPriceBuyStop() != 0 &&
getOrderPriceByNum(getMaxShortNum())!= setPriceBuyStop())
{
//÷òîáû íå áûëî ëîêîâ - getTopLevel(1)
start = GetTickCount();
lot = getLotByLevel(getTopLevel(1) + 1);
if(lot > MarketInfo(Symbol(), MODE_MAXLOT))
{
lot = MarketInfo(Symbol(), MODE_MAXLOT);
}
ticket = OrderSend(Symbol(), OP_SELLLIMIT, lot, setPriceBuyStop(),
3, 0, 0, StringConcatenate(i + 1, " øîðò"),
getNum(0,i+1),0,Green);
if(ShowLog)
{
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000,
" ñåêóíä.");
}
if(ticket)
PlaySound("alert.wav");
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
return(1);
}
}
}
//âûñòàâëÿåì îðäåðà äëÿ øîðòîâ
if(getTopLevel(2) < maxLevel)
{
for(i = 1; i < 12; i++)
{
if(getTopLevel(1) == i && isMgNum(getNum(1, i + 1)) == False &&
isOrderActive(getNum(1, i)) == True && setPriceSellStop() != 0 &&
getOrderPriceByNum(getMaxLongNum()) != setPriceSellStop())
{
start = GetTickCount();
// ÷òîáû íå áûëî ëîêîâ - getTopLevel(2)
lot = getLotByLevel(getTopLevel(2) + 1);
if(lot > MarketInfo(Symbol(), MODE_MAXLOT))
{
lot = MarketInfo(Symbol(), MODE_MAXLOT);
}
ticket = OrderSend(Symbol(), OP_BUYLIMIT, lot, setPriceSellStop(),
3, 0, 0, StringConcatenate(i + 1, " ëîíã"),
getNum(1, i + 1), 0, Red);
if(ShowLog)
{
Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000,
" ñåêóíä.");
}
if(ticket)
PlaySound("alert.wav");
if(!ticket)
{
err = GetLastError();
Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
}
return(1);
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void setTrailingStop(int trailingSL, double multiplier)
{
int cnt1, t, s;
double PriceSL,spread, temp;
t = OrdersTotal();
s = MarketInfo(Symbol(), MODE_SPREAD);
spread = s*Point;
if((AccountEquity() - AccountBalance()) > AccountBalance()*ProfitPercent*multiplier / 100)
{
if(getBuyLotsSum(1) > getSellLotsSum(1))
{
PriceSL = Bid - Point*trailingSL;
if(mode_work == 0)
{
temp = Bid - getOrderPriceByNum(getMaxLongNum());
}
else
{
temp = Bid - getOrderPriceByNum(getMaxShortNum());
}
if(temp > Point*trailingSL)
{
if(OrderStopLoss() < PriceSL && mode_work == 0)
{
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
if(OrderType() == OP_BUY)
{
if(PriceSL > Bid)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL, 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
PriceSL, OrderTakeProfit(), 0, Green);
}
}
if(OrderType() == OP_SELL)
{
if(PriceSL > Bid)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
PriceSL + spread, OrderTakeProfit(),
0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL + spread, 0, Green);
}
}
}
}
if(OrderStopLoss() > PriceSL && mode_work == 1 || OrderStopLoss() == 0)
{
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
if(OrderType() == OP_BUY)
{
if(PriceSL > Bid)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL, 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(), PriceSL,
OrderTakeProfit(), 0, Green);
}
}
if(OrderType() == OP_SELL)
{
if(PriceSL > Bid)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
PriceSL + spread, OrderTakeProfit(), 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL + spread, 0, Green);
}
}
}
}
}
}
if(getBuyLotsSum(1) < getSellLotsSum(1))
{
PriceSL = Ask + Point*trailingSL;
if(mode_work == 0)
{
temp = getOrderPriceByNum(getMaxShortNum()) - Ask;
}
else
{
temp = getOrderPriceByNum(getMaxLongNum()) - Ask;
}
if(temp > Point*trailingSL)
{
if(OrderStopLoss() > PriceSL || OrderStopLoss() == 0 && mode_work == 0)
{
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
if(OrderType() == OP_BUY)
{
if(PriceSL > Ask)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL-spread, 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
PriceSL - spread, OrderTakeProfit(), 0, Green);
}
}
if(OrderType() == OP_SELL)
{
if(PriceSL > Ask)
{
OrderModify(OrderTicket(), OrderOpenPrice(), PriceSL,
OrderTakeProfit(), 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL, 0, Green);
}
}
}
}
if(OrderStopLoss() < PriceSL && mode_work == 1)
{
for(cnt1 = 0; cnt1 < t; cnt1++)
{
OrderSelect(cnt1, SELECT_BY_POS);
if(OrderType() == OP_BUY)
{
if(PriceSL > Ask)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL - spread, 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
PriceSL - spread, OrderTakeProfit(), 0, Green);
}
}
if(OrderType() == OP_SELL)
{
if(PriceSL > Ask)
{
OrderModify(OrderTicket(), OrderOpenPrice(), PriceSL,
OrderTakeProfit(), 0, Green);
}
else
{
OrderModify(OrderTicket(), OrderOpenPrice(),
OrderStopLoss(), PriceSL, 0, Green);
}
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Breakdowning martingail v 1.0.2 |
//+------------------------------------------------------------------+
int start()
{
double s, spread, Risk, level, LotsDifferent, lot_buy, lot_sell,
multiplier, forstep;
int total, err, i, start, cnt1;
string level_str, mode;
bool ticket;
s = MarketInfo(Symbol(), MODE_SPREAD);
spread = s*Point;
total = OrdersTotal();
LotsDifferent = MathAbs(getBuyLotsSum(1) - getSellLotsSum(1));
if(MinMaxStepMode == 0)
{
Step = Step;
}
if(MinMaxStepMode == 1)
{
Step = MathCeil((AccountBalance() - AccountEquity() + 1)*100000 / AccountBalance());
if(Step < 15)
{
Step = 15;
}
if(Step > 40)
{
Step = 40;
}
}
if(MinMaxStepMode == 2)
{
forstep = MathPow(AccountBalance() / AccountEquity(), 4);
Step = MathCeil(forstep*15);
}
if(AccountEquity() / AccountBalance() < 0.7)
{
mode_work = 1;
}
else
{
mode_work = 0;
}
// Âêëþ÷åíèå ìàíèìåíåäæìåíòà (âû÷èñëåíèå ëîòîâ)
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;
}
//Îïðåäåëÿåì, áóäåì ëè èñïîëüçîâàòü OptimalTakePrifit
if(OptimalTakeProfit)
{
multiplier = MathSqrt(LotsDifferent);
}
if(!OptimalTakeProfit)
{
multiplier = 1;
}
//Îïðåäåëÿåì, áóäåì ëè èñïîëüçîâàòü NoTradeBeforeNewDay
if(getDayProfit(1, 0) > 0 && NoTradeBeforeNewDay)
{
TradeAllowed = false;
}
if(getDayProfit(1, 0) == 0 && NoTradeBeforeNewDay)
{
TradeAllowed = true;
}
//Ðàñïå÷àòêà ðàçëè÷íîé èíôîðìàöèè íà ýêðàíå
if(getBuyLotsSum(1) > getSellLotsSum(1))
{
level = getOptimalTakeProfit(multiplier, false) - spread;
}
if(getBuyLotsSum(1) < getSellLotsSum(1))
{
level = getOptimalTakeProfit(multiplier, true) + spread;
}
if(level != 0)
{
level_str = DoubleToStr(level, Digits);
}
else
{
//ðàñïå÷àòêà óðîâíÿ çàêðûòèÿ âñåõ îðäåðîâ
level_str=" ïîêà íåò, æäåì...";
}
if(mode_work == 0)
{
mode = "ïðîáîé (îðäåðà BuyStop è SellStop)";
}
if(mode_work == 1)
{
mode = "îòáîé (îðäåðà BuyLimit è SellLimit)";
}
ObjectSetText("label_object1", StringConcatenate("Ïëàíèðóåìûé óðîâåíü çàêðûòèÿ ñåðèè ïî ",
Symbol(), ": ", level_str), 9, "Lucida Console", NavajoWhite);
ObjectSetText("label_object2", StringConcatenate("Ðåæèì ðàáîòû : ", mode), 9,
"Lucida Console", NavajoWhite);
Comment("\n", "\n", "\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",
" ---------------------------------------------------", "\n",
" Êðåäèòíîå ïëå÷î ñ÷¸òà 1:", AccountLeverage());
// Åñëè òîðãîâëÿ íå ðàçðåøåíà, è íåò ïåðâè÷íûõ îðäåðîâ - âûõîä
if(isMgNum(getNum(1, 1)) == False && isMgNum(getNum(1, 1)) == False && !TradeAllowed)
{
return;
}
//âûñòàâëåíèå ïåðâûõ îðäåðîâ ñåðèè, åñëè òàêèõ åùå íåò
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), ")");
}
}
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), ")");
}
}
//âûñòàâëÿåì îòëîæåííûé îðäåð, åñëè åñëè åñòü âîçìîæíîñòü
setPendingOrders(mode_work);
//ìîäèôèêàöèÿ îòëîæåííûõ îðäåðîâ BuyStop è SellStop (BuyLimit è SellLimit ïðè mode_work = 1)
if(mode_work == 0)
{
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(mode_work == 1)
{
if(getOrderPriceByNum(getNextOrderNum(getMaxLongNum())) < setPriceSellStop() &&
setPriceSellStop() != 0)
{
modOrder(getNextOrderNum(getMaxLongNum()), setPriceSellStop(), 0);
}
if(getOrderPriceByNum(getNextOrderNum(getMaxShortNum())) > setPriceBuyStop() &&
setPriceBuyStop() != 0)
{
modOrder(getNextOrderNum(getMaxShortNum()), setPriceBuyStop(), 0);
}
}
// óñëîâèÿ äëÿ ôèêñàöèè ïðèáûëè
if(MathAbs(getBuyLotsSum(1) - getSellLotsSum(1)) < 0.2 &&
(isOrderActive(getNum(0, 2)) || isOrderActive(getNum(1, 2))))
{
// åñëè ñóììà ëîòîâ â ðàçíûå ñòîðîíû ïðèìåðíî îäèíàêîâà -
// çàêðûâàåì âñòðå÷íûìè îðäåðàìè (îáíóëÿåì íà÷àëüíûé óðîâåíü)
getProfitOrdersClose();
}
if(getAllProfit(1) > AccountBalance()*ProfitPercent*multiplier / 100 && TrailingStop == 0)
{
//ïðè äîñòèæåíèè íåîáõîäèìîãî ïðîôèòà çàêðûâàåì âñå îðäåðà
getProfitOrdersClose();
}
if(TrailingStop != 0)
{
// òðåéëèì ïðèáûëü, åñëè îíà åñòü
setTrailingStop(TrailingStop, multiplier);
}
// óäàëåíèå âñåõ ëèøíèõ îðäåðîâ â ñëó÷àå, åñëè ñåðèÿ çàêðûëàñü ïðîôèòîì,
// ò.å. åñëè íåò îòêðûòûõ îðäåðîâ ïåðâîé ñòóïåíè
// óäàëåíèå ëèøíèõ ëîíãîâ, åñëè íåò îðäåðà ïåðâîé ñòóïåíè
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);
}
//+------------------------------------------------------------------+
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
---