发个均线EA请高手帮忙指导修改
弄了个EA系统,但不知道是不是没弄好,挂了一天都没交易发生,老是提示:买进(卖进)不成功、平仓不成功。
我的思路是15M,2金叉(死叉)自动开多(空)单并平仓。下面把代码发出来,请高手帮忙修改。先谢过了!
/* 未通过测试
//+------------------------------------------------------------------+
//|                                                 390361808_v1.mq4 |
//|                                        Copyright 2009, 390361808 |
//|                                         http://www.390361808.com |
//+------------------------------------------------------------------+
===============================================================================================
  功能简介: 本智能的中文名字:MA交叉短线王
  工作原理:1. 由My_Open()函数检测MA()交叉是否发生
            2. 当发生交叉时,发出交易信号
            3. 系统收到交易信号后,先进行对冲平仓
   4. 然后按交易信号方向开仓
  
  使用事项:1. 本智能对均线指标提供二组(各三个)参数输入窗口,可由用户自由设定,软件设计者则可以优化该等参数。
================================================================================================ */   
#property copyright "Copyright 2009, 390361808"
#property link      "http://www.390361808.com"
//+------------------------------------------------------------------+
//| 交易变量。
//+------------------------------------------------------------------+
extern double nEverytimeLost = 0.2;   // 每次下单手数。
extern double nMinLost = 0.1;         // 最小手数。
extern double nMaxMargin = 0.3;       // 最大可使用保证金比率。 
//+------------------------------------------------------------------+
//| 指标参数。
//+------------------------------------------------------------------+
extern int FastPeriod=2;
extern int SlowPeriod=14;
extern string cMethod = "0.SMA, 1.EMA, 2.SMMA, 3.LWMA";
extern int FastMethod=0;
extern int SlowMethod=0;
extern string cAppliedPrice = "0.CLOSE, 1.OPEN, 2.HIGH, 3.LOW, 4.(H+L)/2, 5.(H+L+C)/3, 6.(H+L+C+C)/4";
extern int FastAppliedPrice = 0;
extern int SlowAppliedPrice = 0;
//+------------------------------------------------------------------+
//| 公共变量。
//+------------------------------------------------------------------+
int nRunPrevtime=0;
//+------------------------------------------------------------------+
int start()
{
  int j;   double RealSendLots;
  //--- 运行K线控制 ----------------------------------------
   if(Time[0]==nRunPrevtime ) { return(0); }
   nRunPrevtime = Time[0];
  //--- 确定交易手数 ---------------------------------------
  RealSendLots = SendLots();
  if( RealSendLots==0 ) { return(0); }  //资金不足
  //--- 判断开仓条件 ---------------------------------------
  j = My_Open(1);
  if( j==-1 ) { return(0); }            // -1 没有交易信号  0 做多  1 做空
 
  //-- 对冲平仓 --------------------------------------------
  if( CloseOrderDirect( "", j )==-1 ) { return(0); }
  //--- 发送定单 -------------------------------------------
  SendOrderSimple( j, RealSendLots );
//-------------
  return(0);
}
//+------------------------------------------------------------------+
double SendLots()
{
  double XyBaoZhenJing,YyBaoZhenJing,KyBaoZhenJing,nE_Lots,nE_TotalJe;
  int EA_Count,EA_OpenNum=0;
//---------
  KyBaoZhenJing = AccountFreeMargin();                            // 可用保证金
  YyBaoZhenJing = AccountMargin();                                // 已用保证金
  XyBaoZhenJing = MarketInfo(Symbol(),MODE_MARGINREQUIRED);     // 一个标准手需保证金金额。
//---------
  nE_Lots = nEverytimeLost;
  XyBaoZhenJing = XyBaoZhenJing * nE_Lots ;
  if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing) >= nMaxMargin )  // 资金不足改用最小下单量试算
  {
    nE_Lots = nMinLost;
    XyBaoZhenJing = XyBaoZhenJing * nE_Lots ;
    if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing) >= nMaxMargin ) { return(0); }
  }
//---------
  return(nE_Lots);
}
//+------------------------------------------------------------------+
int My_Open(int nW_Shift)
{
  double nFastValue1,nSlowValue1,nFastValue2,nSlowValue2;
  nFastValue1 = iMA(Symbol(),0,FastPeriod,0,FastMethod,FastAppliedPrice,nW_Shift );
  nFastValue2 = iMA(Symbol(),0,FastPeriod,0,FastMethod,FastAppliedPrice,nW_Shift+1 );
  nSlowValue1 = iMA(Symbol(),0,SlowPeriod,0,SlowMethod,SlowAppliedPrice,nW_Shift );
  nSlowValue2 = iMA(Symbol(),0,SlowPeriod,0,SlowMethod,SlowAppliedPrice,nW_Shift+1 );
  if( nFastValue1>nSlowValue1 && nFastValue2<=nSlowValue2 ) { return(0); }
  if( nFastValue1=nSlowValue2 ) { return(1); }
//----
  return(-1);
//----
}
//+------------------------------------------------------------------+
int CloseOrderDirect( string cE_CloseInformation, int nE_CloseMode )
{
  int EA_Count;
  int iP_CloseCount;  bool bP_Closed=false;
  //---------
  for( EA_Count=0; EA_Count0 && iE_Ticket!=1000 ) { break; }
  }
//----
  if( iE_Ticket>0 && iE_Ticket!=1000 ) { Alert( cE_AlertMess+"成功!" ); return(1); }
  else { Alert( cE_AlertMess+"不成功!" ); }
//----
  return(0); 
}
//+------------------------------------------------------------------+  










