新版MQL语言程序设计:多种类型一键平仓思路与代码实现

文章目录

    • 一键平仓所有仓位的思路及代码实现
    • 一键平仓所有多头仓位的思路及代码实现
    • 一键平仓所有空头仓位的思路及代码实现
    • 创建一个脚本调用以上平仓函数

一键平仓所有仓位的思路及代码实现

  • 先统计所有的仓位总数
  • 然后根据所有仓位做遍历循环
  • 每遍历一个仓位就执行选择,如果选择成功,执行平仓仓位,否则不做任何处理
// 交易类头文件
#include 

// 仓位信息类头文件
#include 

// 交易类创建一个对象
CTrade trade;

// 平仓所有仓位函数
void PositionsClose()
{
    // 定义变量保存订单编号
    ulong ticket=0;

    // 遍历所有仓位统计仓位个数
    int total= PositionsTotal();

    // 如果仓位个数为0,直接返回,后面的代码不再运行
    if (total <= 0) return;

    // 倒序遍历,按时间从最新的仓位做遍历循环。
    // 仓位的索引编号最小是0,最大是total-1。
    for(int i=total-1; i>=0; i--)
    {
        // 通过仓位的索引计算仓位的订单编号,并选择该仓位。
        if ( (ticket=PositionGetTicket(i)) > 0 )
        {
            // 当仓位被成功选择后,平仓该仓位。
            trade.PositionClose(ticket);
        }
    }
}

一键平仓所有多头仓位的思路及代码实现

  • 先统计所有的仓位总数
  • 然后根据所有仓位做遍历循环
  • 每遍历一个仓位就执行选择,判断选择的仓位是否符合多头条件
  • 如果符合多头仓位类型条件,执行平仓仓位,否则不做任何处理
// 平仓所有多单
void BuyClose()
{
    // 定义变量保存订单编号
    ulong ticket=0;

    // 遍历所有仓位统计仓位个数
    int total= PositionsTotal();

    // 如果仓位个数为0,直接返回,后面的代码不再运行
    if (total <= 0) return;

    // 倒序遍历,按时间从最新的仓位做遍历循环。
    // 仓位的索引编号最小是0,最大是total-1。
    for(int i=total-1; i>=0; i--)
    {
        // 通过仓位的索引计算仓位的订单编号,并选择该仓位。
        if ( (ticket=PositionGetTicket(i)) > 0 )
        {
            // 成功选择仓位以后,检查该仓位的产品符号是否等于当前产品符号,仓位的类型是否为Buy类型
            if(PositionGetSymbol(i)==Symbol() && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY))
            {
                // 满足以上条件之后,平仓该仓位。
                trade.PositionClose(ticket);
            }
        }
    }
}

一键平仓所有空头仓位的思路及代码实现

  • 先统计所有的仓位总数
  • 然后根据所有仓位做遍历循环
  • 每遍历一个仓位就执行选择,判断选择的仓位是否符合条件
  • 如果符合空仓位类型条件,执行平仓仓位,否则不做任何处理
// 平仓所有空单
void SellClose()
{
    // 定义变量保存订单编号
    ulong ticket=0;

    // 遍历所有仓位统计仓位个数
    int total= PositionsTotal();

    // 如果仓位个数为0,直接返回,后面的代码不再运行
    if (total <= 0) return;

    // 倒序遍历,按时间从最新的仓位做遍历循环。
    // 仓位的索引编号最小是0,最大是total-1。
    for(int i=total-1; i>=0; i--)
    {
        // 通过仓位的索引计算仓位的订单编号,并选择该仓位。
        if ( (ticket=PositionGetTicket(i)) > 0 )
        {
            // 成功选择仓位以后,检查该仓位的产品符号是否等于当前产品符号,仓位的类型是否为Sell类型
            if(PositionGetSymbol(i)==Symbol() && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL))
            {
                // 满足以上条件之后,平仓该仓位。
                trade.PositionClose(ticket);
            }
        }
    }
}

创建一个脚本调用以上平仓函数

#property copyright "Copyright 2024, 迈达量化."
#property link      "VX: mtquant"
#property version   "1.00"
#property script_show_inputs
// 输入参数
input int  inp_close_type = -1;  // -1 平仓所有, 0平仓多单,1平仓空单
void OnStart()
{
    if (inp_close_type == -1)
    {
        PositionsClose();
    }
    else if (inp_close_type == 0)
    {
        BuyClose();
    }
    else if (inp_close_type == 1)
    {
        SellClose();
    }
    else
        return;
}

你可能感兴趣的:(新版MQL语言程序设计,c++,金融,人工智能,其他,开发语言)