Hi there,
I try to find some Coder that may interested in Re-Coding my Trade-Manager-EA which I have paid for.
A formely very known senior-member ROOICOOL(also a very fine Programmer) have coded this EA for me.
But he was no longer making some changes in the EA.
So there are 2-3 features that work not porperly as they should be.
Here is the Code:
#property copyright "Coded by rooicol
"
#import "stdlib.ex4"
string ErrorDescription(int ErrorCode);
extern int DefaultSL=400;
extern bool HighLowSL=True;
extern int BarCount=3;
extern int Gap=100;
extern int HighLowSafetyPoints=100;
extern int DefaultTP=500;
extern int DefaultCPPercent=50;
extern bool HardSLTPActive=False;
extern int HardSLTPDistance=400;
extern int AutoBEPoints=200;
extern bool TrendLineSL=False;
extern int TrendLineSLDistance=40;
extern bool MaintainSession=False;
extern int MyMagicNumber=555;
extern bool ObjectOrders=True;
extern bool ObjectStopOrders=False;
extern int SendMultipleOrders=1;
extern int WingdingObjectOrders=251;
extern int DistancePendingOrder=40;
extern double Lots=0;
extern double RiskPercent=2;
extern double CommissionPerLot=0;
extern int TradeObjectsFontSize=8;
extern int TradeWingDingFontSize=35;
extern int TradeObjectsXDistance=10;
extern int TradeObjectsYDistance=-34;
extern int TradeObjectsXSpace=30;
extern int TradeObjectsYSpace=28;
extern bool DeleteOnly=True;
extern bool ShowConfirm=False;
extern color BuyMarketColour=Green;
extern color BuyLimitColour=Green;
extern color BuyStopColour=Green;
extern color CloseColour=Gray;
extern color SellMarketColour=Maroon;
extern color SellLimitColour=Maroon;
extern color SellStopColour=Maroon;
extern int LineStyleEntry=STYLE_SOLID;
extern int LineStyleSL=STYLE_DASH;
extern int LineStyleTP=STYLE_DOT;
extern int LineStyleCP=STYLE_DASHDOT;
extern color Colour1=Orange;
extern color Colour2=DarkGray;
extern color Colour3=Lime;
extern color Colour4=Green;
extern color Colour5=Blue;
extern color PendingColour=SkyBlue;
extern bool UseWingDings=False;
extern int OrderLineThickness=5;
extern int OrderLineLength=10;
extern color EntryColour=Blue;
extern color SLColour=Orange;
extern color TPColour=DarkGray;
extern color CPColour=Lime;
extern int Wingding=74;
extern bool RunInfiniteLoop=False;
extern int RunIntervalMS=100;
bool FirstRun=True;
bool AutoBE=False;
int start()
{
while(IsStopped()==False)
{
RefreshRates();
if(MyMagicNumber==0)
Comment("MyMagicNumber must not be 0!");
//---------DELETE HISTORY TRADE LEVELS------------------------------------------
for(int i=OrdersHistoryTotal()-10; i<OrdersHistoryTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int TicketNo=OrderTicket();
ObjectDelete("Trade Management EA: Line Entry "+TicketNo);
ObjectDelete("Trade Management EA: Line SL "+TicketNo);
ObjectDelete("Trade Management EA: Line TP "+TicketNo);
ObjectDelete("Trade Management EA: Line CP "+TicketNo);
ObjectDelete("Trade Management EA: Distance Entry "+TicketNo);
ObjectDelete("Trade Management EA: Distance SL "+TicketNo);
ObjectDelete("Trade Management EA: Distance TP "+TicketNo);
ObjectDelete("Trade Management EA: Distance CP "+TicketNo);
ObjectDelete("Trade Management EA: Trend Line "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No Entry "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No SL "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No TP "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No CP "+TicketNo);
ObjectDelete("Trade Management EA: Wingding Entry "+TicketNo);
ObjectDelete("Trade Management EA: Wingding SL "+TicketNo);
ObjectDelete("Trade Management EA: Wingding TP "+TicketNo);
ObjectDelete("Trade Management EA: Wingding CP "+TicketNo);
GlobalVariableDel("Trade Management EA: Line CP "+TicketNo);
}
//---------CREATE TRADE LEVELS------------------------------------------
int j=0;
static bool TrailActive;
for(i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()!=MyMagicNumber)
{
j++;
TicketNo=OrderTicket();
string TicketNoStr=DoubleToStr(TicketNo,0);
switch(OrderType())
{
case 0 : int Direction=1; double Price=Bid; bool Pending=False; break;
case 2 :
case 4 : Direction=1; Price=Bid; double PendingPrice=Ask; Pending=True; break;
case 1 : Direction=-1; Price=Ask; Pending=False; break;
case 3 :
case 5 : Direction=-1; Price=Ask; PendingPrice=Bid; Pending=True;
}
if(j==1)
color Colour=Colour1;
if(j==2)
Colour=Colour2;
if(j==3)
Colour=Colour3;
if(j==4)
Colour=Colour4;
if(j>=5)
Colour=Colour5;
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Entry "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),OrderOpenPrice());
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_STYLE,LineStyleEntry);
double LineEntryPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Entry "+TicketNo,OBJ_TEXT,0,Time[80],LineEntryPrice);
ObjectSetText("Trade Management EA: Ticket No Entry "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No Entry "+TicketNo,0,Time[80],LineEntryPrice);
}
else
{
ObjectCreate("Trade Management EA: Line Entry "+TicketNo,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_COLOR,EntryColour);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_RAY,False);
LineEntryPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Entry "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),OrderOpenPrice());
//ObjectSetText("Trade Management EA: Wingding Entry "+TicketNo,CharToStr(Wingding),10,"WingDings",EntryColour);
//ObjectMove("Trade Management EA: Wingding Entry "+TicketNo,0,OrderOpenTime(),LineEntryPrice);
}
if(OrderType()<=1)
{
ObjectMove("Trade Management EA: Line Entry "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
ObjectMove("Trade Management EA: Line Entry "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
}
if(OrderType()>=2)
{
ObjectMove("Trade Management EA: Line Entry "+TicketNo,0,OrderOpenTime(),LineEntryPrice);
ObjectMove("Trade Management EA: Line Entry "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineEntryPrice);
}
if(Pending==True)
double PriceEntry=PendingPrice;
else
PriceEntry=Price;
int EntryDistance=((PriceEntry-LineEntryPrice)*Direction)/Point;
string EntryDistanceStr=DoubleToStr(EntryDistance,0);
if(UseWingDings==True)
color DistanceEntryColour=EntryColour;
else
DistanceEntryColour=Colour;
ObjectCreate("Trade Management EA: Distance Entry "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineEntryPrice);
ObjectSetText("Trade Management EA: Distance Entry "+TicketNo,EntryDistanceStr,13,"Arial",DistanceEntryColour);
ObjectMove("Trade Management EA: Distance Entry "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineEntryPrice);
if(HighLowSL==True)
{
if(Direction==1)
{
double LineSLInitialPrice=Low[iLowest(Symbol(),Period(),MODE_LOW,BarCount)]-(Gap*Point);
if(LineSLInitialPrice>(OrderOpenPrice()-(HighLowSafetyPoints*Point)))
LineSLInitialPrice=(OrderOpenPrice()-(HighLowSafetyPoints*Point));
}
if(Direction==-1)
{
LineSLInitialPrice=High[iHighest(Symbol(),Period(),MODE_HIGH,BarCount)]+(Gap*Point);
if(LineSLInitialPrice<(OrderOpenPrice()+(HighLowSafetyPoints*Point)))
LineSLInitialPrice=(OrderOpenPrice()+(HighLowSafetyPoints*Point));
}
}
else
LineSLInitialPrice=OrderOpenPrice()-(Direction*DefaultSL*Point);
if(OrderStopLoss()!=0)
LineSLInitialPrice=OrderStopLoss()+(HardSLTPDistance*Point*Direction);
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line SL "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineSLInitialPrice);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_STYLE,LineStyleSL);
double LineSLPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line SL "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
ObjectCreate("Trade Management EA: Ticket No SL "+TicketNo,OBJ_TEXT,0,Time[80],LineSLPrice);
ObjectSetText("Trade Management EA: Ticket No SL "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No SL "+TicketNo,0,Time[80],LineSLPrice);
}
else
{
ObjectCreate("Trade Management EA: Line SL "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineSLInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineSLInitialPrice);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_COLOR,SLColour);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_RAY,False);
LineSLPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line SL "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineSLPrice);
//ObjectCreate("Trade Management EA: Wingding SL "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineSLInitialPrice);
//ObjectSetText("Trade Management EA: Wingding SL "+TicketNo,CharToStr(Wingding),10,"WingDings",SLColour);
//ObjectMove("Trade Management EA: Wingding SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
}
double SLDistance=((LineSLPrice-OrderOpenPrice())*Direction)/(Point);
string SLDistanceStr=DoubleToStr(SLDistance,0);
if(UseWingDings==True)
color DistanceSLColour=SLColour;
else
DistanceSLColour=Colour;
ObjectCreate("Trade Management EA: Distance SL "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineSLPrice);
ObjectSetText("Trade Management EA: Distance SL "+TicketNo,SLDistanceStr,13,"Arial",DistanceSLColour);
ObjectMove("Trade Management EA: Distance SL "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineSLPrice);
if(TrendLineSL==True&&OrderType()<=1)
{
if(OrderType()==0)
{
double TrendLinePrice1=Low[0]-(250*Point);
double TrendLinePrice2=Low[0]-(75*Point);
}
if(OrderType()==1)
{
TrendLinePrice1=High[0]+(250*Point);
TrendLinePrice2=High[0]+(75*Point);
}
ObjectCreate("Trade Management EA: Trend Line "+TicketNo,OBJ_TREND,0,Time[30],TrendLinePrice1,Time[0],TrendLinePrice2);
ObjectSet("Trade Management EA: Trend Line "+TicketNo,OBJPROP_RAY,True);
double TrendLineCurrentValue=ObjectGetValueByShift("Trade Management EA: Trend Line "+TicketNo,0)-(TrendLineSLDistance*Point*Direction);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),TrendLineCurrentValue);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],TrendLineCurrentValue);
}
if(TrendLineSL==False)
ObjectDelete("Trade Management EA: Trend Line "+TicketNo);
if(AutoBE==True&&OrderType()<=1&&EntryDistance>=AutoBEPoints)
{
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
}
if(TrailActive==True&&OrderType()<=1)
{
if(OrderType()==0)
double TrailMovePrice=iLow(Symbol(),240,1)-(Gap*Point);
if(OrderType()==1)
TrailMovePrice=iHigh(Symbol(),240,1)+(Gap*Point);
if((TrailMovePrice-LineSLPrice)*Direction>(Point/2))
{
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),TrailMovePrice);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],TrailMovePrice);
}
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),OrderOpenPrice()+(Point*10000*Direction));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice()+(Point*10000*Direction));
}
if(OrderTakeProfit()!=0)
double LineTPInitialPrice=OrderTakeProfit()-(HardSLTPDistance*Point*Direction);
else
LineTPInitialPrice=OrderOpenPrice()+(Direction*DefaultTP*Point);
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line TP "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineTPInitialPrice);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_STYLE,LineStyleTP);
double LineTPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line TP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
ObjectCreate("Trade Management EA: Ticket No TP "+TicketNo,OBJ_TEXT,0,Time[80],LineTPPrice);
ObjectSetText("Trade Management EA: Ticket No TP "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No TP "+TicketNo,0,Time[80],LineTPPrice);
}
else
{
ObjectCreate("Trade Management EA: Line TP "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineTPInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineTPInitialPrice);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_COLOR,TPColour);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_RAY,False);
LineTPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line TP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineTPPrice);
//ObjectCreate("Trade Management EA: Wingding TP "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineTPInitialPrice);
//ObjectSetText("Trade Management EA: Wingding TP "+TicketNo,CharToStr(Wingding),10,"WingDings",TPColour);
//ObjectMove("Trade Management EA: Wingding TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
}
double TPDistance=((LineTPPrice-OrderOpenPrice())*Direction)/(Point);
string TPDistanceStr=DoubleToStr(TPDistance,0);
if(UseWingDings==True)
color DistanceTPColour=TPColour;
else
DistanceTPColour=Colour;
ObjectCreate("Trade Management EA: Distance TP "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineTPPrice);
ObjectSetText("Trade Management EA: Distance TP "+TicketNo,TPDistanceStr,13,"Arial",DistanceTPColour);
ObjectMove("Trade Management EA: Distance TP "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineTPPrice);
if(DefaultCPPercent>0)
{
double LineCPInitialPrice=GlobalVariableGet("Trade Management EA: Line CP "+TicketNo);
if(LineCPInitialPrice==0)
LineCPInitialPrice=LineTPPrice+(Direction*20*Point);
if(UseWingDings==false)
{
ObjectCreate("Trade Management EA: Line CP "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineCPInitialPrice);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_STYLE,LineStyleCP);
double LineCPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line CP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
ObjectCreate("Trade Management EA: Ticket No CP "+TicketNo,OBJ_TEXT,0,Time[80],LineCPPrice);
ObjectSetText("Trade Management EA: Ticket No CP "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No CP "+TicketNo,0,Time[80],LineCPPrice);
}
else
{
ObjectCreate("Trade Management EA: Line CP "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineCPInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineCPInitialPrice);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_COLOR,CPColour);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_RAY,False);
LineCPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line CP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
ObjectMove("Trade Management EA: Line CP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineCPPrice);
//ObjectCreate("Trade Management EA: Wingding CP "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineCPInitialPrice);
//ObjectSetText("Trade Management EA: Wingding CP "+TicketNo,CharToStr(Wingding),10,"WingDings",CPColour);
//ObjectMove("Trade Management EA: Wingding CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
}
double CPDistance=((LineCPPrice-OrderOpenPrice())*Direction)/(Point);
string CPDistanceStr=DoubleToStr(CPDistance,0);
if(UseWingDings==True)
color DistanceCPColour=CPColour;
else
DistanceCPColour=Colour;
ObjectCreate("Trade Management EA: Distance CP "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineCPPrice);
ObjectSetText("Trade Management EA: Distance CP "+TicketNo,CPDistanceStr,13,"Arial",DistanceCPColour);
ObjectMove("Trade Management EA: Distance CP "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineCPPrice);
GlobalVariableSet("Trade Management EA: Line CP "+TicketNo,LineCPPrice);
int ClosePercent=StrToDouble(ObjectDescription("Trade Management EA: Line CP "+TicketNo));
if(ClosePercent==0)
ObjectSetText("Trade Management EA: Line CP "+TicketNo,DoubleToStr(DefaultCPPercent,0));
}
else
{
ObjectDelete("Trade Management EA: Distance CP "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No CP "+TicketNo);
ObjectDelete("Trade Management EA: Line CP "+TicketNo);
GlobalVariableDel("Trade Management EA: Line CP "+TicketNo);
}
//---------MODIFY SL AND TP------------------------------------------
double LineSLPriceAdjusted=LineSLPrice-(Direction*HardSLTPDistance*Point);
double LineTPPriceAdjusted=LineTPPrice+(Direction*HardSLTPDistance*Point);
if(MathAbs(OrderOpenPrice()-LineEntryPrice)>(Point/2))
bool EntryDifference=True;
else
EntryDifference=False;
if(MathAbs(OrderStopLoss()-LineSLPriceAdjusted)>(Point/2))
bool SLDifference=True;
else
SLDifference=False;
if(MathAbs(OrderTakeProfit()-LineTPPriceAdjusted)>(Point/2))
bool TPDifference=True;
else
TPDifference=False;
if((HardSLTPActive==True&&(SLDifference==True||TPDifference==True))||(EntryDifference==True&&OrderType()>=2))
{
OrderModify(TicketNo,LineEntryPrice,LineSLPriceAdjusted,LineTPPriceAdjusted,0);
Sleep(250);
}
OrderSelect(i,SELECT_BY_POS);
RefreshRates();
//---------EA CLOSE------------------------------------------
if(((Price-LineSLPrice)*Direction)<(Point/2))
bool SLHit=True;
else
SLHit=False;
if(((LineTPPrice-Price)*Direction)<(Point/2))
bool TPHit=True;
else
TPHit=False;
if(((LineCPPrice-Price)*Direction)<(Point/2))
bool CPHit=True;
else
CPHit=False;
if(((HardSLTPActive==True&&HardSLTPDistance>0)||(HardSLTPActive==False))&&SLHit==True&&OrderType()<=1)
RunClose(TicketNo,LineSLPrice,OrderLots(),"EA CLOSE");
if(((HardSLTPActive==True&&HardSLTPDistance>0)||(HardSLTPActive==False))&&TPHit==True&&OrderType()<=1)
RunClose(TicketNo,LineTPPrice,OrderLots(),"EA CLOSE");
if(DefaultCPPercent>0&&CPHit==True&&OrderType()<=1)
{
double LotPoint=MarketInfo(Symbol(),MODE_LOTSTEP);
double CloseLots=MathRound((OrderLots()*ClosePercent*0.01)/LotPoint)*LotPoint;
RunClose(TicketNo,LineCPPrice,CloseLots,"EA CLOSE");
}
}
}
//---------PENDING ORDERS---------------------------------------------------------
for(i=0; i<10; i++)
{
double LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+i,OBJPROP_PRICE1),Digits);
if(LineBuyLimitPrice!=0)
{
ObjectMove("Trade Management EA: Line Buy Limit "+i,0,TimeCurrent(),LineBuyLimitPrice);
ObjectMove("Trade Management EA: Line Buy Limit "+i,1,Time[10],LineBuyLimitPrice);
ObjectMove("Trade Management EA: Ticket No Buy Limit "+i,0,Time[80],LineBuyLimitPrice);
//ObjectMove("Trade Management EA: Wingding Buy Limit "+i,0,TimeCurrent(),LineBuyLimitPrice);
double BuyLimitDistance=(Ask-LineBuyLimitPrice)/(Point);
string BuyLimitDistanceStr=DoubleToStr(BuyLimitDistance,0);
ObjectSetText("Trade Management EA: Distance Buy Limit "+i,BuyLimitDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Buy Limit "+i,0,Time[10],LineBuyLimitPrice);
if((Ask-LineBuyLimitPrice)<(Point/2))
{
SendBuyMarketOrder(True);
ObjectDelete("Trade Management EA: Line Buy Limit "+i);
ObjectDelete("Trade Management EA: Ticket No Buy Limit "+i);
ObjectDelete("Trade Management EA: Distance Buy Limit "+i);
ObjectDelete("Trade Management EA: Wingding Buy Limit "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Buy Limit "+i);
ObjectDelete("Trade Management EA: Distance Buy Limit "+i);
ObjectDelete("Trade Management EA: Wingding Buy Limit "+i);
}
double LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+i,OBJPROP_PRICE1),Digits);
if(LineBuyStopPrice!=0)
{
ObjectMove("Trade Management EA: Line Buy Stop "+i,0,TimeCurrent(),LineBuyStopPrice);
ObjectMove("Trade Management EA: Line Buy Stop "+i,1,Time[10],LineBuyStopPrice);
ObjectMove("Trade Management EA: Ticket No Buy Stop "+i,0,Time[80],LineBuyStopPrice);
//ObjectMove("Trade Management EA: Wingding Buy Stop "+i,0,TimeCurrent(),LineBuyStopPrice);
double BuyStopDistance=(LineBuyStopPrice-Ask)/(Point);
string BuyStopDistanceStr=DoubleToStr(BuyStopDistance,0);
ObjectSetText("Trade Management EA: Distance Buy Stop "+i,BuyStopDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Buy Stop "+i,0,Time[10],LineBuyStopPrice);
if((LineBuyStopPrice-Ask)<(Point/2))
{
SendBuyMarketOrder(True);
ObjectDelete("Trade Management EA: Line Buy Stop "+i);
ObjectDelete("Trade Management EA: Ticket No Buy Stop "+i);
ObjectDelete("Trade Management EA: Distance Buy Stop "+i);
ObjectDelete("Trade Management EA: Wingding Buy Stop "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Buy Stop "+i);
ObjectDelete("Trade Management EA: Distance Buy Stop "+i);
ObjectDelete("Trade Management EA: Wingding Buy Stop "+i);
}
double LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+i,OBJPROP_PRICE1),Digits);
if(LineSellLimitPrice!=0)
{
ObjectMove("Trade Management EA: Line Sell Limit "+i,0,TimeCurrent(),LineSellLimitPrice);
ObjectMove("Trade Management EA: Line Sell Limit "+i,1,Time[10],LineSellLimitPrice);
ObjectMove("Trade Management EA: Ticket No Sell Limit "+i,0,Time[80],LineSellLimitPrice);
//ObjectMove("Trade Management EA: Wingding Sell Limit "+i,0,TimeCurrent(),LineSellLimitPrice);
double SellLimitDistance=(LineSellLimitPrice-Bid)/(Point);
string SellLimitDistanceStr=DoubleToStr(SellLimitDistance,0);
ObjectSetText("Trade Management EA: Distance Sell Limit "+i,SellLimitDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Sell Limit "+i,0,Time[10],LineSellLimitPrice);
if((LineSellLimitPrice-Bid)<(Point/2))
{
SendSellMarketOrder(True);
ObjectDelete("Trade Management EA: Line Sell Limit "+i);
ObjectDelete("Trade Management EA: Ticket No Sell Limit "+i);
ObjectDelete("Trade Management EA: Distance Sell Limit "+i);
ObjectDelete("Trade Management EA: Wingding Sell Limit "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Sell Limit "+i);
ObjectDelete("Trade Management EA: Distance Sell Limit "+i);
ObjectDelete("Trade Management EA: Wingding Sell Limit "+i);
}
double LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+i,OBJPROP_PRICE1),Digits);
if(LineSellStopPrice!=0)
{
ObjectMove("Trade Management EA: Line Sell Stop "+i,0,TimeCurrent(),LineSellStopPrice);
ObjectMove("Trade Management EA: Line Sell Stop "+i,1,Time[10],LineSellStopPrice);
ObjectMove("Trade Management EA: Ticket No Sell Stop "+i,0,Time[80],LineSellStopPrice);
//ObjectMove("Trade Management EA: Wingding Sell Stop "+i,0,TimeCurrent(),LineSellStopPrice);
double SellStopDistance=(Bid-LineSellStopPrice)/(Point);
string SellStopDistanceStr=DoubleToStr(SellStopDistance,0);
ObjectSetText("Trade Management EA: Distance Sell Stop "+i,SellStopDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Sell Stop "+i,0,Time[10],LineSellStopPrice);
if((Bid-LineSellStopPrice)<(Point/2))
{
SendSellMarketOrder(True);
ObjectDelete("Trade Management EA: Line Sell Stop "+i);
ObjectDelete("Trade Management EA: Ticket No Sell Stop "+i);
ObjectDelete("Trade Management EA: Distance Sell Stop "+i);
ObjectDelete("Trade Management EA: Wingding Sell Stop "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Sell Stop "+i);
ObjectDelete("Trade Management EA: Distance Sell Stop "+i);
ObjectDelete("Trade Management EA: Wingding Sell Stop "+i);
}
}
//---------ORDER OBJECTS---------------------------------------------------------
static int SIObjectOrders;
static int SITradeObjectsFontSize;
static int SITradeWingDingFontSize;
static int SITradeObjectsXDistance;
static int SITradeObjectsYDistance;
static int SITradeObjectsYSpace;
static int SIObjectStopOrders;
bool InputsChanged=False;
if(FirstRun==False)
{
if(SIObjectOrders!=ObjectOrders)
InputsChanged=True;
if(SITradeObjectsFontSize!=TradeObjectsFontSize)
InputsChanged=True;
if(SITradeWingDingFontSize!=TradeWingDingFontSize)
InputsChanged=True;
if(SITradeObjectsXDistance!=TradeObjectsXDistance)
InputsChanged=True;
if(SITradeObjectsYDistance!=TradeObjectsYDistance)
InputsChanged=True;
if(SITradeObjectsYSpace!=TradeObjectsYSpace)
InputsChanged=True;
if(SIObjectStopOrders!=ObjectStopOrders)
InputsChanged=True;
}
SIObjectOrders=ObjectOrders;
SITradeObjectsFontSize=TradeObjectsFontSize;
SITradeWingDingFontSize=TradeWingDingFontSize;
SITradeObjectsXDistance=TradeObjectsXDistance;
SITradeObjectsYDistance=TradeObjectsYDistance;
SITradeObjectsYSpace=TradeObjectsYSpace;
SIObjectStopOrders=ObjectStopOrders;
if(SendMultipleOrders<=0)
SendMultipleOrders=1;
if(ObjectOrders==True)
{
if(FirstRun==False&&InputsChanged==False)
{
int BuyMarketX=ObjectGet("Trade Management EA: Buy Market",OBJPROP_XDISTANCE);
int BuyMarketY=ObjectGet("Trade Management EA: Buy Market",OBJPROP_YDISTANCE);
int BuyMarketPresent=ObjectFind("Trade Management EA: Buy Market");
if(
(DeleteOnly==False&&(BuyMarketX!=TradeObjectsXDistance||BuyMarketY!=TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace))||
(DeleteOnly==True&&BuyMarketPresent!=0)
)
{
for(int k=0; k<SendMultipleOrders; k++)
SendBuyMarketOrder(False);
ObjectDelete("Trade Management EA: Buy Market");
}
int CloseX=ObjectGet("Trade Management EA: Close",OBJPROP_XDISTANCE);
int CloseY=ObjectGet("Trade Management EA: Close",OBJPROP_YDISTANCE);
int ClosePresent=ObjectFind("Trade Management EA: Close");
if(
(DeleteOnly==False&&(CloseX!=TradeObjectsXDistance||CloseY!=TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3)))||
(DeleteOnly==True&&ClosePresent!=0)
)
{
SendCloseOrder();
ObjectDelete("Trade Management EA: Close");
}
int SetBEX=ObjectGet("Trade Management EA: Set BE",OBJPROP_XDISTANCE);
int SetBEY=ObjectGet("Trade Management EA: Set BE",OBJPROP_YDISTANCE);
int SetBEPresent=ObjectFind("Trade Management EA: Set BE");
if(
(DeleteOnly==False&&(SetBEX!=TradeObjectsXDistance||SetBEY!=TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4)))||
(DeleteOnly==True&&SetBEPresent!=0)
)
{
SetBE();
ObjectDelete("Trade Management EA: Set BE");
}
int AutoBEX=ObjectGet("Trade Management EA: AutoBE",OBJPROP_XDISTANCE);
int AutoBEY=ObjectGet("Trade Management EA: AutoBE",OBJPROP_YDISTANCE);
int AutoBEPresent=ObjectFind("Trade Management EA: AutoBE");
if(
(DeleteOnly==False&&(AutoBEX!=TradeObjectsXDistance||AutoBEY!=TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5)))||
(DeleteOnly==True&&AutoBEPresent!=0)
)
{
static int LastAutoBETime;
if(TimeLocal()-LastAutoBETime>=2)
{
if(AutoBE==True)
AutoBE=False;
else
AutoBE=True;
ObjectDelete("Trade Management EA: AutoBE");
}
LastAutoBETime=TimeLocal();
}
int TrailX=ObjectGet("Trade Management EA: Trail",OBJPROP_XDISTANCE);
int TrailY=ObjectGet("Trade Management EA: Trail",OBJPROP_YDISTANCE);
int TrailPresent=ObjectFind("Trade Management EA: Trail");
if(
(DeleteOnly==False&&(TrailX!=TradeObjectsXDistance||TrailY!=TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6)))||
(DeleteOnly==True&&TrailPresent!=0)
)
{
static int LastTrailTime;
if(TimeLocal()-LastTrailTime>=2)
{
if(TrailActive==True)
{
TrailActive=False;
for(int l=0; l<OrdersTotal(); l++)
{
OrderSelect(l,SELECT_BY_POS);
if(OrderType()==0)
{
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),Bid+(Point*DefaultTP));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],Bid+(Point*DefaultTP));
}
if(OrderType()==1)
{
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),Ask-(Point*DefaultTP));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],Ask-(Point*DefaultTP));
}
}
}
else
TrailActive=True;
ObjectDelete("Trade Management EA: Trail");
}
LastTrailTime=TimeLocal();
}
int SellMarketX=ObjectGet("Trade Management EA: Sell Market",OBJPROP_XDISTANCE);
int SellMarketY=ObjectGet("Trade Management EA: Sell Market",OBJPROP_YDISTANCE);
int SellMarketPresent=ObjectFind("Trade Management EA: Sell Market");
if(
(DeleteOnly==False&&(SellMarketX!=TradeObjectsXDistance||SellMarketY!=TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8)))||
(DeleteOnly==True&&SellMarketPresent!=0)
)
{
for(k=0; k<SendMultipleOrders; k++)
SendSellMarketOrder(False);
ObjectDelete("Trade Management EA: Sell Market");
}
int BuyLimitX=ObjectGet("Trade Management EA: Buy Limit",OBJPROP_XDISTANCE);
int BuyLimitY=ObjectGet("Trade Management EA: Buy Limit",OBJPROP_YDISTANCE);
int BuyLimitPresent=ObjectFind("Trade Management EA: Buy Limit");
if(
(DeleteOnly==False&&(BuyLimitX!=TradeObjectsXDistance||BuyLimitY!=TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2)))||
(DeleteOnly==True&&BuyLimitPresent!=0)
)
{
SendBuyLimitOrder();
ObjectDelete("Trade Management EA: Buy Limit");
}
int SellLimitX=ObjectGet("Trade Management EA: Sell Limit",OBJPROP_XDISTANCE);
int SellLimitY=ObjectGet("Trade Management EA: Sell Limit",OBJPROP_YDISTANCE);
int SellLimitPresent=ObjectFind("Trade Management EA: Sell Limit");
if(
(DeleteOnly==False&&(SellLimitX!=TradeObjectsXDistance||SellLimitY!=TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7)))||
(DeleteOnly==True&&SellLimitPresent!=0)
)
{
SendSellLimitOrder();
ObjectDelete("Trade Management EA: Sell Limit");
}
if(ObjectStopOrders==True)
{
int BuyStopX=ObjectGet("Trade Management EA: Buy Stop",OBJPROP_XDISTANCE);
int BuyStopY=ObjectGet("Trade Management EA: Buy Stop",OBJPROP_YDISTANCE);
int BuyStopPresent=ObjectFind("Trade Management EA: Buy Stop");
if(
(DeleteOnly==False&&(BuyStopX!=TradeObjectsXDistance||BuyStopY!=TradeObjectsYDistance))||
(DeleteOnly==True&&BuyStopPresent!=0)
)
{
SendBuyStopOrder();
ObjectDelete("Trade Management EA: Buy Stop");
}
int SellStopX=ObjectGet("Trade Management EA: Sell Stop",OBJPROP_XDISTANCE);
int SellStopY=ObjectGet("Trade Management EA: Sell Stop",OBJPROP_YDISTANCE);
int SellStopPresent=ObjectFind("Trade Management EA: Sell Stop");
if(
(DeleteOnly==False&&(SellStopX!=TradeObjectsXDistance||SellStopY!=TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9)))||
(DeleteOnly==True&&SellStopPresent!=0)
)
{
SendSellStopOrder();
ObjectDelete("Trade Management EA: Sell Stop");
}
}
}
ObjectCreate("Trade Management EA: Buy Market",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Market",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyMarketColour);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace);
ObjectCreate("Trade Management EA: Buy Market Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Market Label","MARKET",TradeObjectsFontSize,"Arial",BuyMarketColour);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Close",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Close",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Close",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Close",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Close",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3));
ObjectCreate("Trade Management EA: Close Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Close Label","CLOSE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Close Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Close Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Close Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Set BE",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Set BE",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Set BE",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Set BE",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Set BE",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4));
ObjectCreate("Trade Management EA: Set BE Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Set BE Label","SET BE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4)+TradeWingDingFontSize-TradeObjectsFontSize);
if(AutoBE==True)
int AutoBEWingDing=252;
else
AutoBEWingDing=WingdingObjectOrders;
ObjectCreate("Trade Management EA: AutoBE",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: AutoBE",CharToStr(AutoBEWingDing),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5));
ObjectCreate("Trade Management EA: AutoBE Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: AutoBE Label","AUTO BE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5)+TradeWingDingFontSize-TradeObjectsFontSize);
if(TrailActive==True)
int TrailWingDing=252;
else
TrailWingDing=WingdingObjectOrders;
ObjectCreate("Trade Management EA: Trail",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Trail",CharToStr(TrailWingDing),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Trail",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Trail",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Trail",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6));
ObjectCreate("Trade Management EA: Trail Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Trail Label","TRAIL",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Market",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Market",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellMarketColour);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8));
ObjectCreate("Trade Management EA: Sell Market Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Market Label","MARKET",TradeObjectsFontSize,"Arial",SellMarketColour);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Buy Limit",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Limit",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyLimitColour);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2));
ObjectCreate("Trade Management EA: Buy Limit Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Limit Label","LIMIT",TradeObjectsFontSize,"Arial",BuyLimitColour);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Limit",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Limit",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellLimitColour);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7));
ObjectCreate("Trade Management EA: Sell Limit Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Limit Label","LIMIT",TradeObjectsFontSize,"Arial",SellLimitColour);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7)+TradeWingDingFontSize-TradeObjectsFontSize);
if(ObjectStopOrders==True)
{
ObjectCreate("Trade Management EA: Buy Stop",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Stop",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyStopColour);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_YDISTANCE,TradeObjectsYDistance);
ObjectCreate("Trade Management EA: Buy Stop Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Stop Label","STOP",TradeObjectsFontSize,"Arial",BuyStopColour);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Stop",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Stop",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellStopColour);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9));
ObjectCreate("Trade Management EA: Sell Stop Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Stop Label","STOP",TradeObjectsFontSize,"Arial",SellStopColour);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9)+TradeWingDingFontSize-TradeObjectsFontSize);
}
else
{
ObjectDelete("Trade Management EA: Buy Stop");
ObjectDelete("Trade Management EA: Buy Stop Label");
ObjectDelete("Trade Management EA: Sell Stop");
ObjectDelete("Trade Management EA: Sell Stop Label");
}
FirstRun=False;
}
else
{
ObjectDelete("Trade Management EA: Buy Market");
ObjectDelete("Trade Management EA: Buy Limit");
ObjectDelete("Trade Management EA: Buy Stop");
ObjectDelete("Trade Management EA: Close");
ObjectDelete("Trade Management EA: Set BE");
ObjectDelete("Trade Management EA: AutoBE");
ObjectDelete("Trade Management EA: Trail");
ObjectDelete("Trade Management EA: Sell Market");
ObjectDelete("Trade Management EA: Sell Limit");
ObjectDelete("Trade Management EA: Sell Stop");
ObjectDelete("Trade Management EA: Buy Market Label");
ObjectDelete("Trade Management EA: Buy Limit Label");
ObjectDelete("Trade Management EA: Buy Stop Label");
ObjectDelete("Trade Management EA: Close Label");
ObjectDelete("Trade Management EA: Set BE Label");
ObjectDelete("Trade Management EA: AutoBE Label");
ObjectDelete("Trade Management EA: Trail Label");
ObjectDelete("Trade Management EA: Sell Market Label");
ObjectDelete("Trade Management EA: Sell Limit Label");
ObjectDelete("Trade Management EA: Sell Stop Label");
}
//---------MAINTAIN SESSION---------------------------------------------------------
static int NextModifyTime;
if(MaintainSession==True&&TimeLocal()>NextModifyTime)
{
i=0;
while(IsTradeContextBusy()==True)
{
Sleep(100);
i++;
if(i>100)
return(0);
}
bool IsOrderPresent=FALSE;
for(i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==MyMagicNumber)
IsOrderPresent=TRUE;
}
if(IsOrderPresent==FALSE)
{
if(OrderSend(Symbol(),OP_BUYLIMIT,MarketInfo(Symbol(),MODE_MINLOT),Point,0,0,0,0,MyMagicNumber,0)<0)
{
string ErrorString=ErrorDescription(GetLastError());
Comment("MAINTAIN SESSION ORDER OPEN FAILED. REASON: ",ErrorString);
Print("MAINTAIN SESSION ORDER OPEN FAILED. REASON: ",ErrorString);
return(0);
}
}
for(i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==MyMagicNumber)
{
if(OrderTakeProfit()!=0)
double TPPrice=0;
if(OrderTakeProfit()==0)
TPPrice=(Point*100000);
int ms1=GetTickCount();
if(OrderModify(OrderTicket(),OrderOpenPrice(),0,TPPrice,0)==False)
{
ErrorString=ErrorDescription(GetLastError());
Comment("MAINTAIN SESSION ORDER MODIFY FAILED. REASON: ",ErrorString);
Print("MAINTAIN SESSION ORDER MODIFY FAILED. REASON: ",ErrorString);
}
else
{
if(RunInfiniteLoop==True)
int Duration=28;
else
Duration=25;
NextModifyTime=TimeLocal()+Duration;
int ms2=GetTickCount();
int ExeTime=ms2-ms1;
Print("MAINTIAN SESSION EXECUTION TIME: ",ExeTime);
}
}
}
}
WindowRedraw();
if(RunInfiniteLoop==True)
Sleep(RunIntervalMS);
else
break;
}
return(0);
}
bool RunClose(int TicketNumber,double ClickedPrice,double CloseLots,string MyComment)
{
while(IsTradeContextBusy()==True)
{
Comment("RUN CLOSE: WAITING FOR TRADE CONTEXT TO BECOME UNOCCUPIED");
Sleep(10);
int i; i++;
if(i>500)
{
Comment("RUN CLOSE: TRADE CONTEXT TIMEOUT");
PlaySound("timeout.wav");
return(False);
}
}
RefreshRates();
Comment("RUN CLOSE: CLOSING POSITION");
int ms1=GetTickCount();
string ClickedTime=TimeToStr(TimeCurrent(),TIME_SECONDS);
double ClickedBid=Bid;
double ClickedAsk=Ask;
OrderSelect(TicketNumber,SELECT_BY_TICKET);
if(OrderClose(TicketNumber,CloseLots,OrderClosePrice(),100)==TRUE)
{
int ms2=GetTickCount();
OrderSelect(TicketNumber,SELECT_BY_TICKET);
string CloseTimeDMY=StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),8,2)+"-"+StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),5,2)+"-"+StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),0,4);
string CloseTimeHMS=TimeToStr(OrderCloseTime(),TIME_SECONDS);
double ExeTime=ms2-ms1;
switch(OrderType())
{
case 0 : string Direction="SELL"; double Slippage=(OrderClosePrice()-ClickedPrice)/(Point*10);break;
case 1 : Direction="BUY";Slippage=(ClickedPrice-OrderClosePrice())/(Point*10);
}
Print("SLIPPAGE: ",Slippage);
Print("EXECUTION TIME: ",ExeTime);
int Handle=FileOpen("Execution Log/a.csv",FILE_READ|FILE_WRITE);
FileClose(Handle);
FileDelete("Execution Log/a.csv");
string FileName="Execution Log/"+AccountNumber()+"/EXECUTION LOG.csv";
Handle=FileOpen(FileName,FILE_CSV|FILE_READ|FILE_WRITE,',');
if(Handle>0)
{
FileSeek(Handle,0,SEEK_END);
FileWrite(Handle,AccountNumber(),TicketNumber,CloseTimeDMY,CloseTimeHMS,OrderSymbol(),MyComment,Direction,OrderLots(),ClickedTime,ClickedBid,ClickedAsk,ClickedPrice,OrderClosePrice(),Slippage,ExeTime);
FileClose(Handle);
PlaySound("ok.wav");
Comment("");
}
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("RUN CLOSE: FILE OPEN FAILED. REASON: ",ErrorString);
Print("FILE OPEN FAILED. REASON: ",ErrorString);
}
}
else
{
PlaySound("timeout.wav");
ErrorString=ErrorDescription(GetLastError());
Comment("RUN CLOSE: ORDER CLOSE FAILED. REASON: ",ErrorString);
Print("ORDER CLOSE FAILED. REASON: ",ErrorString);
return(False);
}
return(True);
}
int SendBuyMarketOrder(bool HiddenPending)
{
if(SendMultipleOrders==1)
{
static int LastBuyMarketTime;
if(TimeLocal()-LastBuyMarketTime<=2)
return(0);
LastBuyMarketTime=TimeLocal();
}
if(SendMultipleOrders>1)
ShowConfirm=True;
Lots=CalculateLots();
if(ShowConfirm==True&&HiddenPending==False)
{
int MessageBoxResult=MessageBox("Buy "+Symbol()+" "+DoubleToStr(Lots,2)+" lots at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
int TicketNumber=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0);
if(TicketNumber>0)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("BUY MARKET ORDER FAILED. REASON: ",ErrorString);
Print("BUY MARKET ORDER FAILED. REASON: ",ErrorString);
}
return(0);
}
int SendBuyLimitOrder()
{
static int LastBuyLimitTime;
if(TimeLocal()-LastBuyLimitTime<=2)
return(0);
LastBuyLimitTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Buy Limit "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Buy Limit "+j,OBJ_HLINE,0,TimeCurrent(),Ask-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_STYLE,LineStyleEntry);
double LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Buy Limit "+j,OBJ_TEXT,0,Time[80],LineBuyLimitPrice);
ObjectSetText("Trade Management EA: Ticket No Buy Limit "+j,"Buy Limit",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Buy Limit "+j,OBJ_TREND,0,TimeCurrent(),Ask-(DistancePendingOrder*Point),Time[10],Ask-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_RAY,False);
LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Buy Limit "+j,OBJ_TEXT,0,TimeCurrent(),LineBuyLimitPrice);
//ObjectSetText("Trade Management EA: Wingding Buy Limit "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double BuyLimitDistance=(Ask-LineBuyLimitPrice)/(Point);
string BuyLimitDistanceStr=DoubleToStr(BuyLimitDistance,0);
ObjectCreate("Trade Management EA: Distance Buy Limit "+j,OBJ_TEXT,0,Time[10],LineBuyLimitPrice);
ObjectSetText("Trade Management EA: Distance Buy Limit "+j,BuyLimitDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendBuyStopOrder()
{
static int LastBuyStopTime;
if(TimeLocal()-LastBuyStopTime<=2)
return(0);
LastBuyStopTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Buy Stop "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Buy Stop "+j,OBJ_HLINE,0,TimeCurrent(),Ask+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_STYLE,LineStyleEntry);
double LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Buy Stop "+j,OBJ_TEXT,0,Time[80],LineBuyStopPrice);
ObjectSetText("Trade Management EA: Ticket No Buy Stop "+j,"Buy Stop",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Buy Stop "+j,OBJ_TREND,0,TimeCurrent(),Ask+(DistancePendingOrder*Point),Time[10],Ask+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_RAY,False);
LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Buy Stop "+j,OBJ_TEXT,0,TimeCurrent(),LineBuyStopPrice);
//ObjectSetText("Trade Management EA: Wingding Buy Stop "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double BuyStopDistance=(LineBuyStopPrice-Ask)/(Point);
string BuyStopDistanceStr=DoubleToStr(BuyStopDistance,0);
ObjectCreate("Trade Management EA: Distance Buy Stop "+j,OBJ_TEXT,0,Time[10],LineBuyStopPrice);
ObjectSetText("Trade Management EA: Distance Buy Stop "+j,BuyStopDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendSellMarketOrder(bool HiddenPending)
{
if(SendMultipleOrders==1)
{
static int LastSellMarketTime;
if(TimeLocal()-LastSellMarketTime<=2)
return(0);
LastSellMarketTime=TimeLocal();
}
if(SendMultipleOrders>1)
ShowConfirm=True;
Lots=CalculateLots();
if(ShowConfirm==True&&HiddenPending==False)
{
int MessageBoxResult=MessageBox("Sell "+Symbol()+" "+DoubleToStr(Lots,2)+" lots at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
int TicketNumber=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0);
if(TicketNumber>0)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("SELL MARKET ORDER FAILED. REASON: ",ErrorString);
Print("SELL MARKET ORDER FAILED. REASON: ",ErrorString);
}
return(0);
}
int SendSellLimitOrder()
{
static int LastSellLimitTime;
if(TimeLocal()-LastSellLimitTime<=2)
return(0);
LastSellLimitTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Sell Limit "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Sell Limit "+j,OBJ_HLINE,0,TimeCurrent(),Bid+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_STYLE,LineStyleEntry);
double LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Sell Limit "+j,OBJ_TEXT,0,Time[80],LineSellLimitPrice);
ObjectSetText("Trade Management EA: Ticket No Sell Limit "+j,"Sell Limit",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Sell Limit "+j,OBJ_TREND,0,TimeCurrent(),Bid+(DistancePendingOrder*Point),Time[10],Bid+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_RAY,False);
LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Sell Limit "+j,OBJ_TEXT,0,TimeCurrent(),LineSellLimitPrice);
//ObjectSetText("Trade Management EA: Wingding Sell Limit "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double SellLimitDistance=(LineSellLimitPrice-Bid)/(Point);
string SellLimitDistanceStr=DoubleToStr(SellLimitDistance,0);
ObjectCreate("Trade Management EA: Distance Sell Limit "+j,OBJ_TEXT,0,Time[10],LineSellLimitPrice);
ObjectSetText("Trade Management EA: Distance Sell Limit "+j,SellLimitDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendSellStopOrder()
{
static int LastSellStopTime;
if(TimeLocal()-LastSellStopTime<=2)
return(0);
LastSellStopTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Sell Stop "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Sell Stop "+j,OBJ_HLINE,0,TimeCurrent(),Bid-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_STYLE,LineStyleEntry);
double LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Sell Stop "+j,OBJ_TEXT,0,Time[80],LineSellStopPrice);
ObjectSetText("Trade Management EA: Ticket No Sell Stop "+j,"Sell Stop",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Sell Stop "+j,OBJ_TREND,0,TimeCurrent(),Bid-(DistancePendingOrder*Point),Time[10],Bid-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_RAY,False);
LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Sell Stop "+j,OBJ_TEXT,0,TimeCurrent(),LineSellStopPrice);
//ObjectSetText("Trade Management EA: Wingding Sell Stop "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double SellStopDistance=(Bid-LineSellStopPrice)/(Point);
string SellStopDistanceStr=DoubleToStr(SellStopDistance,0);
ObjectCreate("Trade Management EA: Distance Sell Stop "+j,OBJ_TEXT,0,Time[10],LineSellStopPrice);
ObjectSetText("Trade Management EA: Distance Sell Stop "+j,SellStopDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendCloseOrder()
{
static int LastCloseMarketTime;
if(TimeLocal()-LastCloseMarketTime<=2)
return(0);
LastCloseMarketTime=TimeLocal();
if(ShowConfirm==True)
{
int MessageBoxResult=MessageBox("Close all "+Symbol()+" trades at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderType()<=1)
{
if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),100)==True)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("CLOSE ORDER FAILED. REASON: ",ErrorString);
Print("CLOSE ORDER FAILED. REASON: ",ErrorString);
}
}
}
return(0);
}
int SetBE()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderType()<=1)
{
int TicketNo=OrderTicket();
if(OrderProfit()>0)
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
}
}
}
double CalculateLots()
{
RefreshRates();
double LotPoint=MarketInfo(Symbol(),MODE_LOTSTEP);
if(Lots==0)
Lots=(MathFloor(((AccountEquity()*RiskPercent*0.01)/((DefaultSL*MarketInfo(Symbol(),MODE_TICKVALUE))+CommissionPerLot))/LotPoint))*LotPoint;
return(Lots);
}
Here are the features which making problems and need some changes:
1. The EA does not calculate the Risk in the right way (Please try for yourself).And so I have to calculate the Risk every Trade for myself which costs me quite a lot of time (I manage 20 Charts at the same time).
2. When the EA is going to Auto-BE after a specific amount of pips I would like to have an alarm when this happens.
3. When the EA is going to Auto-BE after a specific amount of pips I would like to have the possibility to get back to the TRAIL-function and so the Auto-BE is no longer valid for this trade.And the STOP-LOSS should move back to the original Stop-LOSS before the AUTO-BE is taking place.
4. At this time I just can set 1 Close -Profit-line in Percent (lets say 50 % of the Trade ) for 1 Position .But I would to have the possibility to set more than 1 Close-Profit -line.
5. The EA should work in the desired offline-Chart Timeframe = 8 H
I would like to share the Code with all of you now so that my some Coders may interested in making the changes as they should be for properly working
I appreciate any help here.
Attachment is the Trade-Manager-EA.
Thanks for your attention.
Greeds Zack
I try to find some Coder that may interested in Re-Coding my Trade-Manager-EA which I have paid for.
A formely very known senior-member ROOICOOL(also a very fine Programmer) have coded this EA for me.
But he was no longer making some changes in the EA.
So there are 2-3 features that work not porperly as they should be.
Here is the Code:
#property copyright "Coded by rooicol

#import "stdlib.ex4"
string ErrorDescription(int ErrorCode);
extern int DefaultSL=400;
extern bool HighLowSL=True;
extern int BarCount=3;
extern int Gap=100;
extern int HighLowSafetyPoints=100;
extern int DefaultTP=500;
extern int DefaultCPPercent=50;
extern bool HardSLTPActive=False;
extern int HardSLTPDistance=400;
extern int AutoBEPoints=200;
extern bool TrendLineSL=False;
extern int TrendLineSLDistance=40;
extern bool MaintainSession=False;
extern int MyMagicNumber=555;
extern bool ObjectOrders=True;
extern bool ObjectStopOrders=False;
extern int SendMultipleOrders=1;
extern int WingdingObjectOrders=251;
extern int DistancePendingOrder=40;
extern double Lots=0;
extern double RiskPercent=2;
extern double CommissionPerLot=0;
extern int TradeObjectsFontSize=8;
extern int TradeWingDingFontSize=35;
extern int TradeObjectsXDistance=10;
extern int TradeObjectsYDistance=-34;
extern int TradeObjectsXSpace=30;
extern int TradeObjectsYSpace=28;
extern bool DeleteOnly=True;
extern bool ShowConfirm=False;
extern color BuyMarketColour=Green;
extern color BuyLimitColour=Green;
extern color BuyStopColour=Green;
extern color CloseColour=Gray;
extern color SellMarketColour=Maroon;
extern color SellLimitColour=Maroon;
extern color SellStopColour=Maroon;
extern int LineStyleEntry=STYLE_SOLID;
extern int LineStyleSL=STYLE_DASH;
extern int LineStyleTP=STYLE_DOT;
extern int LineStyleCP=STYLE_DASHDOT;
extern color Colour1=Orange;
extern color Colour2=DarkGray;
extern color Colour3=Lime;
extern color Colour4=Green;
extern color Colour5=Blue;
extern color PendingColour=SkyBlue;
extern bool UseWingDings=False;
extern int OrderLineThickness=5;
extern int OrderLineLength=10;
extern color EntryColour=Blue;
extern color SLColour=Orange;
extern color TPColour=DarkGray;
extern color CPColour=Lime;
extern int Wingding=74;
extern bool RunInfiniteLoop=False;
extern int RunIntervalMS=100;
bool FirstRun=True;
bool AutoBE=False;
int start()
{
while(IsStopped()==False)
{
RefreshRates();
if(MyMagicNumber==0)
Comment("MyMagicNumber must not be 0!");
//---------DELETE HISTORY TRADE LEVELS------------------------------------------
for(int i=OrdersHistoryTotal()-10; i<OrdersHistoryTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int TicketNo=OrderTicket();
ObjectDelete("Trade Management EA: Line Entry "+TicketNo);
ObjectDelete("Trade Management EA: Line SL "+TicketNo);
ObjectDelete("Trade Management EA: Line TP "+TicketNo);
ObjectDelete("Trade Management EA: Line CP "+TicketNo);
ObjectDelete("Trade Management EA: Distance Entry "+TicketNo);
ObjectDelete("Trade Management EA: Distance SL "+TicketNo);
ObjectDelete("Trade Management EA: Distance TP "+TicketNo);
ObjectDelete("Trade Management EA: Distance CP "+TicketNo);
ObjectDelete("Trade Management EA: Trend Line "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No Entry "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No SL "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No TP "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No CP "+TicketNo);
ObjectDelete("Trade Management EA: Wingding Entry "+TicketNo);
ObjectDelete("Trade Management EA: Wingding SL "+TicketNo);
ObjectDelete("Trade Management EA: Wingding TP "+TicketNo);
ObjectDelete("Trade Management EA: Wingding CP "+TicketNo);
GlobalVariableDel("Trade Management EA: Line CP "+TicketNo);
}
//---------CREATE TRADE LEVELS------------------------------------------
int j=0;
static bool TrailActive;
for(i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()!=MyMagicNumber)
{
j++;
TicketNo=OrderTicket();
string TicketNoStr=DoubleToStr(TicketNo,0);
switch(OrderType())
{
case 0 : int Direction=1; double Price=Bid; bool Pending=False; break;
case 2 :
case 4 : Direction=1; Price=Bid; double PendingPrice=Ask; Pending=True; break;
case 1 : Direction=-1; Price=Ask; Pending=False; break;
case 3 :
case 5 : Direction=-1; Price=Ask; PendingPrice=Bid; Pending=True;
}
if(j==1)
color Colour=Colour1;
if(j==2)
Colour=Colour2;
if(j==3)
Colour=Colour3;
if(j==4)
Colour=Colour4;
if(j>=5)
Colour=Colour5;
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Entry "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),OrderOpenPrice());
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_STYLE,LineStyleEntry);
double LineEntryPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Entry "+TicketNo,OBJ_TEXT,0,Time[80],LineEntryPrice);
ObjectSetText("Trade Management EA: Ticket No Entry "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No Entry "+TicketNo,0,Time[80],LineEntryPrice);
}
else
{
ObjectCreate("Trade Management EA: Line Entry "+TicketNo,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_COLOR,EntryColour);
ObjectSet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_RAY,False);
LineEntryPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Entry "+TicketNo,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Entry "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),OrderOpenPrice());
//ObjectSetText("Trade Management EA: Wingding Entry "+TicketNo,CharToStr(Wingding),10,"WingDings",EntryColour);
//ObjectMove("Trade Management EA: Wingding Entry "+TicketNo,0,OrderOpenTime(),LineEntryPrice);
}
if(OrderType()<=1)
{
ObjectMove("Trade Management EA: Line Entry "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
ObjectMove("Trade Management EA: Line Entry "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
}
if(OrderType()>=2)
{
ObjectMove("Trade Management EA: Line Entry "+TicketNo,0,OrderOpenTime(),LineEntryPrice);
ObjectMove("Trade Management EA: Line Entry "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineEntryPrice);
}
if(Pending==True)
double PriceEntry=PendingPrice;
else
PriceEntry=Price;
int EntryDistance=((PriceEntry-LineEntryPrice)*Direction)/Point;
string EntryDistanceStr=DoubleToStr(EntryDistance,0);
if(UseWingDings==True)
color DistanceEntryColour=EntryColour;
else
DistanceEntryColour=Colour;
ObjectCreate("Trade Management EA: Distance Entry "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineEntryPrice);
ObjectSetText("Trade Management EA: Distance Entry "+TicketNo,EntryDistanceStr,13,"Arial",DistanceEntryColour);
ObjectMove("Trade Management EA: Distance Entry "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineEntryPrice);
if(HighLowSL==True)
{
if(Direction==1)
{
double LineSLInitialPrice=Low[iLowest(Symbol(),Period(),MODE_LOW,BarCount)]-(Gap*Point);
if(LineSLInitialPrice>(OrderOpenPrice()-(HighLowSafetyPoints*Point)))
LineSLInitialPrice=(OrderOpenPrice()-(HighLowSafetyPoints*Point));
}
if(Direction==-1)
{
LineSLInitialPrice=High[iHighest(Symbol(),Period(),MODE_HIGH,BarCount)]+(Gap*Point);
if(LineSLInitialPrice<(OrderOpenPrice()+(HighLowSafetyPoints*Point)))
LineSLInitialPrice=(OrderOpenPrice()+(HighLowSafetyPoints*Point));
}
}
else
LineSLInitialPrice=OrderOpenPrice()-(Direction*DefaultSL*Point);
if(OrderStopLoss()!=0)
LineSLInitialPrice=OrderStopLoss()+(HardSLTPDistance*Point*Direction);
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line SL "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineSLInitialPrice);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_STYLE,LineStyleSL);
double LineSLPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line SL "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
ObjectCreate("Trade Management EA: Ticket No SL "+TicketNo,OBJ_TEXT,0,Time[80],LineSLPrice);
ObjectSetText("Trade Management EA: Ticket No SL "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No SL "+TicketNo,0,Time[80],LineSLPrice);
}
else
{
ObjectCreate("Trade Management EA: Line SL "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineSLInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineSLInitialPrice);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_COLOR,SLColour);
ObjectSet("Trade Management EA: Line SL "+TicketNo,OBJPROP_RAY,False);
LineSLPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line SL "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineSLPrice);
//ObjectCreate("Trade Management EA: Wingding SL "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineSLInitialPrice);
//ObjectSetText("Trade Management EA: Wingding SL "+TicketNo,CharToStr(Wingding),10,"WingDings",SLColour);
//ObjectMove("Trade Management EA: Wingding SL "+TicketNo,0,OrderOpenTime(),LineSLPrice);
}
double SLDistance=((LineSLPrice-OrderOpenPrice())*Direction)/(Point);
string SLDistanceStr=DoubleToStr(SLDistance,0);
if(UseWingDings==True)
color DistanceSLColour=SLColour;
else
DistanceSLColour=Colour;
ObjectCreate("Trade Management EA: Distance SL "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineSLPrice);
ObjectSetText("Trade Management EA: Distance SL "+TicketNo,SLDistanceStr,13,"Arial",DistanceSLColour);
ObjectMove("Trade Management EA: Distance SL "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineSLPrice);
if(TrendLineSL==True&&OrderType()<=1)
{
if(OrderType()==0)
{
double TrendLinePrice1=Low[0]-(250*Point);
double TrendLinePrice2=Low[0]-(75*Point);
}
if(OrderType()==1)
{
TrendLinePrice1=High[0]+(250*Point);
TrendLinePrice2=High[0]+(75*Point);
}
ObjectCreate("Trade Management EA: Trend Line "+TicketNo,OBJ_TREND,0,Time[30],TrendLinePrice1,Time[0],TrendLinePrice2);
ObjectSet("Trade Management EA: Trend Line "+TicketNo,OBJPROP_RAY,True);
double TrendLineCurrentValue=ObjectGetValueByShift("Trade Management EA: Trend Line "+TicketNo,0)-(TrendLineSLDistance*Point*Direction);
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),TrendLineCurrentValue);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],TrendLineCurrentValue);
}
if(TrendLineSL==False)
ObjectDelete("Trade Management EA: Trend Line "+TicketNo);
if(AutoBE==True&&OrderType()<=1&&EntryDistance>=AutoBEPoints)
{
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice());
}
if(TrailActive==True&&OrderType()<=1)
{
if(OrderType()==0)
double TrailMovePrice=iLow(Symbol(),240,1)-(Gap*Point);
if(OrderType()==1)
TrailMovePrice=iHigh(Symbol(),240,1)+(Gap*Point);
if((TrailMovePrice-LineSLPrice)*Direction>(Point/2))
{
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),TrailMovePrice);
ObjectMove("Trade Management EA: Line SL "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],TrailMovePrice);
}
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),OrderOpenPrice()+(Point*10000*Direction));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],OrderOpenPrice()+(Point*10000*Direction));
}
if(OrderTakeProfit()!=0)
double LineTPInitialPrice=OrderTakeProfit()-(HardSLTPDistance*Point*Direction);
else
LineTPInitialPrice=OrderOpenPrice()+(Direction*DefaultTP*Point);
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line TP "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineTPInitialPrice);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_STYLE,LineStyleTP);
double LineTPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line TP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
ObjectCreate("Trade Management EA: Ticket No TP "+TicketNo,OBJ_TEXT,0,Time[80],LineTPPrice);
ObjectSetText("Trade Management EA: Ticket No TP "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No TP "+TicketNo,0,Time[80],LineTPPrice);
}
else
{
ObjectCreate("Trade Management EA: Line TP "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineTPInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineTPInitialPrice);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_COLOR,TPColour);
ObjectSet("Trade Management EA: Line TP "+TicketNo,OBJPROP_RAY,False);
LineTPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line TP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineTPPrice);
//ObjectCreate("Trade Management EA: Wingding TP "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineTPInitialPrice);
//ObjectSetText("Trade Management EA: Wingding TP "+TicketNo,CharToStr(Wingding),10,"WingDings",TPColour);
//ObjectMove("Trade Management EA: Wingding TP "+TicketNo,0,OrderOpenTime(),LineTPPrice);
}
double TPDistance=((LineTPPrice-OrderOpenPrice())*Direction)/(Point);
string TPDistanceStr=DoubleToStr(TPDistance,0);
if(UseWingDings==True)
color DistanceTPColour=TPColour;
else
DistanceTPColour=Colour;
ObjectCreate("Trade Management EA: Distance TP "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineTPPrice);
ObjectSetText("Trade Management EA: Distance TP "+TicketNo,TPDistanceStr,13,"Arial",DistanceTPColour);
ObjectMove("Trade Management EA: Distance TP "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+20],LineTPPrice);
if(DefaultCPPercent>0)
{
double LineCPInitialPrice=GlobalVariableGet("Trade Management EA: Line CP "+TicketNo);
if(LineCPInitialPrice==0)
LineCPInitialPrice=LineTPPrice+(Direction*20*Point);
if(UseWingDings==false)
{
ObjectCreate("Trade Management EA: Line CP "+TicketNo,OBJ_HLINE,0,OrderOpenTime(),LineCPInitialPrice);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_COLOR,Colour);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_STYLE,LineStyleCP);
double LineCPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line CP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
ObjectCreate("Trade Management EA: Ticket No CP "+TicketNo,OBJ_TEXT,0,Time[80],LineCPPrice);
ObjectSetText("Trade Management EA: Ticket No CP "+TicketNo,TicketNoStr,10,"Arial",Colour);
ObjectMove("Trade Management EA: Ticket No CP "+TicketNo,0,Time[80],LineCPPrice);
}
else
{
ObjectCreate("Trade Management EA: Line CP "+TicketNo,OBJ_TREND,0,OrderOpenTime(),LineCPInitialPrice,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineCPInitialPrice);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_COLOR,CPColour);
ObjectSet("Trade Management EA: Line CP "+TicketNo,OBJPROP_RAY,False);
LineCPPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line CP "+TicketNo,OBJPROP_PRICE1),Digits);
ObjectMove("Trade Management EA: Line CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
ObjectMove("Trade Management EA: Line CP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],LineCPPrice);
//ObjectCreate("Trade Management EA: Wingding CP "+TicketNo,OBJ_TEXT,0,OrderOpenTime(),LineCPInitialPrice);
//ObjectSetText("Trade Management EA: Wingding CP "+TicketNo,CharToStr(Wingding),10,"WingDings",CPColour);
//ObjectMove("Trade Management EA: Wingding CP "+TicketNo,0,OrderOpenTime(),LineCPPrice);
}
double CPDistance=((LineCPPrice-OrderOpenPrice())*Direction)/(Point);
string CPDistanceStr=DoubleToStr(CPDistance,0);
if(UseWingDings==True)
color DistanceCPColour=CPColour;
else
DistanceCPColour=Colour;
ObjectCreate("Trade Management EA: Distance CP "+TicketNo,OBJ_TEXT,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineCPPrice);
ObjectSetText("Trade Management EA: Distance CP "+TicketNo,CPDistanceStr,13,"Arial",DistanceCPColour);
ObjectMove("Trade Management EA: Distance CP "+TicketNo,0,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+10],LineCPPrice);
GlobalVariableSet("Trade Management EA: Line CP "+TicketNo,LineCPPrice);
int ClosePercent=StrToDouble(ObjectDescription("Trade Management EA: Line CP "+TicketNo));
if(ClosePercent==0)
ObjectSetText("Trade Management EA: Line CP "+TicketNo,DoubleToStr(DefaultCPPercent,0));
}
else
{
ObjectDelete("Trade Management EA: Distance CP "+TicketNo);
ObjectDelete("Trade Management EA: Ticket No CP "+TicketNo);
ObjectDelete("Trade Management EA: Line CP "+TicketNo);
GlobalVariableDel("Trade Management EA: Line CP "+TicketNo);
}
//---------MODIFY SL AND TP------------------------------------------
double LineSLPriceAdjusted=LineSLPrice-(Direction*HardSLTPDistance*Point);
double LineTPPriceAdjusted=LineTPPrice+(Direction*HardSLTPDistance*Point);
if(MathAbs(OrderOpenPrice()-LineEntryPrice)>(Point/2))
bool EntryDifference=True;
else
EntryDifference=False;
if(MathAbs(OrderStopLoss()-LineSLPriceAdjusted)>(Point/2))
bool SLDifference=True;
else
SLDifference=False;
if(MathAbs(OrderTakeProfit()-LineTPPriceAdjusted)>(Point/2))
bool TPDifference=True;
else
TPDifference=False;
if((HardSLTPActive==True&&(SLDifference==True||TPDifference==True))||(EntryDifference==True&&OrderType()>=2))
{
OrderModify(TicketNo,LineEntryPrice,LineSLPriceAdjusted,LineTPPriceAdjusted,0);
Sleep(250);
}
OrderSelect(i,SELECT_BY_POS);
RefreshRates();
//---------EA CLOSE------------------------------------------
if(((Price-LineSLPrice)*Direction)<(Point/2))
bool SLHit=True;
else
SLHit=False;
if(((LineTPPrice-Price)*Direction)<(Point/2))
bool TPHit=True;
else
TPHit=False;
if(((LineCPPrice-Price)*Direction)<(Point/2))
bool CPHit=True;
else
CPHit=False;
if(((HardSLTPActive==True&&HardSLTPDistance>0)||(HardSLTPActive==False))&&SLHit==True&&OrderType()<=1)
RunClose(TicketNo,LineSLPrice,OrderLots(),"EA CLOSE");
if(((HardSLTPActive==True&&HardSLTPDistance>0)||(HardSLTPActive==False))&&TPHit==True&&OrderType()<=1)
RunClose(TicketNo,LineTPPrice,OrderLots(),"EA CLOSE");
if(DefaultCPPercent>0&&CPHit==True&&OrderType()<=1)
{
double LotPoint=MarketInfo(Symbol(),MODE_LOTSTEP);
double CloseLots=MathRound((OrderLots()*ClosePercent*0.01)/LotPoint)*LotPoint;
RunClose(TicketNo,LineCPPrice,CloseLots,"EA CLOSE");
}
}
}
//---------PENDING ORDERS---------------------------------------------------------
for(i=0; i<10; i++)
{
double LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+i,OBJPROP_PRICE1),Digits);
if(LineBuyLimitPrice!=0)
{
ObjectMove("Trade Management EA: Line Buy Limit "+i,0,TimeCurrent(),LineBuyLimitPrice);
ObjectMove("Trade Management EA: Line Buy Limit "+i,1,Time[10],LineBuyLimitPrice);
ObjectMove("Trade Management EA: Ticket No Buy Limit "+i,0,Time[80],LineBuyLimitPrice);
//ObjectMove("Trade Management EA: Wingding Buy Limit "+i,0,TimeCurrent(),LineBuyLimitPrice);
double BuyLimitDistance=(Ask-LineBuyLimitPrice)/(Point);
string BuyLimitDistanceStr=DoubleToStr(BuyLimitDistance,0);
ObjectSetText("Trade Management EA: Distance Buy Limit "+i,BuyLimitDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Buy Limit "+i,0,Time[10],LineBuyLimitPrice);
if((Ask-LineBuyLimitPrice)<(Point/2))
{
SendBuyMarketOrder(True);
ObjectDelete("Trade Management EA: Line Buy Limit "+i);
ObjectDelete("Trade Management EA: Ticket No Buy Limit "+i);
ObjectDelete("Trade Management EA: Distance Buy Limit "+i);
ObjectDelete("Trade Management EA: Wingding Buy Limit "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Buy Limit "+i);
ObjectDelete("Trade Management EA: Distance Buy Limit "+i);
ObjectDelete("Trade Management EA: Wingding Buy Limit "+i);
}
double LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+i,OBJPROP_PRICE1),Digits);
if(LineBuyStopPrice!=0)
{
ObjectMove("Trade Management EA: Line Buy Stop "+i,0,TimeCurrent(),LineBuyStopPrice);
ObjectMove("Trade Management EA: Line Buy Stop "+i,1,Time[10],LineBuyStopPrice);
ObjectMove("Trade Management EA: Ticket No Buy Stop "+i,0,Time[80],LineBuyStopPrice);
//ObjectMove("Trade Management EA: Wingding Buy Stop "+i,0,TimeCurrent(),LineBuyStopPrice);
double BuyStopDistance=(LineBuyStopPrice-Ask)/(Point);
string BuyStopDistanceStr=DoubleToStr(BuyStopDistance,0);
ObjectSetText("Trade Management EA: Distance Buy Stop "+i,BuyStopDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Buy Stop "+i,0,Time[10],LineBuyStopPrice);
if((LineBuyStopPrice-Ask)<(Point/2))
{
SendBuyMarketOrder(True);
ObjectDelete("Trade Management EA: Line Buy Stop "+i);
ObjectDelete("Trade Management EA: Ticket No Buy Stop "+i);
ObjectDelete("Trade Management EA: Distance Buy Stop "+i);
ObjectDelete("Trade Management EA: Wingding Buy Stop "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Buy Stop "+i);
ObjectDelete("Trade Management EA: Distance Buy Stop "+i);
ObjectDelete("Trade Management EA: Wingding Buy Stop "+i);
}
double LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+i,OBJPROP_PRICE1),Digits);
if(LineSellLimitPrice!=0)
{
ObjectMove("Trade Management EA: Line Sell Limit "+i,0,TimeCurrent(),LineSellLimitPrice);
ObjectMove("Trade Management EA: Line Sell Limit "+i,1,Time[10],LineSellLimitPrice);
ObjectMove("Trade Management EA: Ticket No Sell Limit "+i,0,Time[80],LineSellLimitPrice);
//ObjectMove("Trade Management EA: Wingding Sell Limit "+i,0,TimeCurrent(),LineSellLimitPrice);
double SellLimitDistance=(LineSellLimitPrice-Bid)/(Point);
string SellLimitDistanceStr=DoubleToStr(SellLimitDistance,0);
ObjectSetText("Trade Management EA: Distance Sell Limit "+i,SellLimitDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Sell Limit "+i,0,Time[10],LineSellLimitPrice);
if((LineSellLimitPrice-Bid)<(Point/2))
{
SendSellMarketOrder(True);
ObjectDelete("Trade Management EA: Line Sell Limit "+i);
ObjectDelete("Trade Management EA: Ticket No Sell Limit "+i);
ObjectDelete("Trade Management EA: Distance Sell Limit "+i);
ObjectDelete("Trade Management EA: Wingding Sell Limit "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Sell Limit "+i);
ObjectDelete("Trade Management EA: Distance Sell Limit "+i);
ObjectDelete("Trade Management EA: Wingding Sell Limit "+i);
}
double LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+i,OBJPROP_PRICE1),Digits);
if(LineSellStopPrice!=0)
{
ObjectMove("Trade Management EA: Line Sell Stop "+i,0,TimeCurrent(),LineSellStopPrice);
ObjectMove("Trade Management EA: Line Sell Stop "+i,1,Time[10],LineSellStopPrice);
ObjectMove("Trade Management EA: Ticket No Sell Stop "+i,0,Time[80],LineSellStopPrice);
//ObjectMove("Trade Management EA: Wingding Sell Stop "+i,0,TimeCurrent(),LineSellStopPrice);
double SellStopDistance=(Bid-LineSellStopPrice)/(Point);
string SellStopDistanceStr=DoubleToStr(SellStopDistance,0);
ObjectSetText("Trade Management EA: Distance Sell Stop "+i,SellStopDistanceStr,13,"Arial",PendingColour);
ObjectMove("Trade Management EA: Distance Sell Stop "+i,0,Time[10],LineSellStopPrice);
if((Bid-LineSellStopPrice)<(Point/2))
{
SendSellMarketOrder(True);
ObjectDelete("Trade Management EA: Line Sell Stop "+i);
ObjectDelete("Trade Management EA: Ticket No Sell Stop "+i);
ObjectDelete("Trade Management EA: Distance Sell Stop "+i);
ObjectDelete("Trade Management EA: Wingding Sell Stop "+i);
}
}
else
{
ObjectDelete("Trade Management EA: Ticket No Sell Stop "+i);
ObjectDelete("Trade Management EA: Distance Sell Stop "+i);
ObjectDelete("Trade Management EA: Wingding Sell Stop "+i);
}
}
//---------ORDER OBJECTS---------------------------------------------------------
static int SIObjectOrders;
static int SITradeObjectsFontSize;
static int SITradeWingDingFontSize;
static int SITradeObjectsXDistance;
static int SITradeObjectsYDistance;
static int SITradeObjectsYSpace;
static int SIObjectStopOrders;
bool InputsChanged=False;
if(FirstRun==False)
{
if(SIObjectOrders!=ObjectOrders)
InputsChanged=True;
if(SITradeObjectsFontSize!=TradeObjectsFontSize)
InputsChanged=True;
if(SITradeWingDingFontSize!=TradeWingDingFontSize)
InputsChanged=True;
if(SITradeObjectsXDistance!=TradeObjectsXDistance)
InputsChanged=True;
if(SITradeObjectsYDistance!=TradeObjectsYDistance)
InputsChanged=True;
if(SITradeObjectsYSpace!=TradeObjectsYSpace)
InputsChanged=True;
if(SIObjectStopOrders!=ObjectStopOrders)
InputsChanged=True;
}
SIObjectOrders=ObjectOrders;
SITradeObjectsFontSize=TradeObjectsFontSize;
SITradeWingDingFontSize=TradeWingDingFontSize;
SITradeObjectsXDistance=TradeObjectsXDistance;
SITradeObjectsYDistance=TradeObjectsYDistance;
SITradeObjectsYSpace=TradeObjectsYSpace;
SIObjectStopOrders=ObjectStopOrders;
if(SendMultipleOrders<=0)
SendMultipleOrders=1;
if(ObjectOrders==True)
{
if(FirstRun==False&&InputsChanged==False)
{
int BuyMarketX=ObjectGet("Trade Management EA: Buy Market",OBJPROP_XDISTANCE);
int BuyMarketY=ObjectGet("Trade Management EA: Buy Market",OBJPROP_YDISTANCE);
int BuyMarketPresent=ObjectFind("Trade Management EA: Buy Market");
if(
(DeleteOnly==False&&(BuyMarketX!=TradeObjectsXDistance||BuyMarketY!=TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace))||
(DeleteOnly==True&&BuyMarketPresent!=0)
)
{
for(int k=0; k<SendMultipleOrders; k++)
SendBuyMarketOrder(False);
ObjectDelete("Trade Management EA: Buy Market");
}
int CloseX=ObjectGet("Trade Management EA: Close",OBJPROP_XDISTANCE);
int CloseY=ObjectGet("Trade Management EA: Close",OBJPROP_YDISTANCE);
int ClosePresent=ObjectFind("Trade Management EA: Close");
if(
(DeleteOnly==False&&(CloseX!=TradeObjectsXDistance||CloseY!=TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3)))||
(DeleteOnly==True&&ClosePresent!=0)
)
{
SendCloseOrder();
ObjectDelete("Trade Management EA: Close");
}
int SetBEX=ObjectGet("Trade Management EA: Set BE",OBJPROP_XDISTANCE);
int SetBEY=ObjectGet("Trade Management EA: Set BE",OBJPROP_YDISTANCE);
int SetBEPresent=ObjectFind("Trade Management EA: Set BE");
if(
(DeleteOnly==False&&(SetBEX!=TradeObjectsXDistance||SetBEY!=TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4)))||
(DeleteOnly==True&&SetBEPresent!=0)
)
{
SetBE();
ObjectDelete("Trade Management EA: Set BE");
}
int AutoBEX=ObjectGet("Trade Management EA: AutoBE",OBJPROP_XDISTANCE);
int AutoBEY=ObjectGet("Trade Management EA: AutoBE",OBJPROP_YDISTANCE);
int AutoBEPresent=ObjectFind("Trade Management EA: AutoBE");
if(
(DeleteOnly==False&&(AutoBEX!=TradeObjectsXDistance||AutoBEY!=TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5)))||
(DeleteOnly==True&&AutoBEPresent!=0)
)
{
static int LastAutoBETime;
if(TimeLocal()-LastAutoBETime>=2)
{
if(AutoBE==True)
AutoBE=False;
else
AutoBE=True;
ObjectDelete("Trade Management EA: AutoBE");
}
LastAutoBETime=TimeLocal();
}
int TrailX=ObjectGet("Trade Management EA: Trail",OBJPROP_XDISTANCE);
int TrailY=ObjectGet("Trade Management EA: Trail",OBJPROP_YDISTANCE);
int TrailPresent=ObjectFind("Trade Management EA: Trail");
if(
(DeleteOnly==False&&(TrailX!=TradeObjectsXDistance||TrailY!=TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6)))||
(DeleteOnly==True&&TrailPresent!=0)
)
{
static int LastTrailTime;
if(TimeLocal()-LastTrailTime>=2)
{
if(TrailActive==True)
{
TrailActive=False;
for(int l=0; l<OrdersTotal(); l++)
{
OrderSelect(l,SELECT_BY_POS);
if(OrderType()==0)
{
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),Bid+(Point*DefaultTP));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],Bid+(Point*DefaultTP));
}
if(OrderType()==1)
{
ObjectMove("Trade Management EA: Line TP "+TicketNo,0,OrderOpenTime(),Ask-(Point*DefaultTP));
ObjectMove("Trade Management EA: Line TP "+TicketNo,1,Time[iBarShift(Symbol(),Period(),OrderOpenTime())+OrderLineLength],Ask-(Point*DefaultTP));
}
}
}
else
TrailActive=True;
ObjectDelete("Trade Management EA: Trail");
}
LastTrailTime=TimeLocal();
}
int SellMarketX=ObjectGet("Trade Management EA: Sell Market",OBJPROP_XDISTANCE);
int SellMarketY=ObjectGet("Trade Management EA: Sell Market",OBJPROP_YDISTANCE);
int SellMarketPresent=ObjectFind("Trade Management EA: Sell Market");
if(
(DeleteOnly==False&&(SellMarketX!=TradeObjectsXDistance||SellMarketY!=TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8)))||
(DeleteOnly==True&&SellMarketPresent!=0)
)
{
for(k=0; k<SendMultipleOrders; k++)
SendSellMarketOrder(False);
ObjectDelete("Trade Management EA: Sell Market");
}
int BuyLimitX=ObjectGet("Trade Management EA: Buy Limit",OBJPROP_XDISTANCE);
int BuyLimitY=ObjectGet("Trade Management EA: Buy Limit",OBJPROP_YDISTANCE);
int BuyLimitPresent=ObjectFind("Trade Management EA: Buy Limit");
if(
(DeleteOnly==False&&(BuyLimitX!=TradeObjectsXDistance||BuyLimitY!=TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2)))||
(DeleteOnly==True&&BuyLimitPresent!=0)
)
{
SendBuyLimitOrder();
ObjectDelete("Trade Management EA: Buy Limit");
}
int SellLimitX=ObjectGet("Trade Management EA: Sell Limit",OBJPROP_XDISTANCE);
int SellLimitY=ObjectGet("Trade Management EA: Sell Limit",OBJPROP_YDISTANCE);
int SellLimitPresent=ObjectFind("Trade Management EA: Sell Limit");
if(
(DeleteOnly==False&&(SellLimitX!=TradeObjectsXDistance||SellLimitY!=TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7)))||
(DeleteOnly==True&&SellLimitPresent!=0)
)
{
SendSellLimitOrder();
ObjectDelete("Trade Management EA: Sell Limit");
}
if(ObjectStopOrders==True)
{
int BuyStopX=ObjectGet("Trade Management EA: Buy Stop",OBJPROP_XDISTANCE);
int BuyStopY=ObjectGet("Trade Management EA: Buy Stop",OBJPROP_YDISTANCE);
int BuyStopPresent=ObjectFind("Trade Management EA: Buy Stop");
if(
(DeleteOnly==False&&(BuyStopX!=TradeObjectsXDistance||BuyStopY!=TradeObjectsYDistance))||
(DeleteOnly==True&&BuyStopPresent!=0)
)
{
SendBuyStopOrder();
ObjectDelete("Trade Management EA: Buy Stop");
}
int SellStopX=ObjectGet("Trade Management EA: Sell Stop",OBJPROP_XDISTANCE);
int SellStopY=ObjectGet("Trade Management EA: Sell Stop",OBJPROP_YDISTANCE);
int SellStopPresent=ObjectFind("Trade Management EA: Sell Stop");
if(
(DeleteOnly==False&&(SellStopX!=TradeObjectsXDistance||SellStopY!=TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9)))||
(DeleteOnly==True&&SellStopPresent!=0)
)
{
SendSellStopOrder();
ObjectDelete("Trade Management EA: Sell Stop");
}
}
}
ObjectCreate("Trade Management EA: Buy Market",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Market",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyMarketColour);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Market",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace);
ObjectCreate("Trade Management EA: Buy Market Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Market Label","MARKET",TradeObjectsFontSize,"Arial",BuyMarketColour);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Market Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeObjectsFontSize+TradeObjectsYSpace+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Close",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Close",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Close",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Close",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Close",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3));
ObjectCreate("Trade Management EA: Close Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Close Label","CLOSE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Close Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Close Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Close Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*3)+(TradeObjectsYSpace*3)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Set BE",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Set BE",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Set BE",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Set BE",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Set BE",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4));
ObjectCreate("Trade Management EA: Set BE Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Set BE Label","SET BE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Set BE Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*4)+(TradeObjectsYSpace*4)+TradeWingDingFontSize-TradeObjectsFontSize);
if(AutoBE==True)
int AutoBEWingDing=252;
else
AutoBEWingDing=WingdingObjectOrders;
ObjectCreate("Trade Management EA: AutoBE",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: AutoBE",CharToStr(AutoBEWingDing),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: AutoBE",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5));
ObjectCreate("Trade Management EA: AutoBE Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: AutoBE Label","AUTO BE",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: AutoBE Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*5)+(TradeObjectsYSpace*5)+TradeWingDingFontSize-TradeObjectsFontSize);
if(TrailActive==True)
int TrailWingDing=252;
else
TrailWingDing=WingdingObjectOrders;
ObjectCreate("Trade Management EA: Trail",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Trail",CharToStr(TrailWingDing),TradeWingDingFontSize,"WingDings",CloseColour);
ObjectSet("Trade Management EA: Trail",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Trail",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Trail",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6));
ObjectCreate("Trade Management EA: Trail Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Trail Label","TRAIL",TradeObjectsFontSize,"Arial",CloseColour);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Trail Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*6)+(TradeObjectsYSpace*6)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Market",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Market",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellMarketColour);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Market",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8));
ObjectCreate("Trade Management EA: Sell Market Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Market Label","MARKET",TradeObjectsFontSize,"Arial",SellMarketColour);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Market Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*8)+(TradeObjectsYSpace*8)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Buy Limit",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Limit",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyLimitColour);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Limit",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2));
ObjectCreate("Trade Management EA: Buy Limit Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Limit Label","LIMIT",TradeObjectsFontSize,"Arial",BuyLimitColour);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Limit Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*2)+(TradeObjectsYSpace*2)+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Limit",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Limit",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellLimitColour);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Limit",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7));
ObjectCreate("Trade Management EA: Sell Limit Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Limit Label","LIMIT",TradeObjectsFontSize,"Arial",SellLimitColour);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Limit Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*7)+(TradeObjectsYSpace*7)+TradeWingDingFontSize-TradeObjectsFontSize);
if(ObjectStopOrders==True)
{
ObjectCreate("Trade Management EA: Buy Stop",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Stop",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",BuyStopColour);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Buy Stop",OBJPROP_YDISTANCE,TradeObjectsYDistance);
ObjectCreate("Trade Management EA: Buy Stop Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Buy Stop Label","STOP",TradeObjectsFontSize,"Arial",BuyStopColour);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Buy Stop Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+TradeWingDingFontSize-TradeObjectsFontSize);
ObjectCreate("Trade Management EA: Sell Stop",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Stop",CharToStr(WingdingObjectOrders),TradeWingDingFontSize,"WingDings",SellStopColour);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_XDISTANCE,TradeObjectsXDistance);
ObjectSet("Trade Management EA: Sell Stop",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9));
ObjectCreate("Trade Management EA: Sell Stop Label",OBJ_LABEL,0,0,0);
ObjectSetText("Trade Management EA: Sell Stop Label","STOP",TradeObjectsFontSize,"Arial",SellStopColour);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_CORNER,1);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_XDISTANCE,TradeObjectsXDistance+TradeObjectsXSpace);
ObjectSet("Trade Management EA: Sell Stop Label",OBJPROP_YDISTANCE,TradeObjectsYDistance+(TradeObjectsFontSize*9)+(TradeObjectsYSpace*9)+TradeWingDingFontSize-TradeObjectsFontSize);
}
else
{
ObjectDelete("Trade Management EA: Buy Stop");
ObjectDelete("Trade Management EA: Buy Stop Label");
ObjectDelete("Trade Management EA: Sell Stop");
ObjectDelete("Trade Management EA: Sell Stop Label");
}
FirstRun=False;
}
else
{
ObjectDelete("Trade Management EA: Buy Market");
ObjectDelete("Trade Management EA: Buy Limit");
ObjectDelete("Trade Management EA: Buy Stop");
ObjectDelete("Trade Management EA: Close");
ObjectDelete("Trade Management EA: Set BE");
ObjectDelete("Trade Management EA: AutoBE");
ObjectDelete("Trade Management EA: Trail");
ObjectDelete("Trade Management EA: Sell Market");
ObjectDelete("Trade Management EA: Sell Limit");
ObjectDelete("Trade Management EA: Sell Stop");
ObjectDelete("Trade Management EA: Buy Market Label");
ObjectDelete("Trade Management EA: Buy Limit Label");
ObjectDelete("Trade Management EA: Buy Stop Label");
ObjectDelete("Trade Management EA: Close Label");
ObjectDelete("Trade Management EA: Set BE Label");
ObjectDelete("Trade Management EA: AutoBE Label");
ObjectDelete("Trade Management EA: Trail Label");
ObjectDelete("Trade Management EA: Sell Market Label");
ObjectDelete("Trade Management EA: Sell Limit Label");
ObjectDelete("Trade Management EA: Sell Stop Label");
}
//---------MAINTAIN SESSION---------------------------------------------------------
static int NextModifyTime;
if(MaintainSession==True&&TimeLocal()>NextModifyTime)
{
i=0;
while(IsTradeContextBusy()==True)
{
Sleep(100);
i++;
if(i>100)
return(0);
}
bool IsOrderPresent=FALSE;
for(i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==MyMagicNumber)
IsOrderPresent=TRUE;
}
if(IsOrderPresent==FALSE)
{
if(OrderSend(Symbol(),OP_BUYLIMIT,MarketInfo(Symbol(),MODE_MINLOT),Point,0,0,0,0,MyMagicNumber,0)<0)
{
string ErrorString=ErrorDescription(GetLastError());
Comment("MAINTAIN SESSION ORDER OPEN FAILED. REASON: ",ErrorString);
Print("MAINTAIN SESSION ORDER OPEN FAILED. REASON: ",ErrorString);
return(0);
}
}
for(i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==MyMagicNumber)
{
if(OrderTakeProfit()!=0)
double TPPrice=0;
if(OrderTakeProfit()==0)
TPPrice=(Point*100000);
int ms1=GetTickCount();
if(OrderModify(OrderTicket(),OrderOpenPrice(),0,TPPrice,0)==False)
{
ErrorString=ErrorDescription(GetLastError());
Comment("MAINTAIN SESSION ORDER MODIFY FAILED. REASON: ",ErrorString);
Print("MAINTAIN SESSION ORDER MODIFY FAILED. REASON: ",ErrorString);
}
else
{
if(RunInfiniteLoop==True)
int Duration=28;
else
Duration=25;
NextModifyTime=TimeLocal()+Duration;
int ms2=GetTickCount();
int ExeTime=ms2-ms1;
Print("MAINTIAN SESSION EXECUTION TIME: ",ExeTime);
}
}
}
}
WindowRedraw();
if(RunInfiniteLoop==True)
Sleep(RunIntervalMS);
else
break;
}
return(0);
}
bool RunClose(int TicketNumber,double ClickedPrice,double CloseLots,string MyComment)
{
while(IsTradeContextBusy()==True)
{
Comment("RUN CLOSE: WAITING FOR TRADE CONTEXT TO BECOME UNOCCUPIED");
Sleep(10);
int i; i++;
if(i>500)
{
Comment("RUN CLOSE: TRADE CONTEXT TIMEOUT");
PlaySound("timeout.wav");
return(False);
}
}
RefreshRates();
Comment("RUN CLOSE: CLOSING POSITION");
int ms1=GetTickCount();
string ClickedTime=TimeToStr(TimeCurrent(),TIME_SECONDS);
double ClickedBid=Bid;
double ClickedAsk=Ask;
OrderSelect(TicketNumber,SELECT_BY_TICKET);
if(OrderClose(TicketNumber,CloseLots,OrderClosePrice(),100)==TRUE)
{
int ms2=GetTickCount();
OrderSelect(TicketNumber,SELECT_BY_TICKET);
string CloseTimeDMY=StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),8,2)+"-"+StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),5,2)+"-"+StringSubstr(TimeToStr(OrderCloseTime(),TIME_DATE),0,4);
string CloseTimeHMS=TimeToStr(OrderCloseTime(),TIME_SECONDS);
double ExeTime=ms2-ms1;
switch(OrderType())
{
case 0 : string Direction="SELL"; double Slippage=(OrderClosePrice()-ClickedPrice)/(Point*10);break;
case 1 : Direction="BUY";Slippage=(ClickedPrice-OrderClosePrice())/(Point*10);
}
Print("SLIPPAGE: ",Slippage);
Print("EXECUTION TIME: ",ExeTime);
int Handle=FileOpen("Execution Log/a.csv",FILE_READ|FILE_WRITE);
FileClose(Handle);
FileDelete("Execution Log/a.csv");
string FileName="Execution Log/"+AccountNumber()+"/EXECUTION LOG.csv";
Handle=FileOpen(FileName,FILE_CSV|FILE_READ|FILE_WRITE,',');
if(Handle>0)
{
FileSeek(Handle,0,SEEK_END);
FileWrite(Handle,AccountNumber(),TicketNumber,CloseTimeDMY,CloseTimeHMS,OrderSymbol(),MyComment,Direction,OrderLots(),ClickedTime,ClickedBid,ClickedAsk,ClickedPrice,OrderClosePrice(),Slippage,ExeTime);
FileClose(Handle);
PlaySound("ok.wav");
Comment("");
}
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("RUN CLOSE: FILE OPEN FAILED. REASON: ",ErrorString);
Print("FILE OPEN FAILED. REASON: ",ErrorString);
}
}
else
{
PlaySound("timeout.wav");
ErrorString=ErrorDescription(GetLastError());
Comment("RUN CLOSE: ORDER CLOSE FAILED. REASON: ",ErrorString);
Print("ORDER CLOSE FAILED. REASON: ",ErrorString);
return(False);
}
return(True);
}
int SendBuyMarketOrder(bool HiddenPending)
{
if(SendMultipleOrders==1)
{
static int LastBuyMarketTime;
if(TimeLocal()-LastBuyMarketTime<=2)
return(0);
LastBuyMarketTime=TimeLocal();
}
if(SendMultipleOrders>1)
ShowConfirm=True;
Lots=CalculateLots();
if(ShowConfirm==True&&HiddenPending==False)
{
int MessageBoxResult=MessageBox("Buy "+Symbol()+" "+DoubleToStr(Lots,2)+" lots at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
int TicketNumber=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0);
if(TicketNumber>0)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("BUY MARKET ORDER FAILED. REASON: ",ErrorString);
Print("BUY MARKET ORDER FAILED. REASON: ",ErrorString);
}
return(0);
}
int SendBuyLimitOrder()
{
static int LastBuyLimitTime;
if(TimeLocal()-LastBuyLimitTime<=2)
return(0);
LastBuyLimitTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Buy Limit "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Buy Limit "+j,OBJ_HLINE,0,TimeCurrent(),Ask-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_STYLE,LineStyleEntry);
double LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Buy Limit "+j,OBJ_TEXT,0,Time[80],LineBuyLimitPrice);
ObjectSetText("Trade Management EA: Ticket No Buy Limit "+j,"Buy Limit",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Buy Limit "+j,OBJ_TREND,0,TimeCurrent(),Ask-(DistancePendingOrder*Point),Time[10],Ask-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Limit "+j,OBJPROP_RAY,False);
LineBuyLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Limit "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Buy Limit "+j,OBJ_TEXT,0,TimeCurrent(),LineBuyLimitPrice);
//ObjectSetText("Trade Management EA: Wingding Buy Limit "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double BuyLimitDistance=(Ask-LineBuyLimitPrice)/(Point);
string BuyLimitDistanceStr=DoubleToStr(BuyLimitDistance,0);
ObjectCreate("Trade Management EA: Distance Buy Limit "+j,OBJ_TEXT,0,Time[10],LineBuyLimitPrice);
ObjectSetText("Trade Management EA: Distance Buy Limit "+j,BuyLimitDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendBuyStopOrder()
{
static int LastBuyStopTime;
if(TimeLocal()-LastBuyStopTime<=2)
return(0);
LastBuyStopTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Buy Stop "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Buy Stop "+j,OBJ_HLINE,0,TimeCurrent(),Ask+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_STYLE,LineStyleEntry);
double LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Buy Stop "+j,OBJ_TEXT,0,Time[80],LineBuyStopPrice);
ObjectSetText("Trade Management EA: Ticket No Buy Stop "+j,"Buy Stop",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Buy Stop "+j,OBJ_TREND,0,TimeCurrent(),Ask+(DistancePendingOrder*Point),Time[10],Ask+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Buy Stop "+j,OBJPROP_RAY,False);
LineBuyStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Buy Stop "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Buy Stop "+j,OBJ_TEXT,0,TimeCurrent(),LineBuyStopPrice);
//ObjectSetText("Trade Management EA: Wingding Buy Stop "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double BuyStopDistance=(LineBuyStopPrice-Ask)/(Point);
string BuyStopDistanceStr=DoubleToStr(BuyStopDistance,0);
ObjectCreate("Trade Management EA: Distance Buy Stop "+j,OBJ_TEXT,0,Time[10],LineBuyStopPrice);
ObjectSetText("Trade Management EA: Distance Buy Stop "+j,BuyStopDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendSellMarketOrder(bool HiddenPending)
{
if(SendMultipleOrders==1)
{
static int LastSellMarketTime;
if(TimeLocal()-LastSellMarketTime<=2)
return(0);
LastSellMarketTime=TimeLocal();
}
if(SendMultipleOrders>1)
ShowConfirm=True;
Lots=CalculateLots();
if(ShowConfirm==True&&HiddenPending==False)
{
int MessageBoxResult=MessageBox("Sell "+Symbol()+" "+DoubleToStr(Lots,2)+" lots at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
int TicketNumber=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0);
if(TicketNumber>0)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("SELL MARKET ORDER FAILED. REASON: ",ErrorString);
Print("SELL MARKET ORDER FAILED. REASON: ",ErrorString);
}
return(0);
}
int SendSellLimitOrder()
{
static int LastSellLimitTime;
if(TimeLocal()-LastSellLimitTime<=2)
return(0);
LastSellLimitTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Sell Limit "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Sell Limit "+j,OBJ_HLINE,0,TimeCurrent(),Bid+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_STYLE,LineStyleEntry);
double LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Sell Limit "+j,OBJ_TEXT,0,Time[80],LineSellLimitPrice);
ObjectSetText("Trade Management EA: Ticket No Sell Limit "+j,"Sell Limit",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Sell Limit "+j,OBJ_TREND,0,TimeCurrent(),Bid+(DistancePendingOrder*Point),Time[10],Bid+(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Limit "+j,OBJPROP_RAY,False);
LineSellLimitPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Limit "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Sell Limit "+j,OBJ_TEXT,0,TimeCurrent(),LineSellLimitPrice);
//ObjectSetText("Trade Management EA: Wingding Sell Limit "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double SellLimitDistance=(LineSellLimitPrice-Bid)/(Point);
string SellLimitDistanceStr=DoubleToStr(SellLimitDistance,0);
ObjectCreate("Trade Management EA: Distance Sell Limit "+j,OBJ_TEXT,0,Time[10],LineSellLimitPrice);
ObjectSetText("Trade Management EA: Distance Sell Limit "+j,SellLimitDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendSellStopOrder()
{
static int LastSellStopTime;
if(TimeLocal()-LastSellStopTime<=2)
return(0);
LastSellStopTime=TimeLocal();
for(int i=0; i<10; i++)
{
if(ObjectFind("Trade Management EA: Line Sell Stop "+i)==-1)
{
int j=i;
break;
}
}
if(UseWingDings==False)
{
ObjectCreate("Trade Management EA: Line Sell Stop "+j,OBJ_HLINE,0,TimeCurrent(),Bid-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_STYLE,LineStyleEntry);
double LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+j,OBJPROP_PRICE1),Digits);
ObjectCreate("Trade Management EA: Ticket No Sell Stop "+j,OBJ_TEXT,0,Time[80],LineSellStopPrice);
ObjectSetText("Trade Management EA: Ticket No Sell Stop "+j,"Sell Stop",10,"Arial",PendingColour);
}
else
{
ObjectCreate("Trade Management EA: Line Sell Stop "+j,OBJ_TREND,0,TimeCurrent(),Bid-(DistancePendingOrder*Point),Time[10],Bid-(DistancePendingOrder*Point));
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_WIDTH,OrderLineThickness);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_COLOR,PendingColour);
ObjectSet("Trade Management EA: Line Sell Stop "+j,OBJPROP_RAY,False);
LineSellStopPrice=NormalizeDouble(ObjectGet("Trade Management EA: Line Sell Stop "+j,OBJPROP_PRICE1),Digits);
//ObjectCreate("Trade Management EA: Wingding Sell Stop "+j,OBJ_TEXT,0,TimeCurrent(),LineSellStopPrice);
//ObjectSetText("Trade Management EA: Wingding Sell Stop "+j,CharToStr(Wingding),10,"WingDings",PendingColour);
}
double SellStopDistance=(Bid-LineSellStopPrice)/(Point);
string SellStopDistanceStr=DoubleToStr(SellStopDistance,0);
ObjectCreate("Trade Management EA: Distance Sell Stop "+j,OBJ_TEXT,0,Time[10],LineSellStopPrice);
ObjectSetText("Trade Management EA: Distance Sell Stop "+j,SellStopDistanceStr,13,"Arial",PendingColour);
return(0);
}
int SendCloseOrder()
{
static int LastCloseMarketTime;
if(TimeLocal()-LastCloseMarketTime<=2)
return(0);
LastCloseMarketTime=TimeLocal();
if(ShowConfirm==True)
{
int MessageBoxResult=MessageBox("Close all "+Symbol()+" trades at market?","",0x00000004|0x00000030);
if(MessageBoxResult!=6)
return(0);
}
RefreshRates();
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderType()<=1)
{
if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),100)==True)
PlaySound("ok.wav");
else
{
PlaySound("timeout.wav");
string ErrorString=ErrorDescription(GetLastError());
Comment("CLOSE ORDER FAILED. REASON: ",ErrorString);
Print("CLOSE ORDER FAILED. REASON: ",ErrorString);
}
}
}
return(0);
}
int SetBE()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderType()<=1)
{
int TicketNo=OrderTicket();
if(OrderProfit()>0)
ObjectMove("Trade Management EA: Line SL "+TicketNo,0,OrderOpenTime(),OrderOpenPrice());
}
}
}
double CalculateLots()
{
RefreshRates();
double LotPoint=MarketInfo(Symbol(),MODE_LOTSTEP);
if(Lots==0)
Lots=(MathFloor(((AccountEquity()*RiskPercent*0.01)/((DefaultSL*MarketInfo(Symbol(),MODE_TICKVALUE))+CommissionPerLot))/LotPoint))*LotPoint;
return(Lots);
}
Here are the features which making problems and need some changes:
1. The EA does not calculate the Risk in the right way (Please try for yourself).And so I have to calculate the Risk every Trade for myself which costs me quite a lot of time (I manage 20 Charts at the same time).
2. When the EA is going to Auto-BE after a specific amount of pips I would like to have an alarm when this happens.
3. When the EA is going to Auto-BE after a specific amount of pips I would like to have the possibility to get back to the TRAIL-function and so the Auto-BE is no longer valid for this trade.And the STOP-LOSS should move back to the original Stop-LOSS before the AUTO-BE is taking place.
4. At this time I just can set 1 Close -Profit-line in Percent (lets say 50 % of the Trade ) for 1 Position .But I would to have the possibility to set more than 1 Close-Profit -line.
5. The EA should work in the desired offline-Chart Timeframe = 8 H
I would like to share the Code with all of you now so that my some Coders may interested in making the changes as they should be for properly working
I appreciate any help here.
Attachment is the Trade-Manager-EA.
Thanks for your attention.
Greeds Zack
Attached File(s)