Note

AOEA源码分享(EA部分)

· Views 7,332

具体设置参数按照默认参数,1000美金;如果小于1000美金需要自行调整开仓手数。感兴趣的可以好好去研究一下,这可以通过2001年到现在为止都没有爆仓并盈利的马丁策略源码,你们且用且珍惜。

#########源码部分
extern double StepLens = 160;
extern double ProfitPoints = 150;
double Lots=0.01;
extern double MaxLots = 0.05;
extern double MinLots = 0.01;
extern int   nMagicNumber = 198815;
extern int    TF          = 200;   
extern double StopK = 0.618;
extern bool  bECN   = false;
bool TrailingStop = false;
string comment = "AOEA_";
double SLSpread     = 0;
double Fee          = 0;
double NetOrderPrice = 0;
int   arrID[255]3;
int   arrK[255]2;
int   nPos = 0;
int   nLayer = 3;
int   nDir = 0;//buy = 1, sell = -1, no = 0
double nLots = 0.01;
double LLV, LLV1, HHV, HHV1;
bool  bReady = false;
//+------------------------------------------------------------------+
//| Init  function                                                   |
//+------------------------------------------------------------------+
   void init ()
   {
      int i = 0;
     
      arrK[i]0 = 1;
      arrK[i + 1]0 = 2;
      arrK[i]1 = 1;
      arrK[i + 1]1 = 2;
      nDir = 0;
      RebuildID();
      for(i = 2; i < nLayer; i++)
      {
         arrK[i]0 = arrK[i-2]0 + arrK[i-1]0;
         arrK[i]1 = arrK[i-1]1 * 2;
      }
     
      if(bECN)
      {
         SLSpread = 25;
         Fee = 3;
      }
     
   }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double Sl = 0;
   int ticket;
   int k;
   string str;
   if(Bars<100)
     {
      Print("K线少于100根!");
      return(0); 
     }
   if(!bReady)
   {
      k = OrdersTotal();
      nPos = 0;
      for(int i=0; i<k; i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==nMagicNumber)
            {
               if(OrderCloseTime()>0) break;
               arrID[nPos]0 = OrderTicket();
               NetOrderPrice = OrderOpenPrice();
               if(OrderType() == OP_BUY) nDir = 1;
               else nDir = -1;
               Print("n = ",nPos, "   nDir = ", nDir, "  p = ", NetOrderPrice, "  id = ", arrID[nPos]0);
               nPos++;
            }
         }
      }
      Print("Orders =  ", k);
      bReady = true;
   }
  
   LLV = iCustom(NULL, 0, "HLV", TF, 0, 1);
   HHV = iCustom(NULL, 0, "HLV", TF, 1, 1);
   LLV1 = iCustom(NULL, PERIOD_H4, "HLV", TF, 0, 1);
   HHV1 = iCustom(NULL, PERIOD_H4, "HLV", TF, 1, 1);
   double AT = iAlligator(NULL, PERIOD_H4,13,6,8,3,5,3,MODE_SMA,PRICE_MEDIAN,MODE_GATORTEETH,1);
   double AJ = iAlligator(NULL, 0,13,6,8,3,5,3,MODE_SMA,PRICE_MEDIAN,MODE_GATORJAW,1);
   double MA = iMA(NULL,PERIOD_H4,60,0,MODE_SMA,PRICE_CLOSE, 1);
   //开单检查
   if(nDir == 0) //在没有持仓的情况下才能开新仓
     {
      // 检查资金
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("资金不足: ", AccountFreeMargin());
         return(0); 
        }
      // 检查开多单的可能性
      if(Ask <= LLV - Fee * Point() && Ask > LLV1 + (HHV1 - LLV1)*StopK + SLSpread * Point())
        {
         Sl = NormalizeDouble(HHV1 - (HHV1 - LLV1)*StopK, Digits);
         if(Ask < AT || Ask < MA) Lots = MinLots;
         else
           {
               Lots = MaxLots;
           }
         str = comment + "BUY_" + Period();
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,Sl,0,str,nMagicNumber,0,Blue);
         if(ticket>0)
           {
            NetOrderPrice = Ask;
            nPos = 0;
            arrID[nPos]0 = ticket;
            nDir = 1;
           }
         else Print("first多单发生错误 : ",GetLastError());
         return(0);
        }
      // 检查开空单的可能性
      if(Bid>= HHV + Fee * Point() && Bid < HHV1 - (HHV1 - LLV1)*StopK - SLSpread * Point())
        {
         Sl = NormalizeDouble(LLV1 + (HHV1 - LLV1)*StopK, Digits);
         if(Bid > AT || Bid > MA) Lots = MinLots;
         else
           {
               Lots = MaxLots;
           }
         str = comment + "SELL_" + Period();
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,Sl,0,str,nMagicNumber,0,Red);
         if(ticket>0)
           {
            NetOrderPrice = Bid;
            nPos = 0;
            arrID[nPos]0 = ticket;
            nDir = -1;
           }
         else Print("first空单发生错误 : ",GetLastError());
         return(0);
        }
      return(0);
     }
    else
    {
      TrailingST();
      if(CloseWin())
      {
        nDir = 0;
        nPos = 0;
        NetOrderPrice = 0;
      }
      if(NetOrderPrice != 0)
      {
         if(AJ > NetOrderPrice+arrK[nPos]0*StepLens*Point && Bid < AJ &&  nDir == -1)
         {
            k = nPos + 1;
            if(k >= nLayer) return(0);
            if(nDir == -1)
            {
               nLots = NormalizeDouble(arrK[k]1*Lots, 2);
               str = comment + "SELL_" + Period();
               ticket=OrderSend(Symbol(),OP_SELL,nLots,Bid,10,0,0,str,nMagicNumber,0,Red);
               if(ticket>0)
                 {
                  NetOrderPrice = Bid+arrK[nPos]0*StepLens*Point;
                  arrID[k]0 = ticket;
                  nPos = k;
                 }
               else Print("开空单发生错误 : ",GetLastError());
            }
            return(0);
         }
         if(AJ < NetOrderPrice-arrK[nPos]0*StepLens*Point && Ask > AJ && nDir == 1)
         {
            k = nPos + 1;
            if(k >= nLayer) return(0);
            if(nDir == 1)
            {
               nLots = NormalizeDouble(arrK[k]1*Lots, 2);
               str = comment + "BUY_" + Period();
               ticket=OrderSend(Symbol(),OP_BUY,nLots,Ask,10,0,0,str,nMagicNumber,0,Blue);
               if(ticket>0)
                 {
                  NetOrderPrice = Ask-arrK[nPos]0*StepLens*Point;
                  arrID[k]0 = ticket;
                  nPos = k;
                 }
               else Print("开多单发生错误 : ",GetLastError());
            }
            return(0);
         }
      }
    }
   return(0);
  }
