你的意思是要原代码?指数平滑移动平均?
没大能明白您这目的是什么?
{ 代码工作在图表自动交易模式下 当出现开仓后,开仓价格相比,最大损失超过2%止损 当出现盈利后,与最大盈利价格相比,回落到60%幅度后止赢离场 }
MA1:=MA(CLOSE,5); variable:maxprofit=0;//有仓位时最大获利幅度 //开仓 //平仓 //判断当前持仓状态下的最大盈利 if holding > 0 and enterbars > 0 then if holding < 0 and enterbars > 0 then //出现浮动亏损比如2%平仓 这段模板在后台交易中该怎么改? |
//仅供参考
MA1:=MA(CLOSE,5);
MA2:=MA(CLOSE,30);
variable:maxprofit=0;//有仓位时最大获利幅度
//开仓
IF CROSS(MA1,MA2) THEN
BEGIN
tBUY(1,1);
maxprofit:=0;
END
//平仓
tSELL(CROSS(MA2,MA1),0);
//判断当前持仓状态下的最大盈利
win:=0;
win2:=0;
if tholding > 0 and topenbar > 0 then
begin
win:=(c-tenterprice)/tenterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
if tholding < 0 and topenbar > 0 then
begin
win:=(tenterprice-c)/tenterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
//出现浮动亏损比如2%平仓
止损:tSELL(win < -2,0);
//出现最高盈利后,回落到盈利的60%平仓出场
止赢:tSELL(win2 >= 60 and topenprofit > 0, 0);
//仅供参考
MA1:=MA(CLOSE,5);
MA2:=MA(CLOSE,30);
variable:maxprofit=0;//有仓位时最大获利幅度
//开仓
IF CROSS(MA1,MA2) THEN
BEGIN
tBUY(1,1);
maxprofit:=0;
END
//平仓
tSELL(CROSS(MA2,MA1),0);
//判断当前持仓状态下的最大盈利
win:=0;
win2:=0;
if tholding > 0 and topenbar > 0 then
begin
win:=(c-tenterprice)/tenterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
if tholding < 0 and topenbar > 0 then
begin
win:=(tenterprice-c)/tenterprice*100; //记录最大盈利
if win > maxprofit then
maxprofit:=win;
win2:=(maxprofit-win)/maxprofit*100; //最大盈利后的回调幅度
end
//出现浮动亏损比如2%平仓
止损:tSELL(win < -2,0);
//出现最高盈利后,回落到盈利的60%平仓出场
止赢:tSELL(win2 >= 60 and topenprofit > 0, 0);
我的模型是中长线策略,持仓周期较长,如果程序重新启动,maxprofit这个变量是不是从启动后开始计算?
比如说上个交易日有新高,而今天跌了,我每天9点钟启动程序,maxprofit这个变量还有昨天的高点数据吗?
您问题的解决办法,以下希望对您有帮助
在公式中声明的变量不论是否在循环语句中,当每次执行一次循环检测时,都会被初始化一次,如果需要变量只初始化一次,那么需要使用全局变量数据库保存变量状态,请参考:“EXTGBDATA”,“EXTGBDATASET”两个函数的使用。
http://www.weistock.com/wtdq.htm#_Toc317669796