: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

EasyLanguage/PowerLanguage 策略语言研究

EasyLanguage/PowerLanguage 策略语言研究

1止损的函数用什么?

请教前辈,止损应该怎么写?2种情况

1.到价格触及到-5%时。
2.到收盘价触及到-5%时。

以多单的止损为例
1,
  1. sell next bar at entryprice*0.95 stop;
复制代码



2、if close

2向高手老手请教,在ts中如何实现资金管理?
建议你设置止损,按能接受的止损来设置头寸,就是ANP方式


  1. AccountBalance = InitialBalance + netprofit;
  2. DollarRisk = AccountBalance * rate;
  3. LTT=IntPortion(DollarRisk/stoploss);
复制代码



3[函式介绍] 如何用EL表示期货涨停,跌停价
最近有同学问到这个问题,现整理出来供大家一起参考学习~

由于中国商品期货的涨跌停系数会随着假日时间的变动而变动(中国商品这个感觉很麻烦,需要随时关注交易所公告来进行调整),以下是具体的一个例子的写法:


  1. Inputs:begintime(1100608),endtime(1100912),abnormalratio(0.2),normalratio(0.1);

  2. vars:upprice(0),downprice(0);

  3. if time>=begintime and time<=endtime
  4.    then begin
  5.        upprice=Closed(1)*(1+abnormalratio);
  6.        downprice=Closed(1)*(1-abnormalratio);
  7.    end  
  8.    else  begin
  9.        upprice=Closed(1)*(1+normalratio);
  10.        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的资料形态为整数时,下次建议可以考虑用

  1. vars: int myVars(0);
复制代码



取代

  1. vars: myVars(0)
复制代码



6[程序代码分享] 提供一个移动止损的方法
移动止损的方法有很多,可以控制亏损百分比,或者控制亏损金额,我先抛个砖,大家继续:


  1. stop1=0.02; //2个百分点止损
  2. myStop=2990;//根据商品的价格不同而定义
  3. if marketposition >0 then begin
  4. if c*(1-stop1) > myStop then myStop = c*(1-stop1);
  5. end;

  6. if marketposition <0 then begin
  7. if c*(1+stop1) < myStop then myStop = c*(1+stop1);
  8. end;

  9. if marketposition >0 and c < myStop then sell next bar at market;
  10. if marketposition <0 and c > myStop then buytocover next bar at market;
复制代码



再提供一种方法:

2%止损:


  1. if marketposition>0 and entryprice>close and (entryprice-close)/entryprice>=2% then
  2. sell next bar at market;

  3. if marketposition<0 and entryprice=2% then
  4. buytocover next bar at market;
复制代码



7当日输N次不交易
做当冲的时候,最怕盘整盘。遇到盘整盘时,顺势系统很容易被修理。
为了避免当日亏损太多次,可以使用 DailyLosers 这个函数
以下是当日输N次不交易的写法


  1. if DailyLosers(date)<=N then begin
  2.         {code of your entry signal}
  3. end;
复制代码



8程序代码分享] 直接在POWER EDITOR看系统绩效
常常要不断的改程序,让系统变好。不过当每次做点细小的修改,就要跑一次回侧报告,有点不方便。
尤其有时候只是要让DRAWDOWN变小。

为了让开发过程更容易,我在程式码后段加入下面程式码,这样一来,只要在编译后马上可以看到这次修改是否有让系统变好,不需要再到回侧报告去找。虽然不是很详细,不过有时后对我来说已经足够了,感觉很方便。


  1. once(LastBarOnChart_s) begin
  2.         messagelog("   Initial Capital: ",InitialCapital);
  3.         messagelog("        Net Profit: ",netprofit);
  4.         messagelog("      Gross Profit: ",grossprofit);
  5.         messagelog("        Gross Loss: ",grossloss);
  6.         messagelog("      Max Drawdown: ",maxiddrawdown);
  7.         messagelog("Max Contracts Held: ",MaxContractsHeld);
  8.         messagelog("   MaxConsecWinner: ",MaxConsecWinners);
  9.         messagelog("    MaxConsecloser: ",maxconseclosers);
  10.         messagelog("        Commission: ",commission);
  11.         messagelog(" Largest Win Trade: ",LargestWinTrade);
  12.         messagelog("Largest Loss Trade: ",largestlostrade);
  13. end;
