EA: EURUSD breakout

 

EURUSD breakout:

本EA交易在两个交易时段中进行交易,从指定的时段开始时间开始交易i。止损。获利。

EURUSD breakout

作者: Vladimir Karputov

 
<br/ translate="no">

我不知道该算法基于什么策略,输入参数只是交易条件......?

 
Alex_Pushkin:

我不知道该算法基于什么策略,输入参数只是交易条件......?


策略本身是这样写的

//----最好也避开非净月日,即每月的第一个星期四。 
   if((!session_found) && (str1.hour==Start_hour_US_session))
     {
      //--- 首次计算欧盟时段的最高点和最低点。
      TopRange=iHighest(m_symbol.Name(),Period(),MODE_HIGH,24,1); // 欧盟会议期间的 24 个 M15 酒吧
      LowRange=iLowest(m_symbol.Name(),Period(),MODE_LOW,24,1);  // 欧盟会议期间的 24 个 M15 酒吧
      //---
      if(TopRange<=0.0 || LowRange<=0.0)
         return;
      //---
      if((TopRange-LowRange)<=ExtSmallEUSessionPips)
         small_session=true;
      else
         small_session=false;
      session_found=true;
      string text=(small_session)?"true":"false";
      Print("Identified new EU session + ["+
            DoubleToString(LowRange,m_symbol.Digits())+","+
            DoubleToString(TopRange,m_symbol.Digits())+"]"+
            " DayOfYear()="+IntegerToString(str1.day_of_year)+" small? "+text);
     }

我们有一个输入参数"Start_hour_US_session"-- 一旦 我们 找到当前时间(我们只比较小时数)与该参数 的对应关系,我们就开始寻找24 个条形图期间最高价格 的最高值和 24 个条形图期间最低价格的最低值。如果这些价格之差小于或等于输入参数"Small EU Session(以点为单位)",则表示已检测到"Small Session"(以点为单位)。- 那么就检测到了一个 "小时段"(波动小)--"small_session"。



当我们在 "美国时段 "内,并发现一个 "小时段"(波动小)--"small_session"时

   if(session_found && small_session && 
      (str1.hour>=Start_hour_US_session) && (str1.hour<End_hour_US_session)) // 在美国会议时间内?
     {
      //--- 计算欧盟会话范围
      //--- Print("Am in US session....small_session, bought, sold = " + small_session+bought+sold); 
      //--- Print("TopRange = " + TopRange + "LowRange = " + LowRange); 
      int h=str1.hour;
      int m=str1.min;
      if(h>Start_hour_EU_session+5 && h<Start_hour_EU_session+10)
        {//--- 至少应完成一个美国会话条形图
         //--- Print("Could be buying/selling... "+h+": "+m); 
         double low=iLow(1);
         double high=iHigh(1);
         //---
         if(low==0.0 || high==0.0)
            return;
         //---
         if(!RefreshRates())
            return;
         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }
         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }
        } // 在美国第二时间结束。 
     }// 结束小型会话

我们要等到进入 "欧盟时段",并从第一条柱状图中获取低点和高点值


开仓买入的条件:如果当天没有开仓买入,且第 1 个条形图的最低价大于 "US_session "中 24 个条形图期间最高价的最高值:

         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }


卖出条件: 如果当日尚未建立卖出仓位,且条形图 1 的最高价低于 "US_session "中 24 个条形图期间的最低价:

         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }

ds