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

 
Vladimir Pavlov:

Estupidamente fez um guião para copiar dentro do computador.... Não copia!!!

Então, onde está a descrição do erro? Que sistema operativo? Que construção do MetaTrader 5?

Tem direitos de escrita para a pasta?


Acrescentado: parece que se não houver directório, tem de ser criado primeiro.


Ao copiar para directório existente - sem problemas. O MetaTrader 5 irá funcionar sem erros.

 

Como posso ter a certeza de que a posição com o ID dado foi encerrada?

A solução óbvia - quando o PositionSelectByTicket retorna falso, mas isto pode provavelmente acontecer numa situação em que as posições abertas não tiveram tempo de ser carregadas no terminal quando ligadas à conta de negociação?

Uma solução um pouco mais complicada - PositionSelectByTicket retorna falso e HistorySelectByPosition retorna verdadeiro. Neste caso, se o histórico para esta posição for carregado, então a lista de posições em aberto deve ser carregada.

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

Aguardar que o terminal se sincronize. Por exemplo, enquanto(HistorySelect).

 
fxsaber:

Aguardar que o terminal se sincronize. Por exemplo, enquanto (HistorySelect).

Não sou especialista no funcionamento interno do terminal. Mas talvez seja gaoantado que quando o OnInit chega, a tabela de posições abertas (e possivelmente o histórico de negociação) já está carregada?

 
. ... Rick D. ... .:

Não sou especialista no funcionamento interno do terminal.

Também longe de ser um perito. É que várias opções me vêm à mente para experimentar de uma só vez. E o que vai funcionar terá de ser experimentado.

 
Vladimir Karputov:

A solução mais fácil: abrir um gráfico do instrumento financeiro desejado no MetaTrader e colocar o Expert Advisor sobre ele.

Isto é conhecido. Mas pergunto-me como colocar o par no programa? Há alguma função para isto?
 
cepreu1:
Isto é conhecido. Mas eu quero saber como colocar o par na aplicação ? Existe uma função para isto?

Facilmente.

Por exemplo, operações comerciais. VerCTrade trade class,Buy method:

bool  Buy( 
   double        volume,          // объем позиции 
   const string  symbol=NULL,     // символ 
   double        price=0.0,       // цена исполнения 
   double        sl=0.0,          // цена Stop Loss 
   double        tp=0.0,          // цена Take Profit 
   const string  comment=""       // комментарий 
   )

Destaquei o local onde se pode especificar o símbolo requerido.


Ou, por exemplo, receber dados sobre preços de abertura e fecho... -CopyRates:

int  CopyRates( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   MqlRates         rates_array[]      // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:

Facilmente.

Por exemplo, operações comerciais. VerCTrade trade class,Buy method:

Destaquei o local onde se pode especificar o símbolo requerido.


Ou, por exemplo, receber dados sobre preços de abertura e fecho... -CopyRates:

Sim, ok. Mas não especifiquei que quero atribuir um par no arranque, mas

sem abrir uma posição. E a Buy fá-lo abrindo uma posição,

eCopyRates dá osdados históricos do par sem os atribuir.

 
cepreu1:

Sim, está bem. Mas não especifiquei que queria designar um casal quando começasse, mas

sem abrir uma posição. E a Buy faz isto ao abrir uma posição,

eCopyRatesdados históricos de pares sem os atribuir.

Estás a ser florido, mas vou tentar adivinhar: precisas de um parâmetro de entrada com o nome do símbolo? Depois aqui está o código - especifica o símbolo desejado no parâmetro"InpSymbol". Este símbolo é verificado no OnInit() - se não existir tal símbolo, então o Expert Advisor será descarregado e aparecerá uma mensagem de erro no separador "Experts" do terminal (ou no separador "Journal" do Strategy Tester).

//+------------------------------------------------------------------+
//|                                                   Set Symbol.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//--- input parameters
input string   InpSymbol="ASDWER";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(InpSymbol)) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   string text=m_symbol.Name()+"\n"+
               "Ask "+DoubleToString(m_symbol.Ask(),m_symbol.Digits())+"\n"+
               "Bid "+DoubleToString(m_symbol.Bid(),m_symbol.Digits());
   Comment(text);

  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Se existir um símbolo especificado no parâmetro"InpSymbol", então a seguinte informação será exibida no gráfico

  • Nome simbólico
  • Preço de venda
  • Preço de licitação


Eis como funciona: iniciamos no EURUSD e especificamos o símbolo USDJPY nas definições. Portanto, funciona com o símbolo EURUSD, mas os dados (preços) provêm de USDJPY


Arquivos anexados:
 
Vladimir Karputov:

Estás a ser um pouco florido, mas deixa-me adivinhar: precisas de um parâmetro de entrada com um nome simbólico? Depois aqui está o código - especifica o símbolo requerido no parâmetro"InpSymbol". Este símbolo é verificado no OnInit() - se não existir tal símbolo, então o Expert Advisor será descarregado e aparecerá uma mensagem de erro no separador "Experts" do terminal (ou no separador "Journal" do Strategy Tester).

Se existir um símbolo especificado no parâmetro"InpSymbol", então a seguinte informação será exibida no gráfico

  • Nome simbólico
  • Preço de venda
  • Preço de licitação


Eis como funciona: iniciamos no EURUSD e especificamos o símbolo USDJPY nas definições. Portanto, funciona com o símbolo EURUSD, mas a informação (preços) vem dos EUA

Vladimir Karputov:

Estás a ser florido, mas deixa-me adivinhar: precisas de um parâmetro de entrada com o nome do símbolo? Depois aqui está o código - especifica o símbolo requerido no parâmetro"InpSymbol". Este símbolo é verificado no OnInit() - se não existir tal símbolo, então o Expert Advisor será descarregado e aparecerá uma mensagem de erro no separador "Experts" do terminal (ou no separador "Journal" do Strategy Tester).

Se existir um símbolo especificado no parâmetro"InpSymbol", então a seguinte informação será exibida no gráfico

  • Nome simbólico
  • Preço de venda
  • Preço de licitação


Eis como funciona: iniciamos no EURUSD e especificamos o símbolo USDJPY nas definições. Assim, acontece que funciona com o símbolo EURUSD, mas recebe informação (preços) a partir do símbolo USDJPY


Sim, mas neste exemplo, o Expert Advisor funciona em EURUSD, mas a informação (preços) é obtida a partir do símbolo USDJPY.

Porquê complicar as coisas, quero dizer, se tomarmos este exemplo, então lançamos o Expert Advisor no EURUSD ( ou em qualquer outro

par cambial necessário) e é isso, observamos este par, e depois, se necessário, abrimos uma posição.

Razão: