У меня при нажатии кнопки создается немедленный или отложенный ордер на покупку.
У меня есть функция, которая определяет, должен ли ордер быть покупкой, если текущая цена находится в пределах + - 5 пипсов от входа цена, указанная пользователем. Если цена входа больше + - 5 пипсов текущей цены, то это отложенный ордер.
Проблема заключается в том, что логи c не отправляют немедленный ордер на покупку, когда текущая цена + - 5 пипсов , Когда цена больше + - 5 пунктов, отложенные ордера выглядят нормально.
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
int whichOrderType;
int ticket;
double entryprice=StrToDouble(ObjectGetString(0,"EditEntry",OBJPROP_TEXT));
double sl=StrToDouble(ObjectGetString(0,"EditSL",OBJPROP_TEXT));
double tp=StrToDouble(ObjectGetString(0,"EditTP2",OBJPROP_TEXT));
string name="Buy";
if(ObjectGetInteger(0,name,OBJPROP_STATE)==true)
{
ObjectSetInteger(0,name,OBJPROP_STATE,false);
whichOrderType = DecideOrderType(name, entryprice); //not complete
ticket=OrderSend(Symbol(),whichOrderType,LotSize,Ask,50,sl,tp,NULL,MagicNumber,0,clrNONE);
}
name="Sell";
if(ObjectGetInteger(0,name,OBJPROP_STATE)==true)
{
ObjectSetInteger(0,name,OBJPROP_STATE,false);
whichOrderType = DecideOrderType(name,entryprice); // not complete
ticket=OrderSend(Symbol(),whichOrderType,LotSize,Ask,50,sl,tp,NULL,MagicNumber,0,clrNONE);
}
}
}
int DecideOrderType (string type, double entryprice)
{
double myAsk, myBid;
if (type == "Buy")
{
myAsk = MarketInfo(Symbol(),MODE_ASK);
//if entryprice is within 5 pips of current price then PendingOrderType = OP_BUY
//If entryprice is below < current price then PendingOrderType = OP_BUYLIMIT
if(myBid + 5*myPoint < entryprice)
{
return(OP_BUYSTOP);
}
if(myBid - 5*myPoint > entryprice)
{
return(OP_BUYLIMIT);
}
else
{
return(OP_BUY);
}
}
if (type == "Sell")
{
myBid = MarketInfo(Symbol(),MODE_BID);
//if entryprice is within 5 pips of current price then PendingOrderType = OP_SELL
//If entryprice is below > current price then PendingOrderType = OP_SELLLIMIT
//if entryprice is above > current price then PendingOrderType = OP_SELLSTOP
if(myBid + 5*myPoint < entryprice)
{
return(OP_SELLLIMIT);
}
if(myBid - 5*myPoint > entryprice)
{
return(OP_SELLSTOP);
}
else
{
return(OP_SELL);
}
}
}
double SetPoint()
{
double mPoint;
if (Digits < 4)
mPoint = 0.01;
else
mPoint = 0.0001;
return(mPoint);
}