下载MetaTrader 5

MQL4 作为交易者的工具, 还是高级技术分析

21 一月 2016, 10:56
Andrey Opeyda
0
1 077

简介

交易首先是对可能性的计算. 有一句谚语, 懒惰是进步的引擎, 这也揭示了指标以及交易系统被开发出来的原因. 绝大多数交易新手学习的都是"成型"的交易理论. 但是, 如果够幸运的话, 还有更多的没有被发现的市场奥秘和用于分析价格走向的工具, 例如那些还没有实现的技术指标或者数学和统计学工具包. 非常感谢比尔.威廉姆斯对市场运行理论的贡献. 虽然,也许现在休息是太早了些.


进行统计

我们可以自问:"在EURUSD一小时图表上, 会出现什么颜色的烛形?" 我们可以按每100个烛形为一块, 先数黑色烛形, 然后数白色的. 但是, 我们也可以写一些代码, 让这件事情自动化. 总的说来, 一切都是复合逻辑的, 没有什么异常. 然而, 让我们为上面的问题寻找一个答案. 首先, 让我们简化烛形颜色的识别:

bool isBlack(int shift)
  {
    if(Open[shift] > Close[shift])
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+
bool isWhite(int shift)
  {
    if(Open[shift] < Close[shift]) 
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+

使用这些已经写好的代码, 我们可以继续试验了.

例 1
      //计算黑色和白色烛形
      double BlackCandlesCount = 0;
      double WhiteCandlesCount = 0;
      double BProbability = 0;
 
      for(int i = 0; i < Bars - 1; i++)
        {
          if(isBlack(i) == true)
              BlackCandlesCount++;
 
          if(isWhite(i) == true)
              WhiteCandlesCount++;
        }
      
      BProbability = BlackCandlesCount / Bars;

结果有趣并且可以预测: 16000个烛形中有52.5426%是白色的. 使用MQL4编译器, 我们也可以解决烛形循环的问题. 例如, 如果关闭了一个黑色柱, 后面生成一个白色柱的几率有多大呢?这当然依赖于很多因素, 但是让我们使用统计.

//例 2
      //计算顺序序列
      //BW 的意思是黑色烛形后面是白色     
      double BW = 0;
      double WB = 0;
      double BB = 0;
      double WW = 0;
       
      for(i = Bars; i > 0; i--)
        {
         if(isBlack(i) && isWhite(i-1)) 
             BW++;           
         if(isWhite(i) && isBlack(i-1)) 
             WB++;
         if(isBlack(i) && isBlack(i-1)) 
             BB++;            
         if(isWhite(i) && isWhite(i-1)) 
             WW++;
        }

获得的结果是:
- 白色后面是黑色 - 23.64 %
- 黑色后面是白色 - 23.67 %
- 白色后面是白色 - 21.14 %
- 黑色后面是黑色 - 20.85 %

我们可以看到, 一个烛形后面是相同颜色烛形的概率比不同颜色要略低一些.

使用MQL4和历史数据, 交易者可以做一些前瞻性的市场研究. 终端允许绘制柱形图. 我们将使用这个功能来根据WPR和RSI指标的值绘制烛形颜色的分布.

//例 3.1
      //根据RSI构造柱形图
      //RSI 最小/最大 - 0/100
      
      double RSIHistogramBlack[100];
      double RSIHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int rsi_val = iRSI(NULL,0,12,PRICE_CLOSE,i);
          if(isWhite(i))
              RSIHistogramWhite[rsi_val]++;
          if(isBlack(i))
              RSIHistogramBlack[rsi_val]++;
        }
      for(i = 0; i < 100; i++)
        {
          ExtMapBuffer1[i] = RSIHistogramBlack[i];
          ExtMapBuffer2[i] = -RSIHistogramWhite[i];
        }
 
//例 3.2
      //根据 %R 构造柱形图
      //%R min/max - 0/-100

      double WPRHistogramBlack[100];
      double WPRHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int wpr_val = iWPR(NULL,0,12,i);
          int idx = MathAbs(wpr_val);
          if (isWhite(i))
              WPRHistogramWhite[idx]++;
          if (isBlack(i))
              WPRHistogramBlack[idx]++;
        }


好的, 如果我们不是去数黑色和白色的烛形, 而是使用不同数值的止损和获利来统计获利和亏损的交易, 那会更有意义. 以下代码会对此目标有所帮助:

int TestOrder(int shift, int barscount, int spread, int tp, int sl, int operation)
 {
   double open_price = Close[shift];
   
   if (operation == OP_BUY)
      open_price  = open_price + (Point * spread);
      
   if (operation == OP_SELL)
      open_price  = open_price - (Point * spread);
      
   
   for (int i = 0; i<barscount; i++)
    {
      if (operation == OP_BUY)
       {
         //止损
         if (Low[shift-i] <= open_price - (Point * sl) )
            return (MODE_STOPLOSS);
         //获利            
         if (High[shift-i] >= open_price + (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
      if (operation == OP_SELL)
       {
         //止损
         if (High[shift-i] >= open_price + (Point * sl) )
            return (MODE_STOPLOSS);
         //获利            
         if (Low[shift-i] <= open_price - (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
    }  
   return (MODE_EXPIRATION);   
 }

我确信结果会让您震惊. Kohonen的地图, 高斯分布, Hurst系数更会让你大吃一惊. 总的来说, 还有很多让我们惊讶的事情. 最主要的是不要忘记交易的本质和感觉.


结论

基本上每个交易者都使用他或她自己的交易技术. 当然, 没有什么能阻止他或她代表他或她的系统形象的有效性,分析并利用交易。没有结果也是一种结果. 从交易者得到的知识只会提高他或她的交易效率.

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/1410

附加的文件 |
instrument.mq4 (5.02 KB)
专家系统'解说员'. 在MQL4程序中嵌入指标的实际应用 专家系统'解说员'. 在MQL4程序中嵌入指标的实际应用

本文描述了在MQL4编程中技术指标的使用.

信息的存储和阅览 信息的存储和阅览

本文介绍了信息存储和阅览的方便而高效的方法. 在这里探讨了终端标准记录文件和Comment()函数的替代方案.

怎样使用崩溃记录来调试您的动态链接库(DLL) 怎样使用崩溃记录来调试您的动态链接库(DLL)

在收到的用户崩溃记录中,有25%到30%是因为执行自定义动态链接库(DLL)中的输入函数而出的错.

测试可视化: 功能增强 测试可视化: 功能增强

本文描述了能够使策略测试与真实交易非常接近的软件.