Orders Execution
0
Views
0
Downloads
0
Favorites
cm-rollback
//+------------------------------------------------------------------+
//| Copyright © 2015, Vladimir Hlystov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, http://cmillion.ru"
#property link "cmillion@narod.ru"
#property version "1.00"
#property strict
//-------------------------------------------------------------------
extern double Lot = 0.01;
extern double K_Martin = 1.0; // Óìíîæåíèå ïîñëåäóþùèõ ëîòîâ
extern double Sum_Lot = 0.01; // Äîáàâêà ïîñëåäóþùèõ ëîòîâ
extern double MaxLot = 1.00; // Ìàêñèìàëüíûé ëîò
extern int TrailingStart= 150;
extern int TrailingStop = 50;
extern int Magic = 0;
extern bool DrawInfo = true; // Âûâîä èíôîðìàöèè íà ýêðàí
extern color text_color = Aqua; // Öâåò âûâîäà èíôîðìàöèè
extern int DigitsLot = 2; // Îêðóãëåíèå ëîòîâ îðäåðîâ 1- äåñÿòûå (0.1) 2 ñîòûå (0.01)
extern int slippage = 3;
//-------------------------------------------------------------------
string AC;
//-------------------------------------------------------------------
void OnTick()
{
if(!IsTradeAllowed())
{
DrawLABEL("Òîðãîâëÿ",1,0,0,Red,"Òîðãîâëÿ çàïðåùåíà");
return;
}
else DrawLABEL("Òîðãîâëÿ",1,0,0,Lime,"Òîðãîâëÿ ðàçðåøåíà");
//---
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(TrailingStop<STOPLEVEL) TrailingStop=(int)STOPLEVEL;
//---
double OL=0,LB=0,LS=0,price_b=0,price_s=0;
double OSL,OTP,OOP,SL,Profit=0,ProfitB=0,ProfitS=0,MaxLotBuy=0,MaxLotSell=0;
int i,b=0,s=0,tip;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
OL=OrderLots();
if(tip==OP_BUY)
{
price_b+= OOP*OL;
ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
b++;
LB+=OL;
if(MaxLotBuy<OL || MaxLotBuy==0) MaxLotBuy=OL;
}
if(tip==OP_SELL)
{
price_s+= OOP*OL;
ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
s++;
LS+=OL;
if(MaxLotSell<OL || MaxLotSell==0) MaxLotSell=OL;
}
}
}
}
//---
Profit=ProfitB+ProfitS;
//---
if(DrawInfo)
{
ObjectDelete("infoÁåçóáûòîê Buy");
ObjectDelete("infoÁåçóáûòîê Sell");
ObjectDelete("info Áåçóáûòîê Buy");
ObjectDelete("info Áåçóáûòîê Sell");
}
double NLb=0,NLs=0;
if(b>0)
{
NLb=NormalizeDouble(price_b/LB+TrailingStart*Point/b,Digits);
if(DrawInfo)
{
ObjectCreate("infoÁåçóáûòîê Buy",OBJ_ARROW,0,Time[0],NLb,0,0,0,0);
ObjectSet("infoÁåçóáûòîê Buy",OBJPROP_ARROWCODE,6);
ObjectSet("infoÁåçóáûòîê Buy",OBJPROP_COLOR,Blue);
}
}
if(s>0)
{
NLs=NormalizeDouble(price_s/LS-TrailingStart*Point/s,Digits);
if(DrawInfo)
{
ObjectCreate("infoÁåçóáûòîê Sell",OBJ_ARROW,0,Time[0],NLs,0,0,0,0);
ObjectSet("infoÁåçóáûòîê Sell",OBJPROP_ARROWCODE,6);
ObjectSet("infoÁåçóáûòîê Sell",OBJPROP_COLOR,Red);
}
}
//---
if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(SL>OSL && SL>NLb)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
}
}
if(tip==OP_SELL)
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
if((SL<OSL || OSL==0) && SL<NLs)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
}
}
}
}
}
}
//---
double AB=AccountBalance();
//---
DrawLABEL("Balance",1,5,20,text_color,StringConcatenate("Balance ",DoubleToStr(AB,2),AC));
DrawLABEL("Equity",1,5,40,text_color,StringConcatenate("Equity ",DoubleToStr(AccountEquity(),2),AC));
DrawLABEL("FreeMargin",1,5,60,text_color,StringConcatenate("FreeMargin ",DoubleToStr(AccountFreeMargin(),2),AC));
DrawLABEL("Take",1,5,80,Color(Profit>0,Lime,Red),StringConcatenate("Profit ",DoubleToStr(Profit,2),AC));
DrawLABEL("Âñåãî ëîò Buy",1,5,100,Color(ProfitB>0,Lime,Red),StringConcatenate("Buy ",b," | ",DoubleToStr(LB,DigitsLot)," | ",DoubleToStr(ProfitB,2),AC));
DrawLABEL("Âñåãî ëîò Sell",1,5,120,Color(ProfitS>0,Lime,Red),StringConcatenate("Sell ",s," | ",DoubleToStr(LS,DigitsLot)," | ",DoubleToStr(ProfitS,2),AC));
//---
double lot=NormalizeDouble(Lot*MathPow(K_Martin,MathMax(b,s))+Sum_Lot*MathMax(b,s),2);
if(lot>MaxLot) return;
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)+AccountFreeMarginCheck(Symbol(),OP_BUY,lot)>0)
if(b==0 || s==0)
{
if(OrderSend(Symbol(),OP_BUY,lot,NormalizeDouble(Ask,Digits),slippage,0,0,NULL,Magic,0,CLR_NONE)==-1)
Print("Îøèáêà ",GetLastError()," îòêðûòèÿ îðäåðà ");
//---
if(OrderSend(Symbol(),OP_SELL,lot,NormalizeDouble(Bid,Digits),slippage,0,0,NULL,Magic,0,CLR_NONE)==-1)
Print("Îøèáêà ",GetLastError()," îòêðûòèÿ îðäåðà ");
}
return;
}
//------------------------------------------------------------------
void OnDeinit(const int reason)
{
if(DrawInfo && !IsTesting())
{
ObjectsDeleteAll(0);
}
}
//-------------------------------------------------------------------
void DrawLABEL(string name,int CORNER,int X,int Y,color clr,string Name)
{
if(!DrawInfo) return;
if(ObjectFind(name)!=-1) ObjectDelete(name);
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet(name,OBJPROP_CORNER,CORNER);
ObjectSet(name,OBJPROP_XDISTANCE,X);
ObjectSet(name,OBJPROP_YDISTANCE,Y);
ObjectSetText(name,Name,12,"Arial",clr);
}
//+------------------------------------------------------------------+
int OnInit()
{
AC=StringConcatenate(" ",AccountCurrency());
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
color Color(bool P,color a,color b)
{
if(P) return(a);
else return(b);
}
//------------------------------------------------------------------
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
---