Orders Execution
0
Views
0
Downloads
0
Favorites
tudasuda06
/*
ñîâåòíèê ïîñòðîåí íà ïðèíöèïå "êà÷åëåé"
âõîäèì â ðûíîê, åñëè öåíà èäåò â íàïðàâëåíèè ñäåëêè, òî ïîëó÷àåì ïðîôèò
åñëè íåò, òî ÷åðåç koridor îòêðûâàåì ñäåëêó â ïðîòèâîïîëîæåííîì íàïðàâëåíèè îáúåìîì *mul è ò.ä.
à âûõîäèòü ïî ðàçíîìó ìîæíî, ðåàëèçîâàíî íåñêîëüêî âàðèàíòîâ
âîîáùåì ìàðòèíãåéë, íî â îòëè÷èå îò èëàíà çäåñü ñòðàøíî êîãäà ôëåò
*/
#property copyright "runik"
#property link "ngb2008@mail.ru"
//---- input parameters
extern string g1="Îñíîâíûå ïàðàìåòðû";
extern int koridor=40; // øàã â ïóíêòàõ ÷åðåç êîòîðûé ýêñïåðò îòêðûâàåò ñäåëêè
extern int sl=80; // ñòîïëîññ â ïóíêòàõ
extern int tp=40; // òåéêïðîôèò â ïóíêòàõ
extern double mul=4; // ìóëüòèïëèêàòîð ëîòîâ, êàæäàÿ ñëåäóþùàÿ ñäåëêà â ñåðèè áîëüøå ïðåäûäóùåé â mul ðàç(à)
extern int last=1; // åñëè = 1 òî óìíîæàåì íå ïîñëåäíèé ëîò à âñå îòêðûòûå
extern int nh1=10; // äíåâíûå ÷àñû ðàáîòû, íà÷àëî ðàáîòû
extern int nh2=21; // êîíåö ðàáîòû, åñëè íå ðàâíû 0, òî îòêðûâàåì ñåðèè ñäåëîê òîëüêî ïî íî÷àì
extern string gg="Óïðàâëåíèå äåíüãàìè";
extern double percent=0; // % îò ñ÷åòà êîòîðûì òîðãóåì, ïåðâàÿ ñäåëêà, åñëè 0, òî Lots=0.1
extern double Lots=0.1; // ðàçìåð ëîòà ïåðâîé ñäåëêè â ñåðèè, ïðîãðàììà ñàìà ñêîððåêòèðóåò çíà÷åíèå åñëè ñëèøêîì ìàëåíüêîå èëè ñëèøêîì áîëüøîå, ò.å. äö íå ïîääåðæèâàåò
extern int maxtrades=10; // ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê â ñåðèè
extern int LotLim=1000; // ìàêñèìàëüíûé ñóììàðíûé îáúåì ëîòîâ îòêðûòûõ ïîçèöèé
int bezub=0; // åñëè 1, ïåðåíîñÿòñÿ ñòîïû â áåçóáûòîê, à ïîòîì âñå òðàëèòñÿ
extern int TrailingStop=30; // òðåéëèíãñòîï 0 èëè >0
double SpeedCoeff=0;
extern double profit=0; // â âàëþòå äåïîçèòà, åñëè ïî ñåðèè ñäåëîê ïðîôèò äîñòèã îïðåäåëåííîé âåëè÷èíû, òî âûõîäèì
extern int locprofit=0; // â ïóíêòàõ, åñëè ïî ñåðèè ñäåëîê äîñòèãíóò óðîâåíü áåçóáûòêà + 15 ïóíêòîâ, âûõîäèì è çàêðûâàåìñÿ, åñëè =0 òî âûõîäèì ïî ñòîïó è ïðîôèòó
extern int locprofitexpo=0; // â ïóíêòàõ, åñëè locprofit >0 (íàïðèìåð locprofit=40) è =5 ïóíêòîâ, ò.å. ÷åì áîëüøå ñäåëîê îòêðûòî òåì áûñòðåå íàì íàäî âûéòè !!!
//ò.å. óìåíüøàåì locprofit íà ýòó âåëè÷èíó ïðè îòêðûòèè êàæäîé ñëåäóþùåé ñäåëêè
extern int runotsuda=0; // åñëè ìû îòêðûëè íàïðèìåð 5 ñäåëêó, òî íàäî óõîäèòü ñ ðûíêà è çàêðûâàåìñÿ åñëè âûõîäèì â +
extern double minsum=100; // åñëè íà äåïîçèòå ñóììà ìåíüøå, òî ýêñïåðò ïåðåñòàåò ðàáîòàòü
extern string bb="Ìàëîçíà÷èìûå ïåðåìåííûå";
extern int mn=575; // ìàãè÷åñêîå ÷èñëî
extern int slipage=2; // ïðîñêàëüçûâàíèå
extern int clod=0; // ïðè =1 çàêðûâàþòñÿ âñå ñäåëêè, èñïîëüçóåòñÿ â ïðîãðàììå è áûâàåò íóæíî âñå çàêðûòü, à ðóêàìè ëåíü
extern int NumberOfTries=10; // êîëè÷åñòâî ïîïûòîê ïîñòàíîâêè îðäåðà
int BrokerDecimal = 1;
double allb=0; double alls=0;
double allbn=0; double allsn=0;
double nulpoint=0; int onepoint=1;
double LastSL=0; double LastTP=0;
int opentrades=0;
int lastok=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
// Åñëè áðîêåð äàåò êîòèðîâêè ïî âàëþòå ñ òî÷íîñòüþ â ïÿòü çíàêîâ - ïèïñ áóäåò ìåíüøå ñòàíäàðòíîãî â 10 ðàç - ââîäèì ìíîæèòåëü
if(Digits==3 || Digits==5) BrokerDecimal=10;
// Ïåðåìíîæèòü âñå óðîâíè â ïèïñàõ íà ìíîæèòåëü
koridor = koridor * BrokerDecimal;
sl = sl * BrokerDecimal;
tp = tp * BrokerDecimal;
slipage = slipage*BrokerDecimal;
onepoint = onepoint*BrokerDecimal;
TrailingStop = TrailingStop*BrokerDecimal;
locprofit = locprofit*BrokerDecimal;
locprofitexpo= locprofitexpo*BrokerDecimal;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//if (sl<koridor || tp<koridor) return(0);
if(DayOfWeek()==0 || DayOfWeek()==6) return(0);// íå ðàáîòàåò â âûõîäíûå äíè.
if(AccountFreeMargin()<minsum) // äåíüãè êîí÷èëèñü
{Print("We have no money. Free Margin = ", AccountFreeMargin());return(0);}
int ot=MyOrdersTotal(mn); //îïðåäåëÿåì êîëè÷åñòâî îðäåðîâ äàííîãî ýêñïåðòà ïî èíñòðóìåíòó
if (clod==1) {CloseOrders(mn);}
if (ot<1) // íà÷èíàåì !
{
if (nh1!=nh2 && nh1!=0 && (Hour()<nh1 || Hour()>nh2)) return(0);
opentrades=0;
clod=0;
if (Close[0]>Close[1])
{
if (percent>0) {Lots=AccountBalance()/1000*percent/100;}
int ticket=OrderSend(Symbol(),OP_BUY,LotSiz(Lots),Ask,slipage,Ask-sl*Point,Ask+tp*Point,"1",mn,0,Green) ;
if (ticket>0){lastok=0;opentrades=opentrades+1;}
if (ticket<0){lastok=lastok+1;}
return(0);
}
else
{
ticket=OrderSend(Symbol(),OP_SELL,LotSiz(Lots),Bid,slipage,Bid+sl*Point,Bid-tp*Point,"1",mn,0,Red);
if (ticket>0){lastok=0;opentrades=opentrades+1;}
if (ticket<0){lastok=lastok+1;}
return(0);
}
}
int cnt=0;
int mode=0;
double buylot=0;double buyprice=0;double buystoplot=0;double buystopprice=0;double buylimitlot=0;double buylimitprice=0;
double selllot=0;double sellprice=0;double sellstoplot=0;double sellstopprice=0;double selllimitlot=0;double selllimitprice=0;
string sstc=""; string bstc="";
double buysl=0;double buytp=0;double sellsl=0;double selltp=0;
datetime buystoptime=0; datetime sellstoptime=0;
int bt=-1;int bst=-1;int blt=-1;int st=-1;int sst=-1;int slt=-1;
allb=0; alls=0;
double ol=0;
if (ot>0)////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
for(cnt=0;cnt<OrdersTotal();cnt++) // çàïîìèíàåì ïàðàìåòðû îðäåðîâ
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue;
if (mode==OP_BUY && OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
ol=OrderLots();
allb=allb+ol;
if (buylot<=ol) // çàïîìèíàåì ïàðàìåòðû ñàìîãî áîëüøîãî îòêðûòîãî îðäåðà èëè òàêîãî æå ðàçìåðà îðäåðà, íî ñ áîëüøèì íîìåðîì òèêåòà
{ buylot=ol;
buyprice=OrderOpenPrice();
bt=OrderTicket();
buysl=OrderStopLoss();
buytp=OrderTakeProfit();
}
}
if (mode==OP_BUYSTOP && OrderMagicNumber() == mn && OrderSymbol()==Symbol() )
{
buystoplot=OrderLots();
buystopprice=OrderOpenPrice();
bst=OrderTicket();
buystoptime=OrderOpenTime();
bstc=OrderComment();
}
if (mode==OP_SELL && OrderMagicNumber() == mn && OrderSymbol()==Symbol() )
{
ol=OrderLots();
alls=alls+ol;
if (selllot<=ol) // çàïîìèíàåì ïàðàìåòðû ñàìîãî áîëüøîãî îòêðûòîãî îðäåðà èëè òàêîãî æå ðàçìåðà îðäåðà, íî ñ áîëüøèì íîìåðîì òèêåòà
{ selllot=ol;
sellprice=OrderOpenPrice();
st=OrderTicket();
sellsl=OrderStopLoss();
selltp=OrderTakeProfit();
}
}
if (mode==OP_SELLSTOP && OrderMagicNumber() == mn && OrderSymbol()==Symbol() )
{
sellstoplot=OrderLots();
sellstopprice=OrderOpenPrice();
sst=OrderTicket();
sellstoptime=OrderOpenTime();
sstc=OrderComment();
}
}
if (TrailingStop>0 && SpeedCoeff>0)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
KillLoss(OrderTicket(),SpeedCoeff);
}
}
}
if (TrailingStop>0 && SpeedCoeff==0)
{
Tral();
}
double SLotsBuy, SLotsSell;
SLotsBuy = Balance("buy","Lot");
SLotsSell = Balance("sell","Lot");
if (ot<maxtrades && opentrades<maxtrades && LotLim>(SLotsBuy+SLotsSell) && buystoplot==0 && sellstoplot==0)
{
if (st<bt) // ïîñëåäíåé îòêðûòà ñäåëêà áàé
{
double ls1;
if (last==1) ls1=LotSiz((SLotsBuy+SLotsSell)*mul);
if (last!=1) ls1=LotSiz(buylot*mul);
for(int c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,ls1,buyprice-koridor*Point,slipage,buyprice-koridor*Point+sl*Point,buyprice-koridor*Point-tp*Point,"STOPLIMIT",mn,0,Red);
if (ticket>0){opentrades=opentrades+1;break;}
if (ticket<0){lastok=lastok+1;}
}
return(0);
}
else
{
if (last==1) ls1=LotSiz((SLotsBuy+SLotsSell)*mul);
if (last!=1) ls1=LotSiz(selllot*mul);
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,ls1,sellprice+koridor*Point,slipage,sellprice+koridor*Point-sl*Point,sellprice+koridor*Point+tp*Point,"BUYSTOP",mn,0,Green);
if (ticket>0){lastok=0;opentrades=opentrades+1;break;}
if (ticket<0){lastok=lastok+1;}
}
return(0);
}
}
if (locprofit>0 && locprofitexpo==0) Close0();
if (locprofit>0 && locprofitexpo>0) CloseE0();
if (profit>0) CloseP();
if (runotsuda>0 && runotsuda<ot) CloseRun();
if (ot==1 && buylot==0 && selllot==0) // êîãäà âñå ñðàáîòàëî, íî âèñèò îòëîæåííûé
{
if (bst>0) {OrderDelete(bst); return(0); }
if (sst>0) {OrderDelete(sst); return(0); }
}
} //if (OrdersTotal()>0)
//----
return(0);
}
//+------------------------------------------------------------------+
double Balance(string OrdType, string inf)
{
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);
}
int CloseOrders(int mn) // ïðîöåäóðà çàêðûòèÿ âñåõ îðäåðîâ
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >= 0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
//Print(cnt);
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
}
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
if (OrderType()==OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType()==OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}
return(0);
}
int MyOrdersTotal(int mn) // ïðîöåäóðà ïîäñ÷åòà âñåõ îðäåðîâ äàííîãî ýêñïåðòà ïî äàííîìó èíñòðóìåíòó
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
c++;
}
}
return(c);
}
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 nulfunc(int mn) // äëÿ ïîäñ÷åòà òî÷êè áåçóáûòî÷íîñòè âñåõ îòêðûòûõ îðäåðîâ (åñëè âñå èõ çàêðûòü ïî ýòîé öåíå òî ïîëó÷èì 0)
{
double np=0;double f=0; double p=0;double l=0; int m=0;
for(int t1=0;t1<OrdersTotal();t1++)
{
OrderSelect(t1, SELECT_BY_POS, MODE_TRADES);
m = OrderType();p=OrderOpenPrice();l=OrderLots();if (m==OP_BUY){l=-l;}
if ((m==OP_BUY || m==OP_SELL) && OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
np=np+l*p;
f=f+l;
}
}
if (f>0) np=NormalizeDouble(MathAbs(np/f), Digits);
// Print(np);
return (np);
}
double CalculateProfit(int mn)
{
double Profit=0;
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=mn)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
Profit=Profit+OrderProfit();
}
}
return(Profit);
}
int Close0()
{
double nf=nulfunc(mn);
double p=CalculateProfit(mn);
if (p>0 && nf+locprofit*Point<Bid) CloseOrders(mn);
if (p>0 && nf-locprofit*Point>Ask) CloseOrders(mn);
}
int CloseE0()
{
int nloc=locprofit-locprofitexpo*MyOrdersTotal(mn)-2;
double nf=nulfunc(mn);
double p=CalculateProfit(mn);
if (p>0 && nf+nloc*Point<Bid) CloseOrders(mn);
if (p>0 && nf-nloc*Point>Ask) CloseOrders(mn);
}
int CloseP()
{
double p=CalculateProfit(mn);
if (p>profit) CloseOrders(mn);
}
int CloseRun()
{
double p=CalculateProfit(mn);
if (p>0) CloseOrders(mn);
}
//+------------------------------------------------------------------+
//| ÒÐÅÉËÈÍÃ KillLoss |
//| Ïðèìåíÿåòñÿ íà ó÷àñòêå ëîññîâ. Ñóòü: ñòîïëîññ äâèæåòñÿ íàâñòðå÷ó |
//| êóðñó ñî ñêîðîñòüþ äâèæåíèÿ êóðñà õ êîýôôèöèåíò (dSpeedCoeff). |
//| Ïðè ýòîì êîýôôèöèåíò ìîæíî "ïðèâÿçàòü" ê ñêîðîñòè óâåëè÷åíèÿ |
//| óáûòêà - òàê, ÷òîáû ïðè áûñòðîì ðîñòå ëîññà ïîòåðÿòü ìåíüøå. Ïðè |
//| êîýôôèöèåíòå = 1 ñòîïëîññ ñðàáîòàåò ðîâíî ïîñðåäèíå ìåæäó óðîâ- |
//| íåì ñòîïëîññà è êóðñîì íà ìîìåíò çàïóñêà ôóíêöèè, ïðè êîýôô.>1 |
//| òî÷êà âñòðå÷è êóðñà è ñòîïëîññà áóäåò ñìåùåíà â ñòîðîíó èñõîä- |
//| íîãî ïîëîæåíèÿ êóðñà, ïðè êîýôô.<1 - íàîáîðîò, áëèæå ê èñõîäíî- |
//| ìó ñòîïëîññó. I_D / Þðèé Äçþáàí http://www.mymmk.com/ |
//+------------------------------------------------------------------+
void KillLoss(int iTicket,double dSpeedCoeff)
{
// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) || (dSpeedCoeff<0.1))
{
//Print("Òðåéëèíã ôóíêöèåé KillLoss() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
return(0);
}
double dStopPriceDiff; // ðàññòîÿíèå (ïóíêòîâ) ìåæäó êóðñîì è ñòîïëîññîì
double dToMove; // êîë-âî ïóíêòîâ, íà êîòîðîå ñëåäóåò ïåðåìåñòèòü ñòîïëîññ
// òåêóùèé êóðñ
double dBid = MarketInfo(OrderSymbol(),MODE_BID);
double dAsk = MarketInfo(OrderSymbol(),MODE_ASK);
// òåêóùåå ðàññòîÿíèå ìåæäó êóðñîì è ñòîïëîññîì
if (OrderType()==OP_BUY) dStopPriceDiff = dBid - OrderStopLoss();
if (OrderType()==OP_SELL) dStopPriceDiff = (OrderStopLoss() + MarketInfo(OrderSymbol(),MODE_SPREAD)*MarketInfo(OrderSymbol(),MODE_POINT)) - dAsk;
// ïðîâåðÿåì, åñëè òèêåò != òèêåòó, ñ êîòîðûì ðàáîòàëè ðàíüøå, çàïîìèíàåì òåêóùåå ðàññòîÿíèå ìåæäó êóðñîì è ñòîïëîññîì
if (GlobalVariableGet("zeticket")!=iTicket)
{
GlobalVariableSet("sldiff",dStopPriceDiff);
GlobalVariableSet("zeticket",iTicket);
}
else
{
// èòàê, ó íàñ åñòü êîýôôèöèåíò óñêîðåíèÿ èçìåíåíèÿ êóðñà
// íà êàæäûé ïóíêò, êîòîðûé ïðîõîäèò êóðñ â ñòîðîíó ëîññà,
// ìû äîëæíû ïåðåìåñòèòü ñòîïëîññ åìó íà âñòðå÷ó íà dSpeedCoeff ðàç ïóíêòîâ
// (íàïðèìåð, åñëè ëîññ óâåëè÷èëñÿ íà 3 ïóíêòà çà òèê, dSpeedCoeff = 1.5, òî
// ñòîïëîññ ïîäòÿãèâàåì íà 3 õ 1.5 = 4.5, îêðóãëÿåì - 5 ï. Åñëè ïîäòÿíóòü íå
// óäà¸òñÿ (ñëèøêîì áëèçêî), íè÷åãî íå äåëàåì.
// Print("dStopPriceDiff: ",dStopPriceDiff,", sldiff: ",GlobalVariableGet("sldiff"));
// êîë-âî ïóíêòîâ, íà êîòîðîå ïðèáëèçèëñÿ êóðñ ê ñòîïëîññó ñ ìîìåíòà ïðåäûäóùåé ïðîâåðêè (òèêà, ïî èäåå)
dToMove = (GlobalVariableGet("sldiff") - dStopPriceDiff) / MarketInfo(OrderSymbol(),MODE_POINT);
// çàïèñûâàåì íîâîå çíà÷åíèå, íî òîëüêî åñëè îíî óìåíüøèëîñü
if (dStopPriceDiff<GlobalVariableGet("sldiff"))
GlobalVariableSet("sldiff",dStopPriceDiff);
// äàëüøå äåéñòâèÿ íà ñëó÷àé, åñëè ðàññòîÿíèå óìåíüøèëîñü (ò.å. êóðñ ïðèáëèçèëñÿ ê ñòîïëîññó, óáûòîê ðàñòåò)
if (dToMove>0)
{
// ñòîïëîññ, ñîîòâåòñòâåííî, íóæíî òàêæå ïåðåäâèíóòü íà òàêîå æå ðàññòîÿíèå, íî ñ ó÷åòîì êîýôô. óñêîðåíèÿ
dToMove = MathRound(dToMove * dSpeedCoeff) * MarketInfo(OrderSymbol(),MODE_POINT);
// Print("dToMove: ",dToMove);
// òåïåðü ïðîâåðèì, ìîæåì ëè ìû ïîäòÿíóòü ñòîïëîññ íà òàêîå ðàññòîÿíèå
if (OrderType()==OP_BUY)
{
if (dBid - (OrderStopLoss() + dToMove)>MarketInfo(OrderSymbol(),MODE_STOPLEVEL)* MarketInfo(OrderSymbol(),MODE_POINT))
OrderModify(iTicket,OrderOpenPrice(),OrderStopLoss() + dToMove,OrderTakeProfit(),OrderExpiration());
}
if (OrderType()==OP_SELL)
{
if ((OrderStopLoss() - dToMove) - dAsk>MarketInfo(OrderSymbol(),MODE_STOPLEVEL) * MarketInfo(OrderSymbol(),MODE_POINT))
OrderModify(iTicket,OrderOpenPrice(),OrderStopLoss() - dToMove,OrderTakeProfit(),OrderExpiration());
}
}
}
}
int Tral()
{
if (Ask>TrailingStop*Point) // öåíà óøëà ââåðõ
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
int mode = OrderType();
if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue;
if (mode==OP_BUY && OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
if (Bid-OrderStopLoss()>TrailingStop*Point+onepoint*Point)
{
OrderModify(OrderTicket(),Bid,Bid-TrailingStop*Point,OrderTakeProfit(),0,Green);return(0);
}
}
}// for
}//Ask
if (Bid<TrailingStop*Point) // öåíà óøëà âíèç
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue;
if (mode==OP_SELL && OrderMagicNumber() == mn && OrderSymbol()==Symbol())
{
if (OrderStopLoss()-Ask>TrailingStop*Point+onepoint*Point)
{
OrderModify(OrderTicket(),Ask,Ask+TrailingStop*Point,OrderTakeProfit(),0,Red);return(0);
}
}
}// for
}//Bid
}
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
---