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);
end;
复制代码
4软件使用讨论] 如何将Tb代码转为MC代码
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变小。
在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 ......................
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
首先要把IntraBarOrderGeneration打开(在Format Signal里的Intra-bar Order Generation),接著程式码必须要判断目前的tick是属于当根bar的哪个位置(可以在barStatus这个保留字得知)。这样程式码就会每根tick就会执行一次。
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;
别叫老师,俺才刚上路呢
多谢! 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分析
上边的capital与i-closedequity这两个保留字,是不是只在ts8以上版本有效?好像别的地方都没有相关的信息。 ...
domodo 发表于 2010-8-26 11:20
自定一个函数
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
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
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
[软件使用讨论] 盘中止损的程序语言?
once costPoint = (slippage+commission)/bigpointvalue;
if marketposition>0 and c<=(i_AvgEntryPrice+costPoint) then begin
sell ("BrkEven_EL") next bar at market;
end;
if marketposition<0 and c>=(i_AvgEntryPrice+costPoint) then begin
buytocover ("BrkEven_ES") next bar at market;
end;
复制代码
27
本帖最后由 Max 于 2010-6-22 12:30 编辑
回复 1# futuregirl 的帖子
在 easylanguage 中,ATR的调用函数为AvgTrueRange,以多单止损为例,我的语法如下,提供给大家参考
if marketposition>0 and c cross under (entryprice-AvgTrueRange(20)) then
sell next bar at market;
复制代码
28 出场后观望N根BAR在作下一笔交易
常常我们会希望出场后先观望一阵子,在作进场的判断,以下是我的写法,这方法只适用于日内交易,跟大家分享
vars:
waitingBar(0), NBars(20);
if ExitsToday(date)>0 and marketposition=0 then
waitingBar = barssinceexit(1)
else
waitingBar = 99999;
if waitingBar>Nbars then begin
{your entry code}
end;
复制代码
29[程序代码分享] 当日亏损N点后,出场并当日不交易
mycapital = InitialCapital + i_OpenEquity;
if date<>date[1] then
dailyInitCapital = mycapital
else
dailyInitCapital = dailyInitCapital[1];
if mycapital-dailyInitCapital<-lossPoint*bigpointvalue then begin
if marketposition>0 then sell ("LossLimit_EL") next bar at market;
if marketposition<0 then buytocover ("LossLimit_ES") next bar at market;
stoptradeDaily = true;
end;
if stopTradeDaily=false then begin
{your entry code}
end;
复制代码
另一种方式也可以
if conditions and EntriesToday(date)=0 then begin
end;
EntriesToday 需要有输入日其当作参数
然后回传该日其的进场次数
input:TN(1);
var:tradeNum(0);
if date<>date[1] then
tradeNum=0;
if conditions and tradeNum<TN 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;
32setstoploss實單計算
環境6.0 beta2 ,實單,下單版2.0.0.1,limit+stop不預掛
結果setstoploss(金額)
金額含手續費及滑價設定值
計算進場價為order and position tracker/strategy orders:Filled,或者是進場根open價其中之一(我不確定哪一個,測試時剛好一樣)
因為我看回測清單是的進場價<>Filled=進場根open價
也就是假設filled上(或進場根open價)都是寫8000點,而手續費及滑價設定共1000,金額填4000
多單停損價格=8000-(4000-1000*2)/200=7990
經費有限只測試一次,若有朋友不同結果還請指點,謝謝
且實單測試時,若setstoploss價格與一般"進場"停損單指令相同或比進場停損單價格更佳時
setstoploss不會執行,會只有做進場停損單
例如8000為空單進場價
setstoploss最外層丟在8018價格要執行停損
if marketposition=-1 then buy next bar at 8000+20 stop;進場停損單(應該只有新多單,但結果不是)
實際結果是下根k棒價格上升到8020
setstoploss的8018不會執行,空單會在價格來到8020時停損在8020,然後再反向多單(也就是停損後反多單一筆)
我的chart圖上在8018也沒有出現stoploss訊號,是出現buy訊號
這時候我們可以來測試setstoploss在模擬回測時單怎麼變化
8000為空單進場價
setstoploss最外層丟在8018價格要執行停損
if marketposition=-1 then buy next bar at 8000+20 stop;進場停損單(新多單,結果正確)
在下根k棒價格上升到8020,在回測的清單中可以發現
平倉stop loss會出現!!stoploss8018
buy也會出現,多單進在8020
也就是說chart圖會出現stoploss訊號及buy訊號
我有把今日的order and position tracker 的圖傳給客服
剛剛我覺得好像是發現問題了就是
圖上的stop loss的stop價位是錯的,mc顯示是錯的因為它圖上是以空單filled價去計算的話
才會等於我設定的setstoploss出場價格,但是!
"回測報告空單進場價" 不等於 "order and position tracker 空單filled價"
也就是說假設setstoploss出場價格為20點
那麼 "order and position tracker 空單filled價"為8000,"回測報告空單進場價" 為8002時
order and position tracker 的 stoploss 會顯示8020(但不以這計算)
而實際上以8002+20=8022來設定stoploss出場價(雖以此計算但order and position tracker 顯示的是filled空單進場的結果)
那麼實單的一切謎團就解開了....
不妨用Algo模擬交易所試試看,就不用擔心測試停損單會賠錢了...
33程序代码分享] KD指標牛市背離買進
kd牛市背離買進的寫法如下
vars:myK(0),myD(0);
myK = fastk(20);
myD = FastD(20);
if countif(myK>80,5)=5 and countif(myD>80,5)=5 then
buy next bar at market;
复制代码
34
] 请教各位大大,如何编写MC换月自动平仓的语法
本帖最后由 eric 于 2010-7-14 10:38 编辑