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

可以把您的通达信,文华技术指标改成TB交易开拓者、金字塔、文华8的自动交易量化策略

开始分享一些细致化的思路和写法,我常用的是TB交易开拓者。对量化感兴趣的朋友可以多交流

这篇介绍重点介绍固定止盈的写法,用双均线举例
先看一下代码,可以复制运行的,代码后面讲解写法

Params
	Numeric qty(1);   //手数
	Numeric ma1_n(20);  //短均线参数
	Numeric ma2_n(60);  //长均线参数
	Numeric zhiying_tiao(30); // 固定止盈x跳
Vars
	Series<bool> BK_xinhao;
	Series<bool> SK_xinhao;
	Series<bool> BP_xinhao;
	Series<bool> SP_xinhao;
	Series<Numeric> ma1;
	Series<Numeric> ma2;
	Numeric yitiao; 
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);  
		ma2 = Averagefc(close,ma2_n); 
		PlotNumeric("ma1",ma1,ma1,red); 
		PlotNumeric("ma2",ma2,ma2,green); 
		
//多信号-------------------------------------------------------------
		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)
		{
			If(High>EntryPrice+zhiying_tiao*yitiao ) 
			{   
				Sell(0, max(open,EntryPrice+zhiying_tiao*yitiao));
				Commentary("止盈多单");  
			}
		}
		Else If(MarketPosition == -1 And BarsSinceEntry >= 1)
		{
			If(Low<entryPrice-zhiying_tiao*yitiao)
			{
				BuyToCover(0,min(open,EntryPrice-zhiying_tiao*yitiao));
				Commentary("止盈空单");
			}
		 }
//开仓-----------------------------------------------------------------------
		if (MarketPosition==0 and BK_xinhao[1])  
		{
			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);
		}
	  
	}
 

开始解释代码的写法:
Numeric qty(1); //手数
Numeric ma1_n(20); //短均线参数
Numeric ma2_n(60); //长均线参数
Numeric zhiying_tiao(30); // 固定止盈x跳
Numeric的意思是浮点型的数据类型,//是注释,这的注释必不可少。因为在优化参数,或者设置参数时,可看见参数的解释
在这里插入图片描述
在这里插入图片描述

OnInit()
{
  AddDataFlag(Enum_Data_RolloverBackWard());
  AddDataFlag(Enum_Data_RolloverRealPrice());
  AddDataFlag(Enum_Data_AutoSwapPosition());
  AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());
}
这一段是映射主力合约,后复权等等,只执行一次
第一行,设置后复权,
第二行,设置映射真实价格
第三行,设置自动换仓
第四行,设置忽略换仓信号计算
比如说,回测一年时间的3分钟K线,菜籽油主力合约,那主力合约01,05,09,在切换主力的时候,存在价格差,所以TB官方给了一个888的主连合约,在回测时只需要用888合约,再设置后复权即可,如果你想细致的研究,请在TB官网的视频课找一下TB官网课程。

yitiao=MinMove*PriceScale;
yitiao是一跳的点数,比如菜籽油一跳是1点,豆油一跳是2点。

ma1 = Averagefc(close,ma1_n);
ma1是计算收盘价的均值,参数是ma1_n, 参数默认是20,

PlotNumeric(“ma1”,ma1,ma1,red);
在主图画均线ma1,红色 ,这里注意的是,TB要在主图画线,就得专门写这么一句,
但是通达信这种,太简单了, 只用: 和:= 做了区分
ma1: ma(close, 20); 画线
ma1:= ma(close, 20); 不画线

BK_xinhao = CrossOver(ma1,ma2);
SK_xinhao = Crossunder(ma1,ma2);
多开-信号,纯纯简单的拼音,一看就懂,crossover是金叉,Crossunder是死叉,金叉开多,死叉反手开空,再金叉反手开多。
等k线走完,在下一个K线的开盘价开仓
在这里插入图片描述
在这里插入图片描述

If(MarketPosition == 1 And BarsSinceEntry >= 1)
持有多单 and 开仓到当前位置的Bar计数>=1

If(High > EntryPrice + zhiying_tiao*yitiao )
EntryPrice是开仓价,zhiying_tiao是止盈多少条,参数默认30跳止盈,
最高价大于开仓价加上止盈点数,止盈平仓

Sell(0, max(open,EntryPrice + zhiying_tiao*yitiao));
开仓价+止盈点数,就是止盈价,这里为什么用max
注意,如果是开盘跳空,容易出现,开盘价就超过计算的止盈价了,所以用max函数比较一下开盘价和计算止盈价,哪个大,
0是全部平仓,如果是1,平仓1手。
举例:做多,开仓价是7800,止盈点数是50,止盈价是7850,当最高价大于7850时,满足if条件,执行sell函数平仓指令
如果,夜盘开盘跳高,开盘价是7860,大于止盈价7850,满足if条件,平仓价是7860。

Commentary(“止盈多单”);
在K线图上核对平仓的原因
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值