新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 490

 
Kot:

下午好!


我有一个做某些计算的EA。它使用不同的数学运算、数组、循环。 将结果保存到一个文件中。它必须在执行完所有行动后从头开始做所有事情。它已经做了一次所有的计算,然后第二次挂起,没有采取任何行动。你能告诉我们,在开始新的计算之前,是否有必要将变量清零,清除数组或其他东西?

你试过关闭该文件吗?

 
下午好!我需要一个人道主义者(我)的帮助,他正试图用最微弱的知识来做一个指标))但对应该出现的东西有一个理解))。所以:
如何为MT4编程一个拐杖/指标/脚本(作为一个指标,有标签 "关于程序,常规,输入参数,颜色,显示"),以便它从.csv文件中获取数据,例如源文件格式
欧元;特朗普;1.192;1.1733
欧元;突尼斯;1.2037;1.1663
EUR;AB1;1.1906499615;1.1797479615
瑞士法郎;土耳其法郎;1.0362;1.0183
中国金融;天津;1.0479;1.0121
CHF;AB1;1.03484132734247;1.02549513556164


也就是说,
该指标从文件中获取记录的数据,并将其作为 线段(TF、TA)或彩色带(EA),参数范围等于 "一天"(从边框到МТ4上的垂直分隔线的边框),对于行,选择行的颜色、行的类型、选择文本的颜色和注释的大小,以及将注释行替换为 "TF - 1,192",第二行 "TF - 1,1733",这些都来自文件的相应行。这个范围是纯水平的,从EUR;TF;1.192;1,1733这一行,它把一个槽的第一个数字和第二个数字作为1.192槽的起点和1.192槽的终点。
也有区间,例如EA,从开始到结束的原理是一样的,但价格不同,线的开始和结束是CHF;AB1;1.03484132734247;1.02549513556164开始是
1.03484132734247 结束是1.02549513556164当你打开MT4(作为gafik上的一个普通指标)时,每天在图表上运行,并准确地将所有数据添加到当前日的一次,所有先前应用的线条不会从图表中删除,也不会重复。通过这一切,它选择并显示当天所有的段和范围,只在活动窗口现在所在的地方和其他活动窗口(即它正在运行的地方)(即它打开了一个货币对,指标画出了当天所有的段和范围,并平静下来,以此类推的货币对)。

例如,应该如何看待指标输入参数的标签

Переменная________Значение
Funtik________//--Общие настройки--//
绘制TF________true
绘制TN _______true
绘制AB1______true
绘制AB2______false
文字标题的颜色 _______Black
Шрифт подписей__________________Arial
文字说明的字体大小 ________9
TF线的颜色 ______________
线路类型 TF _______________
TN线色______________
线路类型 TN _______________
乐队颜色AB1__________
乐队颜色AB2__________
文件频率(秒) ______2
文件名称 ___________5.csv

试着自己涂鸦,但没有得到一个该死的东西,虽然看起来很容易(但我是一个人道主义者,你能做什么....)帮助请淹没!!!!!!!!。


//+------------------------------------------------------------------+
//|                                                        Funtik.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_chart_window
//---- input parameters
extern string    Funtik="5.csv";
//+------------------------------------------------------------------+
//| extern variables                                       |
//+------------------------------------------------------------------+
extern  bool    РисоватьTB = false      ;
extern  bool    РисоватьTN = false      ;
extern  bool    РисоватьTF = false      ;
extern  bool    РисоватьAB1 = false     ;
extern  bool    РисоватьAB2 = false     ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      int handle,sst=1;
     double  NameCena;
     string NameF ,NameTi,NameFT;
      bool h1;
      
   while(sst>0)
                 {
   handle=FileOpen(Funtik,FILE_CSV|FILE_READ,';');
 //  Comment ("Файл ",Funtik,"открыт");
   if(handle>=0)
    {
     NameF=FileReadString(handle);           // Читается наименование бумаги
     NameTi=FileReadString(handle);          // Читается первая котировка и подставляется в начало первого отрезка линии или диапазона
     NameCena=FileReadNumber(handle);        // Читается цена последней котировки для первого отрезка линии или диапазона
     NameFT=FileReadString(handle);          // Читается последняя котировка для диапазона
     
     Alert(NameF," ",NameTi," ",NameCena," ",NameFT);
       if(FileIsEnding(h1))
       {
     FileClose(h1);
     return(false);
     sst=0;
       }
    }
               }
     FileClose(handle);   
 
  //fComment(Funtik);
