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

 
Igor Makanu:

使用https://www.mql5.com/ru/docs/dateandtime/timecurrent

第二个版本的函数调用

一般来说,它是https://www.mql5.com/ru/docs/dateandtime/timetostruct

非常感谢您提供的宝贵信息。

我明白这个结构是什么,如何运作,但我还没有理解所有的细节。

我还没有完全掌握与之相关的微妙之处。在清晰的例子的帮助下,我对新材料的学习有了很大的提高。
如果你能告诉我如何在mql5中写出以下条件的代码,我将非常感激
我已经学会了如何使用结构打开一个订单


如果(Hour()==10)

来打开一个订单。

你不需要写模式来打开订单....。只有条件的书写。

再次感谢您的帮助。

 
Igor Makanu:

必须是你想如何确定酒吧的价格和时间。

或者说是图表上的时间+价格值中的鼠标点击坐标,条形图需要通过iBarShift()定义。

是的,就是这样,因为它被进一步理解。谢谢你)

 
ANDREY:

非常感谢您提供的宝贵信息。

我明白结构是什么,如何运作,但我还没有掌握其中的内涵和外延。

我通过实例更好地学习新材料。在清晰的例子的帮助下,我对新材料的学习有了很大的提高。
如果你能告诉我如何在mql5中写出以下条件的代码,我将非常感激
我已经学会了如何使用结构打开一个订单


如果(Hour()==10)

来打开一个订单。

你不需要写模式来打开订单....。只是记录一下情况。

再次感谢您的帮助。

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

非常感谢您的帮助。现在一切都很清楚,可以理解。

 

大家好!
,我正试图将mql4转为mql5。我已经创建了一个简单的代码,打开订单进行测试。在测试器中,EA打开了订单。我把函数Print()放在了void OnTick()函数的开头,我的专家顾问将在每个tick 进入这个函数,并在日记的每个tick上打印。而在第五次打勾时,专家顾问没有输入任何Print()函数,也没有在汽车 注册日志中打印出任何东西在专家顾问中,可视化和优化被禁用。
请告知如何修改代码,使Print()在每一次打勾时都打印在日记本上,就像4.A.C.D.D.E.E.E.E.E.E.E.E.。
提前感谢那些帮助我的人。

以下是我的代码

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

我已将EA的存款增加到100 000。结果,在每一个tick上Print()被打印在journal....,但没有一个交易被打开。

但我需要它打开交易和Print()被打印

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

大家好!
,我正试图将mql4转为mql5。我已经创建了一个简单的代码,打开订单进行测试。在测试器中,我的EA打开了订单。我把函数Print()放在了void OnTick()函数的开头,我的专家顾问将在每个tick 进入这个函数,并在日记的每个tick上打印。而在第五次打勾时,专家顾问没有输入任何Print()函数,也没有在汽车 注册日志中打印出任何东西在专家顾问中,可视化和优化被禁用。
请告知如何修改代码,使Print()在每一次打勾时都打印在日记本上,如4.A.C.D.E.E.E.E.E.。
提前感谢那些帮助我的人。

以下是我的代码

我已将EA的存款增加到100 000。结果,在每一个tick上Print()被打印在journal....,但没有一个交易被打开。

但我需要交易被打开,Print()被打印

看一下日志,看一下打印的内容,每一步的信息都是在那里输入的。最有可能的是,打开订单时出了问题,EA不工作了。

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

我们已经讨论过是否有必要从MQL4中反复访问终端数据,那么OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

我认为也可以在每个勾选中使用100500次,因为输出将在每秒增加数百万次。


市场观察窗口中的符号越多,终端本身的负荷就越大,而且,如果你从很多不同的符号中调用数据,那么你也会得到滞后。

也就是说,如果你合理地使用终端,没有什么会被冻结--在市场观察窗口中,有十个你使用的符号


我没有检查过你可以同时打开多少个图表,但我认为如果你把历史记录限制在1000条,那么我认为终端可能会打开几十个图表窗口而没有任何问题。

100

 
Valeriy Yastremskiy:

看一下日志,看看它打印了什么,每一步都有信息记录。最有可能的是,开单有问题,EA不工作了。

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

谢谢你的提示。

这真的没有用。它说。

2020.10.27 06:40:45.311 Tester EURUSD: 历史数据从2018.01.02 00:00开始

2020.10.27 06:40:45.312 核心1 连接到127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 已连接

2020.10.27 06:40:45.320 Core 1 authorized (agent build 2650)

2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): 从2020.09.01 00:00到2020.09.03 00:00测试 experts\GRAAL.ex5

