图表交易下 因为显示360根K线问题 双均线存在不平仓的情况 改成开仓前检查平仓
MA1:Ma(CLOSE,A);
MA2:Ma(CLOSE,B);
//交易条件
开多平空条件:=CROSS(MA1,MA2);//开多平空条件
开空平多条件:=CROSS(MA2,MA1);//开空平多条件
//交易系统
平空:SELLSHORT(开多平空条件,0,MARKET);// MARKET
开多:BUY(开多平空条件,lots,MARKET);
平多:SELL(开空平多条件,0,MARKET);
开空:BUYSHORT(开空平多条件,lots,MARKET);
可否更具体的描述下你的需求和问题。暂时还不明确你的需求是怎样的。
双均线 每次交叉都开反手 由于图表交易屏幕上只有360个K线 所以两次交叉有时不能一起显示 只显示一次交叉 造成没有平仓就开新仓 类似锁仓了
给改成 交叉先确定仓位清0 在开新仓
就是下面的写法 双均线买卖
if holding>0 and tbc then //已有多仓
begin
if lotst>0 then //出场
begin
sell(1,0,THISCLOSE);
BUYSHORT(1,lots,THISCLOSE);
end;//出场
end;//holding>0
if holding<0 and tbc then //已有空仓
begin
if lotst<0 then //出场
begin
sellshort(1,0,THISCLOSE);
buy(1,lots,THISCLOSE);
end;//出场
end;//holding<0
我知道你什么意思了。你是限制了图表上K线数量了吧?导致新K出现之后,历史K发生了变化。从而导致信号变化。比如原本刚刚开多了,但是因为信号变化了,导致图表上又出现开空信号且此时虚拟持仓是0。这种会导致不会平多,直接去开空了。
如果真是这种情况,我建议你不要限制K线数量,而是限制K线起始位置,因为这种限制K线数量情况导致信号闪烁变化,在代码里面都不好处理的。
不是 你就按照下面的写法 改个双均线 或者我给你打电话说 这么说太费劲
if holding>0 and tbc then //已有多仓
begin
if lotst>0 then //出场
begin
sell(1,0,THISCLOSE);
BUYSHORT(1,lots,THISCLOSE);
end;//出场
end;//holding>0
if holding<0 and tbc then //已有空仓
begin
if lotst<0 then //出场
begin
sellshort(1,0,THISCLOSE);
buy(1,lots,THISCLOSE);
end;//出场
end;//holding<0
平空:SELLSHORT(开多平空条件,0,MARKET);// MARKET
开多:BUY(开多平空条件,lots,MARKET);
平多:SELL(开空平多条件,0,MARKET);
开空:BUYSHORT(开空平多条件,lots,MARKET);
平空和开多条件是一样的
平多和开空条件是一样的
因此
开多触发的时候,会平空
开空触发的时候,会平多
逻辑和你6楼说的是完全一样的。
问题不在于代码。之所以没清仓位是因为历史信号变了,导致虚拟持仓变成0.这时候就没办法在开多前发出平空信号了。
问题就在于代码 我这个实盘出现很多次了 你给改就成了
你说的历史信号变了 这个对 其实就是前一个交叉因为360K线的原因已经不显示了 不是变化了 是不在这个屏幕显示了 所以让你帮改成另外一种写法 在买入前确认做出卖出动作。。。 你就直接给改一下 原因我知道 我只是看不懂写法 你直接改
MA1:Ma(CLOSE,A);
MA2:Ma(CLOSE,B);
//交易条件
开多平空条件:=CROSS(MA1,MA2);//开多平空条件
开空平多条件:=CROSS(MA2,MA1);//开空平多条件
//交易系统
if 开多平空条件 then
begin
平空:SELLSHORT(holding<0 ,0,MARKET);// MARKET
开多:BUY(holding=0,lots,MARKET);
end
if 开空平多条件 then
begin
平多:SELL(holding>0,0,MARKET);
开空:BUYSHORT(holding=0,lots,MARKET);
end