请问MT4的EA能否做到设定价格区域后等待价格合适立即交易

 

请问论坛的各位大大,

我是新人,做日内波段交易,我对24小时盯盘感到痛苦!

请问是否可以做一个EA我输入价格范围(这个价格跟当前价格差点在100点以内),然后让它自己等待价格 符合设定范围后,自己执行“立即买入”来交易?

做波段来说好的进场位置非常重要,求高手告诉我MT4的接口是否能做到我提的这些要求。

一般来说是在当前200点以外不能挂单,但我这个方法理论上可以行的同,我只是想要一个好的进场位置,麻烦高人赐教! 

 
 
求回复
 
jarshi:

请问论坛的各位大大,

我是新人,做日内波段交易,我对24小时盯盘感到痛苦!

请问是否可以做一个EA我输入价格范围(这个价格跟当前价格差点在100点以内),然后让它自己等待价格 符合设定范围后,自己执行“立即买入”来交易?

做波段来说好的进场位置非常重要,求高手告诉我MT4的接口是否能做到我提的这些要求。

一般来说是在当前200点以外不能挂单,但我这个方法理论上可以行的同,我只是想要一个好的进场位置,麻烦高人赐教! 

当然可以做。这个你可以花钱找开发者实现。
 
这个要求很简单
 

简单么,我要求实际是在当前价格很近的点差内(不能挂单)设置价格,等到价格到了这个范围,执行“立即买入”或者“立即卖出”,哪位大大能给一点思路呢?

我没有找到立即买入的函数! 

 
普通的ordersend就行了
 

立即买入功能用哪个函数调呢?MQL4里?

各位谁能指点下? 

 
我写了一段,但他根本就不执行啊,大家谁能给看下那有问题?
//+------------------------------------------------------------------+
//|                                                  OrderIntime.mq4 |
//|                                         Copyright 2014, Jarshi`s |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Jarshi`sQQ:89588391"
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
 
extern int waiting_time=15;
extern double lot_vol=0.1;   
extern double price_wanted;
extern int acting_mode;   //0卖,1是买 
extern int magic=405215;
 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   DrawLabel("will1","www.zhinngiaoi.com,QQ:2756892070",2,13,"宋体",9,Aqua,0);
//---
   return(INIT_SUCCEEDED);
  }
  int start()
  {
      
      int if_doit=0; 
          while(if_doit==0)
          {
             if(instantDoit(lot_vol,acting_mode,price_wanted, TimeLocal()+waiting_time*60)>0)
               {
                  if_doit=1;
               }
             
              Sleep(100);
          }
       return(0);    
  }
    
   
  //执行立即买入
  int instantDoit(double lots,int mode ,double priceat,datetime exptime)
  {
   int ticket=0;
   if(mode==1)
   {  
      if(priceat<=Bid)
      {
         ticket=OrderSend(Symbol( ) ,OP_BUY,lots,priceat,0,0,0,Symbol()+"buy",magic,exptime,White); 
      }
      
   }
   else
   {
      if(priceat>=Ask)
      {
         ticket=OrderSend(Symbol( ) ,OP_SELL,lots,priceat,0,0,0,Symbol()+"sell",magic,exptime,White); 
      }
      
   }
    if(ticket<0)
     {
      Print("OrderSend failed with error #",GetLastError());
     }
   else
      Print("OrderSend placed successfully");
    
      
      return(ticket);  
  }
 void DrawLabel(string name,string text,int X,int Y,string FontName,int FontSize,color FontColor,int zhongxin)
{
   if(ObjectFind(name)!=0)
   {
    ObjectDelete(name);
    ObjectCreate(name,OBJ_LABEL,0,0,0);
      ObjectSet(name,OBJPROP_CORNER,zhongxin);
      ObjectSet(name,OBJPROP_XDISTANCE,X);
      ObjectSet(name,OBJPROP_YDISTANCE,Y);
    }  
   ObjectSetText(name,text,FontSize,FontName,FontColor);
   WindowRedraw();
}
 
 

不是几句话说得清。

把你的开仓函数instantDoit中的OP_BUY 改成 OP_BUYLIMIT,把OP_SELL改成OP_SELLLIMIT。 

 

几个问题:

(1)主函数里面的循环会导致重复一致下单,你应该效验当前订单数量,如果达到你的期望,则不要再开仓了。

(2)你要下市价单,那么下单函数里面的价格OP_BUY 应该对应Ask,OP_Sell应该对应Bid,市价单没有有效期之说,可去掉。

(3)ticket<=0 打印报错,而不是ticket<0。

 
加强基础编程工作能力 。
原因: