智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)
为论坛做贡献有奖学金,奖学金可直接换真钱 扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得
查看: 1124|回复: 6

每天盈利一单,停止交易,明天又开始开单

[复制链接]
发表于 2018-7-1 22:04:27 | 显示全部楼层 |阅读模式
逻辑条件:我想用一个外部条件控制每天只要有一单盈利的就停止开仓,然后第二天满足条件继续开仓,反复循环。
我的思路是:现判断是否有未平仓的单子(OrdersTotal()),如果没有在判断是否历史订单OrdersHistoryTotal(),
如果有历史订单,判断最近的一单是否盈利,
如果是盈利的,看看这个盈利单的开仓时期是否是今天,
如果是不是今天,那就可以开仓下单。反之,停止下单。

但是我写出来的控制不了这个下单,请老师和各位前辈帮忙看是我的思路有问题,还是我的代码有问题。





//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql4.com |
//+------------------------------------------------------------------+

#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   double ma=iMA(Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE,0);
   double map=iMA(Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE,1);
  
if((kaiguan1()==0)||(kaiguantp()==0))
  {
   if((Close[0]>ma)&&(Close[1]<map))//价格上穿均线
     {
      
             buy(1,100,100,Symbol()+"buy",0);
         
     }
   if((Close[0]<ma)&&(Close[1]>map))//价格下穿均线
     {
      
         
             sell(1,100,100,Symbol()+"sell",0);
         
     }
   }   

}

  int kaiguan1()
   {  
     int k1=0;
     int d1=0;
     if(OrdersTotal()>0)
       {
         k1=1;
       }
       else
       {
         k1=0;
         d1=Day();
       }
       return(k1);
   }     int historyday()
     {
       if(kaiguantp()==1)
         {
           
         
         }
     }
  
  int kaiguantp()
   {  
      if(OrdersHistoryTotal()>0)
        {
             int kaiguan=0;
             int  days=0;//这个参数是用来记录盈利大于0的日期的
             for(int i=OrdersHistoryTotal()-1;i>=0;i--)
               {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
                   {
                     if(OrderSymbol()==Symbol())
                       {
                         if(OrderMagicNumber()==0)
                           {
                             if(OrderProfit()>0)
                               {
                                 if(OrderOpenTime()==Day())
                                   {
                                   Print("OrderOpenTime()"+OrderOpenTime()) ;
                                     kaiguan=1;
                                   }
                                  else
                                    {
                                      kaiguan=0;
                                    }                                                                                          
                                }
                           else
                            {
                              kaiguan=0;
                            }
                        
                     break;
                     }
                 }
             }
         }
         return(kaiguan);
         
     }
   }
    int buy(double Lots,double sun,double ying,string comment,int magic)

   {
   
     int com=0;
     int ticket=0;
     for(int i=0;i<OrdersTotal();i++)
       {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
          if(OrderComment()==comment)
            {
              com=1;
            }
        }
    }
   if(com==0)
     {
      
      ticket=OrderSend(Symbol( ),OP_BUY,Lots,Ask,100,Ask-sun*Point,Ask+ying*Point,comment,magic,0,Blue);
     }
     return(ticket);
      
   }
   
   
  
  int sell(double Lots,double sun,double ying,string comment,int magic)
  {
      int com=0;
      int ticket=0;
      for(int i=0;i<OrdersTotal();i++)
       {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
          if(OrderComment()==comment)
            {
              com=1;
            }
        }
    }
   if(com==0)
     {
     
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,300,Bid+sun*Point,Bid-ying*Point,comment,magic,0,Red);
     }
     return(ticket);
  }
  
回复

使用道具 举报

