求转换为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);
[微笑]看看,这是什么软件的指标??
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); // 检查是否发生交叉
}
//+------------------------------------------------------------------+
谨慎点,这个人写完是不付钱的。。。。
页:
[1]