The provided MQL4 code is for a trading expert advisor that performs stop-loss (SL) and take-profit (TP) adjustments on open positions in MetaTrader 4. Below, I'll explain the key components of this code:
Key Components
-
Initialization Functions:
init()
: Initializes variables such as the minimum distance for SL/TP (Min_Dist
) and flags to control working states (Work
,New_SL
,Close_TF
).- Global variables are declared at the beginning, which include configurations like
Slippage
and booleans to manage different operational modes.
-
Deinitialization Function:
deinit()
: Resets some of the global flags (New_SL
,Close_TF
) when the EA is uninstalled or stops running.
-
Timer Event Handler:
OnTimer()
handles periodic execution based on specified intervals.- It processes open positions to check if they are pending (i.e., waiting for a new SL/TP) and updates these values accordingly using
OrderModify
.
-
Trade Management Functions:
Open_Condition()
: Determines conditions under which an order can be opened based on several criteria like price trends, custom indicators (sma
,ema
), RSI levels, etc.Stop_loss()
andTake_profit()
: Calculate new SL and TP values for open positions.
-
Order Modification:
- Uses the
OrderModify
function to adjust the SL and TP of existing orders based on market conditions evaluated during each timer tick.
- Uses the
-
Error Handling:
- The
New_Stop()
function ensures that SL/TP adjustments respect minimum distance requirements set by the broker.
- The
-
Utility Functions:
- Functions like
Close_Trend()
are used for additional checks or processing, although their implementation is not fully shown here. - The
MyPrint()
function logs messages to the MetaTrader console, which is useful for debugging and monitoring EA activity.
- Functions like
Important Considerations
-
Slippage Handling: Slippage is set explicitly in orders, which can be adjusted as needed based on trading conditions or broker settings.
-
Dynamic Adjustment:
- The EA adjusts SL/TP dynamically based on market volatility using the Average True Range (ATR) indicator. This allows for flexible risk management tailored to current market conditions.
-
Indicators and Custom Conditions: It uses custom indicators (
sma
,ema
) and RSI levels as part of its logic, which are common tools in technical analysis to determine trend strength and momentum. -
Debugging and Monitoring:
- Extensive use of the
MyPrint
function provides insights into what conditions are met or not during EA execution. This is valuable for understanding the behavior of the strategy over time.
- Extensive use of the
Example Explanation
Let's take a closer look at the OnTimer()
function logic:
-
Order Iteration: It iterates through all open positions and checks if they need SL/TP adjustments.
-
Pending Orders Check: The EA specifically looks for orders with pending actions (
ORDER_ACTION_PENDING
) to modify them. -
Modification Logic:
- Calculates new TP using the
Take_profit()
function, which factors in market conditions like RSI levels and current price trends. - Adjusts SL based on recent volatility (ATR) or other criteria defined in the strategy logic.
- Calculates new TP using the
-
Market Conditions: The EA considers market trends and direction changes to decide whether to adjust or close positions.
This code exemplifies a complex trading bot that manages open positions dynamically, adjusting risk parameters in response to market behavior. It requires careful testing and optimization for different assets and market conditions to ensure robust performance.
//+------------------------------------------------------------------+
//| exp_Lego.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Seletsky R.V."
#property link "http://www"
//-------------------------------------------------------------------+
// |
//--------------------------------------------------------------- 1--+
extern string Áëîê1 = "---- Âêëþ÷åíèå èíäèêàòîðîâ ---- ";
extern string b1 = "---- ---- ---- ----Maøêè";
extern bool otkr_MA =true;
extern bool zakr_MA =true;
extern double MA1 =14;
extern double MA2 =67;
extern double Shift_ma =1;
extern string c1 = "---- ---- ---- ----Ñòîõàñòèê";
extern bool otkr_Stoh =false;
extern bool zakr_Stoh =false;
extern double per_K=5;
extern double per_D=3;
extern double slow=3;
extern double zoneBUY=30;
extern double zoneSELL=70;
extern string d1 = "---- ---- ---- ----Awesome";
extern bool otkr_AO =false;
extern bool zakr_AO =false;
extern string e1 = "---- ---- ---- ----Accelerator";
extern bool otkr_AC =false;
extern bool zakr_AC =false;
extern string f1 = "---- ---- ---- ----Demarker";
extern bool otkr_Dema =false;
extern bool zakr_Dema =false;
extern double DeMa_period=14;
extern double niz_ur=0.3;
extern double verx_ur=0.7;
extern string g1 = "---- ---- ---- ----CCI";
extern bool otkr_CCI =false;
extern bool zakr_CCI =false;
extern double CCI_period=14;
extern string Áëîê2 = "---- Ïàðàìåòðû òîðãîâëè ---- ";
extern double StopLoss =200; // SL äëÿ îòêðûâàåìîãî îðäåðà
extern double TakeProfit =200; // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà
extern double Lts0 =0.1; // Æåñòêî çàäàííîå êîëè÷. ëîòîâ
extern double IK =1; // Óìíîæåíèå Lts0 * IK åñëè ïîñëåäíèé îðäåð áûë çàêðûò â ìèíóñ
extern bool SleepBars =true; // Ïàóçà ïîñëå çàêðûòèÿ îðäåðå â 2000 ñåêóíä
bool Work=true; // Ýêñïåðò áóäåò ðàáîòàòü.
bool OrderSal;
string Symb; // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà
//--------------------------------------------------------------- 2 --
//-----------------------------------------------------------
int start()
{
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket; // Íîìåð îðäåðà
double
Lot, // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
Lts, // Êîëè÷. ëîòîâ â îòêðûâ.îðäåðå
lot,
Min_Lot, // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
Step, // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
Free, // Òåêóùèå ñâîáîäíûå ñðåäñòâà
One_Lot, // Ñòîèìîñòü îäíîãî ëîòà
Price, // Öåíà âûáðàííîãî îðäåðà
SL, // SL âûáðàííîãî îðäåðà
TP, // TP âûáðàííîãî îðäåðà
//--
ma_By,ma_Sell,Stoh_By,Stoh_Sell,AO_By,AO_Sell,AC_By,AC_Sell,Cls_ma_Sell,Cls_ma_By,Cls_Stoh_Sell,Cls_Stoh_By,
Cls_AO_Sell,Cls_AO_By,Cls_AC_Sell,Cls_AC_By,Dema_By,Cls_Dema_Sell,Dema_Sell,Cls_Dema_By,CCI_By,CCI_Sell,Cls_CCI_Sell,Cls_CCI_By;
bool
Modific=true,
Ans =false, // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
Cls_B=false, // Êðèòåðèé äëÿ çàêðûòèÿ Buy
Cls_S=false, // Êðèòåðèé äëÿ çàêðûòèÿ Sell
Opn_B=false, // Êðèòåðèé äëÿ îòêðûòèÿ Buy
Opn_S=false, // Êðèòåðèé äëÿ îòêðûòèÿ Sell
S_Bar=false; // Êðèòåðèé äëÿ Sleep Bar
//------------------------------------------------------------------------------
//-------------------- Ïàóçà ïîñëå çàêðûòîãî îðäåðà------------------ 2 -
int time0 = 0; // Îáüÿâëÿåì íåîáõîäèìûå ïåðåìåííûå
for(int t0 = OrdersHistoryTotal();t0>=0;t0--) // Ïåðåáèðàåì âñå çàêðûòûå îðäåðà
if(OrderSelect(t0, SELECT_BY_POS,MODE_HISTORY )==true) // Åñëè îðäåð ñ òàêèì íîìåðîì (i) â ñïèñêå çàêðûòûõ îðäåðîâ åñòü ( íå ïóòàòü ñ òèêåòîì)
{
if( iTime(NULL,0,0)-OrderOpenTime() <2000 && SleepBars==true) //Óñëîâèÿ ïàóçû
{
S_Bar=true; // Äåéñòâèÿ iTime(NULL,0,1)
Alert("Ïåðåêóð.Çà..àëñÿ ÿ");
}
// return(0);
}
//----------------------------------------------------------------------
//-------------------- Ïðåäâàðèò.îáðàáîòêà-------------------------- 3 -
if(Bars<2) // Íåäîñòàòî÷íî áàðîâ
{
Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
if(Work==false) // Êðèòè÷åñêàÿ îøèáêà
{
Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
//------------------------------------------------------------------------------
//------------------------------Ó÷¸ò îðäåðîâ--------------------------------- 4 --
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
Total=0; // Êîëè÷åñòâî îðäåðîâ
for(int i=1; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symb)continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Ticket=OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
Lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
//---------------------------Òîðãîâûå êðèòåðèè------------------------------------ 5 --
//Ìàøêè:------------------------------------
if(otkr_MA==true)
{
if( iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)>iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
{
ma_By =true;
}
if(iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)<iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
{
ma_Sell =true;
}
}
if(zakr_MA==true)
{
if( iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)>iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
{
Cls_ma_Sell=true;
}
if(iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)<iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
{
Cls_ma_By=true;
}
}
//Ñòîõàñòèê:-------------------------------
if(otkr_Stoh==true)
{
if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)>iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)<zoneBUY)
{
Stoh_By =true;
}
if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)<iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)>zoneSELL)
{
Stoh_Sell =true;
}
}
if(zakr_Stoh==true)
{
if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)>iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)<zoneBUY)
{
Cls_Stoh_Sell=true;
}
if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)<iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)>zoneSELL)
{
Cls_Stoh_By=true;
}
}
//Awesome:--------------------------------
if(otkr_AO==true)
{
if(iAO(NULL,0,0)>iAO(NULL,0,1))
{
AO_By =true;
}
if(iAO(NULL,0,0)<iAO(NULL,0,1))
{
AO_Sell =true;
}
}
if(zakr_AO==true)
{
if(iAO(NULL,0,0)>iAC(NULL,0,1))
{
Cls_AO_Sell=true;
}
if(iAO(NULL,0,0)<iAC(NULL,0,1))
{
Cls_AO_By=true;
}
}
//Accelerator:---------------------------
if(otkr_AC==true)
{
if (iAC(NULL,0,0)>=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) || iAC(NULL,0,0)<=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) && iAC(NULL,0,2)>iAC(NULL,0,3))
{
AC_By =true;
}
if (iAC(NULL,0,0)<=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) || iAC(NULL,0,0)>=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) && iAC(NULL,0,2)<iAC(NULL,0,3))
{
AC_Sell =true;
}
}
if(zakr_AC==true)
{
if (iAC(NULL,0,0)>=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) || iAC(NULL,0,0)<=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) && iAC(NULL,0,2)>iAC(NULL,0,3))
{
Cls_AC_Sell=true;
}
if (iAC(NULL,0,0)<=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) || iAC(NULL,0,0)>=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) && iAC(NULL,0,2)<iAC(NULL,0,3))
{
Cls_AC_By=true;
}
}
//Demarker:----------------------------
if(otkr_Dema==true)
{
if (iDeMarker(NULL, 0, DeMa_period, 0)<niz_ur)
{
Dema_By =true;
}
if (iDeMarker(NULL, 0, DeMa_period, 0)>verx_ur)
{
Dema_Sell =true;
}
}
if(zakr_Dema==true)
{
if (iDeMarker(NULL, 0, DeMa_period, 0)<niz_ur)
{
Cls_Dema_Sell=true;
}
if (iDeMarker(NULL, 0, DeMa_period, 0)>verx_ur)
{
Cls_Dema_By=true;
}
}
//CCI:-------------------------------
if(otkr_CCI==true)
{
if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN, 1)<-100)
{
CCI_By =true;
}
if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN,1)>100)
{
CCI_Sell =true;
}
}
if(zakr_CCI==true)
{
if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN, 1)<-100)
{
Cls_CCI_Sell=true;
}
if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN,1)>100)
{
Cls_CCI_By=true;
}
}
//--------------------------------Îòêðûòèå-----------------------------------------------//
if (ma_By ==true||otkr_MA==false && Stoh_By ==true||otkr_Stoh==false &&
AO_By ==true||otkr_AO==false && AC_By ==true||otkr_AC==false && Dema_By ==true||otkr_Dema==false &&
CCI_By ==true||otkr_CCI==false)
{
Opn_B=true; // Êðèòåðèé îòêð. Buy
}
//---------
if (ma_Sell==true||otkr_MA==false && Stoh_Sell ==true||otkr_Stoh==false &&
AO_Sell ==true||otkr_AO==false && AC_Sell==true||otkr_AC==false && Dema_Sell ==true||otkr_Dema==false &&
CCI_Sell ==true||otkr_CCI==false)
{
Opn_S=true; // Êðèòåðèé îòêð. Sell
}
//--------------------------------Çàêðûòèå-----------------------------------------------//
if ( Cls_ma_By==true||zakr_MA==false && Cls_Stoh_By==true||zakr_Stoh==false &&
Cls_AO_By==true||zakr_AO==false && Cls_AC_By==true||zakr_AC==false && Cls_Dema_By==true||zakr_Dema==false &&
Cls_CCI_By==true||zakr_CCI==false)
{
Cls_B=true; // Êðèòåðèé çàêð. Buy
}
if ( Cls_ma_Sell==true||zakr_MA==false && Cls_Stoh_Sell==true||zakr_Stoh==false &&
Cls_AO_Sell==true||zakr_AO==false && Cls_AC_Sell==true||zakr_AC==false && Cls_Dema_Sell==true||zakr_Dema==false &&
Cls_CCI_Sell==true||zakr_CCI==false)
{
Cls_S=true; // Êðèòåðèé çàêð. Sell
}
//-----------------------------Çàêðûòèå îðäåðîâ---------------------------------- 6 --
while(true) // Öèêë çàêðûòèÿ îðä.
{
if (Tip==0 && Cls_B==true) // Îòêðûò îðäåð Buy..Óñëîâèÿ çàêðûòèÿ Buy
{ //è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Buy ",Ticket,". Îæèäàíèå îòâåòà..");
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Bid,2); // Çàêðûòèå Buy
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Buy ",Ticket);
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if (Tip==1 && Cls_S==true) // Îòêðûò îðäåð Sell..Óñëîâèÿ çàêðûòèÿ Sell
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Sell ",Ticket,". Îæèäàíèå îòâåòà..");
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Ask,2); // Çàêðûòèå Sell
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Sell ",Ticket);
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//-----------------------------Ñòîèìîñòü îðäåðîâ---------------------------------- 7 --
RefreshRates(); // Îáíîâëåíèå äàííûõ
int time = 0;double profit = 0; //îáüÿâëÿåì íåîáõîäèìûå íàì ïåðåìåííûå êóäà ìû ïîëîæèì èíòåðåñóþùèå íàñ õàðàêòåðèñòèêè îðäåðà
for(int t = OrdersHistoryTotal();t>=0;t--) // Ïåðåáèðàåì âñå çàêðûòûå îðäåðà
{
if(OrderSelect(t,SELECT_BY_POS,MODE_HISTORY))//åñëè îðäåð ñ òàêèì íîìåðîì (i) â ñïèñêå çàêðûòûõ îðäåðîâ åñòü ( íå ïóòàòü ñ òèêåòîì)
{
if(OrderSymbol() == Symbol()) //åñëè âûáðàííûé îðäåð áûë îòêðûò ïî íàøåé âàëþòíîé ïàðå
{
if(time<OrderCloseTime()) //(ñðàâíèâàåì åãî ñ õðàíÿùèìñÿ â ïåðîåìåííîé time)
{
time=OrderCloseTime(); //åñëè âðåìÿ çàêðûòèÿ îðäåðà áîëüøå - ëîæèì åãî â ïåðåìåííóþ
profit=OrderProfit(); //è çàîäíî çàïîìèíàåì ïðèáûëü îðäåðà
lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
}
}
if(profit == 0) {Lts=Lts0;} //äåéñòâèÿ åñëè èñòîðèÿ ÷èñòà
if(profit >= 0) {Lts=Lts0;} //äåéñòâèÿ åñëè ïîñëåäíèé îðäåð áûë ïðèáûëüíûì, èëè íóëåâû
if(profit < 0) {Lts=lot*IK;} //äåéñòâèÿ åñëè ïîñëåäíèé îðäåð áûë óáûòî÷íûì
if (Lts*One_Lot > Free) // Ëîò äîðîæå ñâîáîäí.
{
Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîòîâ");
return; // Âûõîä èç start()
}
//------------------------------------------------------------------------------
//------------------------------Îòêðûòèå îðäåðîâ--------------------------------- 8 --
while(true) // Öèêë îòêðûòèÿ îðä.
{
if (Total==0 && Opn_B==true && Cls_B==false) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Buy
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Bid - New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
TP=Bid + New_Stop(TakeProfit)*Point; // Âû÷èñëåíèå TP îòêð.
Alert("Ïîïûòêà îòêðûòü Buy. Îæèäàíèå îòâåòà..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,3,SL,TP);//Îòêðûòèå Buy
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð Buy ",Ticket);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if (Total==0 && Opn_S==true && Cls_S==false) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Sell
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Ask + New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
TP=Ask - New_Stop(TakeProfit)*Point; // Âû÷èñëåíèå TP îòêð.
Alert("Ïîïûòêà îòêðûòü Sell. Îæèäàíèå îòâåòà..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Îòêðûòèå Sel
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð Sell ",Ticket);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
return; // Âûõîä èç start()
}
//------------------------------------------------------------------------------
//--------------------------Ô-èÿ îáðàáîò îøèáîê------------------------------------ 10 --
int Fun_Error(int Error)
{
switch(Error)
{ // Ïðåîäîëèìûå îøèáêè
case 4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 130:Alert("Íåïðàâèëüíûå ñòîïû");
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(1); // Âûõîä èç ôóíêöèè
case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..");
RefreshRates(); // Îáíîâèì äàííûå
return(1); // Âûõîä èç ôóíêöèè
case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..");
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(1); // Âûõîä èç ôóíêöèè
case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..");
Sleep(500); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
// Êðèòè÷åñêèå îøèáêè
case 2: Alert("Îáùàÿ îøèáêà.");
return(0); // Âûõîä èç ôóíêöèè
case 5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 64: Alert("Ñ÷åò çàáëîêèðîâàí.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 133:Alert("Òîðãîâëÿ çàïðåùåíà.");
return(0); // Âûõîä èç ôóíêöèè
case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.");
return(0); // Âûõîä èç ôóíêöèè
default: Alert("Âîçíèêëà îøèáêà ",Error); // Äðóãèå âàðèàíòû
return(0); // Âûõîä èç ôóíêöèè
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Ïðîâåðêà ñòîï-ïðèê.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
if (Parametr<Min_Dist) // Åñëè ìåíüøå äîïóñò.
{
Parametr=Min_Dist; // Óñòàíîâèì äîïóñò.
Alert("Óâåëè÷åíà äèñòàíöèÿ ñòîï-ïðèêàçà.");
}
return(Parametr); // Âîçâðàò çíà÷åíèÿ
}
//---------------------------
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
---