发表于 2018-7-2 09:11:55 | 显示全部楼层
你这个 写的太麻烦。像这种东西 你只要自己测试下历史数据 就知道 你自己写的对错了。
如果是我写,肯定 不会像你这样写。
你可以直接写一个 bool型判断函数,false 就不再开单,true就可以再开单
他的作用是扫描今天平仓的 历史最后一单,如果 是盈利的 那么这个函数返回false
是亏损的 那么这个函数返回true。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-2 09:23:25 | 显示全部楼层
MT4MT5 发表于 2018-7-2 09:11
你这个 写的太麻烦。像这种东西 你只要自己测试下历史数据 就知道 你自己写的对错了。
如果是我写,肯定  ...

应该是我想复杂了,我先按照你的思路写出来测试看看。


老师,谢谢,您辛苦了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-2 17:33:10 | 显示全部楼层
MT4MT5 发表于 2018-7-2 09:11
你这个 写的太麻烦。像这种东西 你只要自己测试下历史数据 就知道 你自己写的对错了。
如果是我写,肯定  ...

我写了这个判断语句,但是只能控制一次,只要发生一次盈利,以后就算满足下单条件也不下单了。
老师,请你帮我看看我这个问题在哪里。
//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql4.com |
//+------------------------------------------------------------------+

#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   double ma=iMA(Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE,0);
   double map=iMA(Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE,1);
   
if(kg()==false)
    {
     if((Close[0]>ma)&&(Close[1]<map))//价格上穿均线
       {
          buy(1,200,200,Symbol()+"buy",0);
       }
     /*if((Close[0]<ma)&&(Close[1]>map))//价格下穿均线
       {
          sell(1,200,200,Symbol()+"sell",0);
       }*/
     }   

}


  bool kg()
     {
      
       if(OrdersHistoryTotal()>0)
         {
           bool kg1=false;
           for(int i=OrdersHistoryTotal()-1;i>0;i--)
             {
               if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
                 {
                   if(OrderSymbol()==Symbol())
                     {
                      if(OrderProfit()>0)
                        {
                          kg1=true;
                        }
                        else
                          {
                            kg1=false;
                          }
                     }
                 }
             }return(kg1);
         }
         
     }


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

   {
   
     int com=0;
     int ticket=0;
     for(int i=0;i<OrdersTotal();i++)
       {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
          if(OrderComment()==comment)
            {
              com=1;
            }
        }
    }
   if(com==0)
     {
      
      ticket=OrderSend(Symbol( ),OP_BUY,Lots,Ask,100,Ask-sun*Point,Ask+ying*Point,comment,magic,0,Blue);
     }
     return(ticket);
      
   }
   
   
  
  int sell(double Lots,double sun,double ying,string comment,int magic)
  {
      int com=0;
      int ticket=0;
      for(int i=0;i<OrdersTotal();i++)
       {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
          if(OrderComment()==comment)
            {
              com=1;
            }
        }
    }
   if(com==0)
     {
     
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,300,Bid+sun*Point,Bid-ying*Point,comment,magic,0,Red);
     }
     return(ticket);
  }
  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 16:42:32 | 显示全部楼层
稳如泰山 发表于 2018-7-2 17:33
我写了这个判断语句,但是只能控制一次,只要发生一次盈利,以后就算满足下单条件也不下单了。
老师,请 ...

我找到开关了,希望对其他人有帮助
int kaiguantp()
   {  
      if(OrdersHistoryTotal()>0)
        {

             for(int i=OrdersHistoryTotal()-1;i>=0;i--)
               {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
                   {
                     if(OrderSymbol()==Symbol())
                       {
                         if(OrderMagicNumber()==0)
                           {
                             if(OrderProfit()>0)
                               {
                                 t=TimeDay(OrderOpenTime());  
                               }
                              break;
                          }
                          
                       }
                   }
         
              }
         }else{t=0;}
         
         
         return(t);
         
         
  }
回复 支持 反对

使用道具 举报

发表于 2018-7-10 10:30:44 | 显示全部楼层
谢谢分享,也是这个问题

回复 支持 反对

使用道具 举报

发表于 2018-7-10 10:32:24 | 显示全部楼层
请问一下,这个是在老师的课程中现实么,在哪找的?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|sitemap|智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2019-10-14 17:00 , Processed in 0.082921 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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