首页 系统交易 帖子

简单单层感知器EA - MetaTrader 4 专家顾问

附件
18987.zip (1.98 KB, 下载 2次)

1. 关于感知器

感知器是机器学习中的基础组件,具体细节可以参考Mark Humphrys 博士的单层神经网络

在我的EA中,感知器的逻辑是基于人工智能的原则。


2. 算法


2.1. 输入

w1, w2, w3w4 是根据优化结果设定的权重。

input int    x1 = 0;// 权重1
input int   x2 = 0;// 权重2
input int   x3 = 0;// 权重3
input int    x4 = 0;// 权重4


2.2. 感知器

为了创建一个简单的EA,阈值设为零,输出为“触发”1和“未触发”0。

规则

double w1 = x1 - 100;
 double w2 = x2 - 100;
  double w3 = x3 - 100;
   double w4 = x4 - 100;

  // 2017/03/18 前一根K线的感知器

   double a11 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,1))/100-0.5)*2

 double a21 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,1))/100-0.5)*2;

   double a31 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,1))/100-0.5)*2;

   double a41 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,1))/100-0.5)*2;

   double Current_Percptron = (w1 * a11 + w2 * a21 + w3 * a31 + w4 * a41);

  // 2017/03/18 前两根K线的感知器

   double a12 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,2))/100-0.5)*2;

 double a22 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,2))/100-0.5)*2;

   double a32 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,2))/100-0.5)*2;

   double a42 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,2))/100-0.5)*2;

  double Pre_Percptron = (w1 * a12 + w2 * a22 + w3 * a32 + w4 * a42);

我在这个EA中使用RSI指标,但其他振荡器也可以,比如RCI、W%R等。


2.3. 开仓和平仓

当之前的感知器在0以下而当前的感知器在0以上时,如果有空头仓位,则平仓。

然后EA发送一个多头订单。

if(Pre_Percptron < 0 && Current_Percptron > 0) // 多头信号
   {
      // 如果有空头仓位,发送平仓指令
      if(pos < 0)
      {
         ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0);
         if(ret) pos = 0; // 如果平仓成功,仓位状态为零
      }
      // 如果没有仓位,发送多头订单
      if(pos == 0) Ticket = OrderSend(
                                       _Symbol,              // 交易对
                                       OP_BUY,                 // 操作类型
                                       Lots,              // 手数
                                       Ask,              // 价格
                                       0,            // 滑点
                                       0,            // 止损
                                       0,          // 获利
                                       Trade_Comment,        // 备注
                                       MagicNumber,// 魔法数字
                                       0,        // 挂单过期时间
                                       Green  // 颜色
                                       );
   }

反之,当当前感知器在0以下而之前感知器在0以上时,如果有多头仓位,则平仓。

然后EA发送一个空头订单。


3. 优化

加载"Slime_Mold_RSI_template.set",并选择"仅开盘价"作为模型。

输入设置

优化设置


4. 注释和魔法数字

我将魔法数字设置为优化时使用的持续时间,这个EA在备注中使用魔法数字。

string Trade_Comment = IntegerToString(MagicNumber,5,' ') + "天-优化";

注释设置


5. 相关文章

https://qiita.com/Kei-Sanada/items/cd6b8d9c02bc9eea1e01

相关帖子

评论 (0)