请问有高手免费写EA吗?

 
简单思路
不看任何指标
每天挂一单
每当新的一天就计算出前一天的支点P
P=昨日的(high+low+close)/3
由P算出4个价格分别为:
buya=P+21个点
buyb=P+41个点
sella=P-21个点
sellb=P-41个点
每天中午12:00就挂单
挂单分5种判断:
1.昨日的close价格在buyb之上,在buyb挂多单;
2.昨日的close价格在buya buyb之间,在buya挂多单;
3.昨日的close价格在buya sella之间,看:
当前价格在P之上,在buya挂多单;
当前价格在P之下,在sella挂空单;
4.昨日的close价格在sella sellb之间,在sella挂空单;
5.昨日的close价格在sellb之下,在sellb挂空单。
挂单止赢20个点止损30个点
一旦挂单成交就让其自动止赢或者止损
晚上12:00即0点
没有成交的挂单撤销
准备新的挂单。
我的email zhaoji207861@163.com
 

你看看,按照你的规则,写了如下代码:

//+------------------------------------------------------------------+
//|                                               OnceDay System.mq4 |
//|                                    Copyright 2010, trad@mql4.com |
//|                                                supercase@163.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, trad@mql4.com"
#property link      "supercase@163.com"

#define MAGICMA  20100227

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   //---- check for history and trading
   if(IsTradeAllowed()==false) 
      return;
   
   CheckForCancel();
   if(CalculateCurrentOrders(Symbol())==0) 
      CheckForOpen();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
   int orders = 0;
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
         break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
         orders++;
   }
   return(orders);
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
{ 
   double p = (High[1]+Low[1]+Close[1])/3;
   double buya=p+21;
   double buyb=p+41;
   double sella=p-21;
   double sellb=p-41;
   
   if(TimeHour(TimeCurrent())!=12) return;
   
   if(Close[1]>buyb)
      OrderSend(Symbol(),OP_BUYSTOP,1,buyb,0, 30, 20,"",MAGICMA,0,Red);    
   else if(Close[1]>buya && Close[1]<buyb)
      OrderSend(Symbol(),OP_BUYSTOP,1,buya,0, 30, 20,"",MAGICMA,0,Red);    
   else if(Close[1]>sella && Close[1]<buya)
   {
      if(Close[0]>p)
         OrderSend(Symbol(),OP_BUYSTOP,1,buya,0, 30, 20,"",MAGICMA,0,Red);      
      else if(Close[0]<p)
         OrderSend(Symbol(),OP_SELLSTOP,1,sella,0, 30, 20,"",MAGICMA,0,Aqua);
   }
   else if(Close[1]>sellb && Close[1]<sella)
      OrderSend(Symbol(),OP_SELLSTOP,1,sella,0, 30, 20,"",MAGICMA,0,Aqua);
   else if(Close[1]<sellb)
      OrderSend(Symbol(),OP_SELLSTOP,1,sellb,0, 30, 20,"",MAGICMA,0,Aqua);
}
//+------------------------------------------------------------------+
//| Check for cancel order conditions                                 |
//+------------------------------------------------------------------+
void CheckForCancel()
{
   if(TimeHour(TimeCurrent())!=0) return;
    
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
         break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
      {
         if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP 
            || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         {
            OrderDelete(OrderTicket(),White);
         }
      }
   }
    
}
 

楼上兄弟好快啊

测试了好像下单错误

OrderSend error 4107
invalid price for OrderSend function

 
我没有做测试,可能下单价格上有些问题,说实在的,这样的抢帽子玩法实在木有啥好处。
 
仅仅是写个大概,让您做做参考而已。
 
trad 写道 >>

你看看,按照你的规则,写了如下代码:

我认为至少以下几行要更改:

double buya=p+21;
double buyb=p+41;
double sella=p-21;
double sellb=p-41;
更改为

double buya=p+21*Point;
double buyb=p+41*Point;
double sella=p-21*Point;
double sellb=p-41*Point;
供参考。

 

P=昨日的(high+low+close)/3
有时除不尽

如何让p保留4位小数啊

代码怎么写

 
zhaoji207861 写道 >>

P=昨日的(high+low+close)/3
有时除不尽

如何让p保留4位小数啊

代码怎么写

P = NormalizeDouble(P,MarketInfo(Symbol(),MODE_DIGITS));

 
BBL 写道 >>

我认为至少以下几行要更改:

double buya=p+21;
double buyb=p+41;
double sella=p-21;
double sellb=p-41;
更改为

double buya=p+21*Point;
double buyb=p+41*Point;
double sella=p-21*Point;
double sellb=p-41*Point;
供参考。

谢谢,粗心了没注意。

相应的这句MarketInfo(Symbol(),MODE_DIGITS),可改为Digits

 

恩不错

谢谢

好像经常有这个错误

OrderSend error 130

 
ERR_INVALID_STOPS 130 Stops 太近或是价格计算错误。 需要刷新数据 /RefreshRates.html">RefreshRates 函数重试 如果错误没有消失,尝试停止所有运行交易,改变程序逻辑。


说明止损点计算有误。

原因: