rogerf 发表于 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;
   bool IsNewBar=false;

   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // 数据已经被成功复制
   {
      if(Old_Time!=New_Time) // 如果旧的时间不等于新柱的时间
      {
         IsNewBar=true;   // 如果不是第一次调用,新柱已经出现
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("我们在此时有了新柱 ",New_Time," 旧的时间是 ",Old_Time);
         Old_Time=New_Time;            // 保存柱时间
      }
   }
   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(doublemrate, bool true);


rogerf 发表于 2023-1-11 12:22:03

bool ArraySetAsSeries(double maVal, bool true);

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


rogerf 发表于 2023-1-11 12:29:13

int CopyRates(
      string _symbol, // 交易品种名称
      int _Period, // 时间周期
      int 0, // 起始位置
      int 276, // 要复制的数据计数
      MqlRates mrate[] // 要复制的目标数组
      );
试错结果,也是   ‘0,commaexpected.   '                      '276,    commaexpectd   '                        

bool ArraySetAsSeries(doublemrate, bool true);
   'true,commaexpected'   



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




页: [1]
查看完整版本: 请求指正我试写的错误,不知道错误在哪里