专家: 简单均线 EA

 

简单均线 EA:

这些东西是给那些谁想要尝试测试新​​策略, 但没有任何 EA 的人。

简单均线 EA

作者: Karlis Balcers

 

在测试器中出现错误:

2010.04.28 06:27:44 核心 1 进程创建错误 [2]

 
1Serg:

在测试器中出现错误:

2010.04.28 06:27:44 核心 1 进程创建错误 [2]

请更新至最新版本,然后检查程序目录根目录中的 metatester.exe 文件。
 
Renat:
请更新到最新版本,然后检查程序目录根目录中的 metatester.exe 文件。

谢谢,它能运行。

优化器和可视化功能不见了。

 
1Serg:

缺少优化器和可视化功能。

优化器已经有了,只需增加测试窗口的高度。

可视化稍后会有。

 
Renat:

优化器就在那里,只需增加测试窗口的高度即可。

可视化功能稍后会出现。

酷毙了

 

谢谢、

tsaktuo 先生/女士,我学习了您的代码 K_eSimpleMA,它对我了解 EA 的结构以及如何使用 SMA 十字星等概念非常有用。

我真的很感谢您分享了这篇文章,非常感谢。

另一方面,我有几个问题,都与 SymbolInfoTick 函数有关:


MQL5 手册中关于SymbolInfoTick(Symbol(),tick) 的说明是,它会在 MqlTick 类型的变量中返回指定符号的当前价格,还说如果函数成功则返回 true,否则返回 false。

根据上文所述,我的理解是,如果没有收到 tick,就会打印信息("获取符号信息失败!"这是否正确? 如果不对,请告诉我是怎么回事?

另一个问题是:如果每个刻度线都打印信息,会发生什么情况?

再次感谢。

 

有:

trReq.sl=tick.ask-_Point*sl;// 订单的止损水平

trReq.tp=tick.ask+_Point*tp;// 订单的获利 水平

需要

trReq.sl=tick.bid-_Point*sl;// 订单的止损水平

trReq.tp=tick.bid+_Point*tp;//订单的获利水平

并相应改为卖出。

以卖出价买入,但以买入价平仓。

如果您想将盈亏限制在 20 点内,那么买入时的买入价(收盘价)和卖出时的卖出价(收盘价)应各计算 20 点。

 

您能告诉我如何添加到此代码中,使其在MACD 趋势上进行交易而无需止损吗?

多头:MACD从上到下快速MA与慢速MA交叉增长

多头:MACD 快速上升,MA 自下而上穿过慢速 MA

空头: MACD 下降,快速 MA 自上而下穿过慢速 MA

空头: MACD 下降快速 MA 自下而上穿过慢速 MA

我这样试过

//+------------------------------------------------------------------+
//|MACD&DEMA.mq5
//|AM2 集团 2010 年版权所有。|
//|http://www.am2_group.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- 输入参数
input int Periods=2;          // 第 1 期移动平均数
input int Shift=38;           // 第 2 期移动平均数
input int SL=30;              // 止损
input int TP=100;             // 获利
input int MAGIC=3072010;      // 神奇数字顾问

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // MACD 指标句柄
double ma1Val[];
double ma2Val[];
double macdVal[]; // 动态数组,用于存储日线的 MACD 数值
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
{
   //为所有新订单请求设置默认值
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // 交易符号
      trReq.volume=0.1;                      // 要求的交易量(以手为单位
      trReq.deviation=1;                     // 与要求价格的最大可能偏差
      trReq.type_filling=ORDER_FILLING_AON;  // 订单执行类型
      trReq.type_time=ORDER_TIME_GTC;        // 订单执行时间
      trReq.comment="MA Sample";
   //结束
  
   //为 2 个 MA 指标创建句柄
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //--获取 MACD 指标句柄
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //结束
  
   //输入参数只读
      tp=0;
      sl=0;
   //结束
  
   /支持有 5 位小数的账户
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //结束
      
   return(0);
}
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //刻度信息变量
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //将最新的 MA 指标值复制到缓冲区中
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //If MAPeriod > MAPeriod + Shift -> BUY
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // 订单的止损水平
         trReq.tp=tick.bid+_Point*tp;            // 订单的获利水平
         trReq.type=ORDER_TYPE_BUY;              // 订单类型
         OrderSend(trReq,trRez);
      }
      //If MAPeriod < MAPeriod + Shift -> SELL
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // 订单的止损水平
         trReq.tp=tick.ask-_Point*tp;            // 订单的获利水平
         trReq.type=ORDER_TYPE_SELL;             // 订单类型
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

简单的 MA EA

作者: outkast

你好,Outkast、

我是 EA 的新手,我刚刚导入了 tsaktuo 先生的 esimpleMA,因为我真的不明白代码,我看到它在我的图表上运行,但我是否应该设置一些 MA 值,我不知道需要帮助,需要一类或一本书。

 

我很高兴能找到您的代码示例,因为它解决了我缓冲 MA 并使其显示在图表上的问题。 感谢您发布该示例。

我的一个问题是,它是如何决定关闭开仓订单的?

谢谢