文华MQ股票池程序化的编写常见问题[文华财经公式]
三、编写常见问题
(1)K线图公式/TICK图公式
①NumericSeries、StringSeries定义序列型变量
盘中运行:记录下每根K线的运算结果,用于下根K线的计算
回测:支持回测
注:TICK周期上每笔TICK一根K线,定义序列型变量,当根K线计算模型时使用上根K线的运算结果,相当于全局变量的用法
例子:通过序列变量控制一天之内总的开仓次数(开多+开空)
Setting
AddTimes:5;
Params
Numeric Length(3); // 周期
Vars
NumericSeries BarN; //当日K线根数
NumericSeries myflag; // 交易次数
Begin
// ------------------- 取当日K线根数及交易次数 -----------------
If(date!=date[1])
{
BarN= 1 ;
myflag =0;
}
else BarN= BarN[1]+1;
// ----------------------- 多头开仓--------------------
If (MarketPosition!=-1 And Vol > 0 )
{
If(Every(IsUp,Length) And BarN>=Length And CloseMinute>=5 And myflag<= 5) //连续三根收阳,则开多单,最多连续开5次。
{
Buy(0, Active_Order);
myflag = myflag+1;
}
}
// ------------------------ 空头开仓-----------------
If (MarketPosition!=1 And Vol > 0 )
{
If(Every(IsDown,Length) And BarN>=Length And CloseMinute>=5 And myflag<= 5) //连续三根收阴,则开空单,最多连续开5次。
{
SellShort(0,Active_Order);
myflag = myflag+1;
}
}
If(CloseMinute<=5 And BarsSinceEntry > 0 And Vol > 0)
{
// ------------------------- 尾盘多头平仓----------------
If(MarketPosition == 1 )
Sell(0, Active_Order);
// ---------------------- 尾盘空头平仓-------------
If(MarketPosition == -1)
BuyToCover(0, Active_Order);
}
End
盘中运行:记录下每笔TICK的运算结果,用于之后的计算
回测:不支持回测
(2)算法交易公式
Global_Numeric、Global_NumericArray、Global_String、Global_StringArray定义全局变量或使用GetGlobalVar(Index)、SetGlobalVar(Index,Val);GetGlobalVar2(Str)、SetGlobalVar2(Str,Val)
盘中运行:记录下每笔TICK的运算结果,用于之后的计算
回测:支持算法交易回测
例子:通过全局变量,控制交易重复执行
(1)
Data
data0:"m1801";
Vars
Global_Numeric type;
Begin
If(data0.A_BuyProfitLoss()>5000&&type == 0) //如果该合约多头盈亏大于5000,加仓1手
{
data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.price("Ask1"));
type = 1; //加仓后type重新赋值,避免重复执行
}
End
(2)(来源 www.cxh99.com )
Data
data0:"m1801";
Begin
If(data0.A_BuyProfitLoss()>5000 && GetGlobalVar(0) == 0) //如果该合约多头盈亏大于5000,加仓1手
{
data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.price("Ask1"));
SetGlobalVar(0,1); //加仓后全局变量第一个位置重新赋值,避免重复执行
}
End
使用Numeric、NumericSeries定义数值型变量代替
变量返回值:1代表True;0代表Flse
例子:通过设置决定是否启用按资金比例下单
Vars
NumericSeries Ma5; //5周期均线
NumericSeries Ma10; //10周期均线
Numeric Buytype(0);//是否启用按资金比例下单
Numeric lots;//下单手数
Begin
If(Buytype ==0 )
{
lots = 5;//固定5手开仓
}
Else If(Buytype == 1 )
{
lots = MoneyTot*0.2/(Close*ContractUnit*MarginRatio);//按资金的百分之20开仓
}
Ma5 = Ma(Close,5);
Ma10 = Ma(Close,10);
If(Ref( CrossUp(Ma5,Ma10) ,1) )
{
Buy(lots);
}
Else If(Ref( CrossDown(Ma5,Ma10) ,1) )
{
SellShort(lots);
}
End
使用NumericArray、StringArray、Global_StringArray定义不同类型的数组变量
例子:取得最近10根K线内最高价小于当前K线,最低价大于当前K线的K线数量
Vars
NumericArray deep;
Numeric i;
Numeric j;
Numeric k;
Begin
For i =0 To 9
{
If( High>High[i])
{
deep[j]=Low[i];
j = j+1;//装入最近的10根K线内小于当根最高价的K线的最低价
}
}
For i =0 To j-1
{
If( Low<deep[i])
k = k+1;
}
PlotNumeric("根数",k);
End
来源http://www.cxh99.com/2018/02/10/50054.shtml
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容