以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]止盈或止损后不再开同方向的单  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=169012)

--  作者:天天涨停
--  发布时间:2019/3/27 11:49:29
--  [求助]止盈或止损后不再开同方向的单
1、多单止盈或止损后,往往会达到多单条件,又开了多单,我想多单止盈或止损后,不再开多单,等空单出信号后再开仓。
2、空单反之。
这个用什么来控制,请老师帮我写一下,谢谢。

--  作者:FireScript
--  发布时间:2019/3/27 14:25:44
--  
 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=169010

这里刚好有个类似的例子,你可以看下。思路就是用全局变量标记下就行。

我稍迟点会提供个范例。
[此贴子已经被作者于2019/3/27 14:26:45编辑过]

--  作者:FireScript
--  发布时间:2019/3/27 14:37:48
--  
 VARIABLE:lt1:=0,lt2:=0;
ma5:ma(c,5);
ma10:ma(c,10);
ma20:ma(c,20);

cd1:ma5>ma10 and ma10>ma20;//开多条件
cd2:ma5<ma10 and ma10<ma20;//开空条件

if cd1 and lt1=0  then buy(holding=0,1,market);
if abs(c-ENTERPRICE)>=100*MINDIFF and holding>0 then //多头100点止盈止损
begin
lt1:=1;
lt2:=0;
sell(holding>0,holding,market);
end


if cd2 and lt2=0 then buyshort(holding=0,1,market);

if abs(ENTERPRICE-c)>=100*MINDIFF and holding<0 then //空头100止盈止损
begin
lt2:=1;//平空之后限制下次重复开同方向仓位
lt1:=0;//平空之后解除对开多仓的限制

sellshort(holding<0,holding,market);
end

一个简单范例,止盈止损均是100点止盈止损。在触发止盈止损的时候务必对全局变量进行处理。

参考这个代码先理解下,然后再处理你自己的代码。

--  作者:天天涨停
--  发布时间:2019/3/27 15:11:27
--  

谢谢,老师


--  作者:天天涨停
--  发布时间:2019/4/3 10:15:41
--  

老师,为什么我这样写还是要开同一方向的仓。

 

input:N(5,1,500,5),N1(10,1,500,5),N2(20,1,500,5),N3(30,1,500,5),;
A1:=MA(CLOSE,N);
A2:=MA(CLOSE,N1);
A3:=MA(CLOSE,N2);
A4:=MA(CLOSE,N3);
BB:=CLOSE<A1 AND A1<A2 AND A2<A3 AND A3<A4 AND CLOSE<OPEN;

AA:=OPEN>A1 AND A1>A2 AND A2>A3 AND A3>A4 AND CLOSE>OPEN;

VARIABLE:lt1:=0,lt2:=0;
if c>A1 then
begin
SELLSHORT(holding<0,1,marketr);//平空
lt2:=1;//平空之后限制下次重复开同方向仓位
lt1:=0;//平空之后解除对开多仓的限制
end

if AA  and lt1=0 then
begin
buy(holding=0,1,marketr)IGNORECHECKPRICE;//开多
end

if c<A1 then begin
SELL(holding>0,1,marketr)IGNORECHECKPRICE;//平多
lt1:=1;//平多之后限制下次重复开同方向仓位
lt2:=0;//平多之后解除对开空仓的限制
end

if BB and lt2=0 then
begin
BUYSHORT(holding=0,1,marketr)IGNORECHECKPRICE;//开空
end

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


--  作者:天天涨停
--  发布时间:2019/4/3 16:19:01
--  
有人吗
--  作者:FireScript
--  发布时间:2019/4/3 17:21:58
--  
 我本地先看下你的代码。
[此贴子已经被作者于2019/4/3 17:22:04编辑过]

--  作者:天天涨停
--  发布时间:2019/4/4 10:21:42
--  
谢谢老师,辛苦了。
--  作者:天天涨停
--  发布时间:2019/4/4 12:04:31
--  
老师,查出原因了吗
--  作者:FireScript
--  发布时间:2019/4/4 14:43:34
--  
 需要注意一个细节。

VARIABLE:lt1:=0,lt2:=0;

if c<A1 and holding>0 then
begin
SELL(holding>0,1,marketr),IGNORECHECKPRICE;//平多
lt1:=1;//平多之后限制下次重复开同方向仓位
lt2:=0;//平多之后解除对开空仓的限制
end

if AA  and lt1=0 and holding=0 then
begin
buy(holding=0,1,marketr),IGNORECHECKPRICE;//开多
end

if c>A1 and holding<0 then
begin
SELLSHORT(holding<0,1,marketr);//平空
lt2:=1;//平空之后限制下次重复开同方向仓位
lt1:=0;//平空之后解除对开多仓的限制
end

if BB and lt2=0 and holding=0 then
begin
BUYSHORT(holding=0,1,marketr),IGNORECHECKPRICE;//开空
end

红色标注的条件必须加上去,保证全局变量赋值时候实际也是出信号的位置。