15评论

0收藏

新系统

avatar xiaxia886 | 4862 人阅读 | 15 人评论 | 2011-12-08

+------------------------------------------------------------------+
  //|                                  FX185mq4 |
  //|                        Copyright @2006, Hua Ai (aha) |
  //|                                            |
  //+------------------------------------------------------------------+
  
  #property copyright \"Copyright @2006, Hua Ai (aha)\"
  #property link    \"\"
  
  /*
  Bago system can be categorized as a trend following system based on
  the cross of ema 5 and ema 12. When used properly on hourly chart it
  can capture daily swings of 100+ pips.
  
  The use of small number emas gives Bago system the sensitivity to
  generate early signals following 10-20 minutes scale waves, but also
  produces a great deal of false signals that can quickly drain a trader
  \'s account. So filters are extremely important for Bago system.
  
  While Bago system is largely a discretionary system, the integration of
  two excellent filters may make it possible to use a computer program
  generate signals with great high successful rate. This program is
  writtern to investigate this possiblity.
  
  The mechanism to generate a raw Bago signal is simple: ema 5 crosses
  ema 12 in the same direction as RSI 21 crosses 50 level. To abstract
  real signals, we need to pay attention to context: where the price are,
  and when the crosses happens.
  
  The greatest meaning of integrating Vegas tunnel into Bago system is,
  the tunnel as well as its fibo lines changes the original plain 2-d
  space into a twisted 2-d space. The twisted price trends now have the
  coordinates. With this coordinates system we may see the entry and exit
  with higher accuracy.
  
  So, this program will first construct the simple rules upon which the
  the raw signals are generated, then will add rules to filter those
  signals. Those new rules are quantified as parameters so they can be
  easily changed and optimized based on the output results.
  
  Enough talking, now come to business.
  */
  
  //Adjustable parameters
  /*
  extern int  TrailingStop    = 30;
  extern int  CrossEffectiveTime = 2;
  extern int  TunnelBandWidth  = 0;
  extern int  TunnelSafeZone    = 120;
  extern int  HardStopLoss    = 30;
  extern int  StopLossToFibo    = 20;
  
  extern bool  LondonOpen      = true;
  extern bool  NewYorkOpen      = true;
  extern bool  TokyoOpen      = true;
  */
  extern int  FasterEMA      = 5;
  extern int  SlowerEMA      = 12;
  extern int  RSIPeriod      = 21;
  
  extern double TotalLots      = 3.0;
  extern int  TPLevel1        = 55;
  extern double TPLevel1Lots    = 1.0;
  extern int  TPLevel2        = 89;
  extern double TPLevel2Lots    = 1.0;
  extern int  TPLevel3        = 144;
  
  //Parameters optimized for different pairs
  int  TrailingStop    = 30;
  int  CrossEffectiveTime = 2;
  int  TunnelBandWidth  = 0;
  int  TunnelSafeZone    = 120;
  int  HardStopLoss    = 30;
  int  StopLossToFibo    = 20;
  
  bool  LondonOpen      = true;
  bool  NewYorkOpen      = true;
  bool  TokyoOpen      = true;
  
  // Indicator buffers to mark the signal
  double      CrossUp[];
  double      CrossDown[];
  
  // State registers store cross up/down information
  bool      EMACrossedUp;
  bool      EMACrossedDown;
  bool      RSICrossedUp;
  bool      RSICrossedDown;
  bool      TunnelCrossedUp;
  bool      TunnelCrossedDown;
  
  // Cross up/down info should expire in a couple of bars.
  // Timer registers to control the expiration.
  int        EMACrossedUpTimer;
  int        RSICrossedUpTimer;
  int        EMACrossedDownTimer;
  int        RSICrossedDownTimer;
  
  //bool startup;
  //int SignalLabeled; // 0: initial state; 1: up; 2: down.
  //bool upalert,downalert;
  
  //+------------------------------------------------------------------+
  //| expert initialization function                      |
  //+------------------------------------------------------------------+
  int init()
  {
    if (Symbol() == \"EURUSD\")
    {
      TrailingStop      = 25;
      CrossEffectiveTime  = 2;
      TunnelBandWidth    = 5;
      TunnelSafeZone    = 120;
      HardStopLoss      = 30;
      StopLossToFibo    = 50;
      LondonOpen        = true; // ok
      NewYorkOpen      = true; // the best
      TokyoOpen        = false;// disaster  
    }
    else if (Symbol() == \"GBPUSD\")
    {
      TrailingStop      = 50;
      CrossEffectiveTime  = 2;
      TunnelBandWidth    = 8;
      TunnelSafeZone    = 160;
      HardStopLoss      = 30;
      StopLossToFibo    = 15;
      LondonOpen        = true; // ok
      NewYorkOpen      = false;// so so
      TokyoOpen        = true; // the best
    }
    else if (Symbol() == \"USDCHF\")
    {
      TrailingStop      = 70;
      CrossEffectiveTime  = 2;
      TunnelBandWidth    = 9;
      TunnelSafeZone    = 160;
      HardStopLoss      = 30;
      StopLossToFibo    = 30;
      LondonOpen        = true; // Great
      NewYorkOpen      = true; // Ok
      TokyoOpen        = true; // so so  
    }
    else if (Symbol() == \"AUDUSD\")
    {
      TrailingStop      = 60;
      CrossEffectiveTime  = 2;
      TunnelBandWidth    = 6;
      TunnelSafeZone    = 70;
      HardStopLoss      = 30;
      StopLossToFibo    = 30;
      LondonOpen        = true; // Great
      NewYorkOpen      = true; // Ok
      TokyoOpen        = true; // so so
    }
   
    // No cross
    EMACrossedUp = false;
    RSICrossedUp = false;
    TunnelCrossedUp = false;
    EMACrossedDown = false;
    RSICrossedDown = false;
    TunnelCrossedDown = false;
   
    // Reset timers
    EMACrossedUpTimer = 0;
    RSICrossedUpTimer = 0;
    EMACrossedDownTimer = 0;
    RSICrossedDownTimer = 0;
  
    //----
    return(0);
  }
  
  //+------------------------------------------------------------------+
  //| expert deinitialization function                      |
  //+------------------------------------------------------------------+
  int deinit()
  {
    //----
    EMACrossedUp = false;
    RSICrossedUp = false;
    TunnelCrossedUp = false;
    EMACrossedDown = false;
    RSICrossedDown = false;
    TunnelCrossedDown = false;
   
    EMACrossedUpTimer = 0;
    RSICrossedUpTimer = 0;
    EMACrossedDownTimer = 0;
    RSICrossedDownTimer = 0;
  
    //----
    return(0);
  }
  
  //+------------------------------------------------------------------+
  //| expert start function                            |
  //+------------------------------------------------------------------+
  int start() {
    int i, cnt, total, ticket, orders;
    double fasterEMAnow, slowerEMAnow;
    double fasterEMAprevious, slowerEMAprevious;
    double RSInow, RSIprevious;
    double VegasTunnelFast, VegasTunnelSlow;
    double VegasPriceCrossedL, VegasPriceCrossedS;
  
    if (Minute()=CrossEffectiveTime)
        RSICrossedUp = false; // Reset state register when crossed 3 bars ago
   
      // Check if there is a RSI cross down
      if ((RSInow < 50) && (RSIprevious > 50) && (RSICrossedDown == false))
      {
        RSICrossedUp  = false;
        RSICrossedDown = true;
      }
  
      if (RSICrossedDown == true)
        RSICrossedDownTimer++; // Record the number of bars the cross has happened
      else
        RSICrossedDownTimer=0; // Reset the timer once the cross is reversed
      
      if (RSICrossedDownTimer>=CrossEffectiveTime)
        RSICrossedDown = false; // Reset register when crossed 3 bars ago
  
      // Check if there is a EMA cross up
      if ( (fasterEMAnow > slowerEMAnow) &&
        (fasterEMAprevious < slowerEMAprevious) &&
        (EMACrossedUp == false) )
      {
        EMACrossedUp  = true;
        EMACrossedDown = false;
      }
  
      if (EMACrossedUp == true)
        EMACrossedUpTimer++; // Record the number of bars the cross has happened
      else
        EMACrossedUpTimer=0; // Reset the timer once the cross is reversed
      
      if (EMACrossedUpTimer>=CrossEffectiveTime)
        EMACrossedUp = false; // Reset register when crossed 3 bars ago
  
      // Check if there is a EMA cross down
      if ( (fasterEMAnow < slowerEMAnow) &&
        (fasterEMAprevious > slowerEMAprevious) &&
        (EMACrossedDown == false) )
      {
        EMACrossedUp  = false;
        EMACrossedDown = true;
      }
  
      if (EMACrossedDown == true)
        EMACrossedDownTimer++; // Record the number of bars the cross has happened
      else
        EMACrossedDownTimer=0; // Reset the timer once the cross is reversed
      
      if (EMACrossedDownTimer>=CrossEffectiveTime)
        EMACrossedDown = false; // Reset register when crossed 3 bars ago
  
      
      if ((Close[1]>VegasTunnelFast && Close[1]>VegasTunnelSlow) &&
        (Close[2]VegasPriceCrossedS+(TunnelBandWidth+StopLossToFibo)*Point)
                OrderModify(OrderTicket(),Bid,VegasPriceCrossedS+(TunnelBandWidth+StopLossToFibo)*Point,OrderTakeProfit(),0);
              continue;
            }
            else
            {
              if(AskVegasPriceCrossedS+(TPLevel1+StopLossToFibo)*Point)
                  OrderModify(OrderTicket(),Bid,VegasPriceCrossedS+(TPLevel1+StopLossToFibo)*Point,OrderTakeProfit(),0);
                continue;
              }                        
  
              // Reach 2nd TP level, close the 2nd lot, move up remainder stop to TPLevel2-StopLossToFibo
              // Or start trailing stop
              else if(AskVegasPriceCrossedS+(TPLevel2+StopLossToFibo)*Point)
                  OrderModify(OrderTicket(),Bid,VegasPriceCrossedS+(TPLevel2+StopLossToFibo)*Point,OrderTakeProfit(),0);
                continue;
              }   
  
              // Reach 1nd TP level, close the 1st lot, move up remainder stop to TPLevel1-StopLossToFibo
              else if(AskVegasPriceCrossedS+(TPLevel3+StopLossToFibo)*Point)
                  OrderModify(OrderTicket(),Bid,VegasPriceCrossedS+(TPLevel3+StopLossToFibo)*Point,OrderTakeProfit(),0);
                continue;
              }        
            }
          }
        }
      }
  
  /*  }
    if (Minute()==0 && Seconds()>30)
    {
  */
  
      // *********************************************************************
      // Based on states, determine entry situations.
      // *********************************************************************
  
      //Check the trading time
      if ( !((LondonOpen==true && Hour()>=7 && Hour()=12 && Hour()=0 && Hour()=23 && Hour()
""
还没有人打赏,支持一下

评论|共 15 个

圆念

发表于 2015-5-15 22:44:49 | 显示全部楼层


继续,学习了

最他妈不是人

发表于 2015-5-15 23:00:56 | 显示全部楼层

我靠

ddyyhh

发表于 2015-5-16 00:15:39 | 显示全部楼层

感谢分享

许闻

发表于 2015-5-18 21:22:50 | 显示全部楼层

[s:145]

暗色调

发表于 2020-1-5 19:17:25 | 显示全部楼层

真是 收益 匪浅

请填写用户名

发表于 2020-6-29 12:50:57 | 显示全部楼层

没看完~~~~~~ 先顶,好同志

狗官烨宝

发表于 2020-7-9 22:23:05 | 显示全部楼层

学习了,不错

zhouyi

发表于 2020-7-16 13:00:55 | 显示全部楼层

谢谢楼主分享

坏女孩6

发表于 2020-8-5 17:28:48 | 显示全部楼层

谢谢楼主分享

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则