移动止损的方法有很多,可以控制亏损百分比,或者控制亏损金额,我先抛个砖,大家继续:
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<close and (close-entryprice)/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;
复制代码
|
本主题由 futuregirl 于 2010-7-15 15:55 设置高亮
收藏 分享当Easylanguage识别出某种信号后,可以有五种方式向你传递消息,请选择自己喜欢的: 一、控制台output 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
二、图表chart 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
三、文件file 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
四、提示音wav 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
五、信息视窗alertwindow 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
我们将逐一介绍…
参见附件: 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;"> Easylanguage的五种输出方式.rar 2010-8-14 14:47 上传
下载 (159.71 KB)
|
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会把你所有仓位都平仓掉。
本主题由 futuregirl 于 2010-7-15 15:24 设置高亮
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" ) ;
setting:
设置指标 -> 样式, 更改画线 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 ......................
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;
复制代码
14[编程求助] 不等next bar就买卖?
MC里关于买卖的操作,都是在 buy/sellshort next bar 上实现的,最早的入市也是buy/sellshrot this bar on close来实现的。设想:把data1的时间周期设置成1分钟甚至tick图,然后data2来做正常的系统条件判断,这样是不是就能实现类似于条件满足就马上买入卖出的操作呢?
求Max老师详细的说明下这个用法,最好能配合着例子,我想有很多人想要了解这点的 ...
Dannie 发表于 2010-8-27 08:45 策略语言研究" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; list-style: none;">
首先要把IntraBarOrderGeneration打开(在Format Signal里的Intra-bar Order Generation),接著程式码必须要判断目前的tick是属于当根bar的哪个位置(可以在barStatus这个保留字得知)。这样程式码就会每根tick就会执行一次。
15在盤中常常發現某些整點時間或特定時間週期會突然有許多系統單同時出來
特別是長週期的突破系統,通常會在突破後的下一個整點時間全數出唬
因此出現滑價或買不到好價位
針對這個問題,可以用語法來解決,讓你比別人快幾秒進場,甚至可以吃點別人的豆腐
一般程序化交易系統都往往會在這根bar結束(buy this bar at close)或是下根bar開始(buy next bar at open)時送出委託單,如果你可以在這根bar結束前就進場,自然比別人更佔便宜!
這裡把送出委託單的時間在往前移10秒,必須啟動IntrabarOrderGeneration才能正常咦鳌
在Multicharts裡設置 Format(格式)->Signal(信號)->Fomat(設置)->IntrabarOrderGeneration(Bar內產生委託)
語法如下,請回覆本帖即可觀看。
本帖隐藏的内容- vars:
- intrabarpersist waitingForBuy(false),
- intrabarpersist mySec(0),
- intrabarpersist myEntrySec(0);
- if barstatus=0 then begin
- mySec = currenttime_s;
- myEntrySec = currenttime_s+barinterval*60-10;
- end else begin
- mySec = mySec[1];
- myEntrySec = myEntrySec[1];
- end;
- if {your entry condition} then begin
- waitingForBuy = true;
- end;
- if waitingForBuy and currenttime_s>=myEntrySec then begin
- buy next bar at open;
- waitingForBuy =false;
- end;
复制代码
16[编程求助] 出场信号为买入价格获利3%怎么写
也可以試試
- if marketposition<>0 then setprofittarget(entryprice*0.03*bigpointvalue);
复制代码
本帖最后由 samwjwj 于 2010-9-1 12:49 编辑
if marketposition=1 then sell next bar at entryprice*1.03% limit;
别叫老师,俺才刚上路呢策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
|
17函式介绍] entryName与exitName 的使用
当系统越来越大,进出场信号也会越来越多,如何知道目前进场是哪个信号所触发呢?可以使用 entryName 以及 exitName 这两个保留字,这样就能依照不同的进场信号来做不同的处理。 |
18[函式介绍] BarStatus
想请问各位高手,若是在多单的情况下,当日盘中价格比昨日收盘价低2%以上,则盘中在( 昨日收盘价*0.98 )这个价位自行停损,该怎么写?
多谢! P.s假設使用日线的狀況常常我们都用5分线或15分线,但实际在交易时,市场的资料是不断地近来,为了抓住下单的先机,可以启动 Intra-ber order generation,并且在程序中调用不断进来的TICK资料。BarStatus这个程序是让我们知道目前这个TICK是当下Chart中这跟Bar的TICK形态,回传值的意义如下:
- 2 = the closing tick of a bar
- 1 = a tick within a bar
- 0 = the opening tick of a bar (relevant only for strategies using Open Next Bar order actions)
- -1 = an error occurred
19[函式介绍] equity有關的保留字哂门c分析 有朋友问到在easy language可不可以用equity来做分析运用,答案是肯定的。介绍几个保留字的运用:
capital:权益数
openpositionprofit:未平仓损益
i-closedequity :平仓后累计损益
如果要计算30跟bar的权益数标准差语法如下:
vars: stv(0);
stv=StdDev(capital,30);
如果要计算30跟bar的平均权益数语法如下:
vars:average_capital(0);
average_capital =average(capital,30);
|
上边的capital与i-closedequity这两个保留字,是不是只在ts8以上版本有效?好像别的地方都没有相关的信息。 ...
domodo 发表于 2010-8-26 11:20 策略语言研究" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; list-style: none;">
自定一个函数
capital = InitialCapital + i_OpenEquity;
找不到 closedequity 可以试试 i_ClosedEquity
20使用不同時間尺度的data (以同時使用5Min線與60分線為例) 想像有一個系統是這樣的,當60分線的rsi處於鈍化狀態(三根bar大於70)且5Min線的rsi在超賣區(小於30)則進場作多...在MultiChart要怎麼實現呢?這裡需要用到兩個data 5分線與60分線。首先把兩個data都加到圖表中,一個是五分線,一個是30分線
- value1 = rsi (c,20);
- value2 = rsi(c of data2, 20) of data2;
- if countif(value2>70,3) of data2 =3 and value1<30 then
- buy next bar at market;
复制代码
21程序代码分享] ELCollection for Multicharts
array不够用吗?可以试试前人开发的外部函数,让Multicharts也能使用List与Map两种资料型态。
ELCollection.rar
| 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">ELCollection.rar (167.24 KB)
22[程序代码分享] EA能帮我实现下面的想法吗? 如果现在是13:29分,我手中的策略是如果下午的行情开盘高于上午收盘时以上午收盘的价格+1点买入,但是如果出现高开的情况,我想撤单,然后现价买入,可否实现? 回复 2# Lee 的帖子
将你的文自转成Easy Language,我的写法如下 - if time=1130 then value1=c;
- if time=1330 and o>value1 then buy next bar at c[1]+1 limit;
复制代码
对于高开的情况,可能需要更精确的定义,比方说什磨情况下叫高开?或是说这跟bar没做到,下跟bar市价买进? 23[程序代码分享] Better Volume Indicator
Inputs: LowVol(True), ClimaxUp(True), ClimaxDown(True), Churn(True);
Variables: BarColor(Cyan),UseUpTicks(false);
If BarType > 1 and UseUpTicks=false then begin
If C > O and Range <> 0 then Value1 = (Range/
(2*Range+O-C))*UpTicks;
If C < O and Range <> 0 then Value1 = ((Range+C-O)/
(2*Range+C-O))*UpTicks;
If C = O then Value1 = 0.5*UpTicks;
Value2 = UpTicks-Value1;
End;
If BarType <= 1 and UseUpTicks then begin
Value1 = UpTicks;
Value2 = DownTicks;
End;
Value3 = AbsValue(Value1+Value2);
Value4 = Value1*Range;
Value5 = (Value1-Value2)*Range;
Value6 = Value2*Range;
Value7 = (Value2-Value1)*Range;
If Range <> 0 then begin
Value8 = Value1/Range;
Value9 = (Value1-Value2)/Range;
Value10 = Value2/Range;
Value11 = (Value2-Value1)/Range;
Value12 = Value3/Range;
End; 24
[软件使用讨论] 盘中止损的程序语言?
|
想请问各位高手,若是在多单的情况下,当日盘中价格比昨日收盘价低2%以上,则盘中在( 昨日收盘价*0.98 )这个价位自行停损,该怎么写?
多谢! P.s假設使用日线的狀況 我来试试看
- if market position =1 and close[0]<close[1]*0.98
- then sell next bar at market;
复制代码
要在软件中设定设置inter-bar交易
以Multicharts为例子
在图表上单击右键,选择设置信号
策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
设置 -> Bar内产生委托
策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
启用Bar内产生委托
策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">
25easylanguage使用动态链接库(DLL) 听说EL可以通过动态链接库(DLL)调用C#,请问具体操作方法是什么,能举个例子吗?
回复 1# Steven 的帖子
可以参考附件C#并不适合开发 UNMANAGED DLL,
建议还是直接使用C或C++
会比较容易一些
easylanguage_extension_sdk.pdf
| 策略语言研究" style="margin: 0px; padding: 0px; border: 0px; list-style: none;">easylanguage_extension_sdk.pdf (247.97 KB) 回复 1# Steven 的帖子
举例
external: "C:abccount.dll", int, "checkname",string;
"C:abccount.dll" 外部档案存放的位置
int DLL传出值(整数)
"checknam" DLL输出名(自定义)
string DLL收到的值 (字串)
if value1 = checkname("NO1") then
............................
25 程序代码分享] 判断图形的时间尺度,并在程式码中加入防呆机制 本帖最后由 Max 于 2010-6-17 11:58 编辑
当我们用EL开发时,有些观念只适用在5分K线,有些观念只适用于日线,为了避免使用错误,我们可以在程式编码里面加入一些防呆机制,如下
- once begin
- if bartype<>0 then
- raiseruntimeerror("This indicator only for tick bar chart");
- end;
复制代码
这里用到两关键字,bartype与raiseruntimeerror
bartype回传直代表的意义如下
0 = TickBar
1 = Intraday
2 = Daily
3 = Weekly
4 = Monthly
5 = Point & Figure
至于raiseruntimeerror这个程序会让MULTICHARTS在右下方跳出错误信習,
并将该分析的状态切换到"关"
|
|
|