//定义一些交易策略的参数
Params
Enum<String> StopType([\"按百分比%\",\"按指定价\",\"按跳数\"]); //StopType是一个字符串变量,可以取三个值之一:\"按百分比%\"、\"按指定价\"或\"按跳数\"
Numeric StopLength(35); // StopLength是一个数值变量,指定止损距离的跳数
// 定义一些交易策略的变量
Vars
Numeric StopPrice; // StopPrice是一个数值变量,存储每笔交易的止损价格
Numeric my_entryprice; // my_entryprice是一个数值变量,存储每笔交易的入场价格
Bool is_opened(False); // is_opened是一个布尔变量,表示是否已经开仓,初始值为False
Bool is_closed(True); // is_closed是一个布尔变量,表示是否已经平仓,初始值为True
// 定义一个事件处理器,用于处理每根新K线
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1] // 遍历数据源中所有的K线,从第一根到最后一根
{
If(!is_opened &&is_closed && High[1]>High[2]&& Low[1]<Low[2]&& low[2]>Close[1]&& Open<close[1])
// 如果没有开仓并且上一笔交易已经平仓,并且前一根K线的最高点和最低点都高于前两根K线,并且前两根K线的最低点高于前一根K线的收盘价,并且当前K线的开盘价低于前一根K线的收盘价(看涨吞没形态)
{
my_entryprice=close[1]; // 把入场价格设为前一根K线的收盘价
Buy(1, my_entryprice); // 以入场价格买入一手合约
is_opened = True; // 把is_opened设为True表示已经开仓
is_closed = False; // 把is_closed设为False表示还没有平仓
}
if(MarketPosition==1) // 如果我们持有多头仓位
{
StopPrice=my_entryprice -StopLength*MinMove*PriceScale; // 根据我们的入场价格和止损距离计算并设置止损价格
}
If (MarketPosition==1 && Time()> longEntryTime() && longPositionProfit()>0 && BarsSinceEntry()>=1) // 如果我们持有多头仓位并且在我们入场时间之后并且有正利润
{
sell(1,Open); // 以市场开盘价卖出一手合约退出我们的仓位
}
Else If (MarketPosition==1&& StopType == \"按跳数\" &&BarsSinceEntry()>=0&&low<StopPrice)
// 否则如果我们的止损类型是按跳数并且已经开仓并且当前K线的最低点跌破我们的止损价格
{
sell(1,StopPrice); // 以我们的止损价格卖出一手合约退出我们的仓位
PlotNumeric(\"止损出场价格\", StopPrice); // 在图表上画出我们的止损出场价格
}
}}
代码编译成功开仓没有问题就是没有执行sell——保护止损和获利止盈
没有执行sell,那就诊断一下,把执行sell的条件都输出一下,看看到底为什么没满足