Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e_Breakeven_v4
//+------------------------------------------------------------------+
//| Óñòàíîâèòü Áåçóáûòîê.mq4 |
//| Copyright © 2011, Corp. |
//| todem5@mail.ru |
//+------------------------------------------------------------------+
#property link "blog forex"
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
extern string a1 ="æåëàòåëüíî ÷òîá Delta=TrailingStop";
extern int Delta =20;
extern int MG =0;
extern int TrailingStop=18;
extern int TrailingStep=3;
bool bezubitok = true;
color clModifyBuy = Red; // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
color clModifySell = Red; // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
bool UseSound = True;
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
string SoundSuccess = "ok.wav"; // Çâóê óñïåõà
string SoundError = "timeout.wav"; // Çâóê îøèáêè
int NumberOfTry = 3;
int B,S,BS,SS;
double Pr, Uroven,marketask,marketbid;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int init()
{ // ïðîâåðêà öèôð ïîñëå çàïÿòîé
if (TrailingStop<MarketInfo(Symbol(),MODE_STOPLEVEL))
{
TrailingStop=MarketInfo(Symbol(),MODE_STOPLEVEL);
}
}
int OrdCon(int nap, int MGV)
{
int result=0;
for (int i=0;i<OrdersTotal();i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==nap && OrderSymbol() == Symbol() && OrderMagicNumber() == MGV) {
result=result+1; // îòêðûò îðäåð áàéñòîï
}
}
return(result); // 0 means we have no trades
}
int Flag() {
int z1=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != MG) continue;
if (OrderType()<2) {
if (OrderProfit()<0) z1++;
}
}
}
return(z1);
}
int start()
{
BS=OrdCon(OP_BUYSTOP, MG);
SS=OrdCon(OP_SELLSTOP, MG);
B=OrdCon(OP_BUY, MG);
S=OrdCon(OP_SELL, MG);
Pr =GetProfit(Symbol(), -1, MG);
if ((B>=1 || S>=1) && Pr>0) {
Uroven=BEZ();
marketask=MarketInfo(Symbol(),MODE_ASK);
marketbid=MarketInfo(Symbol(),MODE_BID);
if (B>S && Uroven<=marketbid) {SimpleTrailing(Symbol(),MG);}
if (S>B && Uroven>=marketask) {SimpleTrailing(Symbol(),MG);}
}
if (B>0 && S==0 && Flag()==0) {SimpleTrailing(Symbol(),MG);}
if (S>0 && B==0 && Flag()==0) {SimpleTrailing(Symbol(),MG);}
if ((bezubitok) && (B>=1 || S>=1) && Pr<-0.1) {BEZmain();}
return(0);
}
//+----------------------------Ôóíêöèÿ --------------------------------------+
//+---------------- Ôóíêöèÿ ïîäñ÷¸òà áåçóáûòêà -------------------------------------------+
void BEZmain() {
double M,MM,Prof,LL=0;
int r,ret;
int Spr= MarketInfo(Symbol(),MODE_SPREAD);
for( r=0;r<OrdersTotal();r++) //
{
if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==Symbol() )
{
if (OrderType()<=2 )Prof=Prof+OrderProfit()+OrderSwap();
if (OrderType()==OP_BUY) LL=LL+OrderLots();
if (OrderType()==OP_SELL) LL=LL-OrderLots();
}}
M=BEZ();//Óðîâåíü áåçóáûòêà äëÿ BUY
Comment("Óðîâåíü áåçóáûòêà ",DoubleToStr(M,Digits),"+",Delta,"\n","Íàäî ïðîéòè ",DoubleToStr(MathAbs(M-Bid)/Point,0)," Ëîò=",LL," ëîò",
"\n","Îáùèé ïðîôèò ",Prof);
if (LL==0 && B>0 && S>0)//Åñëè áîëüøå SELL Òî áåçóáûòîê - Delta íèæå Bid è íàîáîðîò
{
for( r=0;r<OrdersTotal();r++) //
{
if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==Symbol() )
{
if (OrderType()<2 && OrderTakeProfit()!=NormalizeDouble(MM,Digits))
ModifyOrder(-1,0,0);
}}}
if (LL<0)//Åñëè áîëüøå SELL Òî áåçóáûòîê - Delta íèæå Bid è íàîáîðîò
{
MM=M-Delta*Point; // Åñëè áîëüøå SELL
for( r=0;r<OrdersTotal();r++) //
{
if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==Symbol() )
{ //Äëÿ BUY-Ñåðèè
if (OrderType()==OP_BUY && OrderTakeProfit()!=NormalizeDouble(MM,Digits))
ModifyOrder(-1,NormalizeDouble(MM,Digits),0);
//Äëÿ SELL-Ñåðèè
if (OrderType()==OP_SELL && OrderTakeProfit()!=NormalizeDouble(MM,Digits))
ModifyOrder(-1,0,0);
}}}
if (LL>0)//Åñëè áîëüøå BUY Òî áåçóáûòîê + Delta âûøå Bid
{
MM=M+Delta*Point; // Åñëè áîëüøå BUY
for( r=0;r<OrdersTotal();r++) //
{
if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==Symbol() )
{ //Äëÿ BUY-Ñåðèè
if (OrderType()==OP_BUY && OrderTakeProfit()!=NormalizeDouble(MM,Digits))
ModifyOrder(-1,0,0);
//Äëÿ SELL-Ñåðèè
if (OrderType()==OP_SELL && OrderTakeProfit()!=NormalizeDouble(MM,Digits))
ModifyOrder(-1,NormalizeDouble(MM,Digits),0);
}
}}
}
double BEZ() {
int Sp= MarketInfo(Symbol(),MODE_SPREAD);
double B2_B=0,B2_S=0,B2_LB=0,B2_LS=0,BSw=0,SSw=0;
for(int b2=0;b2<OrdersTotal();b2++) //
{
if(OrderSelect(b2,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUY)
{
B2_B=((B2_B*B2_LB)+(OrderOpenPrice()*OrderLots()))/(B2_LB+OrderLots());
B2_LB=B2_LB+OrderLots();
BSw=BSw+OrderSwap();
}
if (OrderType()==OP_SELL)
{
B2_S=((B2_S*B2_LS)+(OrderOpenPrice()*OrderLots()))/(B2_LS+OrderLots());
B2_LS=B2_LS+OrderLots();
SSw=SSw+OrderSwap();
}
}}
double M2B=0,M2S=0 ,M;
if (B2_LB>B2_LS) // Èä¸ì ââåðõ
{
for(int J2=0;J2<10000;J2++)
{
M2B=J2*B2_LB*10;
M2S=((B2_B-B2_S+0*Point)/Point+J2)*(B2_LS*(-10));
if (M2B+M2S+BSw+SSw>=0)
{
M=NormalizeDouble(B2_B+J2*Point,Digits);
break;
}}}
if (B2_LS>B2_LB) // Èä¸ì âíèç
{
for(int J3=0;J3<10000;J3++)
{
M2S=J3*B2_LS*10;
M2B=((B2_B-B2_S+0*Point)/Point+J3)*(B2_LB*(-10));
if (M2S+M2B+BSw+SSw>=0)
{
M=NormalizeDouble(B2_S-J3*Point,Digits);
break;
}}}
//----
return(M);
}
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
if ((!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(SoundSuccess); break;
} else {
er=GetLastError();
if (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Sleep(1000*10);
}
}
}
}
color IIFc(bool condition, color ifTrue, color ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
double GetProfit(string sy="", int op=-1, int mn=-1)
{
double p=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
//if (dt<OrderCloseTime()) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
//}
}
}
}
}
}
return(p);
}
void SimpleTrailing(string sy="", int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>TrailingStop*po) {
if (OrderStopLoss()<pp-(TrailingStop+TrailingStep-1)*po) {
ModifyOrder(-1, pp-TrailingStop*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>TrailingStop*po) {
if (OrderStopLoss()>pp+(TrailingStop+TrailingStep-1)*po || OrderStopLoss()==0) {
ModifyOrder(-1, pp+TrailingStop*po, -1);
}
}
}
}
}
}
}
}
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
---