ผมให้ EA pending order เมื่อเข้าเงื่อนไข แต่ถ้าหากว่า iAO เปลี่ยน ให้Delete pending ทิ้ง
แต่ที่ผมเจอคือพอขึ้นแท่งใหม่ EA ผมจะ Delete ทิ้งหมดเลย โดยที่ iAO ยังไม่เข้าเงื่อนไขครับ
ผมเป็นมือใหม่เพิ่งหัดเขียน
รบกวนท่านผู้รู้แนะนำทีครับ ผิดพลาดตรงไหน ขอบคุณครับ
void OnTick()
{
//---
double first_price = Open[0];
double mabig = iMA(NULL,15,120,0,MODE_SMA,PRICE_CLOSE,0);
double AObig = iAO(NULL,15,0);
double ma = iMA(NULL,0,120,0,MODE_SMA,PRICE_CLOSE,0);
double AO =iAO(NULL,0,0);
int total =OrdersTotal();
PreLots = MathFloor((AccountBalance()/pos_per_lot));//Calculate lots++++++++++++
Lots = PreLots *0.01;
double minlot=0.01;
if (Lots < 0.01){Lots = 0.01;}
if (Lots > maxlot){Lots = maxlot;}
if (Lots < minlot){Lots= minlot;}
string now=TimeToStr(TimeCurrent(),TIME_SECONDS);
datetime server_time=StrToTime(now);
datetime TimeStart = StrToTime(StartTrade);
if(Volume[0]<4)
if(total < 50 )
if(first_price > mabig && first_price > ma)
if(AObig > 0 && AO >0)
if(server_time = TimeStart){
{
OrderSend(Symbol(), OP_BUYSTOP, Lots, first_price+Distance*Point, 3, (first_price+Distance*Point)-StopLoss*Point, (first_price+Distance*Point)+TakeProfit*Point,ordercomment, MAGICMA, 2, Blue);
}}
if(Volume[0]<4)
if(total < 50 )
if(first_price < mabig && first_price < ma)
if(AObig < 0 && AO < 0)
if(server_time = TimeStart){{
OrderSend(Symbol(), OP_SELLSTOP, Lots, first_price-Distance*Point, 3, (first_price-Distance*Point)+StopLoss*Point, (first_price-Distance*Point)-TakeProfit*Point, ordercomment, MAGICMA, 2, Red);
}}
trailingstop();
DeleteBuyStop();
DeleteSellStop();
}
//+------------------------------------------------------------------+
void trailingstop() {
for(int count=0;count<OrdersTotal();count++)
{OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
if(OrderType() == OP_BUY)
{if(TrailingStop > 0){
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{if(OrderStopLoss()==0 || (Bid - OrderStopLoss()> TrailingStop*Point))
{OrderModify(OrderTicket(), OrderOpenPrice(),Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue); }
}
}
}
if(OrderType() == OP_SELL)
{ if(TrailingStop > 0)
{if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if(OrderStopLoss() == 0 || ( OrderStopLoss()-Ask > TrailingStop*Point ) )
{OrderModify(OrderTicket(), OrderOpenPrice(),Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red); }
}
}
}
}
}
//====================================================//
void DeleteBuyStop()
{
double AO =iAO(NULL,0,0);
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP)
if(AO < 0)
{
OrderDelete(OrderType(),clrGold);
}
}
}
//=================================================//
void DeleteSellStop()
{
double AO =iAO(NULL,0,0);
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELLSTOP)
if(AO > 0)
{
OrderDelete(OrderType(),clrGold);
}
}
}
//======================================================//