龙听期货论坛's Archiver

龙听 发表于 2018-1-29 15:29

[转载]EasyLanguage/PowerLanguage 策略语言研究

1止损的函数用什么?
请教前辈,止损应该怎么写?2种情况
1.到价格触及到-5%时。
2.到收盘价触及到-5%时。
以多单的止损为例
1、sell next bar at entryprice*0.95 stop;

2、if close<entryprice*0.95 then sell next bar at market;
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);
end;
复制代码
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的资料形态为整数时,下次建议可以考虑用
vars: int myVars(0);
复制代码
取代
vars: myVars(0);
复制代码
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<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
1.jpg



二、图表chart  2.jpg



三、文件file  3.jpg



四、提示音wav  4.jpg



五、信息视窗alertwindow 5.jpg


我们将逐一介绍…
参见附件:  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

首先要把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;
别叫老师,俺才刚上路呢

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
自定一个函数
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

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为例子

在图表上单击右键,选择设置信号
1.jpg


设置 -> Bar内产生委托
2.jpg


启用Bar内产生委托
3.jpg
25easylanguage使用动态链接库(DLL)
听说EL可以通过动态链接库(DLL)调用C#,请问具体操作方法是什么,能举个例子吗?

回复 1# Steven 的帖子

可以参考附件C#并不适合开发 UNMANAGED DLL,
建议还是直接使用C或C++
会比较容易一些


   easylanguage_extension_sdk.pdf

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在右下方跳出错误信習,
并将该分析的状态切换到"关"




26[函式介绍] 程式码中调用交易成本
每次交易的成本包含手续费与滑价,我们可以在程式码中使用commission 以及 slippage 来调用这两个设定,
比方说希望损益平衡就出场观望,可以这样写


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点后,出场并当日不交易




有时候会遇到当日的盘形不适用于系统的交易逻辑,当下最好就是先出场观望。"当日亏损N点后,出场并当日不交易"是系统风险控管的最后一道防线,以下是我的写法,与大家分享
vars:
    dailyInitCapital(0),
    lossPoint(50),
    myCapital(0),
    stopTradeDaily(false);

if date<>date[1] then stoptradeDaily=false;

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;
复制代码

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;
回复 1# franlin 的帖子


  另一种方式也可以
  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訊號

所以在實單使用stoploss要注意萬一setstoploss的價格有到,而buy的點位當天沒到
但setstoploss 卻沒執行
那麼單子在當沖策略的不留倉的平倉點判斷時,會不會正常把部位平倉呢?
我不知道,應該是會,因為if marketposition=-1底下判斷buy,
所以不留倉通常是時間到if time=1340 then buytocover......
既然chart也不會出現stoploss訊號,那應該mc會當做有空單還在倉
雖然說可能1340時的虧損已遠大於18點的好幾十倍.......
註:可是我不曉得當stoploss出場價跟buy的進場價在同一個價位時
實單會不會,也會像我今天這樣buy還會進場
因為我用非實單模擬下去,stoploss 出場價跟buy進場價一樣的話,圖表上是只會出現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 编辑

今天发现达钱中的螺纹换月了,这样会产生有很大的跳空现象,欲解决这个问题,故请问如何根据达钱的逻辑(交易量最大月为热门月)在MC中编写程式实现换月自动平仓的动作呢?  求指点~感激
不好意思我刚没说清楚,我是指每个月份合约的资料接到qm中,比方说螺纹201007、螺纹201008、螺纹201009、螺纹201010、螺纹201011、螺纹201012、螺纹201101...等资料接到qm然后每天在收盘前(比方说14:30后)检查一下目前哪个月份的成交量比较大并决定是否需要转仓。

以目前mc的架构,做自动转仓会比较麻烦,因为必须要不断监控多个月份的合约资料
我会建议用mc写一个转仓的alert,转仓的动作还是要手动
当Alert发出时,可以人为判断一下是否需要转仓
毕竟有时候可能出现今天螺纹201011量最大,明天螺纹201012,后天又201011量最大,
这样程式自动转仓会导致许多转仓的问题。
35[软件使用讨论] 如何处理隔夜仓
我们先看图片:

现在MC好像不能智能判断持仓

SA模式下,关掉电脑,再登陆点击SA自动交易
这时候所有的信号都清空了,没法判断已有仓位

如何解决我图中的问题
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;

页: [1]