龙哥量化:通达信文华技术指标-双均线固定止损的期货量化策略思路详细分析

我可以把您的通达信,文华技术指标改成TB交易开拓者、金字塔、文华8的自动交易量化策略
请关注我, 在我的个人主页联系我

开始分享一些细致化的思路和写法,我用的是TB交易开拓者。对量化感兴趣的朋友可以多交流
这篇介绍重点介绍固定止损的写法,用双均线举例
先看一下代码,可以复制运行的
基本每行代码都用汉字解释了,代码的末尾重点说一下为啥还要用min,max

Params
	Numeric qty(1);   //手数
	Numeric ma1_n(20);  //短均线参数
	Numeric ma2_n(60);  //长均线参数
	Numeric zhisun_tiao(30); // 固定止盈x跳
Vars
	Series<bool> BK_xinhao;   //开多-信号
	Series<bool> SK_xinhao;	  //开空-信号
	Series<bool> SP_xinhao;   //平多-信号
	Series<bool> BP_xinhao;   //平空-信号
 
	Series<Numeric> ma1;  //均线ma1
	Series<Numeric> ma2;  //均线ma2
	Numeric yitiao; //一跳,比如豆油一跳2个点
Events
	OnInit()
	{	
		AddDataFlag(Enum_Data_RolloverBackWard());	//设置后复权
		AddDataFlag(Enum_Data_RolloverRealPrice());	//设置映射真实价格
		AddDataFlag(Enum_Data_AutoSwapPosition());	//设置自动换仓
		AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());	//设置忽略换仓信号计算	
	}
    onBar(ArrayRef<Integer> indexs)
    {    
		yitiao=MinMove*PriceScale;  //一跳
		ma1 = Averagefc(close,ma1_n);  //短均线ma1
		ma2 = Averagefc(close,ma2_n);  //长均线ma2
		PlotNumeric("ma1",ma1,ma1,red); //在图上画出ma1,红色,主图副图,是在公式属性设置, 属性-->显示方式-->主图
		PlotNumeric("ma2",ma2,ma2,green); //在图上画出ma2,绿色
		
//多信号-------------------------------------------------------------
		BK_xinhao = CrossOver(ma1,ma2); //金叉开多
		SP_xinhao = Crossunder(ma1,ma2); //死叉平多
//空信号-------------------------------------------------------------
		SK_xinhao = Crossunder(ma1,ma2); //死叉开空
		BP_xinhao = CrossOver(ma1,ma2); //金叉平空
//固定止损------------------------------------------------------
		if(MarketPosition==1 And BarsSinceEntry>=1)  // 有多仓的情况 and 开仓到当前的K线个数
		{
			if(low<EntryPrice-zhisun_tiao*yitiao) //最低价小于开仓价减去止损点数,这里为什么要用两层if,是为了减少程序运行和计算量
			{   
				Sell(0, min(open,EntryPrice-zhisun_tiao*yitiao));  //止损价是开仓价减去止损点数,再和开盘价比较,较小值是实际止损价
			}
		}
		else if(MarketPosition==-1 And BarsSinceEntry>=1)
		{
			if(high>entryPrice+zhisun_tiao*yitiao)
			{
				BuyToCover(0,max(open,EntryPrice+zhisun_tiao*yitiao));
			}
		}
//开仓-----------------------------------------------------------------------
		if (MarketPosition==0 and BK_xinhao[1])  //这里重点说明,当根K线走完,确定金叉了, 在下一个K线的开盘价开仓
		{
			Buy(qty, open); 
		}
		if (MarketPosition==0 and SK_xinhao[1])
		{
			SellShort(qty, open);
		}
			 
		if (MarketPosition>0 and SP_xinhao[1]) 
		{
			Sell(0, open);  
		}
		if (MarketPosition<0 and BP_xinhao[1]) 
		{
			BuyToCover(0, open);
		}
	  
	}

重点说明:为啥还要用min max ,这里以空单为例,解释一下
看下图,开空价是7812,止损30跳,每跳2点,止损点数是60点,空单计算的止损价应该是7872,
但是开盘向上大幅跳空,开盘价是7898,此时亏损点数7898-7812=86点数,超过固定止损点数60点,
所以,一开盘就必须立马用开盘价止损,
用max函数比较一下开盘价和计算的止损价,实际止损价是较大值
max(open, EntryPrice + zhisun_tiao*yitiao)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值