using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;
 
namespace PowerLanguage.Strategy
{
    public class Example_StopLimit : SignalObject
    {
        private IOrderMarket buyMarketOrder, sellMarketOrder;
        private IOrderStopLimit sellStopLimitOrder;
        private double sellStopPrice, sellLimitPrice;
 
        public Example_StopLimit(object _ctx) : base(_ctx) { }
 
        protected override void Create()
        {
            buyMarketOrder = OrderCreator.MarketNextBar(new SOrderParameters(
                Contracts.Default, "EnterLong", EOrderAction.Buy));
 
            sellMarketOrder = OrderCreator.MarketNextBar(new SOrderParameters(
                Contracts.Default, "ExitLong", EOrderAction.Sell));
 
            sellStopLimitOrder = OrderCreator.StopLimit(new SOrderParameters(
                Contracts.Default, "StopLMT", EOrderAction.Sell));
        }
 
        protected override void StartCalc()
        {
            Output.Clear(); // Clear PowerLanguage Editor output tab
        }
 
        protected override void CalcBar()
        {
            // When flat, enter long on first bar of day
            if ((StrategyInfo.MarketPosition == 0) && (Bars.Time[0].Date != Bars.Time[1].Date))
            {
                buyMarketOrder.Send();
 
                sellStopPrice  = Bars.Low[0] - Bars.Range();
                sellLimitPrice = Bars.Low[0] - (Bars.Range() * 1.5);
 
                Output.WriteLine("{0} - Buy order submitted. Sell stop calculated @ {1} with limit {2}",
                    Bars.Time[0].ToString("d-M HH:mm:ss"),
                    sellStopPrice,
                    sellLimitPrice);
            }
 
            // Long order management
            if (StrategyInfo.MarketPosition > 0)
            {
                // Submit the stop-limit order as long as there is an open position
                sellStopLimitOrder.Send(sellStopPrice, sellLimitPrice);
 
                Output.WriteLine("{0} - Submitting sell stop @ {1} with limit {2}",
                    Bars.Time[0].ToString("d-M HH:mm:ss"),
                    sellStopPrice,
                    sellLimitPrice);
 
                // Time stop; exit the position after 15 bars
                double barsInPosition = Bars.CurrentBar - CurrentPosition.OpenTrades[0].EntryOrder.BarNumber;
                if (barsInPosition >= 15)
                {
                    sellMarketOrder.Send();
 
                    Output.WriteLine("{0} - Position open for {1} bars, submitting exit long market order",
                        Bars.Time[0].ToString("d-M HH:mm:ss"),
                        barsInPosition);
                }
            }
        }
    }
}

 

MC- 交易并设置止损的更多相关文章

  1. 止损+TS

    单策略单品种单策略多品种多策略单品种和加仓多策略多品种静态仓位和动态仓位 金肯特钠(kingKeltner)布林强盗(BollingerBandit)动态突破(DynamicBreakOutII)恒温 ...

  2. discuz全局数组变量 后台各项设置 完整版

    $_G 保存了 Discuz! 中所有的预处理数据 缓存能够很好的提高程序的性能,一些配置数据没必要每次都查询数据库,只要在修改了的时候更新下缓存即可. Discuz! 中所有的缓存保存在 $_G[c ...

  3. 《零起点,python大数据与量化交易》

    <零起点,python大数据与量化交易>,这应该是国内第一部,关于python量化交易的书籍. 有出版社约稿,写本量化交易与大数据的书籍,因为好几年没写书了,再加上近期"前海智库 ...

  4. just555 对话

    网易 新闻 2005-03-31 16:37:47 空!(19194697)555,你在大连炒单,单日最大盈利率多少? 2005-03-31 16:37:59 just555(79610908)最大1 ...

  5. R与金钱游戏:均线黄金交叉2

    从上一篇分析已经得知均线黄金交叉原则并不适用于震荡期,那有什么办法可以规避震荡期呢或者说有什么办法可以减少无脑跟的损失?我们继续玩一下. Required Packages library(quant ...

  6. 吐血整理,一文读懂中国金融衍生品市场的前世今生和未来[z]

    [z]https://www.gfedu.cn/cfrm/content_22687.shtml 从定义上来说,金融衍生工具(derivativesecurity)是在货币.债券.股票等传统金融工具的 ...

  7. LR12.53—第7课:分析场景

    第7课:分析场景 在前面的课程中,您学习如何设计,控制和执行方案运行.一旦您已加载您的服务器,你要分析的运行,并确定需要被淘汰,以提高系统性能的问题. 在图表和报告中有关方案的性能您的分析会议上提出的 ...

  8. python---Memcached

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. 17.Python笔记之memcached&redis

    作者:刘耀 博客:www.liuyao.me 博客园:www.cnblogs.com/liu-yao 一.Memcached 1.介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动 ...

随机推荐

  1. jsp中使用java函数

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> ${fn ...

  2. Winform DataGridView直接导出Excel

    /// <summary> /// 导出excel /// </summary> /// <param name="fileName">导出文件 ...

  3. iOS10 CAAnimationDelegate的适配

    最近在xcode8打开之前的动画代码,看到如下警告

  4. Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)

    目录 1.正在表达式 2.正则表达式常用5种操作 3.正则表达式实例 4.re.match与re.search的区别 5.json 和 pickle 1.正则表达式   语法: import re # ...

  5. 启动Mysql报错:Another MySQL daemon already running with the same unix socket.

    启动Mysql报错: Another MySQL daemon already running with the same unix socket. 删除如下文件即可解决 /var/lib/mysql ...

  6. 【Python之路】第四篇--Python基础之函数

    三元运算 三元运算(三目运算),是对简单的条件语句的缩写 # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2” ...

  7. redhat nginx 启动脚本

    #!/bin/sh # # nginx - this script starts and stops the nginx daemin # # chkconfig: - 85 15 # descrip ...

  8. 扣出的图片无法调整大小 photoshop mac版本

  9. PhotonServer 学习

    版本:Photon-OnPremise-Server-SDK_v3-4-31-10808 输出文件夹:deploy/名称/bin PhotonServer.config 配置 <Applicat ...

  10. TCP三次握手中,为什么需要第三次握手?

    为什么客户端A还要发送一次确认呢?(为什么需要第三次握手) 这主要是为了防止已失效的连接请求报文段突然又传送到了B(服务器端),因而产生错误. 所谓"已失效的连接请求报文段"是这样 ...