Simplificando, CopyOpen es innecesario para OnCalculate, pero ¿para que vea sólo el historial de la ventana de la terminal?
El array mas se crea con tamaño cero en cada tick y no cambia su tamaño en ningún otro lugar. Por lo tanto, cualquier acceso a la misma causará un desbordamiento de la matriz.
Para resolver el problema, debemos redimensionar el tamaño, que contendrá las lecturas de todas las barras de la historia, o vincularlo al buffer del indicador (declarado como una variable global del programa). Si lo he entendido bien, estos valores deberían mostrarse con el indicador.
Simplificado, CopyOpen entiendo que es superfluo para OnCalculate, pero ¿para que sólo vea el historial de la ventana del terminal?
Ejemplo:
//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://mql5.com/ru/users/artmedia70"#property version"1.00"#property indicator_separate_window#property indicator_buffers1#property indicator_plots1//--- plot OC#property indicator_label1"Open/Close"#property indicator_type1DRAW_LINE#property indicator_color1clrRed#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffersdouble BufferOC[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Задаём массив BufferOC как буфер индикатораSetIndexBuffer(0,BufferOC,INDICATOR_DATA);
//--- Устанавливаем ему направление индексации как у таймсерииArraySetAsSeries(BufferOC,true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка на минимальное колиество баров для расчётаif(rates_total<1) return0;
//--- Установка массивов буферов как таймсерийArraySetAsSeries(open,true);
ArraySetAsSeries(close,true);
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1) // если это первый запуск, или изменение истории, или открытие нового бара
{
limit=rates_total-1; // установим начало цикла на начало исторических данныхArrayInitialize(BufferOC,EMPTY_VALUE); // инициализируем массив
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
if(close[i]==0) continue;
BufferOC[i]=open[i]/close[i];
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
El array mas se crea con un tamaño cero en cada tick y no cambia su tamaño en ningún otro lugar. Por lo tanto, cualquier referencia a ella provocará la salida del array.
Para resolver el problema, debe redimensionarlo al tamaño que contendrá las lecturas de todas las barras del historial, o vincularlo al buffer del indicador (declarado como una variable global del programa). Si lo he entendido bien, son estos valores los que se deben mostrar con el indicador.
Error mío, mas[] debería ser realmente un array global, pero el buffer de indicadores tampoco es adecuado, será más bien un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través del buffer indicador?
Mi imprecisión, mas[] es realmente un array global, pero el buffer indicador tampoco es adecuado, más bien sería un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través del buffer indicador?
No entiendo a qué me refiero con lo de multidimensional. Estamos hablando de un array unidimensional. Además, en MQL4 la dimensión máxima de un array es 4.
Para que la matriz tenga el mismo tamaño que la serie temporal, debemos redimensionarla según el número de barras disponibles en el gráfico para el símbolo y el periodo necesarios:
double fArray[];
int nBarsCnt = iBars(<символ>, <таймфрейм>);
if (ArrayResize(fArray, nBarsCnt) != nBarsCnt)
{
// Не удалось изменить размер массиваreturn;
}
ArraySetAsSeries(fArray, true);
Mi imprecisión, mas[] es realmente un array global, pero el buffer indicador tampoco es adecuado, más bien sería un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través de un buffer indicador?
¿Por qué no quieres utilizar matrices como topes indicadores? El subsistema los supervisa, lo que facilita su trabajo.
Y la matriz del buffer de indicadores intermedios es fácil de hacer:
¿cómo hacerlo correctamente?
¿Cómo se hace?
Simplificado así, CopyOpen entiendo que es superfluo para OnCalculate, pero ¿para que sólo vea el historial de la ventana de la terminal?
Simplificando, CopyOpen es innecesario para OnCalculate, pero ¿para que vea sólo el historial de la ventana de la terminal?
El array mas se crea con tamaño cero en cada tick y no cambia su tamaño en ningún otro lugar. Por lo tanto, cualquier acceso a la misma causará un desbordamiento de la matriz.
Para resolver el problema, debemos redimensionar el tamaño, que contendrá las lecturas de todas las barras de la historia, o vincularlo al buffer del indicador (declarado como una variable global del programa). Si lo he entendido bien, estos valores deberían mostrarse con el indicador.
Simplificado, CopyOpen entiendo que es superfluo para OnCalculate, pero ¿para que sólo vea el historial de la ventana del terminal?
Ejemplo:
El array mas se crea con un tamaño cero en cada tick y no cambia su tamaño en ningún otro lugar. Por lo tanto, cualquier referencia a ella provocará la salida del array.
Para resolver el problema, debe redimensionarlo al tamaño que contendrá las lecturas de todas las barras del historial, o vincularlo al buffer del indicador (declarado como una variable global del programa). Si lo he entendido bien, son estos valores los que se deben mostrar con el indicador.
Error mío, mas[] debería ser realmente un array global, pero el buffer de indicadores tampoco es adecuado, será más bien un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través del buffer indicador?
Mi imprecisión, mas[] es realmente un array global, pero el buffer indicador tampoco es adecuado, más bien sería un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través del buffer indicador?
No entiendo a qué me refiero con lo de multidimensional. Estamos hablando de un array unidimensional. Además, en MQL4 la dimensión máxima de un array es 4.
Para que la matriz tenga el mismo tamaño que la serie temporal, debemos redimensionarla según el número de barras disponibles en el gráfico para el símbolo y el periodo necesarios:
Mi imprecisión, mas[] es realmente un array global, pero el buffer indicador tampoco es adecuado, más bien sería un array multidimensional intermedio. ¿Cuál es la mejor manera de determinar el tamaño óptimo de la matriz para M5, no a través de un buffer indicador?
¿Por qué no quieres utilizar matrices como topes indicadores? El subsistema los supervisa, lo que facilita su trabajo.
Y la matriz del buffer de indicadores intermedios es fácil de hacer:
Hola.
Los volúmenes de la plataforma son volúmenes de ticks, ¿habrá volúmenes reales?
Hola.
En la plataforma, los volúmenes están en marcha, ¿habrá volúmenes reales?
No lo hará. Utilice MT5, algunos corredores proporcionan volúmenes reales allí.
¡Buenas tardes!
Por favor, ayuda con el siguiente problema:
1) Cuando se cumplen algunas condiciones, se abre una orden pendiente:
{ price=High[1]+OrderPoint*Point; stoploss=Low[1]-Point; takeprofit=price+price-stoploss; OrderSend(Symbol(),OP_BUYSTOP,1,price,3,stoploss,takeprofit); }Por favor, díganme qué añadir y dónde eliminar una orden pendiente si el precio ya ha pasado el stop loss (de esta orden pendiente).
Perdón por la pregunta estúpida, me perdí en los foros mientras buscaba una respuesta.
Gracias de antemano.