Daiyukai 发表于 2024-9-24 20:47:19

求转换为MT4语言

IsMainIndex:=myinput(0);
CTA1:=(HIGH+LOW+CLOSE*2)/4;
CTA3:=EMA(CTA1,10);
CTA4:=STD(CTA1,10);
CTA5:=(CTA1-CTA3)*100/CTA4;
CTA6:=EMA(CTA5,5);
涨:EMA(CTA6,10)+100/2-5,LINETHICK2,COLORFF0080;跌:EMA(涨,4),LINETHICK2,COLORRED;卖出:IF(CROSS(跌,涨)AND跌>160120,160)
9H89寸99998
COLORFFFF00,LINETHICK2;买入:IF(CROSS(涨,跌)AND涨<-60,30,-90)COLORYELLOW,LINETHICK2;
DRAWTEXT(CROSS(跌,涨)AND 跌>160,100,'卖出'),COLORYELLOW:DRAWTEXT(CROSS(涨,跌)AND 涨<-60,40,买入')COLORFFFFFF;YJ1:=MESSAGE(CROSS(跌,涨)AND 跌>160,
'金牛探底寻顶''卖出”1);
YJ2:=MESSAGE(CROSS(涨,跌)AND 涨<-60,'金牛探底寻顶','买入',1);

yuwentao4761 发表于 2024-9-24 21:07:52

[微笑]看看,这是什么软件的指标??

sl85856 发表于 2024-9-30 11:14:24



input int IsMainIndex = 0; // 输入参数,主指标索引

double CTA1[], CTA3[], CTA4[], CTA5[], CTA6[]; // 定义指标数组
double rise[], fall[]; // 定义涨和跌数组

int OnInit()
{
    IndicatorShortName("Custom Indicator"); // 设置指标名称
    ArraySetAsSeries(CTA1, true); // 将数组设为时间序列
    ArraySetAsSeries(CTA3, true);
    ArraySetAsSeries(CTA4, true);
    ArraySetAsSeries(CTA5, true);
    ArraySetAsSeries(CTA6, true);
    return(INIT_SUCCEEDED); // 初始化成功
}

// 计算指数移动平均
double EMA(const double &array[], int period, int index)
{
    if (index < period - 1) return 0.0; // 不够数据时返回0

    double alpha = 2.0 / (period + 1);
    double emaValue = array;

    for (int i = 1; i < period; i++)
    {
      emaValue = (array * alpha) + (emaValue * (1 - alpha));
    }

    return emaValue; // 返回计算得到的EMA值
}

// 计算标准差
double STD(const double &array[], int period, int index)
{
    double sum = 0.0, mean = 0.0, variance = 0.0;
    for (int j = 0; j < period; j++)
    {
      sum += array;
    }
    mean = sum / period;

    for (int i = 0; i < period; i++)
    {
      variance += MathPow(array - mean, 2);
    }
    variance /= period;
    return MathSqrt(variance); // 返回标准差
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    if (rates_total < 10) return 0; // 确保数据点数量足够

    // 计算CTA1
    for (int k = 0; k < rates_total; k++)
    {
      CTA1 = (high + low + close * 2) / 4; // 计算CTA1的值
    }

    // 计算CTA3和CTA4
    for (int m = 0; m < rates_total; m++)
    {
      if (m >= 9) // 确保有足够数据点计算EMA
            CTA3 = EMA(CTA1, 10, m); // 计算EMA
      if (m >= 9) // 确保有足够数据点计算STD
            CTA4 = STD(CTA1, 10, m); // 计算STD
    }

    // 计算CTA5
    for (int n = 0; n < rates_total; n++)
    {
      if (n >= 9) // 确保有足够数据点计算CTA5
            CTA5 = (CTA1 - CTA3) * 100 / CTA4; // 标准化CTA5
    }

    // 计算CTA6
    for (int z = 0; z < rates_total; z++)
    {
      if (z >= 4) // 确保有足够数据点计算EMA
            CTA6 = EMA(CTA5, 5, z); // 计算CTA6的EMA
    }

    // 计算涨信号
    for (int y = 0; y < rates_total; y++)
    {
      if (y >= 9)
      {
            rise = EMA(CTA6, 10, y) + 100 / 2 - 5; // 计算涨信号
            fall = EMA(rise, 4, y); // 计算跌信号
      }
    }

    // 卖出信号逻辑
    for (int s = 0; s < rates_total; s++)
    {
      if (s >= 9)
      {
            if (CROSS(fall, rise) && fall > 160)
            {
                // 显示卖出信号
                Comment("卖出信号触发");
                // 发送消息
                Print("金牛探底寻顶: 卖出");
            }

            // 买入信号逻辑
            if (CROSS(rise, fall) && rise < -60)
            {
                // 显示买入信号
                Comment("买入信号触发");
                // 发送消息
                Print("金牛探底寻顶: 买入");
            }
      }
    }

    return rates_total; // 返回计算的总数据点
}

// 判断交叉函数
bool CROSS(double a, double b)
{
    return (a > b); // 检查是否发生交叉
}

//+------------------------------------------------------------------+

gesoros 发表于 2024-10-10 20:51:24

谨慎点,这个人写完是不付钱的。。。。
页: [1]
查看完整版本: 求转换为MT4语言