交易首先是对可能性的计算. 有一句谚语, 懒惰是进步的引擎, 这也揭示了指标以及交易系统被开发出来的原因. 绝大多数交易新手学习的都是"成型"的交易理论. 但是, 如果够幸运的话, 还有更多的没有被发现的市场奥秘和用于分析价格走向的工具, 例如那些还没有实现的技术指标或者数学和统计学工具包. 非常感谢比尔.威廉姆斯对市场运行理论的贡献. 虽然,也许现在休息是太早了些.
进行统计
我们可以自问:"在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);
}
使用这些已经写好的代码, 我们可以继续试验了.
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编译器, 我们也可以解决烛形循环的问题. 例如, 如果关闭了一个黑色柱, 后面生成一个白色柱的几率有多大呢?这当然依赖于很多因素, 但是让我们使用统计.
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指标的值绘制烛形颜色的分布.
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];
}
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系数更会让你大吃一惊. 总的来说, 还有很多让我们惊讶的事情. 最主要的是不要忘记交易的本质和感觉.
结论
基本上每个交易者都使用他或她自己的交易技术. 当然, 没有什么能阻止他或她代表他或她的系统形象的有效性,分析并利用交易。没有结果也是一种结果. 从交易者得到的知识只会提高他或她的交易效率.