#property copyright"ExpoMe"#property link"http://www.metaquotes.net"#property indicator_chart_window#property indicator_buffers1#property indicator_color1 Blue
#property indicator_width12#property indicator_style10double Buffer1[];
//+------------------------------------------------------------------+//| Объявляем внешние переменные |//+------------------------------------------------------------------+datetime point_1;
datetime point_2;
datetime point_3;
datetime LastBarTime;
string line_name[10];
int gg=1;
int x1;
int x2;
int x3;
int xx1; // В эту переменную сохраняется значение номера бара вершины перед прогоном при появлении нового бара.int xx2; // Если линии стоят, значит при поялвении нового бара номер бара вершины должен увеличиться на 1.int xx3; // Если этого не произошло и xx1=x1 после прогона, значит увеличиваем вручную.int max;
int maxx;
double y1;
double y2;
double y3;
double y11;
double y22;
double y33;
double x11;
double x22;
double x33;
double y;
double a1;
double a2;
double a3;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{SetIndexBuffer(0,Buffer1);
SetIndexStyle(0,DRAW_LINE);
//---- indicators//----return(0);
}
int start()
{
// Пересчитываем инликатор только при появлении нового бараif(LastBarTime == iTime(Symbol(), 0, 0))
return(0);
LastBarTime = iTime(Symbol(), 0, 0);
// Присваиваем значения переменных времениint obj_total=ObjectsTotal();
for(int ii=0;ii<100;ii++)
{string name = ObjectName(ii);
if(ObjectType(name)!=OBJ_VLINE)
continue;
line_name[gg] = ObjectName(ii);
gg=gg+1;
}
point_1=ObjectGet(line_name[1], OBJPROP_TIME1);
point_2=ObjectGet(line_name[2], OBJPROP_TIME1);
point_3=ObjectGet(line_name[3], OBJPROP_TIME1);
// Запоминаем текущий номер бара вершины
xx1=x1;
//Определяем номера баров ключевых точекfor (int j=0;j<Bars; j++)
{ if (Time[j]==point_1) x1=j;}
// Если после прогона сдвиг по вершине не произошел, значит линий нет, добавляем +1 вручную.if (x1==xx1) x1=x1+1;
xx2=x2;
for (int k=0;k<Bars; k++)
{if (Time[k]==point_2) x2=k; }
if (x2==xx2) x2=x2+1;
xx3=x3;
for (int l=0;l<Bars; l++)
{if (Time[l]==point_3) x3=l; }
if (x3==xx3) x3=x3+1;
// Comment ("n1=", j," n2=", k, " n3=", l);//Находим "высоту" вершин
{
y1=High[x1];
y2=High[x2];
y3=High[x3];
//Comment ("y1=", y1," x1=", x1, " y2=", y2, "x2=", x2," y3=", y3, " x3=", x3);//Принимаем первую из них за начало координат
a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2);
a2=((y2-y1)/(x2-x1))-a1*(x1+x2);
a3=((x2*y1-x1*y2)/(x2-x1))+a1*x1*x2;
max=MathMax(x1,x2);
maxx=MathMax(max,x3);
for (int i=maxx; i>=0; i--)
{ y=a1*i*i+a2*i+a3;
Buffer1[i]=y;}
return(0);
}}
阅读规则。该EA应该不受工具和TFs的限制而工作。
谢谢你!在这个过程中还有很多其他的错误)
ArrayInitialize(array,EMPTY_VALUE);
就像这样 double msArr[10][4][500];
或者只在MKL4的循环中进行。
ArrayInitialize(array,EMPTY_VALUE);
像这样 double msArr[10][4][500];
或者在MKL4中只能在循环中进行。
还有ArrayFill和ZeroMemory
多维数组在用ArrayFill()处理时显示为一维,例如array[2][4]被处理为array[8],所以当处理这个数组时,可以接受指定初始元素的索引为5。所以,对array[2][4]调用ArrayFill(array, 5, 2, 3.14)会给array[1][1]和array[1][2]填充值3.14。
还有ArrayFill和ZeroMemory。
这边走!
而你是个小丑。问题是,有一些关于打印命令在标签中打印两次的主题 专家和Allert也出现两次,但没有答案,唉,如何解决这个问题。而对于未来,如果你不知道,你可以保持沉默并通过,但为了获得评价自己不专业的回答是愚蠢的。是的,顺便说一句,你的答案真的非常弱。
你是个小丑。但问题是真实的,有一些关于打印命令在标签中打印两次的主题 专家和Allert也出现了两次,但没有答案,唉,如何解决它。而对于未来,如果你不知道,你可以保持沉默并通过,但为了获得评价自己不专业的回答是愚蠢的。是的,顺便说一句,你的答案真的非常弱。
你没有理解我的链接...
打印不会超过一次,如果打印了,说明代码有误......这就是我把你送到心灵感应者那里的原因,因为你没有公布代码)
晚安!
亲爱的论坛用户,我需要一些帮助。我在MQL4中写了一个脚本,根据图表上的三个给定点,通过一个公式画出一条线。它需要130行,包括缩进和空格。我最近决定把它移植到MQL5,并意识到我在编程方面的贫乏知识不会帮助我,我需要重新学习。
如果有人准备将该脚本移植到MQL5,我将非常感激。如果有人愿意把这个脚本移植到MQL5,我将非常高兴。
如果有人愿意免费(与)做,我会很高兴。
把代码扔在这里,也许有人会做一个无偿的(c),有这样的事情。