以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  均线指标问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=164211)

--  作者:c100011627
--  发布时间:2018/6/29 13:37:35
--  均线指标问题
图表交易下 因为显示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);

--  作者:FireScript
--  发布时间:2018/6/29 13:42:16
--  
 可否更具体的描述下你的需求和问题。暂时还不明确你的需求是怎样的。
--  作者:c100011627
--  发布时间:2018/6/29 13:58:00
--  
双均线 每次交叉都开反手  由于图表交易屏幕上只有360个K线  所以两次交叉有时不能一起显示  只显示一次交叉  造成没有平仓就开新仓 类似锁仓了
给改成 交叉先确定仓位清0 在开新仓

--  作者:c100011627
--  发布时间:2018/6/29 14:01:27
--  
就是下面的写法  双均线买卖 


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 


--  作者:FireScript
--  发布时间:2018/6/29 14:13:23
--  
我知道你什么意思了。你是限制了图表上K线数量了吧?导致新K出现之后,历史K发生了变化。从而导致信号变化。比如原本刚刚开多了,但是因为信号变化了,导致图表上又出现开空信号且此时虚拟持仓是0。这种会导致不会平多,直接去开空了。

如果真是这种情况,我建议你不要限制K线数量,而是限制K线起始位置,因为这种限制K线数量情况导致信号闪烁变化,在代码里面都不好处理的。



--  作者:c100011627
--  发布时间:2018/6/29 14:15:22
--  
不是  你就按照下面的写法 改个双均线  或者我给你打电话说  这么说太费劲


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 


--  作者:FireScript
--  发布时间:2018/6/29 14:23:24
--  
 
平空:SELLSHORT(开多平空条件,0,MARKET);// MARKET 
开多:BUY(开多平空条件,lots,MARKET);
平多:SELL(开空平多条件,0,MARKET);
开空:BUYSHORT(开空平多条件,lots,MARKET);


平空和开多条件是一样的
平多和开空条件是一样的

因此
开多触发的时候,会平空
开空触发的时候,会平多


逻辑和你6楼说的是完全一样的。

问题不在于代码。之所以没清仓位是因为历史信号变了,导致虚拟持仓变成0.这时候就没办法在开多前发出平空信号了。



--  作者:c100011627
--  发布时间:2018/6/29 14:27:10
--  
问题就在于代码 我这个实盘出现很多次了  你给改就成了
--  作者:c100011627
--  发布时间:2018/6/29 14:30:02
--  
你说的历史信号变了 这个对  其实就是前一个交叉因为360K线的原因已经不显示了  不是变化了 是不在这个屏幕显示了  所以让你帮改成另外一种写法 在买入前确认做出卖出动作。。。  你就直接给改一下  原因我知道 我只是看不懂写法  你直接改
--  作者:FireScript
--  发布时间:2018/6/29 14:31:57
--  
 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