返回顶部
  • 发帖数4
  • 粉丝0

此人很懒,什么也没有留下

[普通用户] 请求指正我试写的错误,不知道错误在哪里

[复制链接]
rogerfLv.1 显示全部楼层 发表于 2023-1-11 12:16:02 |阅读模式 打印 上一主题 下一主题
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"



input double   StopLoss=2.5;      // 止损
input int      TakeProfit=10;   // 获利

input int      MA5_Period=5;      // 移动平均周期
input int      MA20_Period=20;      // 移动平均周期
input int      EA_Magic=12345;   // EA 幻数
input double   Lot= 1;          // 交易手数
//--- 其他参数
int ma5Handle;  // 我们移动平均指标的句柄
int ma20Handle;  // 我们移动平均指标的句柄
double maVal[]; // 保存每个柱移动平均值的动态数组
double p_close; // 保存一个柱收盘价的变量

bool ArraySetAsSeries(double maVal, bool true);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);


//--- 得到移动平均指标的句柄
   ma5Handle=iMA(_Symbol,_Period,MA5_Period,0,MODE_SMA,PRICE_CLOSE);
   ma20Handle=iMA(_Symbol,_Period,MA20_Period,0,MODE_SMA,PRICE_CLOSE);
//--- 如果句柄返回了无效句柄
   if(  ma5Handle<0  ||ma20Handle<0)
     {
      Alert("创建指标句柄出错 - 错误: ",GetLastError(),"!!");
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

   bool IndicatorRelease( int maHandle );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  if(Bars(_Symbol,_Period)<60) // 如果总柱数少于60
     {
      Alert("我们只有不到60个柱, EA 将要退出!!");
      return;
     }

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // 数据已经被成功复制
     {
      if(Old_Time!=New_Time[0]) // 如果旧的时间不等于新柱的时间
        {
         IsNewBar=true;   // 如果不是第一次调用,新柱已经出现
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("我们在此时有了新柱 ",New_Time[0]," 旧的时间是 ",Old_Time);
         Old_Time=New_Time[0];            // 保存柱时间
        }
     }
   else
     {
      Alert("复制历史时间数据出错, 错误 =",GetLastError());
      ResetLastError();
      return;
     }

  //--- EA 应该在有新柱的时候只检查新的交易
   if(IsNewBar==false)
     {
      return;
     }

struct MqlTick
{
datetime time; // 上次更新价格的时间
double bid; // 当前卖价
double ask; // 当前买价
double last; // 上次交易价格(最后价格)
ulong volume; // 当前最后价格的交易量
};

struct MqlTradeRequest
{
ENUM_TRADE_REQUEST_ACTIONS action; // 交易操作类型
ulong magic; // “EA 交易”ID(幻数)
ulong order; // 订单号
string symbol; // 交易品种
double volume; // 以手数表示的交易的请求交易量
double price; // 价格
double stoplimit; // 订单的止损限价水平
double sl; // 订单的止损水平
double tp; // 订单的获利水平
ulong deviation; // 相对于请求价格的最大可能偏移
ENUM_ORDER_TYPE type; // 订单类型
ENUM_ORDER_TYPE_FILLING type_filling; // 订单执行类型
ENUM_ORDER_TYPE_TIME type_time; // 订单执行时间
datetime expiration; // 订单到期时间(针对 ORDER_TIME_SPECIFIED 类型的订单)
string comment; // 订单注释
};

struct MqlTradeResult
{
uint retcode; // 操作返回代码
ulong deal; // 交易订单号,如果已执行的话
ulong order; // 订单号,如果已下达的话
double volume; // 交易量,由经纪人批准
double price; // 交易价格,由经纪人批准
double bid; // 当前卖价
double ask; // 当前买价
string comment; // 经纪人对操作的注释(默认情况下此处填写操作说明)
};


struct MqlRates
{
datetime time; // 时间周期开始时间
double open; // 开盘价
double high; // 时间周期内的最高价
double low; // 时间周期内的最低价
double close; // 收盘价
long tick_volume; // 交易量
int spread; // 点差
long real_volume; // 实际交易量
};



  //--- 取得最新三个柱的详细信息
   if(CopyRates(_Symbol,_Period,0,276,mrate)<0)
     {
      Alert("复制报价/历史数据出错 - 错误:",GetLastError(),"!!");
      return;
     }





  }


   MqlTick latest_price;     // 将用于取得最近/最新报价
   MqlTradeRequest mrequest;  // 将用于发送我们的交易请求
   MqlTradeResult mresult;    // 将用于取得我们的交易结果
   MqlRates mrate[];         // 将用于保存每个柱的价格,交易量和差价




   int CopyRates(
        string _symbol, // 交易品种名称
        int _Period, // 时间周期
        int 0, // 起始位置
        int 276, // 要复制的数据计数
        MqlRates mrate[] // 要复制的目标数组
      );



  bool ArraySetAsSeries(double  mrate, bool true);


+10
回复

使用道具 举报

精彩评论2

rogerfLv.1 显示全部楼层 发表于 2023-1-11 12:22:03
bool ArraySetAsSeries(double maVal, bool true);

试错的结果,  ‘true'  comma expectd .           可是 true后面  不应该有comma  ,不是吗


+10
回复

使用道具 举报

rogerfLv.1 显示全部楼层 发表于 2023-1-11 12:29:13
int CopyRates(
        string _symbol, // 交易品种名称
        int _Period, // 时间周期
        int 0, // 起始位置
        int 276, // 要复制的数据计数
        MqlRates mrate[] // 要复制的目标数组
      );
  试错结果,也是   ‘  0  ,  comma  expected.   '                      '  276,    comma  expectd   '                        

bool ArraySetAsSeries(double  mrate, bool true);
   'true,  comma  expected'   



又说,
int CopyRates(
        string _symbol, // 交易品种名称
        int _Period, // 时间周期
        int 0, // 起始位置
        int 276, // 要复制的数据计数
        MqlRates mrate[] // 要复制的目标数组
      );
  又说   MqqlRates  are  pased  by  reference  only,     不知道是什么意思




+10
回复

使用道具 举报

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

本版积分规则

EA邦和EACTP仅为EA程序化交易软件服务供应商,使用EA工具进行交易,在使用前应该清楚的阅读和浏览软件相关的教程,使用软件是一种自发行为,所引发的一切法律后果,包括用户在使用过程中导致的任何损失均与EA软件开发者无关。
  • 微信

  • 微信公众号

  • 微信视频号

  • Powered by Discuz! X3.5 | Copyright © 2017-2024, Tencent Cloud. | EABANG.COM
  • 和仲科技有限公司| 川公网安备 51019002005489号 | 蜀ICP备17026493号