客服热线:18391752892

一个平仓策略的设想请版主能否用EA做出来

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

您需要 登录 才可以下载或查看,没有帐号?注册 尊敬的编程高手老师:
在本论坛看见很多高手,烦请老师帮制作EA。
策略如下:(例子)
条件1:把持仓中的BUY单按照盈利大于等于10美金并且小于等于20美金之间的单子选出来;
条件2:把持仓中的SELL单按照亏损小于等于-10美金并且亏损大于0美金之间的单子选出来;
条件3:然后把符合条件1的单子相加计算总利润减去符合条件2的单子相加计算总亏损,最终得出的利润差值大于等于0美金,就把条件1和条件2的单子一起平仓。
意思是只有同时符合(条件1、条件2、条件3),才能按照利润差是大于等于0才执行一起平仓,不能单独去平仓条件1,或者条件2,。
比如这里设置利润差值是+10美元则把这些条件1和条件2的多空单子一起平仓。
--------------------------------------------
变量参数赋值开关按钮设置:
①本EA设置做个总开关,需要的时候开启。//设定TRUE就是开启这个EA,设定FALSE就是停止EA
②条件1:BUY单可以选择设置TRUE或者FALSE
SELL单可以选择设置TRUE或者FALSE
盈利大于等于10美金    //可以自由设置金额参数比如40美金
并且小于等于20美金 // 可以自由设置金额参数比如50美金
③条件2:BUY单可以选择设置TRUE或者FALSESELL单可以选择设置TRUE或者FALSE
亏损小于等于-10美金   // 可以自由设置金额参数 比如-50美金
并且亏损大于0美金 //可以自由设置金额参数 比如-10美金
④利润差可以设置参数 比如12.34美金。但必须是大于等于0的正数,不能是负数。
策略结束。请高手老师百忙中帮忙写个EA。
此致敬礼感谢。
与大家共同学习,支持论坛,支持与大家共享EA精神的好人。

    计算当前持仓单的总盈亏比 .
本函数计算原理如下:循环查询所有持仓单,过滤掉非本K下商品的订单。累加所有盈利单的盈利总数和所有亏损单的亏损总数。返回 两者的比值源代码如下:
double GetYKB()
{
double PWin=0,PLose=0;
for(int i=0;i OrdersTotal();i++)
   {
   OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()==Symbol() OrderMagicNumber()==Magic)
   {
     if(OrderProfit() 0)
     {
     
      PWin+=MathAbs(OrderOpenPrice()-(Ask+Bid)/2);     
     }else
     {
     
      PLose+=MathAbs(OrderOpenPrice()-(Ask+Bid)/2); 
     }
   }
   }
 
if(PLose==0)return(10000);
return(PWin/PLose);
}
     平掉所有持仓单
本函数原理:先循环读取所有持仓单,并过滤掉非本K线商品的持仓单,循环的同时,用数组记录所有过滤后的持仓单的Ticket号码及多空类型。然后循环一次选择每一个Ticket对应的持仓单,并更具多空类型进行平仓。源代码如下:
bool ClosePosition()//Close all holding positions
{
bool Flag=true;
int tick[200],tp[200]; 
int j=0;
 for(int i=0;i OrdersTotal();i++)
   {
   OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()==Symbol()  OrderMagicNumber()==Magic)
   {
     j=j+1;
     tick[j]=OrderTicket();     
     tp[j]=OrderType();
   }
   }
if (j!=0)
{     
   for(i=1;i i++)
   {
    OrderSelect(tick[i], SELECT_BY_TICKET);
    switch(tp[i])
    {
   case OP_BUY:
     if(OrderClose(tick[i],OrderLots(),Bid,滑点偏移点数,CLR_NONE)==false) Flag=false;     
     break;
   case OP_SELL:
     if(OrderClose(tick[i],OrderLots(),Ask,滑点偏移点数,CLR_NONE)==false) Flag=false;     
     break;   
    }
   }
}
return(Flag);

外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


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


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