จากที่ถามไปคราวก่อนลองไปทำ EA fxdoublelots ของตัวเอง พบว่ามีปัญหาคือราคาที่ได้ะค่อนข้าง vary แล้วผมไม่สามารถแก้การซื้อเป็น buylimit ได้ เลยมาขอ admin ช่วยแก้ครับ
int start()
{
double startlot = 0.1;
double lot;
double lastprice;
double type; //buy =0 , sell = 1 //
double total = OrdersTotal();
double pc = iClose(NULL,0,1);
int ticket;
//----
{
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
lot = OrderLots();
lastprice = OrderOpenPrice();
type = OrderType();
}
if ((total == 0) && (iRSI(NULL,0,14,PRICE_CLOSE,1)>50))
{
ticket=OrderSend(Symbol(),OP_BUY,startlot,Ask,3,0,0,"buy start",0,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
}
if ((total == 0) && (iRSI(NULL,0,14,PRICE_CLOSE,1)<50))
{
ticket=OrderSend(Symbol(),OP_SELL,startlot,Bid,3,0,0,"sell start",0,0,Red);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
}
if (total > 0)
{
//// doublelot ///
if ((type == 0) && ((lastprice - pc) > (25 * Point)) && (lot <= 0.)
{
ticket=OrderSend(Symbol(),OP_BUY,lot*2,Ask,3,0,0,"buy",0,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
}
if ((type == 1) && ((pc - lastprice) > (25 * Point)) && (lot <= 0.)
{
ticket=OrderSend(Symbol(),OP_SELL,lot*2,Bid,3,0,0,"sell",0,0,Red);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
}ส่วนนี้อยากแก้เป็น ซื้อแล้ววาง buylimit รอถ้าไม่มี buylimit ให้วางอันต่อ แต่ผม check buylimit อันล่าสุดไม่เป็น (lot , size , ....)//// close all take profit ///
if ((type == 0) && ((pc - lastprice) > (25 * Point)) )
{
CloseAll();
}
if ((type == 1) && ((lastprice - pc) > (25 * Point)) )
{
CloseAll();
}
//// close all stop lose ////
if ((type == 0) && ((lastprice - pc) > (25 * Point)) && (lot >= 0.
)
{
CloseAll();
}
if ((type == 1) && ((pc - lastprice) > (25 * Point)) && (lot >= 0.
)
{
CloseAll();
}
}
//----
return(0);
}
void CloseAll()
{ while(OrdersTotal()>0)
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int type = OrderType();
bool result = false;
switch(type)
{
case OP_BUY : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink);
break;
case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink);
break;
case OP_BUYSTOP : result = OrderDelete(OrderTicket());
break;
case OP_SELLSTOP : result = OrderDelete(OrderTicket());
break;
case OP_BUYLIMIT : result = OrderDelete(OrderTicket());
break;
case OP_SELLLIMIT : result = OrderDelete(OrderTicket());
}
}
}
}