当前bar的最高价大于前个bar最高点时,会有个临时低点,这个低点怎么记录
谢谢老师
先学会定义清晰
帮你梳理一下
你的原题设:
当前bar的最高价大于前个bar最高点时,会有个临时低点
简单的摘出关键信息:
bar的最高价 => h
前个bar最高点 => h[1]
你认为h和h[1]之间有一个低点
那么只能是 min(low,low[1]);
但是根据你下面发的一堆内容,好像又不是
所以你研究下你这个题设是不是你要的,你发了好几个代码了,基本问题都是逻辑不清晰
等回复
你这个num是个什么东西?我看你平仓以后都没有重置这个变量,那以后怎么继续开仓呢?
而且这个num居然是一个global 回测倒是没什么问题,实盘必然会信号闪烁
//------------------------------------------------------------------------
// 简称: rx
// 名称: 荣轩
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
//此处添加参数
Numeric FastLength(26);// 短期指数平均线参数
Vars
//此处添加变量
Global Integer num(0);
Series<Numeric> firstlow;
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Series<Numeric> D7;
Series<Numeric> D71;
Series<Numeric> D11;
Series<Numeric> D111;
Series<Numeric> baramount;
Series<Numeric> barvol;
Series<Numeric> dayavg;
Series<Numeric> MyEntryPrice; // 开仓价格,例中为开仓均价,可设置为某次入场价
Series<Numeric> MyExitPrice; // 平仓价格
Series<Numeric> TakeProfitSet(2); // 止赢设置
Series<Numeric> StopLossSet(6); // 止损设置
Events //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnInit()
{
array<Numeric> timepoint;
timepoint[0] = 0.112450;
timepoint[1] = 0.145450;
SetTriggerBarClose(timepoint);
}
OnBarClose(ArrayRef<Integer> indexs)
{
if(time == 0.1120 or time == 0.1450)
{
sell(0,close);
BuyToCover(0,close);
Commentary(\"收盘平仓\");
}
}
OnBar(ArrayRef<Integer> indexs)
{
AvgValue2 = AverageFC(Close,FastLength);
AvgValue1 = AverageFC(Close,5);
PlotNumeric(\"AvgValue1\",AvgValue1);//布林均线显示
PlotNumeric(\"AvgValue2\",AvgValue2);//布林均线显示
D7=Lowest(low,5);
D71=NthCon(CrossUnder(L,D7[1]));
D11=Highest(High,5);
D111=NthCon(CrossOver(H,D11[1]));
PlotNumeric(\"D7\",D7);//最近5日的最低点画线
PlotNumeric(\"D11\",D11);//最近5日的最高点画线
if(truedate(0)!=truedate(1))//分时均线
{
baramount=close*Vol;
barvol=vol;
}else
{
baramount = baramount+close*vol;
barvol = barvol+vol;
}
dayavg = baramount / barvol;
Plotnumeric(\"dayavg\",dayavg);
MinPoint = MinMove*PriceScale;
//开仓条件
If(MarketPosition ==0 && D71[1]>D111[1] && Close[1]>dayavg[1] && Close[1]>AvgValue1[1] && High>High[1] && (TIME>=0.0900&&TIME<0.1125||TIME>=0.1330&&TIME<0.1455||TIME>=0.2100&&TIME<0.2255) && num==0)//开仓情形15分种分型向上,分时均线上方,昨天收盘价大于5日均线,当价格大于昨高
{
firstlow=Low;
num=1;
Buy(2,High[1]-1*MinPoint);
}
MyEntryPrice = AvgEntryPrice;
If( MarketPosition==1 && L<firstlow) // 止损
{
Sell(0,min(open,firstlow-1*MinMove*PriceScale));
}
If(MarketPosition == 1 && CurrentContracts ==2) // 止赢条件表达式
{
MyExitPrice = MyEntryPrice*1.00191*MinPoint+TakeProfitSet*MinPoint;
Commentary(\"MyExitPrice=\"+text(MyExitPrice));
}
If(MarketPosition==1 && CurrentContracts ==2 && H>MyExitPrice)//固定止盈
{
Sell(1,MyExitPrice+1*MinPoint);//多头平仓
}
//If(BarsSinceLastEntry==0 && Low <= MyEntryPrice - StopLossSet*MinPoint) // 止损条件表达式
//{
//MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
//如果该 Bar 开盘价即跳空触发,则用开盘价代替
//If(Open < MyExitPrice) MyExitPrice = Open;
//Sell(0,MyExitPrice-1*MinPoint);
//}
If( MarketPosition==1 && BarsSinceLastEntry>0 && L<L[1]) // 止赢条件表达式
{
Sell(0,min(open,L[1]-1*MinMove*PriceScale));
}
If(L<D7[1])//多头平仓加的一个保险
{
Sell(0,min(open,D7[1]-1*MinMove*PriceScale));
}
}
//完整代码
// 编译版本 2023-06-11 115636
// 版权所有 ghtfff
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
//开仓条件
If(MarketPosition ==0 && D71[1]>D111[1] && Close[1]>dayavg[1] && Close[1]>AvgValue1[1] && High>High[1] && (TIME>=0.0900&&TIME<0.1125||TIME>=0.1330&&TIME<0.1455||TIME>=0.2100&&TIME<0.2255) && num==0)//开仓情形15分种分型向上,分时均线上方,昨天收盘价大于5日均线,当价格大于昨高
{
firstlow=Low;
num=1;
Buy(2,High[1]-1*MinPoint);
}
我加入后,我的图表只有一个信号了,别的买卖信号都出不来了,看下哪里问题
5分钟级别,当前k线的最新价大于前个k线的最高点时,此时当前k线有个临时的低点,因为当前k线并一定走完,所以这个临时低点不一定是当个k线的最低点,因为我开仓是当前k线最新价大于前个k线的高点就买入,止损就是那个临时低点,如果是真突破价格会上去,如果是假突破,价格会下来,我也就止损那个临时低点。
我现在想记录这个临时低点,想请教老师我这个低点怎么写的,怎么止损。
意思是想当前K线大于前一个K线的最高点时候,记录一下当前k线的低点对吧,而且只记录这1次?你可以把当前k线的low最低点赋值给一个变量,为了防止后面实时数据又在当前K线里大于前1个bar的最高点重复记录这根bar的最低点,可以定义一个全局变量做1个“”开关“”,开关的作用是只记录第一次,后面再满足条件不做记录,比如没记录前这个全局变量值为1,当第一次记录的时候值后变成0,只有值全局变量值等于1的时候才会被记录,后面等于0了就不记录了。参考:
可以再细点
h>h[1]时 有什么逻辑上成立的低点吗