在技术分析领域,道氏理论是所有市场技术分析(包括波浪理论、江恩理论、缠论等等)的鼻祖,一切技术分析皆建立在道氏理论总结的三大基石之上。
一、市场行为反映一切
众人对任何事情所知的一切,即使是与金融方面非常间接的消息,也会以信息的形式流入股市。而股票市场就通过其自身的价格变动,来体现股市在感知信息之后所导致的变化。
简单来说,任何消息无论利好还是利空,最终都会反映在股价的变动上,这是技术分析的基础。
二、价格呈趋势变动
根据物理学上的动力法则,趋势的运行将会持续,直到有反转的现象产生为止。
事实上价格虽然上下波动,但终究是朝一定的方向前进的,因此技术分析希望利用图形或指标,尽早确定价格趋势及发现反转的信号,以掌握时机进行交易。
按照种类划分,趋势分为三种:上升趋势、下降趋势和无趋势(也就是盘整震荡)。
按照时间划分,每种趋势又分为三种:长期趋势、中期趋势、短期趋势。
那么组合一下,趋势就会有明确的定义,比如:长期上升趋势就是牛市;长期下降趋势就是熊市;短期上升趋势就是反弹;短期下降趋势就是回调等等。
注意,所谓的长期、中期、短期只是时间的笼统概念,每个交易者对时间的定义是不同。
就好比长线交易者的长期可能是五、六年,而对超短线交易者来说两周就算长期了。
所以,在研究长期、中期、短期时,一定要搞清楚时间单位,具体到日、周、月、年。
三、历史会重演
这是从人的心理因素方面考虑的,交易无非是一个追求的行为,不论是昨天、今天或明天,这个动机都不会改变。
因此,在这种心理状态下,交易将趋于一定的模式,而导致历史重演。
所以,过去价格的变动方式,在未来可能不断发生,值得研究,并且利用统计分析的方法,从中发现一些有规律的图形,整理一套有效的操作原则。
比如头肩底、圆弧底、三角形、楔形等等形态,以前出现过,现在出现过,以后还会出现。
历史会重演是技术分析有效性的核心。
下面我们来看一下开拓者的道氏理论源代码:
Params
Numeric ATime(918);
Numeric CTime(1510);
Numeric Lot(1);
Numeric MoneyLoss(0.6);
Numeric BarCross(1);
Numeric Length(5);
Vars
Numeric bTime(0);
Numeric MyClose(0);
Numeric MyDiff(0);
NumericSeries estP(0);
NumericSeries ExitP(0);
NumericSeries Position(0);
NumericSeries est(0);
NumericSeries est1(0);
NumericSeries est2(0);
NumericSeries est3(0);
Bool bTimeCon;
Bool BarUpCon;
Bool BarDownCon;
Bool BarExitCon;
Bool LongOpenCon;
Bool ShortOpenCon;
Bool LongExitCon;
Bool ShortExitCon;
Begin
If (Date != Date[1])
{
est = Open;
est1 = Open;
est2 = Open;
est3 = Open;
estP = 0;
ExitP = 0;
Position = 0;
MyClose = Open;
}
Else
{
est = est[1];
est1 = est1[1];
est2 = est2[1];
est3 = est3[1];
estP = estP[1];
ExitP = ExitP[1];
Position = Position[1];
If(Length != 0) MyClose = Average(Close[1],Length);
Else MyClose = Close[1];
}
MyDiff = MyClose * BarCross / 1000;
bTime = IntPart(Time*10000);
bTimeCon = (bTime > ATime) And (bTime < CTime);
If((MyClose < est And MyClose < est1) Or (MyClose > est And MyClose > est1)) est = MyClose;
If(((MyClose - est) > MyDiff And est < est1) Or ((est - MyClose) > MyDiff And est > est1))
{
est3 = est2;
est2 = est1;
est1 = est;
est = MyClose;
}
If(Position > 0 And High > estP) estP = High;
If(Position < 0 And Low < estP) estP = Low;
If(Position > 0) ExitP = estP * (100 - MoneyLoss) / 100;
If(Position < 0) ExitP = estP * (100 + MoneyLoss) / 100;
If(bTime >= CTime)
{
If (Position > 0)
Sell(lot,Open);
Else
BuyToCover(lot,Open);
}
If(bTimeCon)
{
If (Position == 0)
{
If(est3 < est1 And (est2 / 2000 + est2) <= est And est3 < est2)
{
Buy(lot,Open);
Position = lot;
estP = Open;
ExitP = estP * (100 - MoneyLoss) / 100;
Commentary("LongOpen");
}
Else If(est3 > est1 And (est2 - est2 / 2000) >= est And est3 > est2)
{
SellShort(lot,Open);
Position = lot * -1;
estP = Open;
ExitP = estP * (100 + MoneyLoss) / 100;
Commentary("ShortOpen");
}
}
Else
{
If(Position > 0 And est3 > est1)
{
Sell(lot,Open);
Position = 0;
Commentary("LongExit1");
}
Else If(Position < 0 And est3 < est1)
{
BuyToCover(lot,Open);
Position = 0;
Commentary("ShortExit1");
}
Else If(Position > 0 And Open < ExitP)
{
Sell(lot,Open);
Position = 0;
Commentary("LongExit2");
}
Else If(Position < 0 And Open > ExitP)
{
BuyToCover(lot,Open);
Position = 0;
Commentary("ShortExit2");
}
}
}
Commentary("Position = "+Text(Position));
Commentary("ExitP = "+Text(ExitP));
End