Params
//此处添加参数
Numeric Length(35);
Numeric Lots(1);
Vars
//此处添加变量
Series<Numeric> MA;
Numeric StopPrice1;
Numeric StopPrice2;
Numeric MA1;
Events
//此处添加公式函数
OnBar(ArrayRef<Integer> indexs)
{
MA1 = Average(Close,Length);
MA=IntPart(MA1);
PlotNumeric("MA",MA);
If(MArketPosition!=1&&Close[1]>Open[1]&&MA[1]>MA[2]) //趋势向上,阳线开多
{
Buy(Lots,Open);
}
If(MArketPosition==1 && BarsSinceEntry==0)
{
StopPrice1=Lowest(LOW,3); // 取止损价
}
If(MArketPosition==1 && Close[1]<StopPrice1)
{
SellShort(Lots,Open); //止损反手空
}
If(MArketPosition==1 &&BarsSinceEntry>2&& MA[1]<MA[2])
{
Sell(Lots,Open);
}
If(MArketPosition!=-1&&Close[1]<Open[1]&&MA[1]<MA[2]) //趋势向下,阴线开空
{
SellShort(Lots,Open);
}
If(BarsSinceEntry==0 && MArketPosition==-1)
{
StopPrice2=Highest(High,3); // 取止损价
PlotString("CandleStick",Text(StopPrice2),High,Red); //数值显示在取值的那根BAR上
}
If(MArketPosition==-1 && Close[1]>StopPrice2)
{
Buy(Lots,Open); //止损反手多
}
If(MArketPosition==-1 &&BarsSinceEntry>=2&& (MA[1]>MA[2]))
{
BuyToCover(Lots,Open);
}
}
检查一下stopprice1和stopprice2的值计算是否正确,这两个容器的计算最好不要放在分支结构里
If(MArketPosition!=1&&Close[1]>Open[1]&&MA[1]>MA[2])
{
Buy(Lots,Open);
StopPrice1=Lowest(LOW,3);
}
/*If(MArketPosition==1 && BarsSinceEntry==0)
{
StopPrice1=Lowest(LOW,3);
}*/
改了还是不行
If(MArketPosition!=-1&&Close[1]<Open[1]&&MA[1]<MA[2])
{
SellShort(Lots,Open);
StopPrice2=Highest(High,3);
}
/*If(BarsSinceEntry==0 && MArketPosition==-1)
{
StopPrice2=Highest(High,3);
PlotString("CandleStick",Text(StopPrice2),High,Red);
}*/
这个也改了
这还是在分支结构里啊!
这两个price不要放在if里!
视频区看一下序列类型使用须知
把price的计算放在最外面的结构里
我迷糊了,因为要计算进场位置前三根K线的最高和最低来确定止损价,不IF我这小白还不会,请教了
哥,前两天就你前面那个帖子里面给你回复了正确的写法,去看看啊
If(BarsSinceEntry==0 && MArketPosition==-1)
{
StopPrice2=Highest(High,3); // 取止损价
PlotString("CandleStick",Text(StopPrice2),High,Red); //数值显示在取值的那根BAR上
}
是这样吗?如果不对能给个答案吗?
刘老师反复的给你说:不要在IF分支结构里面计算序列变量。你偏要在分支结构里面计算序列变量。我给你说:我在你前面的帖子里面给你写好了正确的写法,只需去看看就行了。你偏不去看。
无话可说了,告辞。
在on_init里加上
设置双向持仓交易方向
//SetTradeSide(1);
我找了几天时间,从MC里再返到TB里找出来。