日志:
账户透视:
通过日志打印发现在11:06的时候以803.46价格多头建仓了,接着又平仓了,账户透视里没有平仓记录,同时代码里的longCurrentContracts这个参数显示也为0了。这个是什么原因导致的平仓没有记录,但是longCurrentContracts的数字显示平仓了,请帮忙答疑一下这个问题。
以下附上代码:
Params
Numeric FastMA(6); //macd短周期值
Numeric SlowMA(13); //macd长周期值
Numeric AvgMA(12); //MACD慢线周期值
Numeric FastMA2(3); //macd短周期值
Numeric SlowMA2(13); //macd长周期值
//Numeric DuoDiffValue(1.5); // 多头快线入场差值
Vars
Series<Numeric> MACDLine(0);
Series<Numeric> MACDLine2(0);
Series<Numeric> SignalLine(0);
Series<Numeric> SignalLine2(0);
Numeric ATRValue;
Numeric DuoDiffValue(0);
Global Integer BuySignal;
Events
OnBar(ArrayRef<Integer> indexs)
{
Print("当前时间:" + Text(Date)+ "-" + Text(Time));
Print("现有持仓:" + Text(longCurrentContracts));
// 计算macd快线
MACDLine = XAverage( Close, FastMA ) - XAverage( Close, SlowMA );
//计算macd慢线
SignalLine = XAverage( MACDLine, AvgMA );
//当快线上穿慢线的时候,为多头趋势
If (BuySignal == 0) {
If (MACDLine >= SignalLine AND MACDLine[1] < SignalLine[1]) {
Print("快线上穿慢线");
Print("多头建仓。");
Buy(1, Close);
BuySignal = 1;
Print("多头建仓代码已执行。建仓价格:" + Text(Close));
Print("多头建仓后,现有持仓:" + Text(longCurrentContracts));
Print("-------------------------");
}
}
// 死叉出手
If (MACDLine <= SignalLine And BuySignal == 1) {
Sell(1, Close);
BuySignal = 0;
Print("多头平仓后,现有持仓:" + Text(longCurrentContracts));
Print("-------------------------");
}
Print("===当前Bar结束===");
}
我只能这么解释:
当满足条件产生开仓信号的tick驱动时,执行代码图上出现开仓信号。你的global buysignal被拨成1。
下一tick驱动的时候,因为你的buysignal是1,所以不满足开仓条件,于是执行不了buy,图上就没信号了。
然后你大概率是开了自动同步,监控器一看你图上没信号,但是账户里有头寸,判定为不匹配,就给你平了。
你会这样写的根本原因就是你对行情事件域驱动机制,数据结构中的global和series类型的特点不熟悉导致的。
图表信号系统,一般都是用series作为状态变量,不会用global
零基础课程里其实都有详细说明并且举过例子。
https://video.tbquant.net/video?id=video395
这个视频如果看不明白说明你要往前把数据结构再看看
下一tick驱动的时候,因为你的buysignal是1,所以不满足开仓条件,于是执行不了buy。
这一段是我就是我想要的,这段逻辑没问题,我期望就是不想让它再买,只买入一手。
然后你大概率是开了自动同步,监控器一看你图上没信号,但是账户里有头寸,判定为不匹配,就给你平了。
你这里理解反了,我的问题是它这里执行了平仓,但是为什么账户里没有被平掉?
我使用Global的原因是longCurrentContracts在持仓状态的时候,没有执行平仓代码或者建仓代码的时候,会发生变化,这个是什么问题?
......
你这是有点自作聪明了朋友。
前面没有开仓信号,那就没有持仓,你要怎么平???
你可以输出一下sell命令的返回值,100%是false
false就是告诉你执行失败,出不了信号。
或者输出一下marketposition,也是一样的效果,肯定是0。虚拟账户里没有持仓,这要怎么平?
出不了信号的原因很多,比如手数过大,价格不对等等,还有就是没仓硬要平。
“longCurrentContracts在持仓状态的时候,没有执行平仓代码或者建仓代码的时候,会发生变化”
不可能。
请提供完整的证据链证明你的结论
global buysignal
唉
谁教你这么用的呀
你看看平仓是谁平的,我盲猜是监控器。