EasyLanguage/PowerLanguage 策略语言研究
- UID
- 2
- 积分
- 2893117
- 威望
- 1396590 布
- 龙e币
- 1496527 刀
- 在线时间
- 13326 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-26
|
EasyLanguage/PowerLanguage 策略语言研究
1止损的函数用什么?
请教前辈,止损应该怎么写?2种情况
1.到价格触及到-5%时。
2.到收盘价触及到-5%时。
以多单的止损为例
1,
- sell next bar at entryprice*0.95 stop;
复制代码
2、if close
2向高手老手请教,在ts中如何实现资金管理?
建议你设置止损,按能接受的止损来设置头寸,就是ANP方式
- AccountBalance = InitialBalance + netprofit;
- DollarRisk = AccountBalance * rate;
- LTT=IntPortion(DollarRisk/stoploss);
复制代码
3[函式介绍] 如何用EL表示期货涨停,跌停价
最近有同学问到这个问题,现整理出来供大家一起参考学习~
由于中国商品期货的涨跌停系数会随着假日时间的变动而变动(中国商品这个感觉很麻烦,需要随时关注交易所公告来进行调整),以下是具体的一个例子的写法:
- 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);
复制代码
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的资料形态为整数时,下次建议可以考虑用
取代
6[程序代码分享] 提供一个移动止损的方法
移动止损的方法有很多,可以控制亏损百分比,或者控制亏损金额,我先抛个砖,大家继续:
- 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;
复制代码
再提供一种方法:
2%止损:
- 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;
复制代码
7当日输N次不交易
做当冲的时候,最怕盘整盘。遇到盘整盘时,顺势系统很容易被修理。
为了避免当日亏损太多次,可以使用 DailyLosers 这个函数
以下是当日输N次不交易的写法
- if DailyLosers(date)<=N then begin
- {code of your entry signal}
- end;
复制代码
8程序代码分享] 直接在POWER EDITOR看系统绩效
常常要不断的改程序,让系统变好。不过当每次做点细小的修改,就要跑一次回侧报告,有点不方便。
尤其有时候只是要让DRAWDOWN变小。
为了让开发过程更容易,我在程式码后段加入下面程式码,这样一来,只要在编译后马上可以看到这次修改是否有让系统变好,不需要再到回侧报告去找。虽然不是很详细,不过有时后对我来说已经足够了,感觉很方便。
- 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;
复制代码
10[程序代码分享] 减仓别忘了加 total 这个保留字
在MC中,第一次建仓或是要加仓时,可以用下面的语法
- buy ("signalName") N contracts next bar at market;
- sellshort ("signalName") N contracts next bar at market;
复制代码
当要减仓时则要用
- sell ("signalName") M contracts total next bar at market;
- buytocover ("signalName") M contracts total next bar at market;
复制代码
如果没有加 total,MC会把你所有仓位都平仓掉。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2893117
- 威望
- 1396590 布
- 龙e币
- 1496527 刀
- 在线时间
- 13326 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-26
|
11编程求助] 如何根据条件分段plot?
MC里用plot画的都是连续的线条,我要画一段一段分开的线条,如何画,我加了if然后plot也不行。比如我之要time>=0910 and time<=1450这一段的ma,怎么画?
源码:
- if time >=1000 and time <=1100 then
- plot1( AverageFC( c, 9 ) , "Avg" ) ;
复制代码
设置:
设置指标 -> 样式, 更改画线 Type为 Point or Cross
12如何按资金的百分比开仓
- 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 ......................
复制代码
|
|
|
|
|
|
|
- UID
- 2
- 积分
- 2893117
- 威望
- 1396590 布
- 龙e币
- 1496527 刀
- 在线时间
- 13326 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-26
|
13[程序代码分享] 计算当日做多的次数
在日内交易中,我们常常需要知道今天作多几次,以下是我的编程方式,与大家分享
- 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;
复制代码
16[编程求助] 出场信号为买入价格获利3%怎么写
- if marketposition<>0 then setprofittarget(entryprice*0.03*bigpointvalue);
复制代码
或
- if marketposition=1 then sell next bar at entryprice*1.03% limit;
复制代码
30一天只交易一次的语法
- 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;
复制代码
或
- input:TN(1);
- var:tradeNum(0);
- if date<>date[1] then
- tradeNum=0;
- if conditions and tradeNum then
- tradeNum=tradeNum[1]+1;
- buy……;
- end;
复制代码
31请问如何在图上显示字?
如果我想在走势图上写字,比如,在买进信号旁边写上“买进做多”,在平仓信号旁边写上“多仓平仓”,但是好像ts/mc没有直接在图上写字的函数,应该如何办呢?
- if marketposition =0 and condition1 then buy("买进作多") next bar at market;
- if marketposition =1 and condition2 then sell("多单平仓") next bar at market;
复制代码
36日内交易收盘前出场的写法
以沪深300为例,每日14:50分平仓的写法如下
- if time>=1450 then begin
- if marketposition>0 then sell next bar at market;
- if marketposition<0 then buytocover next bar at market;
- end;
复制代码 |
|
|
|
|
|
|