如何保证一根均线上面只下一次订单?

 
比方说在60分钟均线上面只下一次?
 
你是说EA吗?
 
Yueh Kin Twang:
你是说EA吗?
对,不知道该怎样弄
 
if(
   (iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2)<iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,2))
&& (iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1)>iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1))
  )
OrderSend(........);

很多種方法 提供一種供你參考

 
Hung Wen Lin:

很多種方法 提供一種供你參考

刚学编程时间不长,好多东西不会。主要想的是用60分钟均线过滤,上面用5分钟上穿10分钟均线买入,结果电脑就把60分钟均线上面所有符合的买点全部给买了,

实际上最多就前面两个涨幅大点,后面的都尾巴行情,没有买入的必要。所以才有要限制次数的要求。不过还是感谢你啦,难得有几个人回答。

 
f800814:

刚学编程时间不长,好多东西不会。主要想的是用60分钟均线过滤,上面用5分钟上穿10分钟均线买入,结果电脑就把60分钟均线上面所有符合的买点全部给买了,

实际上最多就前面两个涨幅大点,后面的都尾巴行情,没有买入的必要。所以才有要限制次数的要求。不过还是感谢你啦,难得有几个人回答。

大家都是從不懂摸到懂的 慢慢來 跨時區的你要想一下 用我提的範例結果會不一樣的

參考一下這位大神編的邏輯

在MQL5代码库免费下载MetaTrader 4的'跨周期均线指标' ('fxmeter')指标, 2020.06.15

跨周期均线指标
跨周期均线指标
  • www.mql5.com
MT4跨周期均线指标,在当前图表上显示大周期的均线,比如在M30上显示日线的均线。
 

这个问题其实很简单,用一个全局变量,记录下每次开仓成功后的 H1小时的开盘时间,当然开仓之前也要比较下上次记录的时间与当下的H1的开盘时间。

对初学者来说,就这么搞。

最根本就是统计当下H1的开盘时间以来有没有持仓。

datetime lastOrder = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
      if(lastOrder!=iTime(Symbol(),PERIOD_H1,0))
      {
         int ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,30,0.0,0.0);
         if(ticket>0)
         {
            lastOrder=iTime(Symbol(),PERIOD_H1,0);
         }         
      }   
  }
//+------------------------------------------------------------------+
 

最根本就是统计当下H1的开盘时间以来有没有持仓。

input int Magic = 12345;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---

   if(TotalOrders(Magic,PERIOD_H1)==0)
   {
      //...OrderSend
   }

}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TotalOrders(int magic,ENUM_TIMEFRAMES tf)
{
   int cnt = 0;
   datetime ot = iTime(Symbol(),tf,0); 
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
         {
            if(OrderOpenTime()>=ot)
            {
               cnt++;
            }
         }
      }
   }
   return(cnt);
}
//+------------------------------------------------------------------+
 
if((TimeCurrent()-lastorderclosetime())> 60*Period()*5 )//满足条件现在要开单的时间距离上次平仓单的时间超过5根K线的时间了
      {
          //可以再开单了
      }
    return(0);
datetime lastorderclosetime()//获取历史记录中最近一单的平仓时间
    {
       datetime ltime=0;
       for(int b=OrdersHistoryTotal();b>(OrdersHistoryTotal()-200);b--)
         {
           if(OrderSelect(b,SELECT_BY_POS,MODE_HISTORY))
             {
                   if((OrderSymbol()==Symbol()))   
                    {
                       ltime=OrderCloseTime();
                       break;
                    }
             }
         }
       return(ltime);
    }
网上搜到的。你试试。把5改成1就是当根K线不再下单。
 
Ziheng Zhuang:

最根本就是统计当下H1的开盘时间以来有没有持仓。

在此感谢各位提出的意见。以前基础太薄弱了,好多东西都不懂,这段时间恶补了一下,基本上都明白了。谢谢各位!

 
统计最新下单k线时间,通过时间判断当前k线上是否已经下单。