EasyLanguage/PowerLanguage 策略语言研究
1止损的函数用什么?请教前辈,止损应该怎么写?2种情况
1.到价格触及到-5%时。
2.到收盘价触及到-5%时。
以多单的止损为例
1,
[code]sell next bar at entryprice*0.95 stop;[/code]
2、if close
2向高手老手请教,在ts中如何实现资金管理?
建议你设置止损,按能接受的止损来设置头寸,就是ANP方式
[code]
AccountBalance = InitialBalance + netprofit;
DollarRisk = AccountBalance * rate;
LTT=IntPortion(DollarRisk/stoploss);
[/code]
3[函式介绍] 如何用EL表示期货涨停,跌停价
最近有同学问到这个问题,现整理出来供大家一起参考学习~
由于中国商品期货的涨跌停系数会随着假日时间的变动而变动(中国商品这个感觉很麻烦,需要随时关注交易所公告来进行调整),以下是具体的一个例子的写法:
[code]
Inputs:begintime(1100608),endtime(1100912),abnormalratio(0.2),normalratio(0.1);
vars:upprice(0),downprice(0);
if time>=begintime and time<=endtime
then begin
upprice=Closed(1)*(1+abnormalratio);
downprice=Closed(1)*(1-abnormalratio);
end
else begin
upprice=Closed(1)*(1+normalratio);
downprice=Closed(1)*(1-normalratio);
[/code]
4软件使用讨论] 如何将Tb代码转为MC代码
下面是我在转换TB代码到easylanguage的时候做的日志记录,有些是那个策略特有的,肯定还有很多漏掉的,我没空整理了,大家可以参考下
1 {变为then begin
考虑then换行后begin
如果在if else中注意else后没有then
while中begin前不需要then
2 }变为end;
如果在if else中注意else钱的end没有分号
3 Params变为Inputs:
注意别忘记分号
4 Vars变为variables:
注意别忘记分号
5 声明类型去掉
Numeric rangeMove(2);中的Numeric全部去掉
6 声明后的分号改为,
注意参数和变量的最后一个保持分号
7 声明类型缺少默认值的补上
8 逻辑运算中,等号==变为=,不等号!=变为<>
9 注释全部去掉
10下单指令
Bool Buy(Numeric Share=0,Numeric Price=0,Bool Delay=False)
Share 买入数量,为整型值,默认为使用系统设置参数;
Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
Buy xxx contracts next bar at xxx stop;
11 Ceiling Tb中两个参数
Ceiling(timemin/BarInterval, 1)
改为Ceiling(timemin/BarInterval)
12 &&变为and ||变为or
13 ContractUnit()变为currentContracts X
14 变量名range->myrange
15 GetGlobalVar-->GVGetNamedDouble
16 IntPart-->IntPortion
17 InvalidNumeric-->-1
18 GVGetNamedDouble(40变为GVGetNamedDouble("global40"
set同理
19 if后面的括号,mc可以有可以无,但是tb必须有
20 mc的maxlist函数 对应 tb的max ,minlist --min
21 mc的print对应Commentary
22 mc中的变量默认是序列变量 Tb中的变量主意区分普通变量和序列变量,如果同样是序列变量:
需要重设变量值
isBreak=isBreak[1];
k1=k1[1];
J1=J1[1];
5[程序代码分享] 深入Numeric资料形态
在MC中,资料形态有三类 Numeric, TrueFalse 与 String,其中Numeric可以再细分成Int、Float与Double。如果只宣告变数为Numeric,MC有自动帮你选择适当的数值形态,有些情况下,MC无法准确的判断时,有可能会出现使用Double储存Int形态的资料,如此一来,系统效能将会大大降低。如果你可以确定宣告变数myVars的资料形态为整数时,下次建议可以考虑用
[code]
vars: int myVars(0);
[/code]
取代
[code]
vars: myVars(0)
[/code]
6[程序代码分享] 提供一个移动止损的方法
移动止损的方法有很多,可以控制亏损百分比,或者控制亏损金额,我先抛个砖,大家继续:
[code]
stop1=0.02; //2个百分点止损
myStop=2990;//根据商品的价格不同而定义
if marketposition >0 then begin
if c*(1-stop1) > myStop then myStop = c*(1-stop1);
end;
if marketposition <0 then begin
if c*(1+stop1) < myStop then myStop = c*(1+stop1);
end;
if marketposition >0 and c < myStop then sell next bar at market;
if marketposition <0 and c > myStop then buytocover next bar at market;
[/code]
再提供一种方法:
2%止损:
[code]
if marketposition>0 and entryprice>close and (entryprice-close)/entryprice>=2% then
sell next bar at market;
if marketposition<0 and entryprice=2% then
buytocover next bar at market;
[/code]
7当日输N次不交易
做当冲的时候,最怕盘整盘。遇到盘整盘时,顺势系统很容易被修理。
为了避免当日亏损太多次,可以使用 DailyLosers 这个函数
以下是当日输N次不交易的写法
[code]
if DailyLosers(date)<=N then begin
{code of your entry signal}
end;
[/code]
8程序代码分享] 直接在POWER EDITOR看系统绩效
常常要不断的改程序,让系统变好。不过当每次做点细小的修改,就要跑一次回侧报告,有点不方便。
尤其有时候只是要让DRAWDOWN变小。
为了让开发过程更容易,我在程式码后段加入下面程式码,这样一来,只要在编译后马上可以看到这次修改是否有让系统变好,不需要再到回侧报告去找。虽然不是很详细,不过有时后对我来说已经足够了,感觉很方便。
[code]
once(LastBarOnChart_s) begin
messagelog(" Initial Capital: ",InitialCapital);
messagelog(" Net Profit: ",netprofit);
messagelog(" Gross Profit: ",grossprofit);
messagelog(" Gross Loss: ",grossloss);
messagelog(" Max Drawdown: ",maxiddrawdown);
messagelog("Max Contracts Held: ",MaxContractsHeld);
messagelog(" MaxConsecWinner: ",MaxConsecWinners);
messagelog(" MaxConsecloser: ",maxconseclosers);
messagelog(" Commission: ",commission);
messagelog(" Largest Win Trade: ",LargestWinTrade);
messagelog("Largest Loss Trade: ",largestlostrade);
end;
[/code]
10[程序代码分享] 减仓别忘了加 total 这个保留字
在MC中,第一次建仓或是要加仓时,可以用下面的语法
[code]
buy ("signalName") N contracts next bar at market;
sellshort ("signalName") N contracts next bar at market;
[/code]
当要减仓时则要用
[code]
sell ("signalName") M contracts total next bar at market;
buytocover ("signalName") M contracts total next bar at market;
[/code]
如果没有加 total,MC会把你所有仓位都平仓掉。 11编程求助] 如何根据条件分段plot?
MC里用plot画的都是连续的线条,我要画一段一段分开的线条,如何画,我加了if然后plot也不行。比如我之要time>=0910 and time<=1450这一段的ma,怎么画?
源码:
[code]
if time >=1000 and time <=1100 then
plot1( AverageFC( c, 9 ) , "Avg" ) ;
[/code]
设置:
[font=Verdana, 宋体, sans-serif][color=#464646][size=12px]设置指标 -> 样式, 更改画线 Type为 Point or Cross[/size][/color][/font]
[font=Verdana, 宋体, sans-serif][color=#464646]
[/color][/font]
[size=12px][font=Verdana, 宋体, sans-serif][color=#464646]12如何按资金的百分比开仓[/color][/font][/size]
[size=12px][font=Verdana, 宋体, sans-serif][color=#464646]
[/color][/font][/size]
[size=12px][font=Verdana, 宋体, sans-serif][color=#464646][code]
Inputs:
initCapital(100000);
Variables:
RiskPercent(0.3),
TotalEquity(0.0),
SetShareSize(0);
TotalEquity=initCapital+NetProfit+OpenPositionProfit;
SetShareSize= TotalEquity * RiskPercent/Close;
Buy("Entry") SetShareSize shares Next Bar At ................
sell("Exit") All shares Next Bar At ......................
[/code]
[/color][/font][/size] 13[程序代码分享] 计算当日做多的次数
在日内交易中,我们常常需要知道今天作多几次,以下是我的编程方式,与大家分享
[code]
vars:
mp(0),
mpd(0),
myLongNumber(0);
mp = i_CurrentContracts;
mpd = i_MarketPosition;
if date<>date[1] then myLongNumber = 0 else begin
if mpd=1 and mpd[1]=-1 then begin
myLongNumber=myLongNumber[1]+1;
end else begin
if mp>mp[1] and i_MarketPosition>0 then
myLongNumber=myLongNumber[1]+1
else
myLongNumber=myLongNumber[1];
end;
end;
DailyLongNumber = myLongNumber;[/code]
16[编程求助] 出场信号为买入价格获利3%怎么写
[code]
if marketposition<>0 then setprofittarget(entryprice*0.03*bigpointvalue);
[/code]
或
[code]
if marketposition=1 then sell next bar at entryprice*1.03% limit;
[/code]
30一天只交易一次的语法
[code]
vars:go (true);
if marketposition <> 0 then //当有部位后,交易停止
go =False;
If date<>date[1] then // 当换日后,交易开始
go =true;
IF condition and go then //如果买进条件成立而且可以交易就买进
buy("buy") next bar at close;
[/code]
或
[code]
input:TN(1);
var:tradeNum(0);
if date<>date[1] then
tradeNum=0;
if conditions and tradeNum then
tradeNum=tradeNum[1]+1;
buy……;
end;
[/code]
31请问如何在图上显示字?
如果我想在走势图上写字,比如,在买进信号旁边写上“买进做多”,在平仓信号旁边写上“多仓平仓”,但是好像ts/mc没有直接在图上写字的函数,应该如何办呢?
[code]
if marketposition =0 and condition1 then buy("买进作多") next bar at market;
if marketposition =1 and condition2 then sell("多单平仓") next bar at market;
[/code]
36日内交易收盘前出场的写法
以沪深300为例,每日14:50分平仓的写法如下
[code]
if time>=1450 then begin
if marketposition>0 then sell next bar at market;
if marketposition<0 then buytocover next bar at market;
end;
[/code]
页:
[1]