客服热线:18391752892

求助:给macd sample EA加上移动止赢止损策略。。谢谢。

   日期:2019-01-12     浏览:766    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册
//这是自定义函数
extern double TakeProfit = 50;   //盈利目标点数
extern double Lots = 0.1;      //每单入场的手数
extern double TrailingStop = 30; //追踪止损的点数
extern double MACDOpenLevel=3; //MACD开仓的参考位置
extern double MACDCloseLevel=2; //MACD出场的参考位置
extern double MATrendPeriod=26; //条件中使用的MA均线的周期数
//程序最上面extern开始的这些数据都是程序参数,
//也就是在使用者调用的时候可以修改的部分。
//这个EA是个常见的技术指标条件入场,条件出场
//同时又移动止损功能的完成示意,
//很适合初学者研究。
//先总结这个程序的基本条件的意思 以方便大家对号入座,尽快理解。
//多头入场条件:buy
 // MACD小于0 并且 小于指定的参数MACDOpenLevel   
   //并且 MACD讯号下下穿基准线(死叉) 并且 MA向上趋势
//多头出场条件:Close buy
 // MACD大于0 并且 大于指定的参数MACDCloseLevel
   //并且 MACD信号线上传基准线(金叉)
//空头入场条件:sell
//MACD大于0 并且 大于指定的参数MACDOpenLevel   
//并且 MACD讯号线上穿基准线(金叉) 并且 MA向下趋势
//空头出场条件: Close sell
//MACD小于0 并且 小于制定的参数MACDCloseLevel   
//并且 MACD讯号线下穿基准线(死叉)
//=============================================================
//有了以上的初步了解,下面开始进行EA程序基本结构的分析:
//1、start()函数是最重要的执行部分,
//每来一个价格 此函数都自动执行一次,所以主要的逻辑结构都在这个函数里
//2、程序的基本流程都是按照以下步骤进行,
//我们先牢牢记住这个结构,然后再对号入座去理解程序。
//先判断当前自身的仓位状态,因为start函数式循环运行的,
//所以中间的每个步骤都会使用start函数,因此,
//当函数开始的时候我们首先要通过MT4的仓位操作函数获得当前的仓位状态,
///并进一步根据状态进行不同分支的计算。
//程序开始的以下两个部分不重要 简单说一下:
int start()
 {
//这是自定义函数
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
//这是多余的检查
if(Bars(MACDOpenLevel*Point) MaCurrent0)//如果有单
        {
       if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
       Print( SELL order opened : ,OrderOpenPrice());//这是多余的检查
        }
        //这是多余的检查
       else Print( Error opening SELL order : ,GetLastError()); //如果错误就打印
       return(0); //返回
     }
     return(0);//返回
   }
   // it is important to enter the market correctly,
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt(MACDCloseLevel*Point))
            {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
           return(0); // exit
            }
         // check for trailing stop检查追踪止损
         if(TrailingStop 0) 
         {           
           if(Bid-OrderOpenPrice() Point*TrailingStop)
           {
             if(OrderStopLoss()0) //追踪止损重复了2次(没有水准的编写)
         {           
           if((OrderOpenPrice()-Ask) (Point*TrailingStop))
           {
             if((OrderStopLoss() (Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
             {
             //如果检查条件符合就OrderModify buy的单
               OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
               return(0);
             }
           }
         }
       }
     }
   }
   return(0);//返回上面再从头执行
 }// the end.完
复制代码
我想把MACD这个EA的止损去掉,修改成为止损止赢的保护策略。。我的止损止赢策略是一个多单或空单,
 当赢利30点,那么在开仓价的+N点做一个止损止赢的保护,当价格若回撤到止损位的时候,就平仓了;
 当赢利50点,那么在开仓价的+N*3点做一个止损止赢的保护,当价格若回撤到止损位的时候,就平仓了;
 当赢利70点,那么在开仓价的+N*5点做一个止损止赢的保护,当价格若回撤到止损位的时候,就平仓了;
 当赢利80点,那么在开仓价的+N*6点做一个止损止赢的保护,当价格若回撤到止损位的时候,就平仓了;
 
 弄了几天没成功。。求助各位高手。。版主求助。。
 万分感谢。。
外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行