Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 479

 
Vladislav Andruschenko:
Difusión, si se ajusta a la corriente. Fecha de finalización de la prueba si se factura como actual. Podría haber muchas más razones.

Diferencial fijo, fecha de finalización 01.01.18

 
Aidar Kaliaskar:

Diferencial fijo, Fecha de finalización 01.01.18


coste por punto..... etc.


probar este fin de semana.

 

Estoy tratando de hacer un indicador en MQL4, que trazaría una línea en el gráfico "US.500+" por los precios de cierre de "US.30+". En general, las líneas de precios de dos símbolos serían visibles en un gráfico. Abajo está el código, pero no funciona. En el mensaje de registro "el indicador en el búfer personalizado aún no es compatible". Enséñame por qué no funciona. Opps.

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

Estoy tratando de hacer un indicador en MQL4, que trazaría una línea en el gráfico "US.500+" por los precios de cierre de "US.30+". En general, las líneas de precios de dos símbolos serían visibles en un gráfico. Abajo está el código, pero no funciona. En el mensaje de registro "el indicador en el búfer personalizado aún no es compatible". Enséñame por qué no funciona. Opps.

Porque hay que utilizar la primera forma de llamada.
 
Artyom Trishkin:
Porque hay que utilizar la primera forma de llamada.
Lo cambié y... ha funcionado. Muchas gracias.
 
STARIJ:

He encontrado la razón - 60 segundos deben ser contados fuera de un bucle

Gracias, gracias por la aclaración.

Si en lugar de 60 segundos, serán 300.

Lostiempos de apertura de la posición son diferentes, hay que escribir 300 segundos de diferencia con el tiempo de apertura de la posición.

¿Cómo debo hacerlo?

 
lil_lil Si son 300 en lugar de 60 segundos... hay que escribir a intervalos de 300 segundos desde que se abrió la posición, ¿cómo se hace?

¿Has probado mi programa? Realmente no entiendo 300... Si pones 300 en lugar de 60, ¿es cierto? Si me dices cómo sacarle provecho, ¡intentaré entenderlo mejor!

 

Ayuda con el EA, como siempre el problema es probablemente trivial, pero no he resuelto el enigma

Debe abrirse la compra siema>smma deema o no llegar a ellapunto(mismo para vender). Debería cerrar el trato al cierre del bar-abrir un nuevo bar. La siguiente se abre de la misma manera, pero con una condición por encima delprecio de apertura de la anterior, es decir,last_order_price.

Pero al final se abre donde quiere y se cierra. (Al principio de la prueba se abre e inmediatamente se cierra)

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

Ayuda con EA, como siempre el problema es probablemente trivial, pero no he resuelto el enigma

Debe abrirse la compra siema>smma deema o no llegar a ellapunto(mismo para vender). Deberían cerrar el trato al cierre del bar-abrir un nuevo bar. La siguiente se abre de la misma manera, pero con una condición por encima delprecio de apertura de la anterior, es decir,last_order_price.

Pero al final se abre donde quiere y se cierra. (Al principio de la prueba se abre e inmediatamente se cierra)

¿Cómo puedo sugerirlo? ¿Guardar el código en el portapapeles, escribirlo en el Asesor Experto y ejecutarlo en el probador de estrategias? Bueno, veré que se abra y se cierre. ¿Y qué? Puede que lo ejecute en una demo - hoy es sábado, mañana es domingo, el mercado está cerrado. ¿Hay que mirarlos con los ojos? Hay que tener en cuenta los valores de todas las variables. Antes existía un método de depuración con lápiz y papel - pruébalo. También puede poner un Alert("Bid=", Bid, Fast+P=",Fast_Ema+point*_Point," ....) antes de todos los OrderSelect y OrderClose y establecer un día en el probador por ejemplo del 19 al 20 de febrero y luego después de la prueba para abrir el registro, hacer una copia, eliminar las líneas innecesarias y analizar. El MetaEditor también tiene una función de depuración. Cuando se aprende a depurar... será genial.
 

¿Dónde tiene un botón?

Me pueden decir como alinear el texto en el control CSpinEdit desde el #include <Controls\SpinEdit.mqh> (campo de texto con incremento).

Por defecto está alineado al borde izquierdo, pero quiero que esté alineado a la derecha.