有请高手帮帮忙,我的EA不开单
这个是我周末做的小EA,不知道什么原因,测试就是不开单啊,我急啊,帮我改改可以吗 ?//---- input parameters
extern double TakeProfit = 20;
extern double StopLoss = 30;
extern double Lots = 2;
extern double TrailingStop = 50;
int period=26;
double ExtBuffer0[];
double ExtBuffer1[];
double ExtBuffer2[];
double UPBuffer[];
double DOWNBuffer[];
double MO[];
double DO[];
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_NONE);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_ARROW);
SetIndexStyle(4,DRAW_ARROW);
SetIndexArrow(3,233);
SetIndexArrow(4,234);
IndicatorDigits(Digits+1);
SetIndexBuffer(0,ExtBuffer0);
SetIndexBuffer(1,ExtBuffer1);
SetIndexBuffer(2,ExtBuffer2);
SetIndexBuffer(3,UPBuffer);
SetIndexBuffer(4,DOWNBuffer);
SetIndexBuffer(5,MO);
SetIndexBuffer(6,DO);
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;
int limit;
int counted_bars=IndicatorCounted();
double prev,current,old;
double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
double price;
double MinL=0;
double MaxH=0;
static int isCrossed= 0;
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=0; i<Bars; i++)
{
MaxH = High;
MinL = Low;
price = (High+Low)/2;
if(MaxH-MinL == 0) Value =0.67 *2*(0-0.5) +0.33 *Value1;
else Value = 0.67*2*((price-MinL)/(MaxH-MinL)-0.5) +0.33 *Value1;
Value=MathMin(MathMax(Value,-0.999),0.999);
if(1-Value == 0) ExtBuffer0=0.5+0.5*Fish1;
else ExtBuffer0=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
Value1=Value;
Fish1=ExtBuffer0;
}
bool up=true;
for(i=Bars; i>=0; i--)
{
current=ExtBuffer0;
prev=ExtBuffer0;
MO=ExtBuffer0;
DO=ExtBuffer0;
if (((current<0)&&(prev>0))||(current<0)) up=false;
if (((current>0)&&(prev<0))||(current>0)) up=true;
if(!up)
{
ExtBuffer2=current;
ExtBuffer1=0.0;
}
else
{
ExtBuffer1=current;
ExtBuffer2=0.0;
}
}
for(i=Bars; i>=0; i--)
{
if (MO>0 && MO<0)
isCrossed = 1;
UPBuffer=-0.1 ;
if (MO<0 && MO>0)
isCrossed =2 ;
DOWNBuffer=0.1;
return(0);
}
//----
total= OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask - StopLoss*Point,
Ask + TakeProfit*Point, "Fisher", 0, 0, Green);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
Print("Error opening BUY order : ", GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid + StopLoss*Point,
Bid - TakeProfit*Point, "Fisher", 0, 0, Red);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("SELL order opened : ", OrderOpenPrice());
}
else
Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
//----
for(cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY) // long position is opened
{
// check for trailing stop
if(TrailingStop > 0)
{
if(Bid - OrderOpenPrice() > Point*TrailingStop)
{
if(OrderStopLoss() < Bid - Point*TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Bid - Point*TrailingStop,
OrderTakeProfit(), 0, Green);
return(0);
}
}
}
}
else // go to short position
{
// check for trailing stop
if(TrailingStop > 0)
{
if((OrderOpenPrice() - Ask) > (Point*TrailingStop))
{
if((OrderStopLoss() > (Ask + Point*TrailingStop)) ||
(OrderStopLoss() == 0))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + Point*TrailingStop,
OrderTakeProfit(), 0, Red);
return(0);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
页:
[1]