dee 发表于 2023-6-16 23:19:38

写3个函数

MT5   
1   5分钟周期, 写一个 函数boolwanpan( intindex)    输入 Index , 求 判断这根K线所在的时间 是不是在晚间 20:00到 凌晨02:00之间

2   booljcd( int index)    ,jcd 定义    :ma5上穿 ma20   为 金叉, 下穿为死叉,金叉 与 死叉 之间的 最低价位 为 jcd ,输入 index   判断这根K线是不是 jcd
3反之,金叉 死叉 之间的 高点 为 scg,   bool scg ( int index)   判断这根K线是不是scg

svip2022 发表于 2023-6-17 07:48:41

我一个都不会写。。。

marscy 发表于 2023-6-21 17:34:32

//--- 5分钟周期, 写一个 函数boolwanpan( intindex)    输入 Index , 求 判断这根K线所在的时间 是不是在晚间 20:00到 凌晨02:00之间
bool wanpan(int index)
{
    datetime time = iTime(_Symbol, PERIOD_M5, index); // 获取K线的时间戳
    int hour = TimeHour(time); // 获取当前小时数
    int minute = TimeMinute(time); // 获取当前分钟数

    // 判断当前时间是否处于20:00到次日02:00之间
    if ((hour >= 20 && minute >= 0) || (hour < 2 && minute >= 0))
    {
      return true;
    }
    else
    {
      return false;
    }
}


//--- booljcd( int index)    ,jcd 定义    :ma5上穿 ma20   为 金叉, 下穿为死叉,金叉 与 死叉 之间的 最低价位 为 jcd ,输入 index   判断这根K线是不是 jcd
bool jcd(int index)
{
    double ma5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index); // 获取MA5值
    double ma20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index); // 获取MA20值

    if (ma5 > ma20) // 上穿MA20,判断是否为金叉
    {
      double preMa5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA5值
      double preMa20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA20值

      if (preMa5 <= preMa20) // 前一根K线处于下穿MA20(死叉)状态,当前K线为金叉
      {
            double low = iLowest(_Symbol, PERIOD_CURRENT, MODE_LOW, 2, index + 1); // 获取金叉和死叉之间的最低价位
            if (Low <= low) // 判断当前K线(index)是否处于金叉和死叉之间的最低价位
            {
                return true;
            }
      }
    }
    else // 下穿MA20,判断是否为死叉
    {
      double preMa5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA5值
      double preMa20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA20值

      if (preMa5 >= preMa20) // 前一根K线处于上穿MA20(金叉)状态,当前K线为死叉
      {
            double high = iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, 2, index + 1); // 获取金叉和死叉之间的最高价位
            if (High >= high) // 判断当前K线(index)是否处于金叉和死叉之间的最高价位
            {
                return true;
            }
      }
    }
    return false;
}


//--- 反之,金叉 死叉 之间的 高点 为 scg,   bool scg ( int index)   判断这根K线是不是scg
bool scg(int index)
{
    double ma5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index); // 获取MA5值
    double ma20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index); // 获取MA20值

    if (ma5 > ma20) // 上穿MA20,判断是否为金叉
    {
      double preMa5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA5值
      double preMa20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA20值

      if (preMa5 <= preMa20) // 前一根K线处于下穿MA20(死叉)状态,当前K线为金叉
      {
            double high = iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, 2, index + 1); // 获取金叉和死叉之间的最高价位
            if (High >= high) // 判断当前K线(index)是否处于金叉和死叉之间的最高价位
            {
                return true;
            }
      }
    }
    else // 下穿MA20,判断是否为死叉
    {
      double preMa5 = iMA(_Symbol, PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA5值
      double preMa20 = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, index + 1); // 获取前一根K线的MA20值

      if (preMa5 >= preMa20) // 前一根K线处于上穿MA20(金叉)状态,当前K线为死叉
      {
            double low = iLowest(_Symbol, PERIOD_CURRENT, MODE_LOW, 2, index + 1); // 获取金叉和死叉之间的最低价位
            if (Low <= low) // 判断当前K线(index)是否处于金叉和死叉之间的最低价位
            {
                return true;
            }
      }
    }
    return false;
}

页: [1]
查看完整版本: 写3个函数