初学者的问题 MQL4 MT4 MetaTrader 4 - 页 147

 

EA应该从一个文件中读取一个数据数组,其形式为:date integer1 integer2 integer3 integer4,可以来自任何文件类型,除了bin。

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

它就会从这个文件夹中删除。

这里是代码。


int File()
{
int P=0;

int filehandle=FileOpen("qqq.csv",FILE_READ|FILE_CSV,","); 
if(filehandle!=INVALID_HANDLE) 
     { 
     datetime d = FileReadDatetime(filehandle);
   int I=FileReadNumber(filehandle);
     FileClose(filehandle);
     Comment(d+" "+I);
     }
     else {Comment("qqq.csv");}
return P;

}

你是否可以指定文件夹的路径,该文件不会被测试者删除?我理解的是,在测试过程中,所有的文件都从这个文件夹中删除,但当以编程方式创建文件时,它被放在这个文件夹中

 
Mikhail Simakov:

EA应该从一个文件中读取一个数据数组,其形式为:date integer1 integer2 integer3 integer4,可以来自任何文件类型,除了bin。

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

它就会从这个文件夹中删除。

下面是代码。

也许指定文件夹的路径,该文件不会被测试者删除?我理解的是,在测试时,所有的文件都从这个文件夹中删除,但当以编程方式创建文件时,它被放在这个文件夹中

也许我们应该使用带有FILE_COMMON 标志的FileCopy新的测试从头开始工作,这可能是一个小故障。

 
Konstantin Nikitin:

也许你应该使用带有FILE_COMMON 标志的FileCopy新的测试从头开始工作,这可能是一个小故障。

如果你在测试时将文件复制到一个文件夹中,它就会起作用))现在要弄清楚分隔符。

 

我开始在MQL4中编写一个交易面板,这里有一个悖论。一切看起来都很好,但每次我改变TF时,其他指标的线条和文字就会被画在我的面板上面。

以下是我检查的结果:当改变TF时,参数OBJPROP_BACK = false。这意味着这边一切都很好。

对这个问题有什么想法吗?

P.S. 事实上,我现在已经检查过了,源代码(我把它当作原型)的行为也是如此。在我改变了TF之后,它在面板和不使用OOP的指标所创造的线条上面画出了正常的线条。
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7:

我开始在MQL4中编写一个交易面板,这里有一个悖论。一切看起来都很好,但每次我改变TF时,其他指标的线条和文字都会被画在我的面板上面。

这是我所检查的:当改变TF时,参数OBJPROP_BACK = false。所以这边一切都很好。

对这个问题有什么想法吗?

P.S. 事实上,我现在已经检查过了,源代码(我把它当作原型)也是这样的。在我改变了TF之后,它在面板和不使用OOP的指标所创造的线条上面画出了正常的线条。
https://www.mql5.com/ru/code/19220

切换时间框架时,其他程序创建的对象会被删除,而新的对象会立即创建。在面板中,对象没有被删除,所以它们是 "旧的"。在图表上,"谁在最后,谁就在上面 "的原则适用。

你需要用DeInit()删除面板中的对象,并重新创建新的对象

 
Goya7:

我开始在MQL4中编写一个交易面板,这里有一个悖论。一切看起来都很好,但每次我改变TF时,其他指标的线条和文字都会被画在我的面板上面。

这是我所检查的:当TF被改变时,参数OBJPROP_BACK = false。所以,这边一切都很好。

对这个问题有什么想法吗?

P.S. 事实上,我现在已经检查过了,源代码(我把它当作原型)也是这样的。在我改变了TF之后,它在面板和不使用OOP的指标所创造的线条上面画出了正常的线条。
https://www.mql5.com/ru/code/19220
维塔利-穆齐琴科

切换时间框架时,其他程序创建的对象会被删除,而新的对象会立即创建。在面板中,对象没有被删除,所以它们是 "旧的"。在图表上,"谁在最后,谁就在上面 "的原则适用。

你需要使用DeInit()删除面板中的对象,并重新创建新的对象

最好是在事件中捕获新对象的创建,并重新绘制面板。

 
Vitaly Muzichenko:

当你切换时间时,其他程序创建的对象会被删除,而新的对象会立即创建。在面板中,对象没有被删除,所以它们是 "旧的"。图中适用 "上有老下有小 "的原则。

你需要使用DeInit()删除面板中的对象,并重新创建新的对象

谢谢你的想法。当然,在DeInit()中,它们被删除了。当改变TF时,Init()程序会通过,但有东西告诉我,面板没有被重新绘制。也就是说,我做了实验,安装了另一个面板,它在领土上是我的位置,然后删除了它。我的也没有了(在改变TF之前)--所以它没有重新绘制。((
你能告诉我更多关于如何重绘的信息吗?


塔拉斯-斯洛博亚尼克

最好是在事件中捕获新对象的创建,并重新绘制面板。

告诉我怎么做,我作为一个程序员只有半小时的时间。:)
 
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);
}


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//событие создания нового объекта на чарте
if(id==CHARTEVENT_OBJECT_CREATE && StringFind(sparam, prefix, 0)<0)
   {
   //удаляем панель и рисуем заново

   ChartRedraw();
   }
}

ps.这提醒了我--你还需要检查创建的对象的 名称,以确保它不是 "你的 "对象(你的对象的名称前缀)。
或代替名称,比较对象的类型。

 
公民们,告诉我,如果我做得对的话!!!。我需要专家顾问在它没有进入30或70区时进行交易,而当它进入时,它不会交易!!!。这是正确的做法吗?

RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 >70 &&70> RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue) ;
}
 
ponochka:
公民们,告诉我,如果我做得对的话!!!。我需要专家顾问在它没有进入30或70区时进行交易,而当它进入时,它不会交易!!!。这是正确的做法吗?

它是这样的,据我所知,你需要

int RSIPeriod = 0, Slippage = 5, Magic = 1234;
double lot = 0.1;

void OnStart()
{
     double RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1),
            RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);
     int ticket = 0;
     
     if(RSI3 <= 30 && RSI4 <= 30)
          ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
     
     if(RSI3 >= 70 && RSI4 >= 70)
          ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}