以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  请教图表策略改为后台  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=163327)

--  作者:cdqwy781
--  发布时间:2018/5/9 11:37:38
--  请教图表策略改为后台
HH1:=IFELSE(H<REF(H,1)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IFELSE(L>REF(L,1)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IFELSE(CLOSE>HH2,-3,IFELSE(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);


手数:=4;
//交易条件
VARIABLE:n1=0,n2=0,n3=0,n4=0 ;


开多条件:=CROSS(-2,K2);
平多条件:CROSS(K2,0);
开空条件:=CROSS(K2,0);
平空条件:=CROSS(-2,K2);


//交易系统
平空:SELLSHORT(平空条件,0,MARKET);
平多:SELL(平多条件,0,MARKET);  


if 开多条件 then begin              
BUY(1,手数,MARKET);
n1:=0;
n2:=0;
end
if 开空条件 then begin 
BUYSHORT(1,手数,MARKET);
n3:=0;
n4:=0;
end
//止损止盈,实时出场
多头止损:c<ref(L,ENTERBARS);
sell(多头止损 and holding>0 and ENTERBARS>0 ,holding,market);

空头止损:c>ref(h,ENTERBARS);
sellshort(空头止损 and holding<0 and ENTERBARS>0 ,holding,market);

//多头
if H-ENTERPRICE>=3 AND enterbars>0 and HOLDING>0 and n1=0 then begin
止盈1:SELL(1,1,marketr);//盈利3个点止盈1手
n1:=1;
end
if H-ENTERPRICE>=5 AND  enterbars>0 and  HOLDING>0 and n2=0 then begin
止盈2:SELL(1,1,marketr);//盈利5个点止盈1手
n2:=1;
end
                                                                                                                                                            
//空头
if ENTERPRICE-L>=3 AND  enterbars>0 and HOLDING<0 and n3=0 then begin
止盈3:SELLSHORT(1,1,marketr);//盈利3个点止盈
n3:=1;
end
if ENTERPRICE-L>=5 AND  enterbars>0 and  HOLDING<0 and n4=0 then begin
止盈4:SELLSHORT(1,1,marketr);//盈利5个点止盈
n4:=1;
end
另再加入
移动止盈
             盈利大于5小于10个点,从最大盈利点回撤0.61,止盈;

盈利大于10小于20个点,从最大盈利点回撤0.5,止盈;

盈利大于20点,从最大盈利点回撤0.38,止盈。和收盘前不论盈利亏损全平仓


--  作者:FireScript
--  发布时间:2018/5/9 13:52:47
--  
 图表转后台必须注意的是 图表后台机制是不一样的。能帮你把函数之类的处理掉,但是稍微复杂的策略建议从策略思路出发完整的编写后台策略,而不是直接修改图表代码。

HH1:=IFELSE(H<REF(H,1)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IFELSE(L>REF(L,1)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=VALUEWHEN(HH1>0,HH1);
LL2:=VALUEWHEN(LL1>0,LL1);
K1:=IFELSE(CLOSE>HH2,-3,IFELSE(CLOSE<LL2,1,0));
K2:=VALUEWHEN(K1<>0,K1);

手数:=4;
//交易条件
GLOBALVARIABLE:n1=0,n2=0,n3=0,n4=0;
开多条件:=CROSS(-2,K2);
平多条件:=CROSS(K2,0);
开空条件:=CROSS(K2,0);
平空条件:=CROSS(-2,K2);

//交易系统
平空:TSELLSHORT(平空条件,TSELLHOLDINGEX(\'\',\'\',1),MKT);
平多:TSELL(平多条件,TBUYHOLDINGEX(\'\',\'\',1),MKT); 

if 开多条件 then begin             
TBUY(1,手数,MKT);
n1:=0;
n2:=0;
end

if 开空条件 then begin
TBUYSHORT(1,手数,MKT);
n3:=0;
n4:=0;
end
//止损止盈,实时出场
多头止损:c<ref(L,TENTERBARS);
TSELL(多头止损 and TBUYHOLDINGEX(\'\',\'\',1)>0 and TENTERBARS>0 ,TBUYHOLDINGEX(\'\',\'\',1),MKT);

空头止损:c>ref(h,TENTERBARS);
Tsellshort(空头止损 and TSELLHOLDINGEX(\'\',\'\',1)<0 and TENTERBARS>0 ,TSELLHOLDINGEX(\'\',\'\',1),MKT);

//多头
if H-TENTERPRICE>=3 AND Tenterbars>0 and TBUYHOLDINGEX(\'\',\'\',1)>0 and n1=0 then begin
止盈1:TSELL(1,1,MKT);//盈利3个点止盈1手
n1:=1;
end
if H-TENTERPRICE>=5 AND  Tenterbars>0 and  TBUYHOLDINGEX(\'\',\'\',1)>0>0 and n2=0 then begin
止盈2:TSELL(1,1,MKT);//盈利5个点止盈1手
n2:=1;
end
                                                                                                                                                           
//空头
if TENTERPRICE-L>=3 AND  Tenterbars>0 and TSELLHOLDINGEX(\'\',\'\',1)<0 and n3=0 then begin
止盈3:TSELLSHORT(1,1,MKT);//盈利3个点止盈
n3:=1;
end
if TENTERPRICE-L>=5 AND  Tenterbars>0 and  TSELLHOLDINGEX(\'\',\'\',1)<0<0 and n4=0 then begin
止盈4:TSELLSHORT(1,1,MKT);//盈利5个点止盈
n4:=1;
end

后台是直接操作实际账号的,因此你手工进行的操作可能也会影响到策略运行。


--  作者:FireScript
--  发布时间:2018/5/9 14:27:18
--  
 
//移动止损模块部分*******************************
//A有三种数值状态:1,0,最新价;
//当A=1时表示当前有持仓,A=0时表示移动止损执行完毕,A=最新价时用于比较价格是否回落

//将A赋值为1,表示当前有持仓
IF TBUYHOLDINGEX( \'\',\'\' ,0 )>0 AND EXTGBDATA(\'a\' )=0 THEN BEGIN
EXTGBDATASET( \'a\',1 );
END

//使A始终表示监控开始后的最高价
IF DYNAINFO(  7)>EXTGBDATA(\'a\' ) and EXTGBDATA(\'a\' )>0 THEN BEGIN
EXTGBDATASET( \'a\',DYNAINFO(  7));
END

MXYL:EXTGBDATA(\'a\')-TAVGENTERPRICEEX2(\'\' ,\'\',1);//最高盈利值
CYL:DYNAINFO(  7)-TAVGENTERPRICEEX2(\'\' ,\'\',1);//当前盈利值

//发现价格回落止损,并将A赋值为0表示移动止损动作完成
IF MXYL>5*MINDIFF and MXYL<10*MINDIFF and EXTGBDATA(\'a\' )>0 and CYL<=0.61*MXYL THEN BEGIN  //最大盈利大于5点且小于10点,且当前盈利相对最高值回撤幅度达到0.61
TSELL(1,TBUYHOLDINGEX(\'\',\'\',1),MKT );
EXTGBDATASET( \'a\',0);
END
//*******************************


if time=CLOSETIME(0) then TSELL(1,TBUYHOLDINGEX(\'\',\'\',1),MKT);//收盘全平
--  作者:FireScript
--  发布时间:2018/5/9 14:30:11
--  
以上是移动止损的部分,以多头为例,完成了部分,剩下的是类似的代码,可以自行尝试完成。
另外这里用到了全局变量

http://www.weistock.com/WeisoftHelp/index.html?zbgs003.htm


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


后台代码要复杂很多,客户需要注意理解用例中的代码。

--  作者:cdqwy781
--  发布时间:2018/5/9 14:42:48
--  
谢谢我标准版在试用专业版公式有难度没人指导根本不行
  


--  作者:FireScript
--  发布时间:2018/5/9 14:44:20
--  
 图表转后台要慢慢来的,后台要处理的代码会比图表复杂。
--  作者:cdqwy781
--  发布时间:2018/5/9 14:48:11
--  
爱好飞狐才用的金字塔