2020.10.27 06:40:45.327 核心1 通用同步完成。

2020.10.27 06:40:45.328 Tester 分析的历史质量为100%。

2020.10.27 06:40:45.348 Core 1 test experts\GRAAL.ex5 on EURUSD,M1 thread finished

2020.10.27 06:40:45.348 核心1

2020.10.27 06:40:45.348 Core 1 登录(构建2650

2020.10.27 06:40:45.348 Core 1 发现货币为美元的账户信息

2020.10.27 06:40:45.348 Core 1 1482字节的测试器参数被加载

2020.10.27 06:40:45.348 Core 1 1724字节的输入参数被加载。

2020.10.27 06:40:45.348 核心1 以点计算利润,初始存款10000,杠杆1:100

2020.10.27 06:40:45.348 Core 1 成功初始化。

2020.10.27 06:40:45.348 Core 1 共收到731字节的初始化数据

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD:符号 要同步了

2020.10.27 06:40:45.348 Core 1 EURUSD: 符号已经同步,收到18个字节

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 从2019.01.02 06:00开始缓存的历史数据

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): 每个tick都在产

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 从2020.09.01 00:00到2020.09.03 00:00开始测试experts\GRAAL.ex5的输入。

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 核心1 Lot=0.1

2020.10.27 06:40:45.348 核心1 最终余额10000.00点

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated.测试在0:00:00.019通过。

2020.10.27 06:40:45.348 核心1 使用了270Mb内存,包括35Mb的历史数据,64Mb的tick数据。

2020.10.27 06:40:45.348 Core 1 日志文件 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log "写入

2020.10.27 06:40:45.371 Core 1 连接关闭

我正在测试它,为期一天。这意味着专家顾问应该打开1440个订单。这可能是一个问题。也许,在同一时间内,对未结订单的数量有一些限制。
如果我检查了,可能是因为当我的EA的存款有10 000时,它只开了300个订单,其余的因某些与钱有关的原因而错过了(我从日记账中了解到)。后来,我把EA的存款增加到100 000,它就没有权利再跳过了。而且它完全停止了开单。

但后来我又把EA的存款减少到10 000。然而,我的专家顾问仍然没有打开任何东西,总是写着我上面所说的数值。

我已经创建了另一个EA。我把同样的代码下载到里面。我有10 000元的存款。我也遇到了同样的问题:我没有打开订单。
请告知如何使我的EA正常工作。它发出了同样的信息,只是我的高亮黄线有271,而不是270 mb
我有Windows 10。我有64位操作系统和8GB内存。
谢谢你。

 
ANDREY:

谢谢你的提示。

这真的没有用。它说。


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated.测试在0:00:00.019通过。

2020.10.27 06:40:45.348 核心1 使用了270Mb内存,包括35Mb的历史数据,64Mb的tick数据。

2020.10.27 06:40:45.348 Core 1 日志文件 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log "写入

2020.10.27 06:40:45.371 Core 1 连接关闭

我正在测试它,为期一天。这意味着专家顾问应该打开1440个订单。这可能是一个问题。也许,对同时开启的订单数量有一些限制。
如果我检查了,可能是因为当我的EA的存款有10 000时,它只开了300个订单,其余的因某些与钱有关的原因而错过了(我从日记账中了解到)。后来,我把EA的存款增加到100 000,它就没有权利再跳过了。而且它完全停止了开单。

但后来我又把EA的存款减少到10,000。专家顾问仍然没有打开任何东西,总是写着我在顶部指出的内容。
请告知如何使我的EA正常工作。
我将一直努力让它像以前一样工作。

如果每天有1440个订单,专家顾问应该检查分钟的开始,或者更简单,检查一分钟的柱子的出现。而它在这一刻打开。你没有,因此EA在每个tick都开仓,根据我们在当前报价的符号,这本身就是一个艰难的条件。这一条件可能没有得到满足,因此会漏掉蜱虫。而在某些时候,会发生一个关键的错误。

也是订单执行 的类型(建立头寸的订单) 全部或没有。

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

能否请你告诉我!?

为什么当新的刻度出现时,服务器的时间没有更新?

在EA启动的那一刻,一切都按部就班地进行,但时间过去后,当前分钟的新值却没有进入变量。

也就是说,专家顾问的工作取决于变量int M = TimeMinute(TimeCurrent())中获得的数字。

实际上这一行代码来自于参考文献,它不起作用。

例如,我在12点启动它-- 服务器返回的当前时间 与变量中的时间相对应,但随后变量仍停留在12点,尽管时钟上已经有15-20分钟了。

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...
原因: