众汇论坛

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
查看: 856|回复: 11

[指标] 求一个等距加仓脚本

[复制链接]

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
发表于 2019-2-13 15:54 | 显示全部楼层 |阅读模式
100金钱
等距加仓策略.jpg

10

主题

3531

积分

0

精华

中级操盘手

金钱
3531 美元
权重
0
发表于 2019-2-13 15:58 来自手机 | 显示全部楼层
沙发~~
回复

使用道具 举报

25

主题

8832

积分

0

精华

操盘专家

金钱
8832 美元
权重
1
发表于 2019-2-13 16:02 | 显示全部楼层
楼主,你这其实就是个网格EA,你自己去百度下。这类的很多,而且比你的功能多……
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-2-13 16:03 | 显示全部楼层
过去了 发表于 2019-2-13 16:02
楼主,你这其实就是个网格EA,你自己去百度下。这类的很多,而且比你的功能多……

哦,谢谢。我找找看
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:54 | 显示全部楼层
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright ""
#property link""
input bool 是否显示信息框=true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum 做单方向
  {
   做多=1,做空=2,
  };
input 做单方向 做单方向选择=2;
input double 入场位置=1.3;
input double 止损位置=1.4;
input double 加仓距离=40;
input int 最大持仓个数=10;
input double 单量=0.1;
double 止损=0;
double 止盈=0;
input string 备注="";
input int magic=15420;
input string comm1X="----------------------------";
input string comm2X="----------------------------";
input color 多单颜色标记=Blue;
input color 空单颜色标记=Red;
int check;
int X=20;
int Y=20;
int Y间隔=15;
color 标签颜色=Yellow;
int 标签字体大小=10;
ENUM_BASE_CORNER 固定角=0;
//////////////////////////////////////////////////////////////

datetime time1,time2;
int 单量小数保留=2;
datetime 启动时间;
bool 不允许智能交易报警=false;
//+------------------------------------------------------------------+
//| expert initialization function|
//+------------------------------------------------------------------+
int OnInit()
  {
//----
//Alert("急速模式程序,修改参数后需重置EA开关");
   if(MarketInfo(Symbol(),MODE_LOTSTEP)<10)单量小数保留=0;
   if(MarketInfo(Symbol(),MODE_LOTSTEP)<1)单量小数保留=1;
   if(MarketInfo(Symbol(),MODE_LOTSTEP)<0.1)单量小数保留=2;

   启动时间=TimeCurrent();

   if(IsTesting()==false)
      EventSetMillisecondTimer(300);
//----
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//----
   if(IsTesting()==false)
      ObjectsDeleteAll(0,"标签");
//----
  }
//+------------------------------------------------------------------+
//| expert start function|
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting()==false)
      if(TimeCurrent()-MarketInfo(Symbol(),MODE_TIME)>=30)
         return;

   if(IsConnected()==false)return;

   RefreshRates();

   按钮("标签启动按钮","启动按钮","启动按钮",80,60,60,20,CORNER_RIGHT_LOWER,clrYellow,clrBlack);
   按钮("标签全平按钮","全平按钮","全平按钮",80,30,60,20,CORNER_RIGHT_LOWER,clrRed,clrBlack);

   if(ObjectGetInteger(0,"标签全平按钮",OBJPROP_STATE)==1)
     {
      deleteorder(-100,magic,"");
      ObjectDelete("启动时间");
      return;
     }

   if(objectFind("启动时间")==-1)
      画直线("启动时间",0,0,TimeCurrent(),clrNONE,0,0);
   启动时间=objectGet("启动时间",OBJPROP_TIME1);

   double lots=单量;

   if(ObjectGetInteger(0,"标签启动按钮",OBJPROP_STATE)==1)
      if(分项单据统计(-100,magic,"")==0)
        {
         int t1=-1;
         if(做单方向选择==1 || 做单方向选择==3)
           {
            if(Ask-入场位置>=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               t1=建立单据(Symbol(),OP_BUYLIMIT,lots,入场位置,0,止损,止盈,"首"+备注,magic,多单颜色标记);
            else
            if(-Ask+入场位置>=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
                          t1=建立单据(Symbol(),OP_BUYSTOP,lots,入场位置,0,止损,止盈,"首"+备注,magic,多单颜色标记);
           }
         if(做单方向选择==2 || 做单方向选择==3)
           {
            if(Bid-入场位置>=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               t1=建立单据(Symbol(),OP_SELLSTOP,lots,入场位置,0,止损,止盈,"首"+备注,magic,空单颜色标记);
            else
            if(-Bid+入场位置>=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
                          t1=建立单据(Symbol(),OP_SELLLIMIT,lots,入场位置,0,止损,止盈,"首"+备注,magic,空单颜色标记);
           }

         if(OrderSelect(t1,SELECT_BY_TICKET))
           {
            ObjectSetInteger(0,"标签启动按钮",OBJPROP_STATE,0);
           }
        }

   if(OrderSelect(findlassorder(OP_SELL,OP_SELL,magic,"后","现在","",findlassorder(OP_SELL,OP_SELL,magic,"后","现在","",0)),SELECT_BY_TICKET))
      if(OrderClosePrice()>=OrderOpenPrice())
         deleteorder(OP_SELL,magic,"");

   if(OrderSelect(findlassorder(OP_BUY,OP_BUY,magic,"后","现在","",findlassorder(OP_BUY,OP_BUY,magic,"后","现在","",0)),SELECT_BY_TICKET))
      if(OrderClosePrice()<=OrderOpenPrice())
         deleteorder(OP_BUY,magic,"");

   if(分项单据统计(-200,magic,"首")!=0)
     {
      if(做单方向选择==1 || 做单方向选择==3)
         if(分项单据统计(OP_BUY,magic,"")+分项单据统计(OP_BUYSTOP,magic,"")<最大持仓个数)
            if(OrderSelect(findlassorder(OP_BUY,OP_BUYSTOP,magic,"后","现在","",0),SELECT_BY_TICKET))
               t1=建立单据(Symbol(),OP_BUYSTOP,lots,OrderOpenPrice(),加仓距离,止损,止盈,"加仓"+备注,magic,多单颜色标记);

      if(做单方向选择==2 || 做单方向选择==3)
         if(分项单据统计(OP_SELL,magic,"")+分项单据统计(OP_SELLSTOP,magic,"")<最大持仓个数)
            if(OrderSelect(findlassorder(OP_SELL,OP_SELLSTOP,magic,"后","现在","",0),SELECT_BY_TICKET))
               t1=建立单据(Symbol(),OP_SELLSTOP,lots,OrderOpenPrice(),加仓距离,止损,止盈,"加仓"+备注,magic,空单颜色标记);
     }
   else
      deleteorder(-300,magic,"加仓");

   if(做单方向选择==1 || 做单方向选择==3)
     {
      批量修改止盈止损(OP_BUY,0,止损位置,magic,"");
      批量修改止盈止损(OP_BUYSTOP,0,止损位置,magic,"");
      批量修改止盈止损(OP_BUYLIMIT,0,止损位置,magic,"");
     }
   if(做单方向选择==2 || 做单方向选择==3)
     {
      批量修改止盈止损(OP_SELL,0,止损位置,magic,"");
      批量修改止盈止损(OP_SELLSTOP,0,止损位置,magic,"");
      批量修改止盈止损(OP_SELLLIMIT,0,止损位置,magic,"");
     }

   if(是否显示信息框 && IsOptimization()==false)
     {
      string 内容[100];
      int pp=0;
      内容[pp]="";pp++;
      内容[pp]="平台商:" +AccountCompany()+" 杠杆:"+DoubleToStr(AccountLeverage(),0);pp++;
      内容[pp]="EA独立代码 magic :"+magic;pp++;
      内容[pp]="启动时间:"+DoubleToStr((TimeCurrent()-启动时间)/60/60,1)+"小时";pp++;
      内容[pp]="------------------------------------";pp++;
      内容[pp]="多单个数:"+分项单据统计(OP_BUY,magic,"");pp++;
      内容[pp]="多单获利:"+DoubleToStr(分类单据利润(OP_BUY,magic,""),2);pp++;
      内容[pp]="多单手数:"+DoubleToStr(总交易量(OP_BUY,magic,""),2);pp++;
      内容[pp]="------------------------------------";pp++;
      内容[pp]="空单个数:"+分项单据统计(OP_SELL,magic,"");pp++;
      内容[pp]="空单获利:"+DoubleToStr(分类单据利润(OP_SELL,magic,""),2);pp++;
      内容[pp]="空单手数:"+DoubleToStr(总交易量(OP_SELL,magic,""),2);pp++;
      内容[pp]="------------------------------------";pp++;
      内容[pp]="浮动盈亏:"+DoubleToStr(分类单据利润(-100,magic,""),2);pp++;
      内容[pp]="------------------------------------";pp++;

      for(int ixx=0;ixx<pp;ixx++)
         固定位置标签("标签"+ixx,内容[ixx],X,Y+Y间隔*ixx,标签颜色,标签字体大小,固定角);
     }
   return;
  }
//+------------------------------------------------------------------+(接下一楼)
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:55 | 显示全部楼层
void 批量修改止盈止损(int type,double 止盈内,double 止损内,int magicX,string comm)
  {
   if(止盈内!=0)
      for(int i=0;i<OrdersTotal();i++)
         if(OrderSelect(i,SELECT_BY_POS))
            if(OrderSymbol()==Symbol())
               if(OrderMagicNumber()==magicX || magicX==-1)
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                     if(OrderTakeProfit()>NormalizeDouble(止盈内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS))+MarketInfo(OrderSymbol(),MODE_POINT) || OrderTakeProfit()<NormalizeDouble(止盈内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS))-MarketInfo(OrderSymbol(),MODE_POINT))
                        //if((OrderTakeProfit()>NormalizeDouble(止盈内,MarketInfo(OrderSymbol(),MODE_DIGITS))+MarketInfo(OrderSymbol(),MODE_POINT)&& OrderType()==OP_BUY) || (OrderTakeProfit()<NormalizeDouble(止盈内,MarketInfo(OrderSymbol(),MODE_DIGITS))-MarketInfo(OrderSymbol(),MODE_POINT)  && OrderType()==OP_SELL) || OrderTakeProfit()==0)
                        if(OrderType()==type || type==-100)
                           if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(止盈内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),0))
                              报错组件("");

   if(止损内!=0)
      for(i=0;i<OrdersTotal();i++)
         if(OrderSelect(i,SELECT_BY_POS))
            if(OrderSymbol()==Symbol())
               if(OrderMagicNumber()==magicX || magicX==-1)
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                     //if(OrderStopLoss()>NormalizeDouble(止损内,MarketInfo(OrderSymbol(),MODE_DIGITS))+MarketInfo(OrderSymbol(),MODE_POINT)  || OrderStopLoss()<NormalizeDouble(止损内,MarketInfo(OrderSymbol(),MODE_DIGITS))-MarketInfo(OrderSymbol(),MODE_POINT) )
                     if((OrderStopLoss()>NormalizeDouble(止损内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS))+MarketInfo(OrderSymbol(),MODE_POINT) && OrderType()==OP_SELL) || (OrderStopLoss()<NormalizeDouble(止损内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS))-MarketInfo(OrderSymbol(),MODE_POINT) && OrderType()==OP_BUY) || OrderStopLoss()==0)
                        if(OrderType()==type || type==-100)
                           if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(止损内,(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0))
                              报错组件("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   OnTick();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void 获利后一次性止损保护(int type,double 保护距离,double 启动距离,int c,string comm)
  {
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==c || c==-1)
               if(OrderType()==type || type==-100)
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                    {
                     double a=OrderClosePrice();

                     if(OrderType()==OP_BUY)
                        if(a-OrderOpenPrice()>启动距离*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                           if(OrderStopLoss()+MarketInfo(OrderSymbol(),MODE_POINT)<OrderOpenPrice()+保护距离*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()) || OrderStopLoss()==0)
                             {
                              if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+保护距离*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0)==false)
                                 报错组件("");
                             }

                     if(OrderType()==OP_SELL)
                        if(OrderOpenPrice()-a>启动距离*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                           if(OrderStopLoss()-MarketInfo(OrderSymbol(),MODE_POINT)>OrderOpenPrice()-保护距离 *MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()) || OrderStopLoss()==0)
                             {
                              if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-保护距离*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0)==false)
                                 报错组件("");
                             }
                    }
     }
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 移动止损距离比例(int type,double 启动距离1,double 启动距离2,int 回调模式,double 保持距离,double 保持比例,int magicX,string comm)
  {
   for(int i=0;i<OrdersTotal();i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderType()==type || type==-100)
               if(OrderMagicNumber()==magicX || magicX==-1)
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                    {
                     RefreshRates();

                     if(回调模式==1)
                        double 保持距离X=保持距离;

                     if(回调模式==2)
                        保持距离X=MathAbs(OrderClosePrice()-OrderOpenPrice())*保持比例/100/MarketInfo(OrderSymbol(),MODE_POINT)/系数(OrderSymbol());

                     if(保持距离X<MarketInfo(OrderSymbol(),MODE_STOPLEVEL)/系数(OrderSymbol()))
                        return;


                     if(OrderType()==OP_BUY)
                        if(OrderClosePrice()-OrderOpenPrice()>=启动距离1*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                           if(OrderClosePrice()-OrderOpenPrice()<=启动距离2*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                              if(NormalizeDouble(OrderClosePrice()-(保持距离X*系数(OrderSymbol())+1)*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS))>=OrderStopLoss() || OrderStopLoss()==0)
                                {
                                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderClosePrice()-保持距离X*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0)==false)
                                    报错组件("");
                                }

                     if(OrderType()==OP_SELL)
                        if(OrderOpenPrice()-OrderClosePrice()>=启动距离1*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                           if(OrderOpenPrice()-OrderClosePrice()<=启动距离2*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()))
                              if(NormalizeDouble(OrderClosePrice()+(保持距离X*系数(OrderSymbol())+1)*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS))<=OrderStopLoss() || OrderStopLoss()==0)
                                {
                                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderClosePrice()+保持距离X*MarketInfo(OrderSymbol(),MODE_POINT)*系数(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0)==false)
                                    报错组件("");
                                }
                    }
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   OnTick();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void 按钮(string name,string txt1,string txt2,int XX,int YX,int XL,int YL,int WZ,color A,color B)
  {
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XX);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YX);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,XL);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,YL);
      ObjectSetString(0,name,OBJPROP_FONT,"微软雅黑");
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,7);
      ObjectSetInteger(0,name,OBJPROP_CORNER,WZ);
     }

   if(ObjectGetInteger(0,name,OBJPROP_STATE)==1)
     {
      ObjectSetInteger(0,name,OBJPROP_COLOR,A);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,B);
      ObjectSetString(0,name,OBJPROP_TEXT,txt1);
     }
   else
     {
      ObjectSetInteger(0,name,OBJPROP_COLOR,B);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,A);
      ObjectSetString(0,name,OBJPROP_TEXT,txt2);
     }
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int 最高最低单据订单号(int a,int b,int magicX,string 高低,string comm,int pc1,int pc2)
  {
   double 价格=0;
   int 订单号=0;
   for(int i=0;i<OrdersTotal();i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderTicket()!=pc1 && OrderTicket()!=pc2)
            if(OrderSymbol()==Symbol())
               if(OrderMagicNumber()==magicX || magicX==-1)
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                     if(OrderType()==a || OrderType()==b || a==-100 || b==-100)
                        if(((价格==0 || 价格>OrderOpenPrice()) && 高低=="L")
                           || ((价格==0 || 价格<OrderOpenPrice()) && 高低=="H"))
                          {
                           价格=OrderOpenPrice();
                           订单号=OrderTicket();
                          }
   return(订单号 );
  }
//+----------------------------------------------------- -------------+
//| |
//+------------------------------------------------------------------+
int findlassorder(int type1,int type2,int magicX,string fx,string 现在与历史,string comm,int 排除)
  {
   if(现在与历史=="现在")
      if(fx=="后")
         for(int i=OrdersTotal()-1;i>=0;i--)
            if(OrderSelect(i,SELECT_BY_POS))
               if(OrderTicket()!=排除 || 排除==0)
                  if(Symbol()==OrderSymbol())
                     if(OrderMagicNumber()==magicX || magicX==-1)
                        if(
                           OrderType()==type1
                           || OrderType()==type2
                           || type1==-100
                           || type2==-100
                           ||(type1==-200&&OrderType()<2)
                           ||(type2==-200&&OrderType()<2)
                           ||(type1==-300&&OrderType()>=2)
                           ||(type2==-300&&OrderType()>=2)
                           )
                           if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                              return(OrderTicket());

   if(现在与历史=="现在")
      if(fx=="前")
         for(i=0;i<OrdersTotal();i++)
            if(OrderSelect(i,SELECT_BY_POS))
               if(OrderTicket()!=排除 || 排除==0)
                  if(Symbol()==OrderSymbol())
                     if(OrderMagicNumber()==magicX || magicX==-1)
                        if(
                           OrderType()==type1
                           || OrderType()==type2
                           || type1==-100
                           || type2==-100
                           ||(type1==-200&&OrderType()<2)
                           ||(type2==-200&&OrderType()<2)
                           ||(type1==-300&&OrderType()>=2)
                           ||(type2==-300&&OrderType()>=2)
                           )
                           if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                              return(OrderTicket());

   if(现在与历史=="历史")
      if(fx=="后")
         for(i=OrdersHistoryTotal()-1;i>=0;i--)
            if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
               if(OrderTicket()!=排除 || 排除==0)
                  if(Symbol()==OrderSymbol())
                     if(OrderMagicNumber()==magicX || magicX==-1)
                        if(OrderType()<=5 && OrderType()>=0)
                           if(
                              OrderType()==type1
                              || OrderType()==type2
                              || type1==-100
                              || type2==-100
                              ||(type1==-200&&OrderType()<2)
                              ||(type2==-200&&OrderType()<2)
                              ||(type1==-300&&OrderType()>=2)
                              ||(type2==-300&&OrderType()>=2)
                              )
                              if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                                 if(OrderCloseTime()!=0)
                                    return(OrderTicket());

   if(现在与历史=="历史")
      if(fx=="前")
         for(i=0;i<OrdersHistoryTotal();i++)
            if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
               if(OrderTicket()!=排除 || 排除==0)
                  if(Symbol()==OrderSymbol())
                     if(OrderMagicNumber()==magicX || magicX==-1)
                        if(OrderType()<=5 && OrderType()>=0)
                           if(
                              OrderType()==type1
                              || OrderType()==type2
                              || type1==-100
                              || type2==-100
                              ||(type1==-200&&OrderType()<2)
                              ||(type2==-200&&OrderType()<2)
                              ||(type1==-300&&OrderType()>=2)
                              ||(type2==-300&&OrderType()>=2)
                              )
                              if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                                 if(OrderCloseTime()!=0)
                                    return(OrderTicket());

   return(-1);
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void deleteorder(int type,int magicX,string comm)
  {
//datetime time=TimeCurrent();
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         if(Symbol()==OrderSymbol())
            if(OrderMagicNumber()==magicX || magicX==-1)
               if(
                  (OrderType()==type || type==-100)
                  || (OrderType()<2 && type==-200)
                  || (OrderType()>=2 && type==-300)
                  )
                  if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                     //if(OrderOpenTime()<=time)
                    {
                     if(OrderType()>=2)
                       {
                        if(OrderDelete(OrderTicket())==false)
                           报错组件("");
                        i=OrdersTotal();
                       }
                     else
                       {
                        if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),滑点*系数(OrderSymbol()))==false)
                           报错组件("");
                        i=OrdersTotal();
                       }
                    }
     }
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int 分项单据统计(int type,int magicX,string comm)
  {
   int 数量=0;
   for(int i=0;i<OrdersTotal();i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==magicX || magicX==-1)
               if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                  if(
                     (OrderType()==type || type==-100)
                     || (OrderType()<2 && type==-200)
                     || (OrderType()>=2 && type==-300)
                     )
                     数量++;
   return(数量);
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+(接下一楼)
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:56 | 显示全部楼层
double 分类单据利润(int type,int magicX,string comm)
  {
   double 利润=0;
   for(int i=0;i<OrdersTotal();i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==magicX || magicX==-1)
               if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                  if(
                     (OrderType()==type || type==-100)
                     || (OrderType()<2 && type==-200)
                     || (OrderType()>=2 && type==-300)
                     )
                     利润+=OrderProfit()+OrderSwap()+OrderCommission();
   return(利润);
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double 总交易量(int type,int magicX,string comm)
  {
   double js=0;
   for(int i=0;i<OrdersTotal();i++)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==magicX || magicX==-1)
               if(StringFind(OrderComment(),comm,0)!=-1 || comm=="")
                  if(OrderType()==type || (type==-100 && OrderType()<2))
                     js+=OrderLots();

   return(NormalizeDouble(js,2));
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 固定位置标签(string 名称,string 内容,int XX,int YX,color C,int 字体大小,int 固定角内)
  {
   if(内容==EMPTY)
      return;
   if(ObjectFind(名称)==-1)
     {
      ObjectDelete(名称);
      ObjectCreate(名称,OBJ_LABEL,0,0,0);
     }
   ObjectSet(名称,OBJPROP_XDISTANCE,XX);
   ObjectSet(名称,OBJPROP_YDISTANCE,YX);
   ObjectSetText(名称,内容,字体大小,"宋体",C);
   ObjectSet(名称,OBJPROP_CORNER,固定角内);
   ObjectSetInteger(0,名称,OBJPROP_ANCHOR,ANCHOR_LEFT);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int 建立单据(string 货币对,int 类型,double 单量内,double 价位,double 间隔,double 止损内,double 止盈内,string 备注内,int magicX,color 颜色标记)
  {

   备注内=备注内+"-"+Period()+"-"+magicX;
   if(MarketInfo(货币对,MODE_LOTSTEP)<10)int 单量小数保留内=0;
   if(MarketInfo(货币对,MODE_LOTSTEP)<1)单量小数保留内=1;
   if(MarketInfo(货币对,MODE_LOTSTEP)<0.1)单量小数保留内=2;

   单量内=NormalizeDouble(单量内,单量小数保留内);

   if(单量内<MarketInfo(货币对,MODE_MINLOT))
     {
      laber("低于最低单量",Yellow,0);
      return(-1);
     }

   if(单量内>MarketInfo(货币对,MODE_MAXLOT))
      单量内=MarketInfo(货币对,MODE_MAXLOT);

   int t;
   double POINT=MarketInfo(货币对,MODE_POINT)*系数(货币对);
   int DIGITS=MarketInfo(货币对,MODE_DIGITS);
   int 滑点内=滑点*系数(货币对);

   if(类型==OP_BUY || 类型==OP_SELL)
      if(AccountFreeMargin()<单量内*MarketInfo(货币对,MODE_MARGINREQUIRED))
        {
         Print("保证金不足");
         return(-1);
        }

   if(类型==OP_BUY)
     {
      t=-1;
      for(int ix2=0;ix2<1;ix2++)
         if(t==-1)
           {
            RefreshRates();
            t=OrderSend(货币对,OP_BUY,单量内,MarketInfo(货币对,MODE_ASK),滑点内,0,0,备注内,magicX,0,颜色标记);
            报错组件("");
            if(OrderSelect(t,SELECT_BY_TICKET))
              {
               if(止损内!=0 && 止盈内!=0)
                  for(int ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-止损内 *POINT,DIGITS),NormalizeDouble(OrderOpenPrice()+止盈内 *POINT,DIGITS),0))
                        break;

               if(止损内==0 && 止盈内!=0)
                  for(ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),0,NormalizeDouble(OrderOpenPrice()+止盈内 *POINT,DIGITS),0))
                        break;

               if(止损内!=0 && 止盈内==0)
                  for(ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-止损内 *POINT,DIGITS),0,0))
                        break;

               报错组件("");
              }
           }
     }

   if(类型==OP_SELL)
     {
      t=-1;
      for(ix2=0;ix2<1;ix2++)
         if(t==-1)
           {
            RefreshRates();
            t=OrderSend(货币对,OP_SELL,单量内,MarketInfo(货币对,MODE_BID),滑点内,0,0,备注内,magicX,0,颜色标记);
            报错组件("");
            if(OrderSelect(t,SELECT_BY_TICKET))
              {
               if(止损内!=0 && 止盈内!=0)
                  for(ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+止损内 *POINT,DIGITS),NormalizeDouble(OrderOpenPrice()-止盈内 *POINT,DIGITS),0))
                        break;

               if(止损内==0 && 止盈内!=0)
                  for(ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),0,NormalizeDouble(OrderOpenPrice()-止盈内 *POINT,DIGITS),0))
                        break;

               if(止损内!=0 && 止盈内==0)
                  for(ix=0;ix<3;ix++)
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+止损内 *POINT,DIGITS),0,0))
                        break;
              }
            报错组件("");
           }
     }

   if(类型==OP_BUYLIMIT || 类型==OP_BUYSTOP)
     {
      t=-1;
      for(ix2=0;ix2<1;ix2++)
         if(t==-1)
           {
            if(价位==0)
              {
               RefreshRates();
               价位=MarketInfo(货币对,MODE_ASK);
              }

            if(类型==OP_BUYLIMIT)
              {
               if(止损内!=0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_BUYLIMIT,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位-间隔*POINT-止损内 *POINT,DIGITS),NormalizeDouble(价位-间隔*POINT+止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_BUYLIMIT,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,0,NormalizeDouble(价位-间隔*POINT+止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内!=0 && 止盈内==0)
                  t=OrderSend(货币对,OP_BUYLIMIT,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位-间隔*POINT-止损内 *POINT,DIGITS),0,备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内==0)
                  t=OrderSend(货币对,OP_BUYLIMIT,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,0,0,备注内,magicX,0,颜色标记);
              }

            if(类型==OP_BUYSTOP)
              {
               if(止损内!=0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_BUYSTOP,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位+间隔*POINT-止损内 *POINT,DIGITS),NormalizeDouble(价位+间隔*POINT+止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_BUYSTOP,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,0,NormalizeDouble(价位+间隔*POINT+止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内!=0 && 止盈内==0)
                  t=OrderSend(货币对,OP_BUYSTOP,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位+间隔*POINT-止损内 *POINT,DIGITS),0,备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内==0)
                  t=OrderSend(货币对,OP_BUYSTOP,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,0,0,备注内,magicX,0,颜色标记);
              }
            报错组件("");
           }
     }

   if(类型==OP_SELLLIMIT || 类型==OP_SELLSTOP)
     {
      t=-1;
      for(ix2=0;ix2<1;ix2++)
         if(t==-1)
           {
            if(价位==0)
              {
               RefreshRates();
               价位=MarketInfo(货币对,MODE_BID);
              }

            if(类型==OP_SELLSTOP)
              {
               if(止损内!=0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_SELLSTOP,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位-间隔*POINT+止损内 *POINT,DIGITS),NormalizeDouble(价位-间隔*POINT-止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_SELLSTOP,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,0,NormalizeDouble(价位-间隔*POINT-止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内!=0 && 止盈内==0)
                  t=OrderSend(货币对,OP_SELLSTOP,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位-间隔*POINT+止损内 *POINT,DIGITS),0,备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内==0)
                  t=OrderSend(货币对,OP_SELLSTOP,单量内,NormalizeDouble(价位-间隔*POINT,DIGITS),滑点内,0,0,备注内,magicX,0,颜色标记);
              }

            if(类型==OP_SELLLIMIT)
              {
               if(止损内!=0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_SELLLIMIT,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位+间隔*POINT+止损内 *POINT,DIGITS),NormalizeDouble(价位+间隔*POINT-止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内!=0)
                  t=OrderSend(货币对,OP_SELLLIMIT,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,0,NormalizeDouble(价位+间隔*POINT-止盈内 *POINT,DIGITS),备注内,magicX,0,颜色标记);
               if(止损内!=0 && 止盈内==0)
                  t=OrderSend(货币对,OP_SELLLIMIT,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,NormalizeDouble(价位+间隔*POINT+止损内 *POINT,DIGITS),0,备注内,magicX,0,颜色标记);
               if(止损内==0 && 止盈内==0)
                  t=OrderSend(货币对,OP_SELLLIMIT,单量内,NormalizeDouble(价位+间隔*POINT,DIGITS),滑点内,0,0,备注内,magicX,0,颜色标记);
              }
            报错组件("");
           }
     }
   return(t);
  }

double 滑点=30;
input bool 是否显示文字标签=true;
input bool 国际点差自适应=true;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
double 系数(string symbol)
  {
   int 系数=1;
   if(
      MarketInfo(symbol,MODE_DIGITS)==3
      || MarketInfo(symbol,MODE_DIGITS)==5
      || (StringFind(symbol,"XAU",0)==0 && MarketInfo(symbol,MODE_DIGITS)==2)
      ||(StringFind(symbol,"GOLD",0)==0&&MarketInfo(symbol,MODE_DIGITS)==2)
      ||(StringFind(symbol,"Gold",0)==0&&MarketInfo(symbol,MODE_DIGITS)==2)
      || (StringFind(symbol,"USD_GLD",0)==0 && MarketInfo(symbol,MODE_DIGITS)==2)
      )系数=10;

   if(StringFind(symbol,"XAU",0)==0 && MarketInfo(symbol,MODE_DIGITS)==3)系数=100;
   if(StringFind(symbol,"GOLD",0)==0 && MarketInfo(symbol,MODE_DIGITS)==3)系数=100;
   if(StringFind(symbol,"Gold",0)==0 && MarketInfo(symbol,MODE_DIGITS)==3)系数=100;
   if(StringFind(symbol,"USD_GLD",0)==0 && MarketInfo(symbol,MODE_DIGITS)==3)系数=100;

   if(国际点差自适应==false)
      return(1);

   return(系数);
  }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void laber(string a,color b,int jl)
  {
   Print(a);
   if(IsOptimization())
      return;

   if(是否显示文字标签==true)
     {
      int pp=WindowBarsPerChart();
      double hh=High[iHighest(Symbol(),0,MODE_HIGH,pp,0)];
      double ll=Low[iLowest(Symbol(),0,MODE_LOW,pp,0)];
      double 文字小距离=(hh-ll)*0.03;

      ObjectDelete("箭头"+TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)+a);
      ObjectCreate("箭头"+TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)+a,OBJ_TEXT,0,Time[0],Low[0]-jl*文字小距离);
      ObjectSetText("箭头"+TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)+a,a,8,"Times New Roman",b);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void 报错组件(string a)
  {

   RefreshRates();

   if(IsOptimization())
      return;

   int t=GetLastError();
   string 报警;
   if(t!=0)
      switch(t)
        {
         //case 0:报警="错误代码:"+(string)0+"没有错误返回";break;
         //case 1:报警="错误代码:"+(string)1+"没有错误返回但结果不明";break;
         //case 2:报警="错误代码:"+(string)2+"一般错误";break;
         //case 3:报警="错误代码:"+(string)3+"无效交易参量";break;
         case 4:报警="错误代码:"+(string)4+"交易服务器繁忙";break;
         case 5:报警="错误代码:"+(string)5+"客户终端旧版本";break;
         case 6:报警="错误代码:"+(string)6+"没有连接服务器";break;
         case 7:报警="错误代码:"+(string)7+"没有权限";break;
         //case 8:报警="错误代码:"+(string)8+"请求过于频繁";break;
         case 9:报警="错误代码:"+(string)9+"交易运行故障";break;
         case 64:报警="错误代码:"+(string)64+"账户禁止";break;
         case 65:报警="错误代码:"+(string)65+"无效账户";break;
         // case 128:报警="错误代码:"+(string)128+"交易超时";break;
         //case 129:报警="错误代码:"+(string)129+"无效价格";break;
         case 130:报警="错误代码:"+(string)130+"无效停止";break;
         //case 131:报警="错误代码:"+(string)131+"无效交易量";break;
         case 132:报警="错误代码:"+(string)132+"市场关闭";break;
         case 133:报警="错误代码:"+(string)133+"交易被禁止";break;
         case 134:报警="错误代码:"+(string)134+"资金不足";break;
         case 135:报警="错误代码:"+(string)135+"价格改变";break;
         //case 136:报警="错误代码:"+(string)136+"开价";break;
         case 137:报警="错误代码:"+(string)137+"经纪繁忙";break;
         //case 138:报警="错误代码:"+(string)138+"重新开价";break;
         case 139:报警="错误代码:"+(string)139+"定单被锁定";break;
         case 140:报警="错误代码:"+(string)140+"只允许看涨仓位";break;
         //case 141:报警="错误代码:"+(string)141+"过多请求";break;
         //case 145:报警="错误代码:"+(string)145+"因为过于接近市场,修改否定";break;
         //case 146:报警="错误代码:"+(string)146+"交易文本已满";break;
         case 147:报警="错误代码:"+(string)147+"时间周期被经纪否定";break;
         case 148:报警="错误代码:"+(string)148+"开单和挂单总数已被经纪限定";break;
         case 149:报警="错误代码:"+(string)149+"当对冲备拒绝时,打开相对于现有的一个单置";break;
         case 150:报警="错误代码:"+(string)150+"把为反FIFO规定的单子平掉";break;
         case 4000:报警="错误代码:"+(string)4000+"没有错误";break;
         case 4001:报警="错误代码:"+(string)4001+"错误函数指示";break;
         case 4002:报警="错误代码:"+(string)4002+"数组索引超出范围";break;
         case 4003:报警="错误代码:"+(string)4003+"对于调用堆栈储存器函数没有足够内存";break;
         case 4004:报警="错误代码:"+(string)4004+"循环堆栈储存器溢出";break;
         case 4005:报警="错误代码:"+(string)4005+"对于堆栈储存器参量没有内存";break;
         case 4006:报警="错误代码:"+(string)4006+"对于字行参量没有足够内存";break;
         case 4007:报警="错误代码:"+(string)4007+"对于字行没有足够内存";break;
         //case 4008:报警="错误代码:"+(string)4008+"没有初始字行";break;
         case 4009:报警="错误代码:"+(string)4009+"在数组中没有初始字串符";break;
         case 4010:报警="错误代码:"+(string)4010+"对于数组没有内存";break;
         case 4011:报警="错误代码:"+(string)4011+"字行过长";break;
         case 4012:报警="错误代码:"+(string)4012+"余数划分为零";break;
         case 4013:报警="错误代码:"+(string)4013+"零划分";break;
         case 4014:报警="错误代码:"+(string)4014+"不明命令";break;
         case 4015:报警="错误代码:"+(string)4015+"错误转换(没有常规错误)";break;
         case 4016:报警="错误代码:"+(string)4016+"没有初始数组";break;
         case 4017:报警="错误代码:"+(string)4017+"禁止调用DLL ";break;
         case 4018:报警="错误代码:"+(string)4018+"数据库不能下载";break;
         case 4019:报警="错误代码:"+(string)4019+"不能调用函数";break;
         case 4020:报警="错误代码:"+(string)4020+"禁止调用智能交易函数";break;
         case 4021:报警="错误代码:"+(string)4021+"对于来自函数的字行没有足够内存";break;
         case 4022:报警="错误代码:"+(string)4022+"系统繁忙 (没有常规错误)";break;
         case 4050:报警="错误代码:"+(string)4050+"无效计数参量函数";break;
         case 4051:报警="错误代码:"+(string)4051+"无效参量值函数";break;
         case 4052:报警="错误代码:"+(string)4052+"字行函数内部错误";break;
         case 4053:报警="错误代码:"+(string)4053+"一些数组错误";break;
         case 4054:报警="错误代码:"+(string)4054+"应用不正确数组";break;
         case 4055:报警="错误代码:"+(string)4055+"自定义指标错误";break;
         case 4056:报警="错误代码:"+(string)4056+"不协调数组";break;
         case 4057:报警="错误代码:"+(string)4057+"整体变量过程错误";break;
         case 4058:报警="错误代码:"+(string)4058+"整体变量未找到";break;
         case 4059:报警="错误代码:"+(string)4059+"测试模式函数禁止";break;
         case 4060:报警="错误代码:"+(string)4060+"没有确认函数";break;
         case 4061:报警="错误代码:"+(string)4061+"发送邮件错误";break;
         case 4062:报警="错误代码:"+(string)4062+"字行预计参量";break;
         case 4063:报警="错误代码:"+(string)4063+"整数预计参量";break;
         case 4064:报警="错误代码:"+(string)4064+"双预计参量";break;
         case 4065:报警="错误代码:"+(string)4065+"数组作为预计参量";break;
         case 4066:报警="错误代码:"+(string)4066+"刷新状态请求历史数据";break;
         case 4067:报警="错误代码:"+(string)4067+"交易函数错误";break;
         case 4099:报警="错误代码:"+(string)4099+"文件结束";break;
         case 4100:报警="错误代码:"+(string)4100+"一些文件错误";break;
         case 4101:报警="错误代码:"+(string)4101+"错误文件名称";break;
         case 4102:报警="错误代码:"+(string)4102+"打开文件过多";break;
         case 4103:报警="错误代码:"+(string)4103+"不能打开文件";break;
         case 4104:报警="错误代码:"+(string)4104+"不协调文件";break;
         case 4105:报警="错误代码:"+(string)4105+"没有选择定单";break;
         case 4106:报警="错误代码:"+(string)4106+"不明货币对";break;
         case 4107:报警="错误代码:"+(string)4107+"无效价格";break;
         case 4108:报警="错误代码:"+(string)4108+"无效定单编码";break;
         case 4109:报警="错误代码:"+(string)4109+"不允许交易";break;
         case 4110:报警="错误代码:"+(string)4110+"不允许长期";break;
         case 4111:报警="错误代码:"+(string)4111+"不允许短期";break;
         case 4200:报警="错误代码:"+(string)4200+"定单已经存在";break;
         case 4201:报警="错误代码:"+(string)4201+"不明定单属性";break;
         //case 4202:报警="错误代码:"+(string)4202+"定单不存在";break;
         case 4203:报警="错误代码:"+(string)4203+"不明定单类型";break;
         case 4204:报警="错误代码:"+(string)4204+"没有定单名称";break;
         case 4205:报警="错误代码:"+(string)4205+"定单坐标错误";break;
         case 4206:报警="错误代码:"+(string)4206+"没有指定子窗口";break;
         case 4207:报警="错误代码:"+(string)4207+"定单一些函数错误";break;
         case 4250:报警="错误代码:"+(string)4250+"错误设定发送通知到队列中";break;
         case 4251:报警="错误代码:"+(string)4251+"无效参量- 空字符串传递到SendNotification()函数";break;
         case 4252:报警="错误代码:"+(string)4252+"无效设置发送通知(未指定ID或未启用通知)";break;
         case 4253:报警="错误代码:"+(string)4253+"通知发送过于频繁";break;
        }
   if(t!=0)
     {
      while(IsTradeContextBusy())
         Sleep(300);
      Print(a+报警);
      laber(a+报警,Yellow,0);
     }
  }

