量化投资_EasyLanguage/PowerLanguage教学课程__【第一篇基础】__【第二十一章策略交易_策略委托】

第二十一章:策略交易_策略委托

第一节:介绍

  在编写信号公式是,完整的策略委托语句要指定买卖时间、买卖状态、买卖价格、委托信息等。在EL中这些相关的委托命令是最为常用的。另外,在MC运行信号时,具有Bar内交易和非Bar内交易的设置(关于Bar内和非Bar内交易在后面有专题讲到),针对这些问题EL给出设置止盈止损的Set系列出场函数,但是这些Set函数之能用于回测。在实际交易中,触发的先后顺序可能会有相对应的实际问题。Set系列函数在触发价和执行价的计算会受策略属性中所设定的手续费和滑价的影响,在后面的关于策略属性的设置中会详细讲到这部分的设置。

 

第二节:常规交易函数

2.1 四种交易函数

  Buy

# 语法

语法 Buy [(“EntryLabel”)] [TradeSize] EntryType;
中括号([])内的参数是任选的。

参数
EntryLabel——可选用参数,字符串表达式;给当次进场的信号一个专属名称。信号名称会显示在进场箭头下方,出场信号可以因此指定搭配有专属名称的进场信号,更多信息请看Sell。
若 EntryLabel 未指定,则会依进场语句的先后顺序依序命名为”Buy”、”Buy#
1”、”Buy#2”…… TradeSize——可选用参数,数值表达式;指定买进的数量,必须搭配 Share、Shares、Contract 或 Contracts 任一个使用。 若 TradeSize 为 0 或负值,并不会建立任何多头仓位,但现有的空头仓位会被平仓。 若 TradeSize 未指定,交易数量将会是使用者在策略属性的属性中设定的委托数量。 EntryType——必需参数;指定进场的时间和价位,一共有四种类型: 1)This Bar [On] Close其中:On 是跳跃字,可省略即在当根 Bar 的收盘价 Close 多头进场,并标记 Buy 的箭头。 2) Next Bar [At] Open 或 Next Bar [At] Market其中:关键字”Open”和”Market”可以互换At 是跳跃字,可省略即在下根 Bar 的开盘价 Open 多头进场,并标记 Buy 的箭头。 3) Next Bar [At] Price Limit其中:Price 是数值表达式,指定限价进场价格At 是跳跃字,可省略若下根 Bar 的第一笔价格小于或等于 Price,则在下根 Bar多头进场,并标记 Buy 的箭头;
若下根 Bar 内并无价格满足条件,则委托会被取消。
4) Next Bar [At] Price Stop其中:Price 是数值表达式,指定停止价进场价格At 是跳跃字,可省略若下根 Bar 的第一笔价格大于或等于 Price,则在下根 Bar多头进场,并标记 Buy 的箭头;
若下根 Bar 内并无价格满足条件,则委托会被取消。

# 示例

在当根 Bar 结束时,以市价建立使用者指定数量的多头仓位:
Buy This Bar On Close;

在下根 Bar 开始时,以市价建立一手多头仓位,并标记进场名为”Entry”:
Buy (“Entry”) 1 Share Next Bar At Open;

在下根 Bar 开始时,以市价建立一手多头仓位,并标记进场名为”Entry”:
Buy (“Entry”) 1 Contract Next Bar At Market;

在下根 Bar开始时,以小于等于 100 的价格建立 2 手多头仓位:
Buy 2 Shares Next Bar At 100 Limit;

在下根 Bar 开始的价格大于等于 50 时,以市价建立 10 手多头仓位:
Buy 10 Contracts Next Bar At 50 Stop;

# 说明

  建立一个多头仓位。 进场的点位会在图表上以箭头和价位标示。箭头表示进场时间,价位表示进场价格。在多头进场箭头的下方,有标签显 示进场名称和仓位数量。 委托会在参数指定的点位执行,若委托在指定的 Bar 内无法成 交,该笔委托将被取消。 当一个 Buy 指令成交时,其他持有的空头仓位,将会被平仓。如果当前有空头仓位会表现为平空后开多,如果无空头仓位,直接表现为开仓。在MC12中可以设置相关独立开仓,但是不常用。也根据具有情况有差别,SellShort同理

 

  BuyToCover

# 语法

语法
BuyToCover [(“ExitLabel”)] [From Entry(“EntryLabel”)]
[ TradeSize[Total]] Exit;
或:
Buy To Cover [(“ExitLabel”)] [From Entry(“EntryLabel”)]
[ TradeSize[Total]] Exit; 

参数
ExitLabel——可选用参数,字符串表达式;予当次出场信号一个专属名称。信号名称会显示在出场箭头下方。若 ExitLabel 未指定,则会依出场信号语句的先后顺序依序命名为”Cover”、”Cover#1”、”Cover#2”……
EntryLabel——可选用参数,字符串表达式;表示出场信号是 针对特定 EntryLabel 名称的进场信号;进场信号名称须紧连在From Entry 之后,From 是跳跃字,可省略。 一个出场信号仅能指定一个名称进场信号。更多信息请看 SellShort 若 EntryLabel 未指定进场信号名称,则所有的空头仓位都将会被平仓。 TradeSize——可选用参数,数值表达式;指定买平的数量,必须搭配 Share、Shares、Contract 或 Contracts 任一个使用。默认(未加 Total),TradeSize
参数指定的数量会平掉每一个空头进场语句的仓位。如果 TradeSize 后加上 Total,只会平仓 TradeSize 参数指定的数量,忽略空头进场数量。指定数量超过空头持仓,
则全部平仓。在依进场信号的顺序平仓,即先进先出。 若 TradeSize 未指定,将会平仓全部的空头进场。
Exit——必需参数;指定出场的时间和价位,一共有四种类型:
1)This Bar [On] Close 其中:On 是跳跃字,可省略即在当根 Bar 的收盘价 Close 买平出场,并标记 Cover 的箭头。 2) Next Bar [At] Open 或 Next Bar [At] Market 其中:关键字”Open”和”Market”可以互换At 是跳跃字,可省略即在下根 Bar 的开盘价 Open 买平出场,并标记 Cover 的箭头。 3) Next Bar [At] Price Limit 其中:Price 是数值表达式,指定限价出场价格At 是跳跃字,可省略若下根 Bar 的第一笔价格小于或等于 Price,则在下根 Bar买平出场,并标记 Cover 的箭头;若下根 Bar 内并无价格满足 条件,则委托会被取消。 4) Next Bar [At] Price Stop 其中:Price 是数值表达式,指定停止价出场价格At 是跳跃字,可省略若下根 Bar 的第一笔价格大于或等于 Price,则在下根 Bar买平出场,并标记 Cover 的箭头;若下根 Bar 内并无价格满足 条件,则委托会被取消。

# 示例

在当根 Bar 结束时,以市价平仓所有的空头仓位,并标识出场为”Complete Exit”:
BuyToCover (”Complete Exit”) This Bar On Close;

在下根 Bar 开始时,以市价平仓所有以”Original Entry” 命名的空头进场仓位:
BuyToCover From Entry (“Original Entry”) Next Bar At Market;

在下根 Bar 开始时,以市价平仓 10 手以”Entry” 命名的空头进场仓位:
BuyToCover Entry (“Entry”) 10 Contracts Next Bar At Market;

在下根 Bar 开始时,对每个空头进场仓位以市价平仓 5 手:
BuyToCover 5 Contracts Next Bar At Market;

无论有多少空头进场仓位,在下根 Bar 开始时,以小于或等于100 的价位,平仓 1 手:
BuyToCover 1 Share Total Next Bar At 100 Limit;

在下根 Bar 开始时,以大于或等于 50 的价位,平掉所有空头仓位:
BuyToCover Next Bar At 50 Stop;

# 说明

  全部或部分平仓特定或全部的空头仓位。 当一个 Buy 指令成交时,其他持有的空头仓位,将会被平仓。 出场的点位会在图表上以箭头和价位标示。箭头表示出场时 间,价位表示出场价格。在空头出场箭头的下方,有标签显 示出场名称和仓位数量。 委托会在参数指定的点位执行,若委托在指定的 Bar 内无法成 交,该笔委托将被取消。

 

  SellShort

# 语法

# 示例

# 说明

  相关内容同Buy不在举例说明,表示为开空操作,与Buy正好相反。

 

  BuyTocover

# 语法

# 示例

# 说明

  相关内容同步Sell不在举例说明,表示为平空操作,与Sell正好相反。

 

2.2 下单模式

  Limit

# 语法

语法 At Price Limit
参数 Price——数值表达式,指定委托的限价单价格
At——跳跃字,可省略

# 示例

在下根 Bar 开始时,以小于或等于 100 的价格买进:
Buy Next Bar At 100 Limit;

在下根 Bar 开始时,以大于或等于 50 的价格卖出:
SellShort Next Bar At 50 Limit;

# 说明

  在策略进场或出场的语句中使用,为进出场指定一个限价价 格,即限价单委托。 限价单会在指定的价格或更优的价格成交。限价单的买单成 交不会高于使用者指定的价格,卖单成交价不会低于使用者 指定的价格。

 

  Market

# 语法

语法 At Market
参数 At——跳跃字,可省略

# 示例

