ผมได้ให้พี่คนหนึ่งเขียนอีเอให้แล้วผมเอามาโมใหม่
แต่แบคเทสแล้วมีบางช่วงที่อีเอปิดออเดอร์เองทั้งๆที่ไม่โดน SL
อยากให้แอดมินช่วยดูให้ทีครับ
extern int TP = 25;
extern double Lots = 0.1;
extern int SL = 20;
int OpenOrders=0, cnt=0;
int slippage=2;
double sl=0;
double BuyPrice=0, SellPrice=0;
double lotsi=0, mylotsi=0;
int mode=0;
double M1,M2,cci46,cci42,RSi;
double M11, M21;
double PClose,POpen;
int ticket, order_Type;
datetime openTime, closeTime;
double orderSize, openPrice, closePrice, sf, tf, comm, swap, profit;
string order_Symbol, order_TypeToStr;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(MarketInfo("EURUSD",MODE_DIGITS)==5)
{
TP = TP*10;
SL = SL*10;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int handle;
for(int i=0;i<OrdersHistoryTotal();i++)
{
GetHistoryOrder(i,MODE_HISTORY);
if(order_Type==0)
order_TypeToStr="buy";
if(order_Type==1)
order_TypeToStr="sell";
handle=FileOpen("getOrderHistory.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');
if(handle>0)
{
if(FileSeek(handle,0,SEEK_SET)==true)
FileWrite(handle, "Order","Open Time","Type","Size","Symbol","Open Price","S/L","T/F","Close Time","Close Price","Comission","Swap","Profit");
FileSeek(handle, 0, SEEK_END);
//---- add data to the end of file
FileWrite(handle, ticket,TimeToStr(openTime,TIME_DATE|TIME_SECONDS),order_TypeToStr, orderSize, order_Symbol, openPrice, sf, tf, TimeToStr(closeTime,TIME_DATE|TIME_SECONDS), comm, swap, profit);
FileClose(handle);
handle=0;
}
}
OpenOrders=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol())
{
OpenOrders++;
}
}
M1 = iMACD(NULL,0,18,39,4,PRICE_CLOSE,MODE_MAIN,0);
M2 = iMACD(NULL,0,18,39,4,PRICE_CLOSE,MODE_SIGNAL,0);
cci46 = iCCI(NULL,0,42,PRICE_CLOSE,1);
cci42 = iCCI(NULL,0,30,PRICE_CLOSE,1);
RSi = iRSI(NULL,0,14,PRICE_CLOSE,0);
PClose = iClose(NULL,0,1);
POpen = OrderOpenPrice();
/*
Comment (
"\nLots = ",Lots,
"\norderSize = ",orderSize,
"\nprofit = ",profit);
*/
if (OpenOrders<1)
{
if ((M1>M2)&&(M2>0.0003)&&(M2<0.001)&&((RSi>65)||((cci42>150)&&(cci46>150))))
{
SellPrice=Bid;
if (SL==0) { sl=0; }
else { sl=SellPrice+SL*Point; }
if (profit>=0) {mylotsi = Lots;}
else {mylotsi = NormalizeDouble(orderSize*2,1);}
OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,0,NULL,0,0,Red);
return(0);
}
if ((M1<M2)&&(M2<-0.0003)&&(M2>-0.001)&&((RSi<35)||((cci42<-150)&&(cci46<-150))))
{
BuyPrice=Ask;
if (SL==0) { sl=0; }
else { sl=BuyPrice-SL*Point; }
if (profit>=0) {mylotsi = Lots;}
else {mylotsi = NormalizeDouble(orderSize*2,1);}
OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,sl,0,NULL,0,0,Blue);
return(0);
}
}
//-------------------------------------Cut OrderClose-----------------------------
if(OpenOrders!=0 && PClose-POpen>=TP*Point)
{
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol())
{
if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Blue); }
}
}
}
if(OpenOrders!=0 && POpen-PClose>=TP*Point)
{
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol())
{
if (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red); }
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
void GetHistoryOrder(int count,int mode)
{
if(OrderSelect(count, SELECT_BY_POS, mode)==true)
{
ticket=OrderTicket();
order_Type=OrderType();
openTime=OrderOpenTime();
closeTime=OrderCloseTime();
orderSize=OrderLots();
openPrice=OrderOpenPrice();
closePrice=OrderClosePrice();
sf=OrderStopLoss();
tf=OrderTakeProfit();
comm=OrderCommission();
swap=OrderSwap();
profit=OrderProfit();
order_Symbol=OrderSymbol();
}
else
Print("OrderSelect returned the error of ",GetLastError());
}