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

 

Aquí está el propio experto - limpiado las cosas innecesarias - había un montón de bashing :)

Archivos adjuntos:
 

¿Cómo se cierra un pedido?

Lo abrí así:

mrequest.action = TRADE_ACTION_DEAL; // ejecución inmediata

mrequest.price = NormalizeDouble(Ask,_Digits); // último precio Ask

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits); // Stop Loss

mrequest.tp = 0; // Toma de beneficios

mrequest.symbol = _Symbol; // símbolo

mrequest.volumen = Lotes; // número de lotes a negociar

mrequest.magic = 1; // Número mágico

mrequest.type = ORDER_TYPE_BUY; // orden de compra

mrequest.type_filling = ORDER_FILLING_FOK; // tipo de orden - todo o nada

mrequest.desviación=100; // deslizamiento del precio actual

OrderSend(mrequest,mresult);

El problema es que tenemos más de una orden abierta, y necesitamos cerrar una orden selectiva...

 
Forex_Noob: ¿Cómo se cierra un pedido?

La cuestión es que no hay una orden abierta, sino varias, y hay que cerrar selectivamente...

1. Introduzca el código correctamente.

2. Si se abren varias órdenes en una dirección, el resultado es una posición agregada.

3. Para cerrar una posición abierta hay que colocar órdenes dirigidas en sentido contrario, cuyo volumen agregado sea igual al volumen de la posición a cerrar.

4. Si es necesario cerrar sólo una parte de una posición, entonces es necesario exponer órdenes dirigidas en sentido contrario con el correspondiente volumen agregado.

 
Yedelkin:

1. Introduzca el código correctamente.

2. Si se abren varias órdenes en la misma dirección, el resultado es una posición agregada.

3. Para cerrar una posición abierta hay que colocar órdenes dirigidas en sentido contrario, cuyo volumen agregado sea igual al volumen de la posición a cerrar.

4. Si sólo hay que cerrar una parte de una posición, se deben colocar órdenes opuestas con el volumen agregado correspondiente.

Bien, gracias. El único problema ahora es que las posiciones no siempre se cierran con una orden de cierre...
 
Forex_Noob:
Bien. Gracias. Sólo que ahora otro problema - la orden de cierre no siempre cierra las posiciones...
Mira en el cuaderno de bitácora - los resultados están registrados allí.
 

Yedelkin,Reshetov,

Hola,

¿Cuál es el método más sencillo para extraer datos de un indicador para varios pares?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
Gracias de antemano.
 
mario065: ¿Cuál es el método/método más fácil para obtener datos de un indicador para varios pares?

¿Se refiere a esto?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

¿Te refieres a esto?

Hola,

Por supuesto que no.

Si hay más de un pavo, hay que hacerlo cien veces por cada uno, ya que comen muchas parejas.

Un manejador para utilizar todos los pares.

 
mario065: Si hay varios indicadores, para cada uno de ellos es necesario hacer tantas veces como el número de pares coma. Un manejador para usar todos los pares.

¿Así que quieres tener un solo mango, pero el indicador iATR funciona con diferentes caracteres?

De la descripción del indicador iATR se desprende que está diseñado para trabajar con un solo símbolo. Por lo tanto, para trabajar con 4 caracteres, es necesario ejecutar 4 copias del indicador iATR . A su vez, el manejador del indicador es necesario para acceder a los valores de la copia específica del indicador, y si está ejecutando 4 copias del indicador, tendrá que almacenar los manejadores apropiados en algún lugar.

Si la cuestión de utilizar un solo mango es principal, tendremos que reescribir el indicadoriATR para que funcione con varios símbolos a la vez, tenga el número correspondiente de matrices de valores, etc.Entonces será posible utilizar un asa

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

y utilizarlo para dirigirse a este o aquel búfer de indicadores de miATR.

 

También puedes escribirlo así (esquemáticamente):

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }