Today's the day

向软件大牛炫耀我会焊单片机,向硬件大牛炫耀我会写 Rails,向软硬件大牛炫耀我生物,向软硬件生物大牛炫耀我会折腾期货 -_-bbb

从 EasyLanguage 迁移到 MC .NET (二):发送订单
推特的影响力

从 EasyLanguage 迁移到 MC .NET (三):常用 EasyLanguage 函数写法

galeki posted @ 2012年9月06日 22:28 in 交易 with tags MC-NET , 6062 阅读

常用 EasyLanguage 函数写法

了解了 MC .NET 策略的基本结构,与订单发送的方式之后,理论上就可以写自己想要的策略了,不过要想把原 EL 策略移植过来的话,还要知道 EL 函数在 MC .NET 移植过来的写法才行。

大部分原 EL 函数,都被 MC .NET 打包至类或接口中,名字基本上也没有大变化,在 MC .NET 帮助文件中搜索原函数名称,基本上都能找到大致结果,这里列举一些常用函数的移植写法。

取得图标 K 线信息

在 EL 中,可以通过 Open[x]、Close[x]、High[x]、Low[x] 取得当前或者前 x 根 K 线的价格信息,在 MC .NET 中,这些信息被打包到 Bars 接口中,对应的关系如下(比如取得前一根 K 线的信息):

EasyLanguage MC .NET
Open[1] Bars.Open[1]
Close[1] Bars.Close[1]
High[1] Bars.High[1]
Low[1] Bars.Low[1]
Time[1] Bars.Time[1]
Date[1] Bars.Time[1].Date
Volume[1] Bars.Volume[1]

在 EL 中,经常比较 Date[0] 和 Date[1] 来判断是否来到新的一天,那么在 MC .NET 中就要这样写:

if ( Bars.Time[0].Date != Bars.Time[1].Date )
{

    // new day

}

交易品种信息

当前交易的品种信息,比如 Minmove、BigPointValue、PriceScale 等,也被打包到了 Bars.Info 中,对于的关系如下:

EasyLanguage MC .NET
MinMove Bars.Info.MinMove
PriceScale Bars.Info.PriceScale
BigPointValue Bars.Info.BigPointValue

持仓信息

当前持仓的信息,比如 MarketPosition 等函数,被打包到了 StrategyInfo 接口中,对应的关系如下:

EasyLanguage MC .NET
MarketPosition StrategyInfo.MarketPosition
CurrentContracts Math.Abs( StrategyInfo.MarketPosition )

值得注意的是,在 EL 里 MarketPosition 只包含了 -1、0、1 的方向信息,但是在 MC .NET 中也包含了持仓数量,所以要想获得 EL 中 CurrentContracts 的结果只要简单的取 StrategyInfo.MarketPosition 的绝对值就行了。

自动平仓函数

EL 中的自动平仓函数也被 MC .NET 移植了过来,可以直接使用,方法名称稍微有点改变:

EasyLanguage MC .NET
setstoppostion CurSpecOrdersMode = ESpecOrdersMode.PerPosition;
setstopcontract CurSpecOrdersMode = ESpecOrdersMode.PerContract;
setstoploss(1234) GenerateStopLoss(1234)
setpercenttrailling(1234, 20) GeneratePercentTrailing(1234, 20)
profittarget(1234) GenerateProfitTarget(1234)
breakeven(1234) GenerateBreakEven(1234)
setexitonclose GenerateExitOnClose()

序列变量

在 EL 中,所有自定义的 Vars 变量,都可以通过 vars1[x] 的形式来引用 x 根 K 棒之前的值,如果要想在 MC .NET 也可以这样做的话,步骤如下:

  1. 声明一个 VariableSeries<T> 类型的变量,具体类型要看变量的用途(如果用来保存价格信息就用 double,如果来保存持仓信息就用 int)。
  2. 在 Create 函数中,对这个变量进行初始化。
  3. 在 StartCalc 函数中,设置变量的初始值。
  4. 然后就可以在 CalcBar 函数中按照 EL 的形式使用这个序列变量了,唯一的不同,在于给变量赋值的时候不能直接使用 var1 = x 而是要使用 var1.Value = x。

以 double 类型的序列变量为例:

namespace PowerLanguage.Strategy {
	public class test3 : SignalObject {
		public test3(object _ctx):base(_ctx){}
		
		private VariableSeries<double> var1;
		
		protected override void Create() {
			var1 = new VariableSeries<double>(this);
		}
		protected override void StartCalc() {
			var1.DefaultValue = 0;
		}
		protected override void CalcBar(){
			var1.Value = Bars.Close[0];
			
			if( var1[0] != var1[1] )
			{
				//...
			}
			
		}
	}
}

 

有了这些函数,基本上可以移植大部分 EL 策略了,迁移教程也告一段落。当然这并不是全部,更详细的信息可以参考 MC .NET 编辑器的帮助文件,或是直接在编辑器中查看类或者接口的自动补全,基本上就可以把用法了解个大概。当然更好的方法还是参考 MC .NET 内置策略代码的写法,不过官方说目前的内置策略代码有一部分是自动生成的,所以写法可能冗杂一些,并不一定要完全仿照内置策略的模式来写。

  • 无匹配
Stu 说:
2012年11月11日 16:45

你好很高兴看到您写的关于mc.net的技术文章 我是一名在芝加哥的期货交易员最近我也在研究这个.net平台。希望可以互相交流一下

Avatar_small
galeki 说:
2012年11月12日 03:48

握手~ 我还没敢拿他用来交易,官方也在进一步 beta 中,不过感觉 mc.net 还是挺有前途的。

我的联系方式可以在右上角的“关于”找到哦~

bodak yellow lyrics 说:
2017年11月11日 14:45

This page gives you a lot of information. Thank you!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter