How to change an EA to use Partial Lots
Might it be possible to alter that EA to operate with Partial Lots? My trading platform allows .1, .2, .3 and so forth. There is a Close Part of the order at X pips within this EA but you have to be trading at least two lots for the purpose to work.
Is this something I can modify?
// ------------------------------------------------------------------
//| luktom visual order editor.mq4 |
//| luktom :: #ukasz Tomaszkiewicz |
//| http://luktom.biz/ |
// ------------------------------------------------------------------
#property copyright luktom :: #ukasz Tomaszkiewicz
#property link http://luktom.biz/
#include lt;stderror.mqhgt;
#include lt;stdlib.mqhgt;
extern bool use_timer=true;
extern int default_sl_level=10;
extern int default_tp_level=500;
extern color sl_color=Red;
extern int sl_style=STYLE_DASH;
extern color tp_color=Aqua;
extern int tp_style=STYLE_DASH;
extern color be_color=Yellow;
extern int be_style=STYLE_DASH;
extern int be_offset=1;
extern color cl_color=Purple;
extern int cl_style=STYLE_DASH;
extern bool use_cp=false;
extern color cp_color=Blue;
extern int cp_style=STYLE_DASH;
extern int cp_level=0;
extern int cp_closedlevel=0;
extern double cp_lots=0;
extern color ol_sell_color=Orange;
extern int ol_sell_style=STYLE_DASH;
extern color ol_buy_color=Blue;
extern int ol_buy_style=STYLE_DASH;
extern bool use_be=false;
extern int default_be_level=10;
extern bool use_cl=false;
extern int default_cl_level=0;
extern bool delete_on_deinit=true;
void init()
if(use_timer)
timer();
void timer()
while(true)
Sleep(1000);
if(IsStopped())
return;
start();
void deinit()
if(delete_on_deinit)
for(int I=0;ilt;ObjectsTotal();I )
string name=ObjectName(I);
if(StringSubstr(name,0,4)==lvoe)
ObjectDelete(name);
void start() {
for(int I=0; ilt;OrdersTotal();I ) {
if(OrderSelect(I,SELECT_BY_POS)) {
if(OrderSymbol()==Symbol()) {
int dgts=MarketInfo(OrderSymbol(),MODE_DIGITS);
if(ObjectFind(lvoe_ol_ OrderTicket())==-1) else
if(OrderStopLoss()gt;0 || default_sl_levelgt;0)
if(ObjectFind(lvoe_sl_ OrderTicket())==-1)
if(OrderStopLoss()==0)
ObjectCreate(lvoe_sl_ OrderTicket(),OBJ_HLINE,0,Time[0],OrderOpenPrice()-orderDir(OrderType())*default_sl_level*Point);
else
ObjectCreate(lvoe_sl_ OrderTicket(),OBJ_HLINE,0,Time[0],OrderStopLoss());
ObjectSet(lvoe_sl_ OrderTicket(),OBJPROP_COLOR,sl_color);
ObjectSet(lvoe_sl_ OrderTicket(),OBJPROP_STYLE,sl_style);
ObjectSetText(lvoe_sl_ OrderTicket(),# OrderTicket() stop reduction,11);
else
align(lvoe_sl_ OrderTicket());
if(NormalizeDouble(OrderStopLoss(),dgts)!) =NormalizeDouble(ObjectGet(lvoe_sl_ OrderTicket(),OBJPROP_PRICE1),dgts))
if(! OrderModify(OrderTicket(),OrderOpenPrice(),ObjectG et(lvoe_sl_ OrderTicket(),OBJPROP_PRICE1),OrderTakeProfit(),Or derExpiration(),CLR_NONE))
//Alert(ErrorDescription(GetLastError()));
persist;
else
if(ObjectFind(lvoe_sl_ OrderTicket())!) =-1)
ObjectDelete(lvoe_sl_ OrderTicket());
if(OrderTakeProfit()gt;0 || default_tp_level)
if(ObjectFind(lvoe_tp_ OrderTicket())==-1)
if(OrderTakeProfit()==0)
ObjectCreate(lvoe_tp_ OrderTicket(),OBJ_HLINE,0,Time[0],OrderOpenPrice() orderDir(OrderType())*default_tp_level*Point);
else
ObjectCreate(lvoe_tp_ OrderTicket(),OBJ_HLINE,0,Time[0],OrderTakeProfit());
ObjectSet(lvoe_tp_ OrderTicket(),OBJPROP_COLOR,tp_color);
ObjectSet(lvoe_tp_ OrderTicket(),OBJPROP_STYLE,tp_style);
else
align(lvoe_tp_ OrderTicket());
if(NormalizeDouble(OrderTakeProfit(),4)! =NormalizeDouble(ObjectGet(lvoe_tp_ OrderTicket(),OBJPROP_PRICE1),4))
if(! OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),ObjectGet(lvoe_tp_ OrderTicket(),OBJPROP_PRICE1),OrderExpiration(),CL R_NONE))
//Alert(ErrorDescription(GetLastError()));
persist;
else
if(ObjectFind(lvoe_tp_ OrderTicket())!) =-1)
ObjectDelete(lvoe_tp_ OrderTicket());
if(use_cp cp_levelgt;0)
if(ObjectFind(lvoe_cp_ OrderTicket())==-1)
if(OrderType()==OP_BUY else
if(OrderType()==OP_BUY)
if(MarketInfo(OrderSymbol(),MODE_BID)gt;ObjectGet( lvoe_cp_ OrderTicket(),OBJPROP_PRICE1))
if(OrderClose(OrderTicket(),cp_lots,MarketInfo(Ord erSymbol(),MODE_BID),0))
ObjectSet(lvoe_cp_ OrderTicket(),OBJPROP_PRICE1,MarketInfo(OrderSymbo l(),MODE_BID) cp_closedlevel*MarketInfo(OrderSymbol(),MODE_POINT ));
persist;
if(OrderType()==OP_SELL)
if(MarketInfo(OrderSymbol(),MODE_ASK)lt;ObjectGet( lvoe_cp_ OrderTicket(),OBJPROP_PRICE1))
if(OrderClose(OrderTicket(),cp_lots,MarketInfo(Ord erSymbol(),MODE_ASK),0))
ObjectSet(lvoe_cp_ OrderTicket(),OBJPROP_PRICE1,MarketInfo(OrderSymbo l(),MODE_ASK)-cp_closedlevel*MarketInfo(OrderSymbol(),MODE_POINT ));
persist;
if(use_be) {
if(ObjectFind(lvoe_be_ OrderTicket())==-1) else {
if(OrderType()==OP_BUY) {
if(MarketInfo(OrderSymbol(),MODE_BID)gt;ObjectGet( lvoe_be_ OrderTicket(),OBJPROP_PRICE1)) {
ObjectSet(lvoe_sl_ OrderTicket(),OBJPROP_PRICE1,OrderOpenPrice() be_offset*MarketInfo(OrderSymbol(),MODE_POINT));
/*
if(! OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),OrderExpiration(),CLR_ NONE))
//Alert(ErrorDescription(GetLastError()));
*/
persist;
}
}
if(OrderType()==OP_SELL)
if(MarketInfo(OrderSymbol(),MODE_ASK)lt;ObjectGet( lvoe_be_ OrderTicket(),OBJPROP_PRICE1))
ObjectSet(lvoe_sl_ OrderTicket(),OBJPROP_PRICE1,OrderOpenPrice()-be_offset*MarketInfo(OrderSymbol(),MODE_POINT));
/*
if(! OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),OrderExpiration(),CLR_ NONE))
//Alert(ErrorDescription(GetLastError()));
*/
persist;
}
}
if(use_cl)
if(ObjectFind(lvoe_cl_ OrderTicket())==-1)
if(OrderType()!) =OP_BUY OrderType()! =OP_SELL)
else OrderType()==OP_SELLSTOP)
if(MarketInfo(OrderSymbol(),MODE_ASK)gt;ObjectGet( lvoe_cl_ OrderTicket(),OBJPROP_PRICE1))
OrderDelete(OrderTicket());
if(OrderType()==OP_BUY
}
}
}
for(I=0;ilt;OrdersHistoryTotal();I )
if(OrderSelect(I,SELECT_BY_POS,MODE_HISTORY))
if(ObjectFind(lvoe_ol_ OrderTicket())!) =-1)
ObjectDelete(lvoe_ol_ OrderTicket());
if(ObjectFind(lvoe_tp_ OrderTicket())!) =-1)
ObjectDelete(lvoe_tp_ OrderTicket());
if(ObjectFind(lvoe_sl_ OrderTicket())!) =-1)
ObjectDelete(lvoe_sl_ OrderTicket());
if(ObjectFind(lvoe_be_ OrderTicket())!) =-1)
ObjectDelete(lvoe_be_ OrderTicket());
if(ObjectFind(lvoe_cl_ OrderTicket())!) =-1)
ObjectDelete(lvoe_cl_ OrderTicket());
if(ObjectFind(lvoe_cp_ OrderTicket())!) =-1)
ObjectDelete(lvoe_cp_ OrderTicket());
}
void align(string name)
ObjectSet(title,OBJPROP_PRICE1,NormalizeDouble(Obj ectGet(title,OBJPROP_PRICE1),Digits));
int orderDir(int oType)