Params
vars
Bool
buycon;
//开多条件
Bool
sellcon;
//开空条件
Bool
specialbuy;
Bool
specialsell;
Numeric r;
Numeric temp;
Numeric
MyEntryPrice;
String
sFileName;
Numeric BST;
Numeric HD;
Numeric LD;
Numeric N;
Numeric i;
begin
BST=BarsSinceToday+1;
sFileName="d:\my_TB\RetracementBreakupBT"+Text(CurrentDate)+".log";
PlotString("barnum",Text(BST),low-5);
N=BST;
//求从开始到前一根K线的最大值最小值,Lowest和LowD求最值都包含了这个K线的最值。
LD=Low[1];
For i = 1 To N-1
{
temp=LD;
LD=Min(Low,temp);
}
HD=High[1];
For i = 1 To N-1
{
temp=HD;
HD=Max(High,temp);
}
FileAppend(sFileName,
"n进入第"+Text(BST)+"跟K线");
FileAppend(sFileName, "n已知最低点"+Text(LD)+"
GetGlobalVar(0)"+Text(GetGlobalVar(0))+"
GetGlobalVar(1)"+Text(GetGlobalVar(1))+"
GetGlobalVar(2)"+Text(GetGlobalVar(2)));
If(Date != Date[1] || BarStatus == 0)
{
SetGlobalVar(0,0);
//用全局变量0来做趋势的指标,1为向上,0为中立,-1为向下
SetGlobalVar(1,0);
//用全局变量1来表示高点
SetGlobalVar(2,0);
//用全局变量2来表示低点
SetGlobalVar(3,0);
//用全局变量3来表示无持仓的高低点出现在当日第几根K线
SetGlobalVar(4,0);
//用全局变量4来表示孕线数
SetGlobalVar(5,0);
//用全局变量5来表示回撤激值点
SetGlobalVar(6,0);
//用全局变量6来表示r
FileAppend(sFileName, "n
全局变量初始化");
return;
//当日的第一根K线,推出、不交易
}
If(GetGlobalVar(0)==0)
{
if (close[1] >
open[1])
{
SetGlobalVar(0,1);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
SetGlobalVar(3,BST-1);
FileAppend(sFileName,"在第"+Text(BST-1)+"跟K线,确定最初看涨趋势");
return;
}
else if (close[1] < open[1])
{
SetGlobalVar(0,-1);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
SetGlobalVar(3,BST-1);
FileAppend(sFileName,"在第"+Text(BST-1)+"跟K线,确定最初看跌趋势");
return;
}
else return;
}
//四种出现新高新低的新情况
If(GetGlobalVar(0)==1 And
High[1]>GetGlobalVar(1) And MarketPosition==0)
{
SetGlobalVar(1,High[1]);
SetGlobalVar(4,0);
SetGlobalVar(5,0);
FileAppend(sFileName,"在上一根K线,有新高点产生,看涨倾向不变。");
}
If(BST==4)
FileAppend(sFileName,"看看第四个K线到不到这【1】"+Text(Low[1])+"
"+Text(GetGlobalVar(2))+"
"+Text(GetGlobalVar(0)));
If(GetGlobalVar(0)==1 And Low[1]
{
If(BST==4)
FileAppend(sFileName,"看看第四个K线进不进来");
SetGlobalVar(0,-1);
SetGlobalVar(2,Low[1]);
SetGlobalVar(4,0);
SetGlobalVar(5,0);
FileAppend(sFileName,"在上一根K线,有新低点产生,由看涨倾向变成看跌倾向。");
}
If(GetGlobalVar(0)==-1 And Low[1]
{
SetGlobalVar(2,Low[1]);
SetGlobalVar(4,0);
SetGlobalVar(5,0);
FileAppend(sFileName,"在上一根K线,有新低点产生,看跌倾向不变。");
}
If(GetGlobalVar(0)==-1
And High[1]>GetGlobalVar(1) )
{
SetGlobalVar(0,1);
SetGlobalVar(1,High[1]);
SetGlobalVar(4,0);
SetGlobalVar(5,0);
FileAppend(sFileName,"在上一根K线,有新高点产生,由看跌倾向变成看涨倾向。");
}
If(
MarketPosition==0)
{
If( High[1] <
GetGlobalVar(1) And Low[1] >GetGlobalVar(2) )
//孕线
{
temp=GetGlobalVar(4)+1;
SetGlobalVar(4,temp);
FileAppend(sFileName,"上一根K线为孕线,此时孕线数为"+Text(GetGlobalVar(4)));
}
If(GetGlobalVar(0)==1 And
High[1]
{
SetGlobalVar(5,Low[1]);
FileAppend(sFileName,"看涨倾向下有新回撤极值点");
}
If(GetGlobalVar(0)==-1
And High[1]>High[2] And Low[1]>Low[2])
//看跌时的回撤极值点
{
SetGlobalVar(5,High[1]);
FileAppend(sFileName,"看跌倾向下有新回撤极值点");
}
}
specialbuy = (GetGlobalVar(0)==1 And
GetGlobalVar(4)==1 And BST==3 And High> GetGlobalVar(1) );
specialsell= (GetGlobalVar(0)==-1 And
GetGlobalVar(4)==1 And BST==3 And Low < GetGlobalVar(2) );
buycon = ( GetGlobalVar(0)==1
And GetGlobalVar(4)>= 2 And High >
GetGlobalVar(1));
sellcon= ( GetGlobalVar(0)==-1 And
GetGlobalVar(4)>= 2 And Low < GetGlobalVar(2) );
If((buycon || specialbuy) And
MarketPosition==0)
{
temp=GetGlobalVar(1);
Buy(1,temp);
FileAppend(sFileName,"");
}
If((sellcon||specialsell) And
MarketPosition==0)
{
temp=GetGlobalVar(2);
SellShort(1,temp);
}
If(GetGlobalVar(1) == 0)
FileAppend(sFileName,"计算r时高点为0,异常!");
If(GetGlobalVar(2) == 0)
FileAppend(sFileName,"计算r时低点为0,异常!");
If(GetGlobalVar(5)==0)
r=GetGlobalVar(1)-GetGlobalVar(2);
Else If(GetGlobalVar(0)==1)
r=GetGlobalVar(1)-GetGlobalVar(5);
Else If(GetGlobalVar(0)==-1)
r=GetGlobalVar(5)-GetGlobalVar(2);
FileAppend(sFileName,"计算得出的r为"+Text(r));
//止损止盈部分
MyEntryPrice=AvgEntryPrice;
If(MarketPosition==1 And
BarsSinceEntry>=1)
{
If(High>=MyEntryPrice
+ 2*r)
{
temp=MyEntryPrice+2*r;
If(Open>temp)
temp=Open;
Sell(1,temp);
SetGlobalVar(4,0);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
}Else If(Low
{
temp=MyEntryPrice-r;
If(Open
Sell(0,temp);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
SetGlobalVar(4,0);
}
}Else If(MarketPosition==-1 And
BarsSinceEntry>=1)
{
If(Low
{
temp=MyEntryPrice-2*r;
If(Open
BuyToCover(1,temp);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
SetGlobalVar(4,0);
}Else If(High>MyEntryPrice+r)
{
temp=MyEntryPrice+r;
If(Open>temp) temp=Open;
BuyToCover(1,temp);
SetGlobalVar(1,HD);
SetGlobalVar(2,LD);
SetGlobalVar(4,0);
}
}
//尾盘平仓
If((Date[-1] !=
InvalidInteger && Date != Date[-1]) ||
(Date[-1]==InvalidInteger && Date
{
Sell(1,Close);
BuyToCover(1,Close);
}
end