Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
Ilan1.6_Reg_v1.7
// ïîìíèòå !!! ñîâåòíèêîì íóæíî óïðàâëÿòü ñ ãîëîâîé !
// íà ïîëíîì àâòîìàòå ñîëüåòå êîãäà-íèáóäü ...
// Áóäó ïðèçíàòåëåí åñëè Âû ñîîáùèòå îá îøèáêàõ â ðàáîòå äàííîãî ñîâåòíèêà èëè ïðåäëîæåíèÿ ïî äîðàáîòêå.
// Âàðèàíòîâ ðàáîòû î÷åíü ìíîãî, ïîýòîìó áóäó ïðèçíàòåëåí åñëè ïðèøëåòå ïðèëè÷íûé ñåò ngb2008[a]mail.ru
// Åñëè Âû ðåøèëè ìîäèôèöèðîâàòü äàííûé ñîâåòíèê, òî ïîæàëóéñòà. Ìíå áëèçêà èäåÿ çàëîæåííàÿ â ëèöåíçèè GNU.
// Íå çàêðûâàéòå ñâîáîäíî ðàñïðîñòðàíÿåìûé êîä è íå îáúÿâëÿéòå åãî ñâîèì.
// Åñëè Âàì ïîíðàâèëñÿ äàííûé ñîâåòíèê è Âû èì çàðàáàòûâàåòå,
// òî ìîæåòå ñêàçàòü ñïàñèáî :) ñèñòåìå âåáìàíè Z182368142593
// óêàçûâàéòå ÷òî ýòî çà ñîâåòíèê (èìÿ ôàéëà) è ñâîé ýë. àäðåñ (ïðèøëþ íîâóþ âåðñèþ, ýòà íàäåþñü íå ïîñëåäíÿÿ áóäåò)
// ñ óâ. ðóíèê
#property copyright ""
#property link ""
extern double LotExponent = 1.1;
extern string a = "Åñëè risk=0, èñïîëüçóåò ïàðàìåòð Lot";
extern double Lot = 0.1;
extern string b = "Åñëè risk>0, ðàáîòàåò ÌÌ";
extern double Reinvest = 1000;
extern int lotdecimal = 2;
extern double TakeProfit = 50;
extern double PipStep = 40.0;
extern int MaxTrades = 20;
extern int slip = 3;
extern string _tmp1_ = " Ëîêèðîâàíèå ñåðèè";
extern double LockS=2; // âîîáùåì ïûòàåìñÿ ëîêèðîâàòü ÷àñòü ïîçèöèé è ïîëó÷èòü äîïîëíèòåëüíóþ ïðèáûëü, åñëè =0 òî íå ðàáîòàåò, åñëè =0,5, òî ëîêèðóåì 50% ïîçèöèé ñåðèè
extern int LMagN=689; // ìàãè÷åñêèé íîìåð äëÿ ëîêîâîé ïîçû
extern int NumLockMin=4; // ïîñëå êàêîãî ïî ñ÷åòó êîëåíà îòêðûâàòü ëîêîâûé îðäåð åñëè èíäèêàòîð èçìåíèë íàïðàâëåíèå
extern int NumLoc=8; // ïîñëå êàêîãî ïî ñ÷åòó êîëåíà îòêðûâàòü ëîêîâûé îðäåð åñëè êîëè÷åñòâî îðäåðîâ ïðîñòî ñòàëî áîëüøèì
//-----------------------------------------------------------
extern string _tmp2_ = " --- i-Regr --- ñ áîëüøèì ïåðèîäîì";
extern int Regr.degree1 = 6; // ïîðÿäîê ðåãðåññèè
extern double Regr.kstd1 = 5; // øèðèíà êàíàëà, åñëè =0 òî ðèñóåòñÿ òîëüêî ñðåäíÿÿ ëèíèÿ
extern int kanal=2;
int Regr.shift1 = 0; // ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà
extern int SPer = 800; // ïåðèîä áàðîâ
extern int TFS=7; // òàéìôðåéì íà êîòîðîì ðàáîòàåò èíäèêàòîð
extern string _tmp3_ = " --- i-Regr --- ñ ìàëûì ïåðèîäîì";
extern int IndStep = 4; // øàã ñ êîòîðîãî íà÷èíàåì ñìîòðåòü íà èíäèêàòîð äëÿ îòêðûòèÿ êîëåí
extern int Regr.degree1mall = 3; // ïîðÿäîê ðåãðåññèè
extern double Regr.kstd1mall = 1.5; // øèðèíà êàíàëà, åñëè =0 òî ðèñóåòñÿ òîëüêî ñðåäíÿÿ ëèíèÿ
int Regr.shift1mall = 0; // ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà
extern int SPermall = 150; // ïåðèîä áàðîâ
extern int TFSmall=3; // òàéìôðåéì íà êîòîðîì ðàáîòàåò èíäèêàòîð
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
extern int TFIlanX=0; // òàéìôðåéì íà êîòîðîì èëàí îòêðûâàåò ñäåëêè ñì. mper ïðè = 5 - H1
extern int UseTrailingStop = 0; // 0-íå èñïîëüçóåì òðàë, 1 - ñòóïåí÷àòûé òðàë, 2 - òðàë òèïà åñìàðò
extern int ProfitTrailDist = 30; // ðàññòîÿíèå îò òî÷êè áåçóáûòêà, ïîñëå êîòîðîé âêëþ÷àåì òðàë //+------------------------------------------------------------------+
extern int TrailDist = 20; // ðàññòîÿíèå íà êîòîðîì òÿíåòñÿ ñòîïëîññ //| ÒÐÅÉËÈÍà ÑÒÀÍÄÀÐÒÍÛÉ-ÑÒÓÏÅÍ×ÀÑÒÛÉ |
extern int TrailStep = 10; // ìîäèôèöèðóåì îðäåðà êàæäûå 5 ïóíêòîâ //| Ôóíêöèè ïåðåäà¸òñÿ òèêåò ïîçèöèè, ðàññòîÿíèå îò êóðñà îòêðûòèÿ, |
extern int NumIT = 3; // ïîñëå êàêîãî êîëè÷åñòâà ñäåëîê âêëþ÷àåòñÿ òðàë //| íà êîòîðîì òðåéëèíã çàïóñêàåòñÿ (ïóíêòîâ) è "øàã", ñ êîòîðûì îí ïåðåíîñèòñÿ (ïóíêòîâ) |
//| Ïðèìåð: ïðè +30 ñòîï íà +10, ïðè +40 - ñòîï íà +20 è ò.ä. |
extern double xtral=2; // îçíà÷àåò ÷òî, ðàññòîÿíèå îò òî÷êè áåçóáûòêà äî ñòîïëîññà â xtral ðàç ìåíüøå ÷åì îò òî÷êè áó äî öåíû, íàïðèìåð öåíà óøëà íà 90 ï â +, çíà÷èò ñòîï íà óðîâíå 30 ï â ïëþñ ïåðåíîñèì
//-----------------------------------------------------------
bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;
extern int MagN = 1997;
double g_price_180;
double gd_188;
double gd_unused_196;
double gd_unused_204;
double g_price_212;
double g_bid_220;
double g_ask_228;
double gd_236;
double gd_244;
double gd_260;
bool gi_268;
string gs_ilan_272 = "Ilan";
int gi_280 = 0;
int gi_284;
int gi_288 = 0;
double gd_292;
int g_pos_300 = 0;
int gi_304;
double gd_308 = 0.0;
bool gi_316 = FALSE;
bool gi_320 = FALSE;
bool gi_324 = FALSE;
int gi_328;
bool gi_332 = FALSE;
double gd_336;
double gd_344;
int TFIlan=0;int timeprev=0;
int BrokerDecimal = 1;
int ClLock=0;
int init() {
// Åñëè áðîêåð äàåò êîòèðîâêè ïî âàëþòå ñ òî÷íîñòüþ â ïÿòü çíàêîâ - ïèïñ áóäåò ìåíüøå ñòàíäàðòíîãî â 10 ðàç - ââîäèì ìíîæèòåëü
if(Digits==3 || Digits==5) BrokerDecimal=10;
// Ïåðåìíîæèòü âñå óðîâíè â ïèïñàõ íà ìíîæèòåëü
PipStep = PipStep * BrokerDecimal;
//StopLoss = StopLoss * BrokerDecimal;
TakeProfit = TakeProfit * BrokerDecimal;
ProfitTrailDist = ProfitTrailDist * BrokerDecimal;
slip = slip*BrokerDecimal;
TrailDist = TrailDist*BrokerDecimal;
TrailStep = TrailStep*BrokerDecimal;
gd_260 = MarketInfo(Symbol(), MODE_SPREAD) * Point;
return (0);
}
int deinit() {
return (0);
}
int start() {
double l_iclose_8;
double l_iclose_16;
int ct=CountTrades(MagN);
if (UseTrailingStop >0 && ct>=NumIT) TrailingAlls();
if (UseTimeOut) {
if (TimeCurrent() >= gi_284) {
CloseThisSymbolAll(MagN);
Print("Closed All due to TimeOut");
}
}
//if (gi_280 == Time[0]) return (0);
//gi_280 = Time[0];
if (LockS>0) {int lm=CountTrades(LMagN); }
if (LockS>0 && lm>0) // ëîêèðóåì ñåðèþ
{
// Ïðîâåðêà íà òî ÷òîáû çàêðûòü ëîê åñëè ñåðèÿ çàêðûòà
if (ct<NumLockMin) { ClLock =1; }
if (ClLock==1)
{
if (Balance("buy","Balance",LMagN)+Balance("sell","Balance",LMagN)>0) {CloseThisSymbolAll(LMagN);return(0);}
}
}
TFIlan=TFIlanX;
if (timeprev == iTime(NULL,mper[TFIlan],0)) return (0);
timeprev = iTime(NULL,mper[TFIlan],0);
if (LockS>0 && ct>NumLockMin) // ëîêèðóåì ñåðèþ
{
int ld=Dir(MagN); // îïðåäåëÿåì íàïðàâëåíèå ñåðèè 0 èëè 1
// ïðîâåðêà åñòü ëè ëîê ?
int a=alert();
if (lm>0) //
{
// ïðîâåðêà íàäî ëè çàêðûòü ëîê ñåé÷àñ && a<0&& a>0
if (Balance("buy","Balance",LMagN)+Balance("sell","Balance",MagN)>0) {CloseThisSymbolAll(LMagN);CloseThisSymbolAll(MagN);}
if (Balance("buy","Balance",MagN)+Balance("sell","Balance",LMagN)>0) {CloseThisSymbolAll(MagN);CloseThisSymbolAll(LMagN);}
}
else // îòêðûâàåì ëîê
{
double al=CountLots(MagN);
// Print (" ct ",ct," ld ",ld," al ",al," a ",a );
if ((ld==0 && a<0) || (ct>=NumLoc && ld==0 )) //&&
{
ClLock =0;
gi_328 = OpenPendingOrder(1, LotSiz(LockS*al), Bid, slip, Ask, 0, 0, gs_ilan_272 + "-Lock" , LMagN, 0, Red);
if (gi_328 < 0) { Print("Error: ", GetLastError());again();return (0); }
}
if ((ld==1 && a>0) || (ld==1 && ct>=NumLoc))//&& a>0
{
ClLock =0;
gi_328 = OpenPendingOrder(0, LotSiz(LockS*al), Ask, slip, Bid, 0, 0, gs_ilan_272 + "-Lock", LMagN, 0, Blue);
if (gi_328 < 0) { Print("Error: ", GetLastError());again();return (0);}
}
}
}
double ld_0 = CalculateProfit();
if (UseEquityStop) {
if (ld_0 < 0.0 && MathAbs(ld_0) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll(MagN);
Print("Closed All due to Stop Out");
gi_332 = FALSE;
}
}
gi_304 = CountTrades(MagN);
if (gi_304 == 0) gi_268 = FALSE;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_BUY) {
gi_320 = TRUE;
gi_324 = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_SELL) {
gi_320 = FALSE;
gi_324 = TRUE;
break;
}
}
}
if (gi_304 > 0 && gi_304 <= MaxTrades) {
RefreshRates();
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_320 && gd_236 - Ask >= PipStep * Point && alert()>0) gi_316 = TRUE;
if (gi_324 && Bid - gd_244 >= PipStep * Point && alert()<0) gi_316 = TRUE;
}
if (gi_304 < 1) {
gi_324 = FALSE;
gi_320 = FALSE;
gi_316 = TRUE;
gd_188 = AccountEquity();
}
if (gi_316) {
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_324) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
RefreshRates();
gi_328 = OpenPendingOrder(1, gd_292, Bid, slip, Ask, 0, 0, gs_ilan_272 + "-" + gi_288, MagN, 0, Red);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
again();
return (0);
}
gd_244 = FindLastSellPrice();
gi_316 = FALSE;
gi_332 = TRUE;
} else {
if (gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
gi_328 = OpenPendingOrder(0, gd_292, Ask, slip, Bid, 0, 0, gs_ilan_272 + "-" + gi_288, MagN, 0, Blue);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
again();
return (0);
}
gd_236 = FindLastBuyPrice();
gi_316 = FALSE;
gi_332 = TRUE;
}
}
}
if (gi_316 && gi_304 < 1) {
l_iclose_8 = iClose(Symbol(), 0, 2);
l_iclose_16 = iClose(Symbol(), 0, 1);
g_bid_220 = Bid;
g_ask_228 = Ask;
if (!gi_324 && !gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
if (alert()<0) {
//if (l_iclose_8 > l_iclose_16 && alert()<0) {
gi_328 = OpenPendingOrder(1, gd_292, g_bid_220, slip, g_bid_220, 0, 0, gs_ilan_272 + "-" + gi_288, MagN, 0, Red);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
again();
return (0);
}
gd_236 = FindLastBuyPrice();
gi_332 = TRUE;
}
if (alert()>0)
//if (l_iclose_8 < l_iclose_16 && alert()>0)
{
gi_328 = OpenPendingOrder(0, gd_292, g_ask_228, slip, g_ask_228, 0, 0, gs_ilan_272 + "-" + gi_288, MagN, 0, Blue);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
again();
return (0);
}
gd_244 = FindLastSellPrice();
gi_332 = TRUE;
}
if (gi_328 > 0) gi_284 = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
gi_316 = FALSE;
}
}
gi_304 = CountTrades(MagN);
g_price_212 = 0;
double ld_24 = 0;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
g_price_212 += OrderOpenPrice() * OrderLots();
ld_24 += OrderLots();
}
}
}
if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);
if (gi_332) {
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_BUY) {
g_price_180 = g_price_212 + TakeProfit * Point;
gd_unused_196 = g_price_180;
gi_268 = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_SELL) {
g_price_180 = g_price_212 - TakeProfit * Point;
gd_unused_204 = g_price_180;
gi_268 = TRUE;
}
}
}
}
if (gi_332) {
if (gi_268 == TRUE) {
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);
gi_332 = FALSE;
}
}
}
return (0);
}
int CountTrades(int mn) {
int l_count_0 = 0;
for (int l_pos_4 = OrdersTotal() - 1; l_pos_4 >= 0; l_pos_4--) {
OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != mn) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) l_count_0++;
}
return (l_count_0);
}
void CloseThisSymbolAll(int mn) {
for (int l_pos_0 = OrdersTotal() - 1; l_pos_0 >= 0; l_pos_0--) {
OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
int OpenPendingOrder(int ai_0, double a_lots_4, double a_price_12, int a_slippage_20, double ad_24, int ai_32, int ai_36, string a_comment_40, int a_magic_48, int a_datetime_52, color a_color_56) {
int l_ticket_60 = 0;
int l_error_64 = 0;
int l_count_68 = 0;
int li_72 = 100;
switch (ai_0) {
case 2:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, a_lots_4, a_price_12, a_slippage_20, StopLong(ad_24, ai_32), TakeLong(a_price_12, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(1000);
}
break;
case 4:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, a_lots_4, a_price_12, a_slippage_20, StopLong(ad_24, ai_32), TakeLong(a_price_12, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 0:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
RefreshRates();
l_ticket_60 = OrderSend(Symbol(), OP_BUY, a_lots_4, ND(Ask), a_slippage_20, StopLong(Bid, ai_32), TakeLong(Ask, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 3:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, a_lots_4, a_price_12, a_slippage_20, StopShort(ad_24, ai_32), TakeShort(a_price_12, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 5:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, a_lots_4, a_price_12, a_slippage_20, StopShort(ad_24, ai_32), TakeShort(a_price_12, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
break;
case 1:
for (l_count_68 = 0; l_count_68 < li_72; l_count_68++) {
l_ticket_60 = OrderSend(Symbol(), OP_SELL, a_lots_4, ND(Bid), a_slippage_20, StopShort(Ask, ai_32), TakeShort(Bid, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if (l_error_64 == 0/* NO_ERROR */) break;
if (!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */)) break;
Sleep(5000);
}
}
return (l_ticket_60);
}
double StopLong(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 - ai_8 * Point);
}
double StopShort(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 + ai_8 * Point);
}
double TakeLong(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 + ai_8 * Point);
}
double TakeShort(double ad_0, int ai_8) {
if (ai_8 == 0) return (0);
else return (ad_0 - ai_8 * Point);
}
double CalculateProfit() {
double ld_ret_0 = 0;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();
}
return (ld_ret_0);
}
double AccountEquityHigh() {
if (CountTrades(MagN) == 0) gd_336 = AccountEquity();
if (gd_336 < gd_344) gd_336 = gd_344;
else gd_336 = AccountEquity();
gd_344 = AccountEquity();
return (gd_336);
}
double FindLastBuyPrice() {
double l_ord_open_price_8;
int l_ticket_24;
double ld_unused_0 = 0;
int l_ticket_20 = 0;
for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN && OrderType() == OP_BUY) {
l_ticket_24 = OrderTicket();
if (l_ticket_24 > l_ticket_20) {
l_ord_open_price_8 = OrderOpenPrice();
ld_unused_0 = l_ord_open_price_8;
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
double FindLastSellPrice() {
double l_ord_open_price_8;
int l_ticket_24;
double ld_unused_0 = 0;
int l_ticket_20 = 0;
for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN && OrderType() == OP_SELL) {
l_ticket_24 = OrderTicket();
if (l_ticket_24 > l_ticket_20) {
l_ord_open_price_8 = OrderOpenPrice();
ld_unused_0 = l_ord_open_price_8;
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
double LotSiz(double ltt)
{
double ls=0;
double minlot=MarketInfo(Symbol(), MODE_MINLOT);
double maxlot=MarketInfo(Symbol(), MODE_MAXLOT);
double steplot=MarketInfo(Symbol(), MODE_LOTSTEP);
int LotsDigits = MathCeil(MathAbs(MathLog(steplot)/MathLog(10)));
ls = NormalizeDouble(ltt,LotsDigits);
if (ltt<minlot) { ls=minlot; }
if (ltt>maxlot) { ls=maxlot; }
//int LotsDigits = MathCeil(MathAbs(MathLog( MarketInfo(Symbol(),MODE_MINLOT))/MathLog(10)));
//Êîëè÷åñòâî çíà÷àùèõ öèôð ïîñëå çàïÿòîé â ðàçìåðå ïîçèöèè.
return(ls);
}
double GetLots()
{
double lot_min = MarketInfo( Symbol(), MODE_MINLOT );
double lot_max = MarketInfo( Symbol(), MODE_MAXLOT );
double lot_step = MarketInfo( Symbol(), MODE_LOTSTEP );
double balance = AccountBalance();
double margin = AccountFreeMargin();
double required = MarketInfo( Symbol(), MODE_MARGINREQUIRED );
if(Reinvest!=0)
{
//double lot = NormalizeDouble( balance * risk*0.01 * leverage / lotsize, 2 );
double lot = NormalizeDouble(MathFloor( balance / Reinvest)/100,2);
if(lot < lot_min) lot = lot_min;
if(lot >lot_max) lot = lot_max;
}
else lot=Lot;
return(lot);
}
void again() {
gi_280 = Time[1];
return (0);
}
//---
int alert()
{
int x=0;
string ind_name = "i-Regr";
double ma = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,0, 0);
double ma1 = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,0, 1);
if (kanal==1)
{
double m_up = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,1, 0);
double m_d = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,2, 0);
if (ma>ma1 && Bid>m_d) x=1;
if (ma<ma1 && Ask<m_up) x=-1;
}
if (kanal==0)
{
if (ma>ma1) x=1;
if (ma<ma1) x=-1;
}
if (kanal==2)
{
m_up = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,1, 0);
m_d = iCustom(NULL, mper[TFS], ind_name, Regr.degree1, Regr.kstd1, SPer, Regr.shift1,2, 0);
if (ma>ma1 && Bid>m_d && Ask<m_up && alerts(1)==1) x=1;
if (ma<ma1 && Ask<m_up && Bid>m_d && alerts(-1)==-1) x=-1;
}
return(x);
}
int alerts(int d6)
{
if (CountTrades(MagN)<IndStep) return(d6);
int x=0;
string ind_name = "i-Regr";
double ma = iCustom(NULL, mper[TFSmall], ind_name, Regr.degree1mall, Regr.kstd1mall, SPermall, Regr.shift1mall,0, 0);
double ma1 = iCustom(NULL, mper[TFSmall], ind_name, Regr.degree1mall, Regr.kstd1mall, SPermall, Regr.shift1mall,0, 1);
double m_up = iCustom(NULL, mper[TFSmall], ind_name, Regr.degree1mall, Regr.kstd1mall, SPermall, Regr.shift1mall,1, 0);
double m_d = iCustom(NULL, mper[TFSmall], ind_name, Regr.degree1mall, Regr.kstd1mall, SPermall, Regr.shift1mall,2, 0);
if (ma>ma1 && Bid>m_d && Ask<m_up ) x=1;
if (ma<ma1 && Ask<m_up && Bid>m_d ) x=-1;
return(x);
}
double ND(double p)
{
return(NormalizeDouble(p,Digits));
}
void TrailingAlls()
{
int total2=CountTrades(MagN);
if (CalculateProfit()<=0 || total2==0) return(0);
double AveragePrice2 = 0;
double Count2 = 0;
int dir=-1;
for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagN) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
AveragePrice2 += OrderOpenPrice() * OrderLots();
Count2 += OrderLots();
if (OrderType() == OP_BUY) dir=0;
if (OrderType() == OP_SELL) dir=1;
}
}
}
if (total2 > 0)
{
AveragePrice2 = RoundToTickSize(AveragePrice2/Count2);
}
if (dir==0)
{
if (AveragePrice2>Bid-ProfitTrailDist*Point) return(0);
}
if (dir==1)
{
if (AveragePrice2<Bid+ProfitTrailDist*Point) return(0);
}
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagN) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagN)
{
if (UseTrailingStop==1) TrailingStairs(OrderTicket(),TrailDist,TrailStep,AveragePrice2);
if (UseTrailingStop==2) TrailingStairs2(OrderTicket(),TrailDist,TrailStep,AveragePrice2);
}
}
}
}
//+------------------------------------------------------------------+
//| ÒÐÅÉËÈÍà ÑÒÀÍÄÀÐÒÍÛÉ-ÑÒÓÏÅÍ×ÀÑÒÛÉ |
//| Ôóíêöèè ïåðåäà¸òñÿ òèêåò ïîçèöèè, ðàññòîÿíèå îò êóðñà îòêðûòèÿ, |
//| íà êîòîðîì òðåéëèíã çàïóñêàåòñÿ (ïóíêòîâ) è "øàã", ñ êîòîðûì îí |
//| ïåðåíîñèòñÿ (ïóíêòîâ) |
//| Ïðèìåð: ïðè +30 ñòîï íà +10, ïðè +40 - ñòîï íà +20 è ò.ä. |
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance,int trlstep,double avg)
{
double nextstair; // áëèæàéøåå çíà÷åíèå êóðñà, ïðè êîòîðîì áóäåì ìåíÿòü ñòîïëîññ
// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
{
Print("Òðåéëèíã ôóíêöèåé TrailingStairs() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
return(0);
}
// åñëè äëèííàÿ ïîçèöèÿ (OP_BUY)
if (OrderType()==OP_BUY)
{
// ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
// åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
if ((OrderStopLoss()==0))
nextstair = avg + trldistance*Point;
// èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
else
nextstair = OrderStopLoss() + trldistance*Point;
// åñëè òåêóùèé êóðñ (Bid) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
if (Bid>=nextstair)
if ((OrderStopLoss()==0))
OrderModify(ticket,OrderOpenPrice(),avg + trlstep*Point,OrderTakeProfit(),OrderExpiration());
else
OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration());
}
// åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL)
if (OrderType()==OP_SELL)
{
// ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
// åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
if ((OrderStopLoss()==0) )
nextstair = avg - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
// èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
else
nextstair = OrderStopLoss() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
// åñëè òåêóùèé êóðñ (Àñê) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
if (Ask<=nextstair)
if ((OrderStopLoss()==0))
OrderModify(ticket,OrderOpenPrice(),avg - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration());
else
OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration());
}
}
void TrailingStairs2(int ticket,int trldistance,int trlstep,double avg)
{
double nextstair; // áëèæàéøåå çíà÷åíèå êóðñà, ïðè êîòîðîì áóäåì ìåíÿòü ñòîïëîññ
// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
{
Print("Òðåéëèíã ôóíêöèåé TrailingStairs2() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
return(0);
}
// åñëè äëèííàÿ ïîçèöèÿ (OP_BUY)
if (OrderType()==OP_BUY)
{
// ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
// åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
if ((OrderStopLoss()==0))
nextstair = avg + trldistance*Point;
// èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
else
{double trl=(OrderStopLoss()-avg)/Point;
nextstair = OrderStopLoss() + xtral*trl*Point;}
// åñëè òåêóùèé êóðñ (Bid) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
if (Bid>=nextstair)
if ((OrderStopLoss()==0))
OrderModify(ticket,OrderOpenPrice(),avg + trlstep*Point,OrderTakeProfit(),OrderExpiration());
else
OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration());
}
// åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL)
if (OrderType()==OP_SELL)
{
// ðàñ÷èòûâàåì, ïðè êàêîì çíà÷åíèè êóðñà ñëåäóåò ñêîððåêòèðîâàòü ñòîïëîññ
// åñëè ñòîïëîññ íèæå îòêðûòèÿ èëè ðàâåí 0 (íå âûñòàâëåí), òî áëèæàéøèé óðîâåíü = êóðñ îòêðûòèÿ + trldistance + ñïðýä
if ((OrderStopLoss()==0) )
nextstair = avg - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
// èíà÷å áëèæàéøèé óðîâåíü = òåêóùèé ñòîïëîññ + trldistance + trlstep + ñïðýä
else
{trl=(avg-OrderStopLoss())/Point;
nextstair = OrderStopLoss() - (trl*xtral + MarketInfo(Symbol(),MODE_SPREAD))*Point;
}
// åñëè òåêóùèé êóðñ (Àñê) >= nextstair è íîâûé ñòîïëîññ òî÷íî ëó÷øå òåêóùåãî, êîððåêòèðóåì ïîñëåäíèé
if (Ask<=nextstair)
if ((OrderStopLoss()==0))
OrderModify(ticket,OrderOpenPrice(),avg - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration());
else
OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration());
}
}
double RoundToTickSize(double price){return(NormalizeDouble(MathRound(price/MarketInfo(Symbol(), MODE_TICKSIZE))*MarketInfo(Symbol(), MODE_TICKSIZE), MarketInfo(Symbol(), MODE_DIGITS)));}
int Dir(int mn)
{
int r=-1;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != mn) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if (OrderType() == OP_BUY)
{
r=0;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if (OrderType() == OP_SELL) {
r=1;
}
}
}
return(r);
}
int ProfitPip (int mn) // ñóììàðíûé ïðîôèò â ïèïñàõ ïî âñåì ñäåëêàì ñ ìàäæèêíóìáåðîì mn
{
double p;
int prb,prs,pr=0,dg,k=OrdersTotal();
for (int i=0; i<k; i++) {
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if (OrderMagicNumber()==mn) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
if (StringFind(OrderSymbol(),"JPY")<0) dg=4; else dg=2;
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (StringFind(OrderSymbol(),"JPY")<0) p=0.0001; else p=0.01;
if (OrderType()==OP_BUY) {
prb+=(NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID)/p,dg)-NormalizeDouble(OrderOpenPrice()/p,dg));}
if (OrderType()==OP_SELL) {
prs+=(NormalizeDouble(OrderOpenPrice()/p,dg)-NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK)/p,dg));}
pr=(prb+prs);
}}}
return(pr);
}
double CountLots(int mn) {
double l_count_0 = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != mn) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) l_count_0=l_count_0+OrderLots();
}
return (l_count_0);
}
double Balance(string OrdType, string inf, int mn)
{
double result=0, FProf = 0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=mn) continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)
{
if (OrdType == "buy")
{
if(OrderType()==OP_BUY)
{
if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission();
if (inf=="Lot") result=result+OrderLots();
//if (inf=="FP") result=result + (OrderLots()*100000*(OrderTakeProfit()-OrderOpenPrice())/AccountLeverage());
}
}
if (OrdType == "sell")
{
if(OrderType()==OP_SELL )
{
if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission();
if (inf=="Lot") result=result+OrderLots();
//if (inf=="FP") result=result + (OrderLots()*100000*(-OrderTakeProfit()+OrderOpenPrice())/AccountLeverage());
}
}
}
}
return(result);
}
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
---