复制代码



10[程序代码分享] 减仓别忘了加 total 这个保留字

在MC中,第一次建仓或是要加仓时,可以用下面的语法

  1. buy ("signalName") N contracts next bar at market;
  2. sellshort ("signalName") N contracts next bar at market;
复制代码



当要减仓时则要用

  1. sell ("signalName") M contracts total next bar at market;
  2. buytocover ("signalName") M contracts total next bar at market;
复制代码



如果没有加 total,MC会把你所有仓位都平仓掉。

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

11编程求助] 如何根据条件分段plot?
MC里用plot画的都是连续的线条,我要画一段一段分开的线条,如何画,我加了if然后plot也不行。比如我之要time>=0910 and time<=1450这一段的ma,怎么画?

源码:

  1. if time >=1000 and time <=1100 then
  2. plot1( AverageFC( c, 9 ) , "Avg" ) ;
复制代码



设置:

设置指标 -> 样式, 更改画线 Type为 Point or Cross


12如何按资金的百分比开仓


  1. Inputs:
  2. initCapital(100000);
  3. Variables:
  4. RiskPercent(0.3),

  5. TotalEquity(0.0),
  6. SetShareSize(0);
  7. TotalEquity=initCapital+NetProfit+OpenPositionProfit;
  8. SetShareSize= TotalEquity * RiskPercent/Close;
  9. Buy("Entry") SetShareSize shares Next Bar At ................
  10. sell("Exit") All shares Next Bar At ......................
复制代码

如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

13[程序代码分享] 计算当日做多的次数
在日内交易中,我们常常需要知道今天作多几次,以下是我的编程方式,与大家分享

  1. vars:
  2.         mp(0),
  3.         mpd(0),
  4.         myLongNumber(0);
  5.       
  6. mp = i_CurrentContracts;
  7. mpd = i_MarketPosition;

  8. if date<>date[1] then myLongNumber = 0 else begin
  9.         if mpd=1 and mpd[1]=-1 then begin
  10.                 myLongNumber=myLongNumber[1]+1;
  11.         end else begin
  12.                 if mp>mp[1] and i_MarketPosition>0 then
  13.                         myLongNumber=myLongNumber[1]+1
  14.                 else
  15.                         myLongNumber=myLongNumber[1];
  16.         end;
  17. end;

  18. DailyLongNumber = myLongNumber;
复制代码



16[编程求助] 出场信号为买入价格获利3%怎么写

  1. if marketposition<>0 then setprofittarget(entryprice*0.03*bigpointvalue);
复制代码





  1. if marketposition=1 then sell next bar at entryprice*1.03% limit;
复制代码



30一天只交易一次的语法

  1. vars:go (true);

  2. if marketposition <> 0 then    //当有部位后,交易停止

  3. go  =False;

  4. If date<>date[1] then          // 当换日后,交易开始

  5. go =true;


  6. IF condition and go then       //如果买进条件成立而且可以交易就买进   

  7.    buy("buy") next bar at close;
复制代码





  1. input:TN(1);
  2. var:tradeNum(0);
  3. if  date<>date[1]  then
  4. tradeNum=0;
  5. if conditions and tradeNum then
  6. tradeNum=tradeNum[1]+1;
  7. buy……;
  8. end;
复制代码



31请问如何在图上显示字?
如果我想在走势图上写字,比如,在买进信号旁边写上“买进做多”,在平仓信号旁边写上“多仓平仓”,但是好像ts/mc没有直接在图上写字的函数,应该如何办呢?

  1. if marketposition =0 and  condition1 then buy("买进作多") next bar at market;

  2. if marketposition =1 and condition2 then sell("多单平仓") next bar at market;
复制代码



36日内交易收盘前出场的写法
以沪深300为例,每日14:50分平仓的写法如下


  1. if time>=1450 then begin
  2.      if marketposition>0 then sell next bar at market;
  3.      if marketposition<0 then buytocover next bar at market;
  4. end;
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表