在下根 Bar 开始时,以市价建立使用者指定数量的多头仓位:
Buy Next Bar At Market;

# 说明

  在策略进场或出场的语句指定市价单委托。 买进市价单会在市场的委托价或更高的价格成交。卖出市价 单会在市场的委托价或更低的成交。

 

  Stop

# 语法

语法 At Price Stop
参数 Price——数值表达式,指定委托的停止单价格
At——跳跃字,可省略

# 示例

在下根 Bar 开始时,以小于或等于 100 的价格卖出:
Sell Next Bar At 100 Stop;

在下根 Bar 开始时,以大于或等于 50 的价格买进:
BuyToCover Next Bar At 50 Stop;

# 说明

  在策略进场或出场的语句中使用,为进出场指定一个停止价 价格,即停止单委托。 停止单会在指定的价格或更差的价格(滑价)成交。滑价会导致 买在更高的价格或是卖在更低的价格。

 

  Lower

# 语法

语法 At Price Or Lower
参数 Price——数值表达式,指定的基准价
At——跳跃字,可省略
注意
At Price Or Lower:
当和 Buy 或 BuyToCover 一起用时相当于 Limit;
当和 Sell 或 SellShort 一起用时则相当于 Stop。

# 示例

在下根 Bar 开始时,以小于或等于 100 的价格买进:
Buy Next Bar At 100 Or Lower;

在下根 Bar 开始时,以小于或等于 50 的价格卖出:
SellShort Next Bar At 50 Or Lower;

# 说明

  使用在策略的进场或出场指令中,指定一个进场或出场的价 格范围,价格前面必须要跟 Or

 

  Higher

# 语法

语法 At Price Or Higher
参数 Price——数值表达式,指定的基准价
At——跳跃字,可省略
注意
At Price Or Higher:
*当和 Sell 或 SellShort 一起用时相当于 Limit;
*当和 Buy 或 BuyToCover 一起用时则相当于 Stop。

# 示例

在下根 Bar 开始时,以大于或等于 100 的价格买进一手:
Buy 1 Contract Next Bar At 100 Or Higher;

在下根 Bar 开始时,以大于或等于 50 的价格卖出一手:
SellShort 1 Contract Next Bar At 50 Or Higher;

# 说明

  使用在策略的进场或出场指令中,指定一个进场或出场的价 格范围,价格前面必须要跟 Or

 

2.3 交易相关

  Total

# 语法

语法 TradeSize Shares Total
参数 TradeSize——数值表达式,指定委托的数量

# 示例:

若有三笔多头进场仓位,依序为一手,一手,三手,语句为:
Sell 3 Shares Total Next Bar At Market;
则:剩余仓位分别为 0 手,0 手,两手,共平仓 3 手。
若有三笔多头进场仓位,依序为一手,一手,三手,语句为: Sell
3 Shares Next Bar At Market; 则:剩余仓位为 0 手,0 手,0 手,共平仓 5 手。

# 说明

  用在策略出场陈述式中,指定要平仓的总手数。若有躲避进场仓位,依据先进先出的顺序平仓。若干位使用Total时,则每笔机场仓位都会平仓相同手数的仓位。其表现为依据手数+次数平仓。具体过程表现可能极为相似,主要差别在于剩余仓位上的表现。加入Total其实际表现为平仓几次,未加Total表现为平仓多少手。

 

  Entry

# 语法

语法 From Entry(“EntryLabel”)
参数 EntryLabel——字符串表达式;指定要平仓的进场信号名称
From——跳跃字,可省略

# 示例

在下根 Bar 开始时,以市价平仓所有以”Original Entry” 命名的
多头仓位:
Sell From Entry (“Original Entry”) Next Bar At Open;

# 说明

  使用在策略的出场语句中,指定进场信号名称 EntryLabel。一 个出场信号仅能搭配一个进场信号;更多请看Buy或Sellshort。在进行下单时,会有备注下单提示信息部分,这个就是根据这个提示信息进行操作。

 

  All

# 语法

语法 All Contracts 或 All Shares

# 示例

在下根 Bar 开始时以市价单卖出平仓所有的仓位:
Sell All Shares Next Bar At Market;
或 Sell All Contracts Next Bar At Market;

# 说明

  用在策略出场语句中,在 Shares 或 Contracts 前面出现,来表 示所有的合约包含没有明确指明实际仓位的合约。在实际过程中也可以省略不写,省略不写也是表示平掉所有仓位。

 

  Contracts/Contract/Shares/Share

# 语法

语法 TradeSize Contracts
参数 TradeSize——数值表达式,指定委托的数量

# 示例

下根 Bar 开盘时以市价买进 2 手:
Buy 2 Contracts Next Bar At Market;

# 说明

  在策略进场或出场的语句指定委托的数量。

 

第三节:Set相关函数

3.1 Set系列出场函数

  SetBreakeven

(1)多头持仓的出场: 触发价=进场价-(获利金额+手续费+滑价)/整点 价值 停损价=进场价+(手续费*2+滑价*2)/整点价值

(2)空头持仓的出场: 触发价=进场价+(获利金额+手续费+滑价)/整点 价值 停损价=进场价-(手续费*2+滑价*2)/整点价值

 

  SetDollarTrailing

停利价=多单进场后的最高价-(获利回吐金额-手 续费-滑价)/整点价值

停利价=空单进场后的最低价+(获利回吐金额-手 续费-滑价)/整点价值

 

  SetPercentTrailing:

(1)多头持仓的出场: 触发价=进场价+(获利金额+手续费+滑价)/整点 价值 停利价=触发价-(获利金额*停利百分比-手续费滑价)/整点价值

(2)空头持仓的出场: 触发价=进场价-(获利金额+手续费+滑价)/整点 价值 停利价=触发价+(获利金额*停利百分比-手续费滑价)/整点价值

 

  SetProfitTarget:

停利价=多头进场价+(获利金额+(手续费+滑 价)*2)/整点价值

停利价=空头进场价-(获利金额+(手续费+滑 价)*2)/整点价值

 

  SetStopLoss

停损价=多头进场价-(停损金额-(手续费+滑 价)*2)/整点价值

停损价=空头进场价+(停损金额-(手续费+滑价)*2)/整点价值

# 说明

  这些出场函数都用在回测当中,有一个关键的问题是,这里牵扯到触发价格,在K线中,如果不开启Bar或者精细逐笔回测的话,你是无法得到是先出发止盈设置,还是先触发止损设置。在静态观察是到达这个点位就会触发相关的止盈止损设置,但是实际交易是一个动态过程,触发过程是有先后顺序的,所以用在实盘交易中差别是很大的,不建议使用这些Set出场函数

 

3.2 其他

  SetExitOnClose

# 语法

语法 SetExitOnClose
注意
MultiCharts 中要等到下一根 Bar 的第一笔 tick 到来,才会判断本根 Bar 的结束,若 5 分钟内等不到,也认为本根 Bar 结束;那么对应 15:0015:15 等当日收盘的 Bar 
来说,5 分钟内是不会有下一笔 tick,所以若使用函数 SetExitOnClose,无法在当日平仓,而会在收盘后 5 分钟发委托因非交易时段而被拒绝。 *交易不建议使用此函数。只可回测使用。

# 示例

# 说明

  在当日图表中,于交易时段最后一根 Bar 的收盘价 tick 结束目 前仓位,会依仓位的多空不同时用对应的市价单进行委托。 SetExitOnClose 指令是使用 QuoteManager 中设定的交易结束 时段资讯。

 

  SetStopContract/SetStopShare

# 语法

语法 SetStopContract
参数
若 SetStopPosition、SetStopContract 和 SetStopShare 未被声明,默认出场函数,是所有仓位合并计算。
若 SetStopPosition、SetStopContract 和 SetStopShare 被多次声明,或是在同一个图表上的不同信号分别声明,会以最后一次的声明状态为最后状态。

# 示例

指定 SetStopLoss 策略出场函数是个别仓位分开计算,当个别
仓位损失达 10 元时,产生平仓委托:
SetStopContract;
SetStopLoss(10);

# 说明

  指定策略出场函数 SetBreakeven、SetDollarTrailing、 SetPercentTraling、SetProfitTarget 和 SetStopLoss 是个别仓位分 开计算。

 

  SetStopPosition

# 语法

语法 SetStopPosition
注意
*若SetStopPosition、SetStopContract和SetStopShare未被声明,默认出场函数,是所有仓位合并计算。
*若 SetStopPosition、SetStopContract 和 SetStopShare 被多次声明,或是在同一个图表上的不同信号分别声明,会以最后一次的声明状态为最后状态。

# 示例

指定 SetStopLoss 策略出场函数是所有仓位合并计算,当所有仓位总损失达到 10 元时,产生出场委托:
SetStopPosition;
SetStopLoss(10);

# 说明

  指定策略出场函数 SetBreakeven、SetDollarTrailing、 SetPercentTraling、SetProfitTarget 和 SetStopLoss 是所有仓位合 并计算。

 

=================================================

之前的文章感谢大家的转载,希望转载时请注明出处,本人转自其它网站的图表一并感谢,谢谢~!

https://www.cnblogs.com/noah0532/

posted @ 2020-09-20 22:47  时海涛|Thomas  阅读(731)  评论(0编辑  收藏  举报