//----
   return(0);
  }
//+------------------------------------------------------------------+

 

你好!

请帮助我找到以下程序中的一个错误!!。

//+------------------------------------------------------------------+
//|测试。ǞǞǞ
//| Copyright 2018, MetaQuotes Software Corp.
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#财产版权 "365_MA"
#属性链接 "https://www.mql5.com"
#财产版本 "1.00"
#属性严格

extern Period_MA = 365; //周期MA 1
外部双倍Delta = 0.0010; //可以打开订单的距离。

字符串 Symb; // 交易工具的名称
//int Total; //number of orders

//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Obj_Label")。
ObjectDelete("Obj_Label2")。
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{



double prise = Bid;//当前价格
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //移动平均的
double Price2MA = price - CurrMAValue;//MA和价格之间的距离
datetime NextClose = Time(0) + Period()*60*2;//关闭时间
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1; //以分钟为单位的关闭时间

//int err;



//刷新图表上的文本信息

ObjectSetText ("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 4) + ", tick " + TimeToStr(TimeCurrent() , TIME_SECONDS) + ", O@"+ TimeToStr(Time[0], TIME_MINUTES) + ", NC@"+ TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Delta " + DoubleToStr(Delta,4) + ", MA值 " + DoubleToStr(CurrMAValue, 4) + ", 距离MA " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen ) 。
//考虑价格并产生警报

如果((MathAbs(Price2MA) < Delta) && // 如果与МА的距离小于delta
(Price > CurrMAValue) && // 并且价格高于MA
(Open(0) > CurrMAValue+Delta) //并且当前蜡烛的开盘价高于MA+Delta。
(
提醒("价格从上方接近MA;)。
)

如果((MathAbs(Price2MA) < Delta) && // 如果与MA的距离小于delta
(价格 < CurrMAValue) && // 并且价格低于MA值
(Open(0) < CurrMAValue-Delta))//并且当前蜡烛在MA delta下面打开。
(

警报("价格接近于MA下方;)
)

return(0);


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

编译后出现以下错误

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Куда исчезли "Сообщения"? У меня в профиле исчез раздел...
附加的文件:
Error.jpg  60 kb
 
berkley75:

你好!

请帮助我找到以下程序中的一个错误!!。


编译后出现以下错误。

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
( 
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
( 

   Alert ("Цена подошла к МА снизу");
)

   return(0);
}
   
   
//+------------------------------------------------------------------+


有一个大括号被遗漏了。

 
请告知如何解决EA中FreeMarginCheck功能在不小心设置负量(手)值时出现的无效手数错误。在测试器中,要有一个关于错误批次的信息,但没有错误信息
 
Roman Sharanov:

我需要将 "之 "字形整合到我的指标中(现在它是按手柄计算的)。

问题是,我的指标没有使用OnCalculate()。

那么,我如何使 "之 "字形工作,以及如何获得率_总数和prev_calculated?

rates_total是图表上的条数。它是用Bars函数确定的。

prev_calculated - 自己创建一个类似物,全局声明(或静态声明),并在那里写出当前迭代中实际计算的条数。这意味着,在成功计算出指标值后,我们需要在其中记录当前的条数。如果计算不成功,最好将其置空,以便在下一次迭代时重新计算历史上每个柱形的指标值。

 

Re:Alekseu Fedotov

什么是支架,对不起

 
berkley75:

Re:Alekseu Fedotov

什么是支架,对不起

在括号里,是函数sin(30)的参数
在方括号中,是数组x[25]的索引。
空白启动()。
{
在大括号中的操作块
}
 
你好,请你告诉我如何在 "市场概览 "窗口中显示/删除某个符号?
 
STARIJ:
括号内是函数sin(30)的参数
方括号内为数组x[25]的索引
空白启动()。
{
在大括号中的操作块
}
谢谢,还是不能编译!即使你在最后加一个大括号,我注意到!!!!。