关于文华财经软件的一些常见代码编写3
1、//该模型仅仅用来示范如何编写多条件下的过滤模型开平条件
//用户需要根据自己交易经验,补充完整开仓条件,进行修改后再实际应用!!!
//文华不保证模型的盈利效果,也不对这些模型的交易结果负责。
N1:=5;
N2:=10;
N3:=10;
N4:=5;
SJ1:=(TIME>0905&&TIME<(1500-5||1515-5));
//定义入场时间条件(当时间大于9点05小于14点55的时候入场)
SJ2:=(TIME>(1500-5||1515-5));//定义出场时间条件
JC:=CROSSUP(MA(C,N1),MA(C,N2));
//定义简单的均线金叉(收盘价的N1周期的简单移动平均线上穿N2周期的简单移动平均线)
SC:=CROSSDOWN(MA(C,N1),MA(C,N2));
//定义简单的均线死叉(收盘价的N1周期的简单移动平均线下穿N2周期的简单移动平均线)
TP1:=C>REF(C,1); //定义简单的向上突破条件(当前最新价(收盘价)大于上一根K线的收盘价)
TP2:=C<</span>REF(C,1); //定义简单的向下突破条件(当前最新价(收盘价)小于上一根K线的收盘价)
ZY:=C>BKPRICE+N3*MINPRICE||C<</span>SKPRICE-N3*MINPRICE;
//定义止盈条件(当前价格大(小)于买(卖)开价N3个最小变动价位)
ZS:=C<</span>BKPRICE+N4*MINPRICE||C>SKPRICE+N4*MINPRICE;
//定义止损条件(当前价格小(大)于买(卖)开价的N4个最小变动价位)
KD:=(SJ1&&JC&&TP1)||(SJ1||JC||TP1); //综合了时间限制、金叉、向上突破等的开多条件
KK:=(SJ1&&SC&&TP2)||(SJ2||SC||TP2); //综合了时间限制、死叉、向下突破等的开空条件
BPK1:=(SJ1&&JC&&TP1)||(SJ1||JC||TP1); //综合了时间限制、金叉、向上突破等的做多条件
SPK1:=(SJ1&&SC&&TP2)||(SJ2||SC||TP2); //综合了时间限制、死叉、向上突破等的做多条件
PD:=(SJ2&&SC&&TP2)||(SJ2||SC||TP2)||ZY||ZS; //综合了时间限制、死叉、向下突破以及止损止盈等平多条件
PK:=(SJ2&&JC&&TP1)||(SJ1||JC||TP1)||ZY||ZS; //综合了时间限制、金叉叉、向下突破以及止损止盈等平空条件
KD=1,BK;//满足开多条件的时候,委托发出买入开仓
KK=1,SK;//满足开空条件的时候,委托发出卖出开仓
BPK1=1,BPK;//满足开多平空的反手条件的时候,执行做多条件
SPK1=1,SPK;//满足开空平多的反手条件的时候,执行做空条件
PD=1,SP;//满足平多条件的时候,委托发出平多指令
PK=1,BP;//满足平空条件的时候,委托发出平空指令
CLOSEMINUTE<=2,CLOSEOUT;//定义尾盘2分钟的清仓
SETDEALPERCENT(20);//定义入场资金比率为20%
AUTOFILTER;//过滤模型执行卖开后买平和买开后卖平操作
SETSIGMAXNUM(1);//定义一根K线上最多出现一个买卖信号
2、//该模型仅仅用来示范如何编写多条件下的过滤模型开平条件
//用户需要根据自己交易经验,补充完整开仓条件,进行修改后再实际应用!!!
//文华不保证模型的盈利效果,也不对这些模型的交易结果负责。
N1:=5;
N2:=10;
N3:=10;
N4:=5;
SJ1:=(TIME>0905&&TIME<(1500-5||1515-5));
//定义入场时间条件(当时间大于9点05小于14点55的时候入场)
SJ2:=(TIME>(1500-5||1515-5));//定义出场时间条件
JC:=CROSSUP(MA(C,N1),MA(C,N2));
//定义简单的均线金叉(收盘价的N1周期的简单移动平均线上穿N2周期的简单移动平均线)
SC:=CROSSDOWN(MA(C,N1),MA(C,N2));
//定义简单的均线死叉(收盘价的N1周期的简单移动平均线下穿N2周期的简单移动平均线)
TP1:=C>REF(C,1); //定义简单的向上突破条件(当前最新价(收盘价)大于上一根K线的收盘价)
TP2:=C<</span>REF(C,1); //定义简单的向下突破条件(当前最新价(收盘价)小于上一根K线的收盘价)
ZY:=C>BKPRICE+N3*MINPRICE||C<</span>SKPRICE-N3*MINPRICE;
//定义止盈条件(当前价格大(小)于买(卖)开价N3个最小变动价位)
ZS:=C<</span>BKPRICE+N4*MINPRICE||C>SKPRICE+N4*MINPRICE;
//定义止损条件(当前价格小(大)于买(卖)开价的N4个最小变动价位)
KD:=(SJ1&&JC&&TP1)||(SJ1||JC||TP1); //综合了时间限制、金叉、向上突破等的开多条件
KK:=(SJ1&&SC&&TP2)||(SJ2||SC||TP2); //综合了时间限制、死叉、向下突破等的开空条件
BPK1:=(SJ1&&JC&&TP1)||(SJ1||JC||TP1); //综合了时间限制、金叉、向上突破等的做多条件
SPK1:=(SJ1&&SC&&TP2)||(SJ2||SC||TP2); //综合了时间限制、死叉、向上突破等的做多条件
PD:=(SJ2&&SC&&TP2)||(SJ2||SC||TP2)||ZY||ZS; //综合了时间限制、死叉、向下突破以及止损止盈等平多条件
PK:=(SJ2&&JC&&TP1)||(SJ1||JC||TP1)||ZY||ZS; //综合了时间限制、金叉叉、向下突破以及止损止盈等平空条件
KD=1,BK;//满足开多条件的时候,委托发出买入开仓
KK=1,SK;//满足开空条件的时候,委托发出卖出开仓
BPK1=1,BPK;//满足开多平空的反手条件的时候,执行做多条件
SPK1=1,SPK;//满足开空平多的反手条件的时候,执行做空条件
PD=1,SP;//满足平多条件的时候,委托发出平多指令
PK=1,BP;//满足平空条件的时候,委托发出平空指令
CLOSEMINUTE<=2,CLOSEOUT;//定义尾盘2分钟的清仓
SETDEALPERCENT(20);//定义入场资金比率为20%
AUTOFILTER;//过滤模型执行卖开后买平和买开后卖平操作
SETSIGMAXNUM(1);//定义一根K线上最多出现一个买卖信号
DRAWTEXT(BARSBK=1,H,'做多');
DRAWTEXT(BARSSK=1,L,'做空');
DRAWTEXT(BARSSP=1,C,'平多');
DRAWTEXT(BARSBP=1,O,'平空');
3、//该模型仅仅用来示范如何编写多条件下的非过滤过滤模型加减仓条件
//用户需要根据自己交易经验,补充完整开平仓条件,进行修改后再实际应用!!!
A:=多头开仓条件;
A1:=多头加仓条件;
B:=空头开仓条件;
B1:=空头加仓条件;
A2:=多头减仓条件;
B2:=空头减仓条件;
D:=多头全平仓条件;
E:=空头全平仓条件;
A && NOT(ISLASTSK|| ISLASTBK) , BK(2);
//当满足多头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行买入开仓2手
B && NOT(ISLASTBK|| ISLASTSK) , SK(2);
//当满足空头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行卖出开仓2手
BKVOL>=2 && A1 && ISLASTBK , BK(1);
//当满足多头加仓信号并且上一个信号为买开信号并且多头持仓大于等于2手,执行多头加仓1手
SKVOL>=2 && B1 && ISLASTSK , SK(1);
//当满足空头加仓信号并且上一个信号为卖开信号并且空头持仓大于等于2手,执行多头加仓1手
//以上两行代码为加仓条件
A2 && ISLASTBK&&BKVOL>=2,SP(1);
//当满足多头减仓条件并且上一个信号为买入开仓并且多头持仓大于等于2,执行减仓1手的卖出平仓操作
B2 && ISLASTSK&&SKVOL>=2,BP(1);
//当满足空头减仓条件并且上一个信号为卖出开仓并且空头持仓大于等于2,执行减仓1手的买入平仓操作
//以上两行代码为减仓条件
D &&BKVOL>0 && (ISLASTBK||ISLASTSP),SP(BKVOL);
//如果满足全平条件D并且多头持仓大于0且不论上一个信号执行的是加仓或者减仓,都进行全部平仓
E &&SKVOL>0 && (ISLASTSK||ISLASTBP),BP(SKVOL);
//如果满足全平条件E并且空头持仓大于0且不论上一个信号执行的是加仓或者减仓,都进行全部平仓
SETSIGMAXNUM(1);//定义一根K线上最多出现一个买卖信号
4、//该模型仅仅用来示范如何编写多条件下的非过滤分组模型加减仓条件
//用户需要根据自己交易经验,补充完整开平仓条件,进行修改后再实际应用!!!
ADK:=模组A的多头开仓条件;
AKK:=模组A的空头开仓条件;
ADP:=模组A的多头全平仓条件;
AKP:=模组A的空头全平仓条件;
BDK:=模组B的多头开仓条件;
BKK:=模组B的空头开仓条件;
BDJ:=模组B的多头加仓条件;
BKJ:=模组B的空头加仓条件;
BDP:=模组B的多头全平仓条件;
BKP:=模组B的空头全平仓条件;
ADK && NOT(ISLASTSK|| ISLASTBK) , BK('A',2);
//当满足模组A的多头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行买入开仓2手
AKK && NOT(ISLASTBK|| ISLASTSK) , SK('A',2);
//当满足模组A的空头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行卖出开仓2手
ADP &&BKVOL>0 && (ISLASTBK||ISLASTSP),SP('A',GROUPBKVOL('A'));
//如果满足模组A的全平条件ADP并且多头持仓大于0且不论上一个信号执行的是加仓或者减仓,都进行全部平仓
AKP &&SKVOL>0 && (ISLASTSK||ISLASTBP),BP('A',GROUPSKVOL('A'));
//如果满足模组A的全平条件AKP并且空头持仓大于0且不论上一个信号执行的是加仓或者减仓,都进行全部平仓
BDK && NOT(ISLASTSK|| ISLASTBK) , BK('B',4);
//当满足模组B的多头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行买入开仓2手
BKK && NOT(ISLASTBK|| ISLASTSK) , SK('B',4);
//当满足模组B的空头开仓条件并且上一个信号不是买入或者卖出信号(防止锁仓),执行卖出开仓2手
BKVOL>=4 && BDJ && ISLASTBK , BK('B',1);
//当满足模组B的多头加仓条件并且上一个信号是买入信号且多头持仓大于等于4手,在执行模组买入1手
SKVOL>=4 && BKJ && ISLASTSK , SK('B',1);
//当满足模组B的空头加仓条件并且上一个信号是卖出信号且空持仓大于等于4手,在执行模组卖出1手
BDP &&BKVOL>0 && (ISLASTBK||ISLASTSP),SP('B',GROUPBKVOL('B'));
//如果满足模组B的全平条件BDP并且多头持仓大于0且不论上一个信号执行的是加仓或者减仓,都进行全部平仓
BKP &&SKVOL>0 && (ISLASTSK||ISLASTBP),BP('B',GROUPSKVOL('B'));
//如果满足模组B的全平条件BKP并且空头持仓大于0且不论上一个信号
SETSIGMAXNUM(1);//定义一根K线上最多出现一个买卖信号
//如果上一根K线为A组的开仓信号,先优先A组,然后无组别、B-I组,组A开的仓只能组A或者无组别的平仓信号来平
//无组别开的仓可以是任意组平仓信号来平,无组别优先,然后是A-I组
//同组内,如果一根K线同时满足多个条件,那么根据编写顺序来决定出哪个
5.//以下编写主要是做做多、做空交替出现条件的编写
//仅供参考,风险自负!
MA5:MA(C,5);
MA10:MA(C,10);
MA20:MA(C,20);
MA30:MA(C,30);
A1:=MA5>MA10&&MA10>MA20&&MA20>MA30;//满足多头均线排列
A2:=MA5//满足空头均线排列
COUNT(A1,BARPOS)=1&&A1,BK;//从加载K线以来第一次满足多头均线排列
COUNT(A1,BARSLAST(A2))=1&&A1,BK;
//满足SK条件到当前的周期数存在满足条件A1并且此A1为第一次出现,买入开仓
COUNT(A2,BARPOS)=1&&A2,SK;//从加载K线以来第一次满足空头均线排列
COUNT(A2,BARSLAST(A1))=1&&A2,SK;
//满足BK条件到当前的周期数存在满足条件A2并且此A2为第一次出现,买入开仓
BARSBK>=1,SP;//简单的平仓条件
BARSSK>=1,BP;//简单的平仓条件
AUTOFILTER;
6、//以下编写,是在综合考虑不再开仓的限制
//仅供参考,风险自负!
AA:ISUP&&C>REF(MA(C,5),1)&&VOL>REF(VOL,1)*1.05;//自定义简单做多条件
BB:ISDOWN&&C<=LLV(L,5)&&VOL>REF(MA(VOL,10),1)*1.5;//自定义简单做空条件
N:=BARSLAST(DATE<>REF(DATE,1))+1;//当天分钟周期的K线根数
AA&&COUNT(BARSBK=1||BARSSK=1,N)<1,BK;//当天只允许做多、做空的一次开仓
BB&&COUNT(BARSSK=1||BARSBK=1,N)<1,SK;//当天只允许做多、做空的一次开仓
//AA&&(ISLASTBP&&BARSBP>=1||ISLASTSP&&BARSSP>=1||(NOT(ISLASTBP)&&NOT(ISLASTSP))),BK;
//当根K线平仓后不再开仓(注意当根K线开仓后不再开仓)
//BB&&(ISLASTBP&&BARSBP>=1||ISLASTSP&&BARSSP>=1||(NOT(ISLASTBP)&&NOT(ISLASTSP))),SK;
//以上的两行代码用在了出信号立即下单不复合
N2:=BARSLAST(DATE<>REF(DATE,1))+1;//定义日内平仓后不再开仓
AA&&COUNT(BARSSP=1||BARSBP=1,N2)<1,BK;//
BB&&COUNT(BARSSP=1||BARSBP=1,N2)<1,SK;//
//定义日内平仓后不再开仓
//注意区别这两还代码的写法区别
//可以考虑把1小时拆成12根5分钟K线,然后统计最近1小时以来交易次数不能超过一次:
N1:=BARSLAST(DATE<>REF(DATE,1))+1;//定义日内
NN:=BARSLAST(MOD(N1,12))+1;//
//将1小时内的开仓的次数不超过一次必须加载在5分钟的周期统计一小时
//若是10分钟内的开仓次数不超过一次(加载1分钟)MOD(N1,10);
//限制开仓的次数。
COUNT(BARSBK=1||BARSSK=1,NN)<1&&AA,BK;//一小时内的开仓次数不超过一次
COUNT(BARSBK=1||BARSSK=1,NN)<1&&BB,SK;//一小时内的开仓次数不超过一次
C>BKPRICE+20*MINPRICE||C<</span>BKPRICE-5*MINPRICE,SP;//简单的止损、止盈编写
C<</span>SKPRICE-20*MINPRICE||C>SKPRICE+5*MINPRICE,BP;//简单的止损、止盈编写
A:ISUP&&VOL>REF(VOL,1);//自定义简单做多条件A
B:ISDOWN&&VOL>REF(MA(VOL,1),1);//自定义简单做空条件B
NN5:=BARSLAST(TIME=0900||TIME=1000||TIME=1100||TIME=1400)+1;
COUNT(BARSBK=1||BARSSK=1,NN5)=0&&A,BK;
COUNT(BARSBK=1||BARSSK=1,NN5)=0&&B,SK;
//以上统计的是每个小时中的开仓次数限制为一次,对应的国内4根K线。
//注意以上两行代码条件=0就代表的是<1。
AUTOFILTER;
7.//以下编写仅供参考,风险自负!
//日内的一个模型(不同止损策略编写方法) 以开盘后的第一根K线作为标准,
//1、突破其最高点BPK,第一次开多盈利50点止盈
//2、跌破其最低点SPK,第一次开空盈利90点止盈
//3、跌破最低点后没有达到止盈标准,价格有回到第一根K线的高点之上,再度BPK,第二次开多止盈为盈利100点。
//4、之后多单未能止盈,又回到低点之下,这样就空单盈利120点止盈。
//5、如空单没有止盈,又回到其高点上,用开多盈利130点止盈。
//6、价格又下了开空后150点止盈。
//橡胶、1分钟周期上,
N:=BARSLAST(DATE<>REF(DATE,1)); //分钟周期的K线根数(注意实际运用中+1与否的区别)
HH:=VALUEWHEN(DATE<>REF(DATE,1),H); //开盘当根K线的高价
LL:=VALUEWHEN(DATE<>REF(DATE,1),L); //开盘当根K线的低价
N>1&&C>HH,BPK;
N>1&&CSPK;
COUNT(BARSBK=1,N)=1&&C>BKPRICE+50,SP;
COUNT(BARSSK=1,N)=1&&C <</span>SKPRICE-90,BP;
COUNT(BARSBK=1,N)=2&&C>BKPRICE+100,SP;
COUNT(BARSSK=1,N)=2&&C <</span>SKPRICE-120,BP;
COUNT(BARSBK=1,N)=3&&C>BKPRICE+130,SP;
COUNT(BARSSK=1,N)=3&&C<</span>SKPRICE-150,BP;
//注意分批次的止损的写法
AUTOFILTER;
8、//可能会用在连续的加仓或者减仓之中
FIRSTSKBAR:BARSLAST(SKVOL>0&&REF(SKVOL=0,1));//第一次开仓
9、//5日MA值和34日MA值相减,用柱状图表示。
//若当前柱子比前一根柱子高,则为红色,反之为绿色。
//注意加载到主图K线才能看到效果
MA5:=MA(C,5);
MA34:=MA(C,34);
AA:MA5-MA34,COLORSTICK;//不同颜色柱画法,类似于MACD的画法
DRAWCOLORLINE(AA>REF(AA,1),AA,COLORRED,COLORGREEN);
10、//常用K线的逻辑判断1
N1:=BARSLAST(DATE<>REF(DATE,1))+1;//取从开盘到当前的K线根数
CC:=VALUEWHEN(N1=16,C);//当N1=16(0915代表的是1分钟周期,其他周期看K线划分)的时候取那根K线的收盘价
TIME>0945&&(COUNT(BARSBK=1,N1)<1)&&C>=CC+10*MINPRICE,BK;//允许当日最多开仓(BK)一次
TIME>0945&&(COUNT(BARSSK=1,N1)<1)&&CMINPRICE,SK;//允许当日最多SK仓一次
C>=BKPRICE+20*MINPRICE||C<</span>BKPRICE-5*MINPRICE,SP;//当满足开多止损和止盈的时候,进行平仓
C<=SKPRICE-20*MINPRICE||C>SKPRICE+5*MINPRICE,BP;//当满足开空止损和止盈的时候,进行平仓
AUTOFILTER;
//注意N的取值和对应的时间周期
//注意当日最多开几次仓就小于几(N)
//COUNT(BARSBK=1||BARSSK=1,N1)表示的是当天不论开多还是开空只开仓一次。
MA5:MA(C,5),LINETHICK4,COLORYELLOW;//定义5周期均线并用线性为5的黄颜色表示
MA10:MA(C,10),LINETHICK2,COLORMAGENTA;//定义10周期均线并用线性为2的紫红色颜色表示
AA:CROSSUP(MA5,MA10)&&ISUP&&C>MA5;//定义简单的AA条件
TT:=AA&&COUNT(AA,N1)=1;//当日首次满足AA条件
NN:=BARSLAST(TT=1)+1;//当首次满足条件AA到当前的K线的周期数