新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1607 1...160016011602160316041605160616071608160916101611161216131614...1953 新评论 Vitaly Muzichenko 2021.09.01 22:29 #16061 Андрей #:晚安! 亲爱的论坛用户,我需要一些帮助。我在MQL4中写了一个脚本,通过一个公式从图表上的三个给定点画出一条线。它需要130行,包括缩进和空格。我最近决定把它移植到MQL5,并意识到我糟糕的编程知识对我没有帮助,因为我需要重新学习。 零除法 代码中有一个错误,请先修复它 a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2); 这里除以 "0 "是因为x1和x2等于 "1",结果是 "0"。 在矩阵操作之前做一个检查 Alexey Viktorov 2021.09.02 08:01 #16062 Manter84 #:你是个小丑。但问题是真实的,有一些关于打印命令在标签中打印两次的主题 专家和Allert也出现了两次,但没有答案,可惜如何解决。而对于未来,如果你不知道,你可以保持沉默并通过,但为了获得评价自己不专业的回答是愚蠢的。是的,顺便说一句,你的答案真的非常弱。 不管是什么问题,不管是什么答案。 Alexey Viktorov 2021.09.02 08:08 #16063 Андрей #:晚安! 亲爱的论坛用户,我需要一些帮助。我在MQL4中写了一个脚本,根据图表上的三个给定点,通过一个公式画出一条线。它需要130行,包括缩进和空格。我最近决定把它移植到MQL5,并意识到我在编程方面的贫乏知识无法帮助我,我需要重新学习。如果有人准备将该脚本移植到MQL5,我将非常感激。如果有人愿意将该脚本转换为MQL5,我将非常感激。 如果是你写的脚本,为什么你的代码中需要它呢? //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() {SetIndexBuffer(0,Buffer1); SetIndexStyle(0,DRAW_LINE); //---- indicators //---- return(0); } Manter84 2021.09.02 09:11 #16064 #property indicator_chart_window int FR_handle; int OnInit() { FR_handle = iFractals(NULL,PERIOD_CURRENT); return(INIT_SUCCEEDED); } 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[]) { Print("Проверка 111 "); return(rates_total); } Alexey Viktorov #: 问题如此,答案也如此。 好吧,你可以直接写上需要更多的细节。我写了最简单的指标的代码(不能再简单了),但它在打印命令下也产生了两条信息。而如果你省略得到Handle,它就会给出一个信息。 *** 附加的文件: 111.png 15 kb Андрей 2021.09.02 09:18 #16065 Alexey Viktorov #:如果是你写的脚本,为什么在代码中会出现 由于我的编程技能只有小学生的水平,我拿了一些工作中的代码,并从中制定了规则。没有干涉的,没有接触的) Alexey Viktorov 2021.09.02 09:24 #16066 Manter84 #:好吧,你可以直接写上需要更多的细节。我写了最简单的指标的代码(不能再简单了),但它在打印命令下也产生了两条信息。如果你没有得到Handle,你会得到一个。 哦,亲爱的......我的词汇表里只有粗话。这就是为什么我最好保持沉默。 Alexey Viktorov 2021.09.02 09:30 #16067 Андрей #: 由于我的编程技能处于小学生的水平,我从其中抽取了一些工作代码和规则。没有干涉的,没有接触的) 明白了。 Andrew#: 如果有人帮忙,反正我欠你一杯威士忌!) 我认为来自......... 的威士忌不比30美元便宜。因此,在自由职业者网站上创建一个应用程序更容易,而且会有意愿,大约20人......而这是你的信息,你激起人们打破规则。谁需要它?好吧,免费做,然后呢?毕竟,一个瓶子你没有通过,所以这是一个为钱绕过自由职业者的工作。 Valeriy Yastremskiy 2021.09.02 09:36 #16068 Андрей #: #property strict //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 clrBlue #property indicator_width1 2 #property indicator_style1 0 #property indicator_label1 "3T" #property indicator_type1 DRAW_LINE #property indicator_style1 STYLE_SOLID #define Point _Point #define Period() _Period #define Symbol _Symbol #define TimeToStr TimeToStruct // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos]. // А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume. #define DEFINE_TIMESERIE(NAME,FUNC,T) \ class CLASS##NAME \ { \ public: \ static T Get(const string Symb,const int TimeFrame,const int iShift) \ { \ T tValue[]; \ return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \ } \ T operator[](const int iPos) const \ { \ return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \ } \ }; \ CLASS##NAME NAME; \ T i##NAME(const string Symb,const int TimeFrame,const int iShift) \ { \ return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \ } //+------------------------------------------------------------------+ DEFINE_TIMESERIE(Volume, TickVolume, long) DEFINE_TIMESERIE(Time, Time, datetime) DEFINE_TIMESERIE(Open, Open, double) DEFINE_TIMESERIE(High, High, double) DEFINE_TIMESERIE(Low, Low, double) DEFINE_TIMESERIE(Close, Close, double) //+------------------------------------------------------------------+ double 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; bool Deinit = true; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ MqlDateTime str; //-------------------------------------------------------------------- int OnInit() // Специальная функция init() { {SetIndexBuffer(0,Buffer1); //---- indicators //---- return(0); } return(INIT_SUCCEEDED); // Выход из спец. ф-ии init() } //-------------------------------------------------------------------- //int start() // Специальная функция start() 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(LastBarTime == iTime(Symbol, 0, 0)) return(0); LastBarTime = iTime(Symbol, 0, 0); // Присваиваем значения переменных времени int obj_total=ObjectsTotal(0,0,-1); for(int ii=0;ii<100;ii++) {string name = ObjectName(0,0,ii,OBJ_VLINE); if(ObjectGetInteger(0, name,OBJPROP_TYPE)!=OBJ_VLINE) continue; line_name[gg] = ObjectName(0,0,ii,OBJ_VLINE); gg=gg+1; } point_1=ObjectGetTimeByValue(0,line_name[1],0, OBJPROP_TIME); point_2=ObjectGetTimeByValue(0,line_name[2],0, OBJPROP_TIME); point_3=ObjectGetTimeByValue(0,line_name[3],0, OBJPROP_TIME); // Запоминаем текущий номер бара вершины xx1=x1; //Определяем номера баров ключевых точек for (int j=0;j<500; j++) { if (Time[j]==point_1) x1=j;} // Если после прогона сдвиг по вершине не произошел, значит линий нет, добавляем +1 вручную. if (x1==xx1) x1=x1+1; xx2=x2; for (int k=0;k<500; k++) {if (Time[k]==point_2) x2=k; } if (x2==xx2) x2=x2+1; xx3=x3; for (int l=0;l<500; 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); } //-------------------------------------------------------------------- return(rates_total); // Выход из спец. ф-ии start() } //-------------------------------------------------------------------- void OnDeinit(const int reason) { if( Deinit == true) // Стираем с графика, если включена функция очистки графика { int obj_total=ObjectsTotal(0,0,-1); PrintFormat("Всего %d объектов",obj_total); for(int i=obj_total-1; i>=0; i--) { string name=ObjectName(0,i,-1,-1); // PrintFormat("Объект %d: %s",i,name); ObjectDelete(0,name); } } Comment(""); //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ 没有错误,但计时功能不正确,没有足够的时间) 而在除法运算之前,最好验证一下5的除数是否为零,如果除数为零,那么....。 Tretyakov Rostyslav 2021.09.02 09:46 #16069 Manter84 #:是的,顺便说一句,你的答案真的非常弱。 Manter84#: 下面是最简单的电感器的代码(它不能再简单了) 一个六个字母的单词有五个错误... 而我却无力纠正你。 Manter84 2021.09.02 10:15 #16070 Alexey Viktorov #:讨厌......我的词汇中只剩下粗话了。所以我还是不说了。 我对你做了什么?还是你们都这么积极? 1...160016011602160316041605160616071608160916101611161216131614...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
晚安!
亲爱的论坛用户,我需要一些帮助。我在MQL4中写了一个脚本,通过一个公式从图表上的三个给定点画出一条线。它需要130行,包括缩进和空格。我最近决定把它移植到MQL5,并意识到我糟糕的编程知识对我没有帮助,因为我需要重新学习。
零除法 代码中有一个错误,请先修复它
a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2);
这里除以 "0 "是因为x1和x2等于 "1",结果是 "0"。
在矩阵操作之前做一个检查
你是个小丑。但问题是真实的,有一些关于打印命令在标签中打印两次的主题 专家和Allert也出现了两次,但没有答案,可惜如何解决。而对于未来,如果你不知道,你可以保持沉默并通过,但为了获得评价自己不专业的回答是愚蠢的。是的,顺便说一句,你的答案真的非常弱。
晚安!
亲爱的论坛用户,我需要一些帮助。我在MQL4中写了一个脚本,根据图表上的三个给定点,通过一个公式画出一条线。它需要130行,包括缩进和空格。我最近决定把它移植到MQL5,并意识到我在编程方面的贫乏知识无法帮助我,我需要重新学习。
如果有人准备将该脚本移植到MQL5,我将非常感激。如果有人愿意将该脚本转换为MQL5,我将非常感激。
如果是你写的脚本,为什么你的代码中需要它呢?
问题如此,答案也如此。
好吧,你可以直接写上需要更多的细节。我写了最简单的指标的代码(不能再简单了),但它在打印命令下也产生了两条信息。而如果你省略得到Handle,它就会给出一个信息。
***
如果是你写的脚本,为什么在代码中会出现
好吧,你可以直接写上需要更多的细节。我写了最简单的指标的代码(不能再简单了),但它在打印命令下也产生了两条信息。如果你没有得到Handle,你会得到一个。
哦,亲爱的......我的词汇表里只有粗话。这就是为什么我最好保持沉默。
由于我的编程技能处于小学生的水平,我从其中抽取了一些工作代码和规则。没有干涉的,没有接触的)
明白了。
如果有人帮忙,反正我欠你一杯威士忌!)
我认为来自......... 的威士忌不比30美元便宜。因此,在自由职业者网站上创建一个应用程序更容易,而且会有意愿,大约20人......而这是你的信息,你激起人们打破规则。谁需要它?好吧,免费做,然后呢?毕竟,一个瓶子你没有通过,所以这是一个为钱绕过自由职业者的工作。
没有错误,但计时功能不正确,没有足够的时间)
而在除法运算之前,最好验证一下5的除数是否为零,如果除数为零,那么....。
是的,顺便说一句,你的答案真的非常弱。
下面是最简单的电感器的代码(它不能再简单了)
一个六个字母的单词有五个错误...
而我却无力纠正你。
讨厌......我的词汇中只剩下粗话了。所以我还是不说了。
我对你做了什么?还是你们都这么积极?