找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 0|回复: 0

【均线系统EA源码】趋势交易系统EA

[复制链接]

8614

主题

54

回帖

4871

积分

管理员

积分
4871
发表于 2026-8-13 22:12:59 | 显示全部楼层 |阅读模式
最后由 haishan 于 2023-7-5 15:46 编辑

这是一个趋势交易系统编程的EA源码看趋势简单有效




EA 正常开单 无限制




喜欢均线做单的 可以试用这个EA


运行原理:


144EMA和169EMA交叉判断方向;15EMA和50SMA交叉进出场(顺方向做单);可以设置移动止损,默认为关闭;同时只能存在1个多单和1个空单;上一单亏损,下一单加倍策略,系数可调。


//运行原理:

//144EMA和169EMA交叉判断方向;15EMA和50SMA交叉进出场(顺方向做单);可以设置移动止损,默认为关闭;

//同时只能存在1个多单和1个空单;上一单亏损,下一单加倍策略,系数可调。


extern double  手数=0.01;

extern double  止损=8000;

extern double  止盈=3000;

extern bool    移动止损=false;

extern int     多单提损=400;

extern int     空单提损=400;

extern int     提损递增幅度=200;//比如多单提损设置40点,那么价格超过开仓价40点则止损上移20点。

extern int     滑点=333333;

extern double  倍投系数=1.5;

extern int     手数精度=2;//平台支持0.01的可以设置为2,这个会影响加倍后的手数大小。

extern double  最大倍投手数=20;//根据倍投次数来设置以便控制好风险

extern int     EMA1=15;//入场信号的快线

extern int     SMA2=50;//入场信号的慢线

extern int     EMA3=144;//判断方向的快线

extern int     EMA4=169;//判断方向的慢线

int buyfuwei=多单提损;

int sellfuwei=空单提损;


int start()

  {

//定义均线值-------------------------------------------------------------------

   double ema15=iMA(Symbol(),0,EMA1,0,MODE_EMA,PRICE_CLOSE,0);

   double ema50=iMA(Symbol(),0,SMA2,0,MODE_SMA,PRICE_CLOSE,0);

   double ema144=iMA(Symbol(),0,EMA3,0,MODE_EMA,PRICE_CLOSE,0);

   double ema169=iMA(Symbol(),0,EMA4,0,MODE_EMA,PRICE_CLOSE,0);


//buy条件:没到止盈出现反向信号平仓-------------------------------------------------------------------  

   if((ema144>ema169)&&(ema15>ema50))

     {         

       /* for(int i=0;i<OrdersTotal();i++) //扫描订单总数

            {

                if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单

                  {

                     if((OrderComment()==(Symbol()+"sell"))) //如果持有空单注释一样   

                       {

                           OrderClose(OrderTicket(),OrderLots(),Ask,滑点); //空仓平仓            

                       }

                  }

            }  */  //这段代码是持仓单没止盈的情况下出现反向信号平仓

         if((buy(getlots(),止损,止盈,Symbol()+"buy",0)>0)&&(移动止损==true)) //下多单

           {

              多单提损=buyfuwei;

           }

      }

      

//sell条件:没到止盈出现反向信号平仓-------------------------------------------------------------------

   if((ema144<ema169)&&(ema15<ema50))

     {

       /* for(int i1=0;i1<OrdersTotal();i1++)

            {

                if(OrderSelect(i1,SELECT_BY_POS,MODE_TRADES))

                  {

                     if((OrderComment()==(Symbol()+"buy")))   

                       {

                          OrderClose(OrderTicket(),OrderLots(),Bid,滑点);            

                       }

                  }

            } */

         if((sell(getlots(),止损,止盈,Symbol()+"sell",0)>0)&&(移动止损==true))

           {

              空单提损=sellfuwei;

           }

      }

  

//追踪止损设置-------------------------------------------------------------------

  if(移动止损==true)

      {

          for(int i=0;i<OrdersTotal();i++) //扫描订单总数

               {

                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单

                     {

                       if((OrderComment()==(Symbol()+"buy"))) //如果持单编号一致

                         {

                              if(((Bid-OrderOpenPrice())/Point)>=多单提损) //如果买价-开仓价/点数>=移动止损

                                {

                                   double buysl=OrderStopLoss(); //获取订单止损价格

                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),buysl+提损递增幅度*Point,OrderTakeProfit(),0)==true)

                                   //修改止损:止损价+提损递增幅度

                                     {

                                        多单提损=多单提损+提损递增幅度; //从新赋值移动止损

                                     }

                                }                 

                         }

                       if((OrderComment()==(Symbol()+"sell")))   

                         {

                              if(((OrderOpenPrice()-Ask)/Point)>=空单提损)

                                {

                                   double sellsl=OrderStopLoss();

                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),sellsl-提损递增幅度*Point,OrderTakeProfit(),0)==true)

                                     {

                                        空单提损=空单提损+提损递增幅度;

                                     }

                                }                 

                         }

                      }

                 }

           return(0);

      }

   return(0);

   }