bool CloseWin()
{
   int i;
   double A = Ask;
   double B = Bid;
   int flag = 0;
   if(CalProfit() == 0)
   {
      return(false);
   }
   for(i = nPos; i >=0; i--)
   {
      if(arrID[i]0== -1) continue;
     
      do{    
      if(OrderSelect(arrID[i]0,SELECT_BY_TICKET,MODE_TRADES))
      {
         if(OrderType() == OP_SELL && OrderMagicNumber() == nMagicNumber)
         {
            OrderClose(OrderTicket(),OrderLots(),A,10,Green);
            arrID[i]0 = -1;
         }
         if(OrderType() == OP_BUY && OrderMagicNumber() == nMagicNumber)
         {
            OrderClose(OrderTicket(),OrderLots(),B,10,Violet);
            arrID[i]0 = -1;
         }
      }
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      }while(arrID[i]0 != -1);
   }
  
   RebuildID();
  
   return(true);
}
void TrailingST()
{
   double Sl = 0;
  
   if(OrderSelect(arrID00,SELECT_BY_TICKET,MODE_TRADES))
   {
      if(OrderType() == OP_SELL && OrderMagicNumber() == nMagicNumber)
      {
         Sl = NormalizeDouble(LLV1 + (HHV1 - LLV1)*StopK, Digits);
         if(Sl < OrderStopLoss())
         {
            OrderModify(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), 0, Red);
         }
      }
      if(OrderType() == OP_BUY && OrderMagicNumber() == nMagicNumber)
      {
         Sl = NormalizeDouble(HHV1 - (HHV1 - LLV1)*StopK, Digits);
         if(Sl > OrderStopLoss())
         {
            OrderModify(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), 0, Red);
         }
      }
   }
}
int CalProfit()
{
   int i;
   double dProfit =0;
   int flag = 0;
   int n = 0;
   for(i = 0; i < nLayer; i++)
   {
      if(arrID[i]0== -1) continue;
      if(OrderSelect(arrID[i]0,SELECT_BY_TICKET,MODE_TRADES))
      {
         if(OrderCloseTime() != 0) return(2);
         dProfit += OrderProfit() + OrderCommission();
      }
   }
  
   for(i = OrdersTotal()-1; i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == nMagicNumber)
         {
            if(OrderTicket() == arrID00)
            {
               n = nPos + 1;
               break;
            }
            else
            {
               n++;
            }
         }
      }
   }
  
   if(n != nPos +1)
   {
      flag = 1;
   }
  
   double AT = iAlligator(NULL, PERIOD_H4,13,6,8,3,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,1);
  
   bool bCon = (Bid > AT && nDir == -1) || (Ask < AT && nDir == 1);
   if(!bCon && dProfit >= Lots * ProfitPoints)
   {
      flag = 1;
   }
   else if(bCon && dProfit >= Lots * ProfitPoints / 3)
   {
      flag = 1;
   }
   return(flag);
}

void RebuildID()
{
    for(int i = 0; i < nLayer; i++)
    {
       {
          arrID[i]0 = -1;
       }
    }
}

Disclaimer: The content above represents only the views of the author or guest. It does not represent any views or positions of FOLLOWME and does not mean that FOLLOWME agrees with its statement or description, nor does it constitute any investment advice. For all actions taken by visitors based on information provided by the FOLLOWME community, the community does not assume any form of liability unless otherwise expressly promised in writing.

FOLLOWME Trading Community Website: https://www.followme.com

If you like, reward to support.
avatar

Hot

有4均线交叉的EA源码分享吗?分享一个吧?
虽然看不懂,但为分享精神点赞
66666666666666
难得看到有人分享EA代码
感谢分享
怎么用
佩服手势
看不懂。不过觉得无私分享比较感动
hart
Author
希望我开发AOEA不要被你们糟蹋了。

-THE END-