Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 903

 
Vladimir Pavlov:

Estúpidamente hice un script para copiar dentro del ordenador.... ¡¡¡No copia!!!

¿Dónde está la descripción del error? ¿Qué sistema operativo? ¿Qué versión de MetaTrader 5?

¿Tienes derechos de escritura en la carpeta?


Añadido: parece que si no hay directorio, hay que crearlo primero.


Al copiar en un directorio existente, no hay problema. MetaTrader 5 funcionará sin errores.

 

¿Cómo puedo estar seguro de que la posición con el identificador dado se ha cerrado?

La solución obvia - cuando PositionSelectByTicket devuelve false, pero esto probablemente puede ocurrir en una situación en la que las posiciones abiertas no han tenido tiempo de cargarse en el terminal cuando se conecta a la cuenta de operaciones?

Una solución un poco más complicada - PositionSelectByTicket devuelve false y HistorySelectByPosition devuelve true. En este caso, si se carga el historial de esta posición, se debe cargar la lista de posiciones abiertas.

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

Espere a que el terminal se sincronice. Por ejemplo, mientras(HistorySelect).

 
fxsaber:

Espere a que el terminal se sincronice. Por ejemplo, mientras (HistorySelect).

No soy un experto en el funcionamiento interno del terminal. Pero puede ser gaoanted que cuando llega OnInit, la tabla de posiciones abiertas (y posiblemente el historial de operaciones) ya está cargada?

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

No soy un experto en el funcionamiento interno del terminal.

También está lejos de ser un experto. Es que se me ocurren varias opciones para probar a la vez. Y habrá que experimentar con lo que funcione.

 
Vladimir Karputov:

La solución más fácil: abrir un gráfico del instrumento financiero deseado en MetaTrader y colocar el Asesor Experto en él.

Esto es conocido. Pero me pregunto cómo establecer el par en el programa. ¿Existe una función para esto?
 
cepreu1:
Esto es conocido. Pero quiero saber cómo establecer el par en la aplicación? ¿Existe una función para esto?

Fácilmente.

Por ejemplo, las operaciones comerciales. Ver clase de comercioCTrade, métodoBuy:

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=""       // комментарий 
   )

He resaltado el lugar donde se puede especificar el símbolo requerido.


O, por ejemplo, recibir datos sobre los precios de apertura y cierre... -Copias:

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

Fácilmente.

Por ejemplo, las operaciones comerciales. Ver clase de comercioCTrade, métodoBuy:

He resaltado el lugar donde se puede especificar el símbolo requerido.


O, por ejemplo, recibir datos sobre los precios de apertura, de cierre... -Copias:

Sí, de acuerdo. Pero no he especificado que quiero asignar un par al inicio, sino

sin posición de apertura. Y Buy lo hace abriendo una posición,

yCopyRates dadatos históricos del par sin asignarlo.

 
cepreu1:

Sí, de acuerdo. Pero no he especificado que quiero asignar una pareja al arrancar, sino

sin abrir una posición. Y Buy lo hace abriendo una posición,

yCopyRates dalos datos históricos del par sin asignarlos.

Estás siendo florido, pero intentaré adivinar: ¿necesitas un parámetro de entrada con el nombre del símbolo? A continuación, el código: se especifica el símbolo deseado en el parámetro"InpSymbol". Este símbolo se comprueba en OnInit() - si no existe tal símbolo, el Asesor Experto se descargará y aparecerá un mensaje de error en la pestaña "Expertos" del terminal (o en la pestaña "Diario" del Probador de Estrategias).

//+------------------------------------------------------------------+
//|                                                   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);
  }
//+------------------------------------------------------------------+

Si existe un símbolo especificado en el parámetro"InpSymbol", se mostrará la siguiente información en el gráfico

  • Nombre del símbolo
  • Pregunte el precio
  • Precio de la oferta


Así es como funciona: lo iniciamos en EURUSD y especificamos el símbolo USDJPY en la configuración. Así, funciona con el símbolo EURUSD, pero los datos (precios) provienen de USDJPY


Archivos adjuntos:
 
Vladimir Karputov:

Estás siendo un poco florido, pero déjame adivinar: ¿necesitas un parámetro de entrada con un nombre de símbolo? A continuación, el código - se especifica el símbolo requerido en el parámetro"InpSymbol". Este símbolo se comprueba en OnInit() - si no existe tal símbolo, el Asesor Experto se descargará y aparecerá un mensaje de error en la pestaña "Expertos" del terminal (o en la pestaña "Diario" del Probador de Estrategias).

Si existe un símbolo especificado en el parámetro"InpSymbol", se mostrará la siguiente información en el gráfico

  • Nombre del símbolo
  • Pregunte el precio
  • Precio de la oferta


Así es como funciona: lo iniciamos en EURUSD y especificamos el símbolo USDJPY en la configuración. Por lo tanto, funciona con el símbolo EURUSD, pero la información (precios) viene de EE.UU.

Vladimir Karputov:

Estás siendo florido, pero déjame adivinar: ¿necesitas un parámetro de entrada con el nombre del símbolo? El código es el siguiente: se especifica el símbolo requerido en el parámetro"InpSymbol". Este símbolo se comprueba en OnInit() - si no existe tal símbolo, el Asesor Experto se descargará y aparecerá un mensaje de error en la pestaña "Expertos" del terminal (o en la pestaña "Diario" del Probador de Estrategias).

Si existe un símbolo especificado en el parámetro"InpSymbol", se mostrará la siguiente información en el gráfico

  • Nombre del símbolo
  • Pregunte el precio
  • Precio de la oferta


Así es como funciona: lo iniciamos en EURUSD y especificamos el símbolo USDJPY en la configuración. Así, resulta que funciona con el símbolo EURUSD, pero recibe información (precios) del símbolo USDJPY


Sí, pero en este ejemplo, el Asesor Experto se ejecuta en EURUSD, pero la información (precios) se obtiene del símbolo USDJPY.

Para qué complicar las cosas, es decir, si tomamos este ejemplo, entonces lanzamos el Asesor Experto en EURUSD ( o cualquier otro

par de divisas necesario) y eso es todo, observamos este par, y luego, si es necesario, abrimos una posición.