//亏损加仓设置---------------------------------------------------------------------------  

   double getlots()

     {

        double lotsok=手数;

        if(OrdersHistoryTotal()>0)

           {

              for(int i=OrdersHistoryTotal()-1;i>0;i--)

                {

                   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

                     {

                         if(OrderSymbol()==Symbol())

                           {

                              if(OrderMagicNumber()==0)

                                {

                                   if(OrderProfit()>0)

                                     {

                                        lotsok=手数;

                                     }

                                   else

                                     {

                                       lotsok=DoubleToStr(NormalizeDouble(OrderLots()*倍投系数,手数精度),手数精度);

                                       Print("lotsok: "+lotsok);

                                       if(lotsok>最大倍投手数)

                                          {

                                             lotsok=最大倍投手数;

                                          }

                                        break;

                                     }

                                   break;

                                }

                          }

                    }

               }

           }

    else

      {

        return(手数);

      }

    return(lotsok);

      }

  

  

//buy函数----------------------------------------------------------------

int buy(double Lots,double sun,double ying,string comment,int magic)

    {

          int kaiguan=0; //初始化开关为打开

            for(int i=0;i<OrdersTotal();i++) //扫描订单总数

               {

                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单

                     {

                       if((OrderComment()==comment)&&(OrderMagicNumber()==magic)) //如果当前持单注释和编号和设定的一致,则开关关闭不下单。   

                         {

                           kaiguan=1;                     

                         }

                      }

               }

            if(kaiguan==0) //如果开关打开

              {

                   int ticket=OrderSend(Symbol( ) ,OP_BUY,Lots,Ask,滑点,0,0,comment,magic,0,White); //开仓买入多单,不设止盈止损(下单成功返回编号,失败返回-1)

                   if(ticket>0) //下单成功

                   {

                    if(OrderSelect(ticket, SELECT_BY_TICKET)==true) //选定订单如果编号一致

                      {

                       if((sun!=0)&&(ying!=0)) //不设止损止盈的情况

                        {

                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);

                          //修改止盈止损

                        }

                       if((sun==0)&&(ying!=0)) //不设止损,设置止盈的情况

                        {

                          OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);

                          //修改止盈

                        }

                       if((sun!=0)&&(ying==0)) //设置止损,不设止盈的情况

                        {

                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);

                          //修改止损

                        }

                      }

                   }

              return(ticket);

              }

             else

              {

               return(0);

              }

     }

  

//sell函数----------------------------------------------------------------

int sell(double Lots,double sun,double ying,string comment,int magic)

    {

               int kaiguan=0;

                 for(int i=0;i<OrdersTotal();i++)

                    {

                        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

                          {

                            if((OrderComment()==comment)&&(OrderMagicNumber()==magic))   

                              {

                                kaiguan=1;                     

                              }

                           }

                    }

                 if(kaiguan==0)

                   {

                        int ticket=OrderSend(Symbol( ) ,OP_SELL,Lots,Bid,滑点,0,0,comment,magic,0,Red);

                        if(ticket>0)

                        {

                          if(OrderSelect(ticket, SELECT_BY_TICKET)==true)

                           {

                             if((sun!=0)&&(ying!=0))

                              {

                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);

                              }

                             if((sun==0)&&(ying!=0))

                              {

                               OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);

                              }

                             if((sun!=0)&&(ying==0))

                              {

                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);

                              }

                           }

                        }

                        return(ticket);

                   }

                  else

                   {

                    return(0);

                   }

    }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-8-26 04:15 , Processed in 0.109638 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表