Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 679

 

Estou a escrever um robô, ligando o Ctrade, primeiro quero usar a lógica, segundo a qual no início de cada hora fará um negócio de compra a preço de mercado, após meia hora venderá tudo (Sell) a um novo preço de mercado. Quando o testo no testador, recebo erro Tipo de ordem inválido.

O meu instrumento é a SBER, o meu cliente é a Otkritie. A minha encomenda está em modo manual, a minha encomenda não é passada em conta real ou de demonstração.

Qual poderá ser o erro? É verdade que a bolsa de valores não está autorizada a negociar ao preço do mercado?

 
post_ek:

Estou a escrever um robô, ligando o Ctrade, primeiro quero começar com uma lógica onde fará um negócio de compra ao preço de mercado no início de cada hora, após meia hora venderá tudo a um novo preço de mercado. Quando o testo no testador, recebo erro Tipo de ordem inválido.

O meu instrumento é a SBER, o meu cliente é a Otkritie. A minha encomenda está em modo manual, a minha encomenda não é passada em conta real ou de demonstração.

Qual poderá ser o erro? É verdade que a bolsa de valores não está autorizada a negociar ao preço do mercado?

Não consigo compreender o que escreveu sem o seu código e porque não está a funcionar para si.
 
Olá. Se a EA estiver a funcionar num portátil e estiver em modo de hibernação, a EA ligada funcionará, neste caso ?
 
Movlat Baghiyev:
Boa tarde. Se a EA estiver a funcionar num portátil e tiver entrado em modo de hibernação, a EA ligada irá funcionar neste caso?
E irá activar a impressora no registo de quaisquer valores e irá descobrir. Se não imprimir, então não está a funcionar.
 
Vitalie Postolache:
E incluirá a impressão no registo de quaisquer valores e descobrirá. Se não se imprime, não funciona.
Isso é claro ... Pensei que alguém poderia partilhar a sua experiência com um novato
 
Movlat Baghiyev:
Bom dia. Se a EA está a funcionar num portátil e adormeceu, a EA ligada funcionará, neste caso?

O modo de hibernação é normalmente o que desliga a unidade,

Instalei recentemente um servidor, e apenas no dia 3 vi que o computador estava a dormir, ou seja, não estava a funcionar, ou seja, todos os EAs não estavam a funcionar,

Desactivei o modo de hibernação e tudo está bem.

 
Movlat Baghiyev:
Isso é claro ...estava a pensar se alguém poderia partilhar a sua experiência com um novato.
Bem, na minha experiência não há muito trabalho em modo de hibernação, apenas alguns serviços do sistema.
 
Movlat Baghiyev:
Olá. Se o conselheiro estiver a funcionar num portátil e este estiver em modo de hibernação, o conselheiro ligado irá trabalhar neste caso ?

Não. Não vai funcionar. Nas definições de potência, definir a fonte de alimentação:

NÃO ao modo de sono!

 
Sergey Gritsay:
Sem o seu código, é difícil compreender o que escreveu e porque não funciona.
//+------------------------------------------------------------------+
//|                                                         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:

Esta não é a forma de o fazer:

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

ou antes, após tal declaração, deve rubricar explicitamente(atribuir valores a) estas variáveis no OnInit().

O método de venda também deve ser rodeado de controlos, tais como

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

E também pode haver uma captura - de manhã, na abertura da negociação, o leilão não começa imediatamente, não a partir do primeiro segundo - é aí que os erros são possíveis.

Razão: