以文本方式查看主题

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

--  作者:Damoclus
--  发布时间:2019/9/8 19:24:05
--  编写求助

比如:收盘前10分钟,如果行情方向与持仓方向相反则平仓。如果收盘前10分钟,行情方向与持仓方向相同,则持仓到收盘前2分钟平仓。


--  作者:FireScript
--  发布时间:2019/9/9 9:11:51
--  
 1.“行情方向与持仓方向相反” 这个需要具体的定义才能写成代码形式。
2.图表还是后台呢?

--  作者:Damoclus
--  发布时间:2019/9/9 19:06:47
--  
有事没及时回复。
1.“行情方向与持仓方向相反”:
比如持有多单,离收市还有10min,此时k线为阴线,则平仓。如果此时k线为阳线,则持仓到离收市2min平仓。10min图表交易
2.图表交易

--  作者:FireScript
--  发布时间:2019/9/10 9:06:09
--  
 这个K线的阴阳线 可能是实时变化的,你这里的判断只是取某一刻的吗?哪怕下一秒反转的也无所谓? 比如10min是阳线到了2分钟时候反倒变成阴线了。 另外交易周期是10分钟K周期?

--  作者:Damoclus
--  发布时间:2019/9/10 10:00:30
--  
目前判断先取某一刻。先以那个时间点取值判断。
交易周期10分钟k线周期。

--  作者:FireScript
--  发布时间:2019/9/10 10:18:13
--  
 我尝试了下。这个图表上做不到,后台或许可以,但是图表不行。图表上无法在一个K内记住某个变化的状态,也就是无法记住是否某个时刻满足阳线条件,只能判断最新状态是否是阳线。而你这个思路是需要做这个判断的,因此这个不行。
--  作者:Damoclus
--  发布时间:2019/9/10 21:03:11
--  
麻烦举个例子,后台怎么编写。如果是只判断最新状态
--  作者:FireScript
--  发布时间:2019/9/11 9:20:55
--  
abb3:time0-timetot0(CLOSETIME(0));//收盘K线结束倒计时间

// barpos>extgbdata(\'t\')  这个是关键用来限制下面这个if里面的语句在每个K内 只在满足条件时候执行一次
if barpos>extgbdata(\'t\') and abb3>=10*60 then //收盘前10分钟判断一次 由于行情活跃程度不同,abb3可能无法刚好计时到10分钟位置,所以必须是用>=判断
begin
if c>o and TSELLHOLDINGEX(\'\',\'\',1)>0 then TSELLSHORT(1,TSELLHOLDINGEX(\'\',\'\',1),MKT);
if c<o and TBUYHOLDINGEX(\'\',\'\',1)>0 THEN tsell(1,TBUYHOLDINGEX(\'\',\'\',1),MKT);
extgbdataset(\'t\',barpos);//
end



if abb3>=2*60 then //收盘前2分钟直接全平仓
begin
TSELLSHORT(1,TSELLHOLDINGEX(\'\',\'\',1),MKT);
tsell(1,TBUYHOLDINGEX(\'\',\'\',1),MKT);    
end

需要设置一个全局变量:
工具-选项-数据管理-全局变量

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


仅供参考

上面后台代码平仓会对所有来源的持仓都平仓的,我没有做精细的控制了。可以自行修改平仓手数之类的。

--  作者:Damoclus
--  发布时间:2019/9/12 18:09:59
--  
以下是引用FireScript在2019/9/11 9:20:55的发言:
abb3:time0-timetot0(CLOSETIME(0));//收盘K线结束倒计时间

// barpos>extgbdata(\'t\')  这个是关键用来限制下面这个if里面的语句在每个K内 只在满足条件时候执行一次
if barpos>extgbdata(\'t\') and abb3>=10*60 then //收盘前10分钟判断一次 由于行情活跃程度不同,abb3可能无法刚好计时到10分钟位置,所以必须是用>=判断
begin
if c>o and TSELLHOLDINGEX(\'\',\'\',1)>0 then TSELLSHORT(1,TSELLHOLDINGEX(\'\',\'\',1),MKT);
if c<o and TBUYHOLDINGEX(\'\',\'\',1)>0 THEN tsell(1,TBUYHOLDINGEX(\'\',\'\',1),MKT);
extgbdataset(\'t\',barpos);//
end



if abb3>=2*60 then //收盘前2分钟直接全平仓
begin
TSELLSHORT(1,TSELLHOLDINGEX(\'\',\'\',1),MKT);
tsell(1,TBUYHOLDINGEX(\'\',\'\',1),MKT);    
end

需要设置一个全局变量:
工具-选项-数据管理-全局变量

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


仅供参考

上面后台代码平仓会对所有来源的持仓都平仓的,我没有做精细的控制了。可以自行修改平仓手数之类的。




基础比较薄弱,
t的意义是???或者说t的作用是什么??


--  作者:FireScript
--  发布时间:2019/9/16 8:53:56
--  
 t的作用就是限制部分代码在每个K里只在满足某个条件时候只触发一次的作用。

if barpos>extgbdata(\'t\')  then
begin
extgbdataset(\'t\',barpos);//记住K线位置。
//需要在满足条件时候只操作一次的代码
end

t在符合条件的时候会记住barpos 也就是K线位置, 这样下次再次执行代码时候 barpos>extgbdata(\'t\') 就无法满足了,这样就可以达到限制后面的重复执行。因为这时候 赋值之后barpos是等于extgbdata(\'t\')的值的。无法满足barpos>extgbdata(\'t\')这个条件的。