初学者的问题 MQL5 MT5 MetaTrader 5 - 页 679

 

我正在写一个机器人,连接Ctrade,首先我想从一个逻辑开始,它将在每小时开始时以市场价格进行买入交易,半小时后它将以新的市场价格卖出所有东西。当我在测试器中测试时,我得到错误的无效订单类型。

我的仪器是SBER,我的客户是Otkritie。我的订单 是手动模式,我的订单 在真实或模拟账户中没有通过。

可能的错误是什么?股票市场不允许按市场价格交易,这是真的吗?

 
post_ek:

我在写一个机器人,连接Ctrade,首先我想使用逻辑,根据这个逻辑,在每个小时的开始,它将以市场价格进行买入交易,半小时后,它将以新的市场价格卖出所有东西(卖出)。当我在测试器中测试时,我得到错误的无效订单类型。

我的仪器是SBER,我的客户是Otkritie。我的订单 是手动模式,我的订单 在真实或模拟账户中没有通过。

可能的错误是什么?股票市场不允许按市场价格交易,这是真的吗?

我不明白你写的东西没有你的代码,为什么它对你不起作用。
 
你好.如果EA运行在笔记本电脑上,并且处于休眠模式,在这种情况下,插入的EA能不能工作?
 
Movlat Baghiyev:
下午好!如果EA在笔记本电脑上运行,并且进入休眠模式,在这种情况下,连接的EA会工作吗?
而你将在任何数值的日志中启用打印机,你会发现。如果它不打印,那么它就不工作。
 
Vitalie Postolache:
而你将包括打印在日志中的任何值,并发现。如果它不打印,就不能工作。
这很清楚......我想有人可以与新手分享他们的经验。
 
Movlat Baghiyev:
日安.如果EA在笔记本上运行,它进入睡眠状态,在这种情况下,插入的EA能工作吗?

休眠模式通常是关闭硬盘的模式。

我最近安装了一台服务器,在第3天我才看到电脑处于睡眠状态,即不工作,也就是说,所有的EA都不工作。

我禁用了休眠模式,一切都很正常。

 
Movlat Baghiyev:
这很清楚......我想知道是否有人能与新手分享他们的经验。
根据我的经验,在休眠模式下没有什么工作,只有一些系统服务。
 
Movlat Baghiyev:
你好 .如果顾问在笔记本电脑上运行,并且它处于休眠模式,在这种情况下,连接的顾问会工作吗?

不,这行不通。在电源设置中,设置电源。

对睡眠模式说不!

 
Sergey Gritsay:
没有你的代码,就很难理解你所写的东西,以及它为什么不工作。
//+------------------------------------------------------------------+
//|                                                         Gear.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade/Trade.mqh>
CTrade  trade;

bool TimeFlag, FLG;
int TimeScale=50, TimeInMemory, TimeNow;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  //---Блок получения информации с биржи    
  MqlTick oCurrentTick;
  SymbolInfoTick(Symbol(), oCurrentTick);
//---Блок определения начала нового временного интервала
   TimeFlag=false;
   datetime tm=TimeCurrent();
   MqlDateTime stm;
   TimeToStruct(tm,stm);
   if(MathMod(StringToInteger((string)stm.min),TimeScale)==0)
     {
      TimeNow=StringToInteger((string)stm.min);
     }
   if(TimeNow != TimeInMemory)
     {
      TimeInMemory=TimeNow;
      TimeFlag=true;
      //Print(_Symbol);
     }
    
     if(TimeFlag)
       {
       if(FLG)
         {
   if(!trade.Buy(1,_Symbol))
     {
      //--- сообщим о неудаче
      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }
         FLG=false;
         }
       else
         {
         trade.Sell(1);
         FLG=true;
         }
       }
  }
//+------------------------------------------------------------------+
 
post_ek:

这不是做这件事的方法。

bool TimeFlag,FLG;
int TimeScale=50,TimeInMemory,TimeNow;

或者说,在这样的声明之后,你必须在OnInit()中明确地初始化(给 这些变量赋值)。

卖出方法的周围也必须有检查,比如说

trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");

而且还可能有一个陷阱--在早上,在开盘时,拍卖不会立即开始,不是从第一秒开始--这时就有可能出现错误。