string JLA[999];
double JLB[999];
datetime JLC[999];
string JLD[999];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+(接下一楼)
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:56 | 显示全部楼层
int HQXH(string A)
  {
   int JL=-100;
   for(int ix=0;ix<999;ix++)
     {
      if(JLA[ix]==A)
         return(ix);
      else
      if(JLA[ix]==NULL)
      if(JL==-100)
         JL=ix;
     }
   return(JL);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int objectFind(string A)
  {
   if(IsOptimization())
     {
      for(int ix=0;ix<999;ix++)
         if(JLA[ix]==A)
            return(0);
      return(-1);
     }
   return(ObjectFind(A));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void objectDelete(string A)
  {
   if(IsOptimization())
     {
      int WZ=HQXH(A);
      JLA[WZ]=NULL;
      return;
     }
   ObjectDelete(A);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double objectGet(string A,int B)
  {
   if(IsOptimization())
     {
      if(objectFind(A)!=-1)
        {
         if(B==OBJPROP_PRICE1)return(JLB[HQXH(A)]);
         if(B==OBJPROP_TIME1)return(JLC[HQXH(A)]);
        }
      else
         return(0);
     }
   return(ObjectGet(A,B));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string objectDescription(string A)
  {
   if(IsOptimization())
      return(JLD[HQXH(A)]);
   return(ObjectDescription(A));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void laber0(string name,string txt,color 颜色,datetime 时间,double 价位,int 字体大小,int 定位,int 窗口)
  {
   if(IsOptimization())
     {
      int WZ=HQXH(name);
      JLA[WZ]=name;
      JLB[WZ]=价位;
      JLC[WZ]=时间;
      JLD[WZ]=txt;
      return;
     }
   ObjectDelete(name);
   ObjectCreate(name,OBJ_TEXT,窗口,时间,价位);
   ObjectSetText(name,txt,字体大小,"Times New Roman",颜色);
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,定位);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void 画直线(string e,int type,double b,datetime c,color d,int type2,int width)
  {
   if(IsOptimization())
     {
      int WZ=HQXH(e);
      JLA[WZ]=e;
      JLB[WZ]=b;
      JLC[WZ]=c;
      return;
     }

   ObjectDelete(e);
   ObjectCreate(e,type,0,0,0);
   ObjectSet(e,OBJPROP_PRICE1,b);
   ObjectSet(e,OBJPROP_TIME1,c);
   ObjectSet(e,OBJPROP_COLOR,d);
   ObjectSet(e,OBJPROP_STYLE,type2);
   ObjectSet(e,OBJPROP_WIDTH,width);
  }
//+------------------------------------------------------------------+
input datetime 程序最终编译时间=__DATETIME__;
//+------------------------------------------------------------------+
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:57 | 显示全部楼层
已解决
回复

使用道具 举报

20

主题

3398

积分

4

精华

中级操盘手

金钱
3398 美元
权重
0
 楼主| 发表于 2019-3-15 11:59 | 显示全部楼层
等距加仓EA.zip (8.76 KB, 下载次数: 11)
回复

使用道具 举报

280

主题

5807

积分

0

精华

高级操盘手

金钱
5807 美元
权重
0
发表于 2019-3-16 20:48 来自手机 | 显示全部楼层
加仓需要勇气啊~~还是手工安全灵活~~
回复

使用道具 举报

0

主题

45

积分

0

精华

外汇入门

金钱
45 美元
权重
0
发表于 2019-3-20 13:01 | 显示全部楼层
策略不错,可以一试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|众汇论坛

版权所有: ©2014-2018 fx3q.com Powered by Discuz! X3
浙ICP备: ICP14039028

浙公网安备 33010302000502号

风险提示:杠杆风险高,交易要谨慎
若有侵权请联系fx3q@qq.com删除

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