int gtc1 = GetTickCount();
res_copy_buf = CopyBuffer(handle, 0, 0, bars_calc, Buf_01);
int gtc2 = GetTickCount();
Todos los símbolos pasan normalmente. Durante la primera pasada el tiempo es de unos 120ms, porque los buffers de los indicadores se están llenando. A partir de la segunda pasada el tiempo de cálculo en la barra actual es inferior a 1 ms.
La peculiaridad es que un conocido broker tiene el símbolo EURRUR, del que no hay datos ("Wait for update"). Por lo tanto, el cálculo se atasca en esta línea durante 51 segundos. Error 4806. 51 segundos es inaceptable incluso para una (primera) vez, por no hablar de un ciclo.
Pregunta. ¿Cómo puedo averiguar rápidamente que no hay datos para un determinado personaje? Luego lo memorizaba y en las siguientes iteraciones lo superaba y seguía sin perder el ritmo.
Colegas, por favor, aconsejen cómo convertir un array de tipo double a string. Necesito escribirlo en un archivo. Este es un código de formación general.
voidOnStart()
{
double ar[]; // МассивArrayResize(ar,2); // Подготовка массиваint i, Size=ArraySize(ar); // стартовое количество элементов
ar[0]=1; // Установка значений 2-х элементов массива
ar[1]=2;
ArrayResize(ar,3); // Увеличение размера массива
ar[2]=3; // Установка значения новому элементу массиваArrayResize(ar,4); // Увеличение размера массива
ar[3]=4; // Установка значения новому элементу массиваArrayResize(ar,5); // Увеличение размера массива
ar[4]=5; // Установка значения новому элементу массиваArrayResize(ar,6); // Увеличение размера массива
ar[5]=6; // Установка значения новому элементу массивArrayResize(ar,7); // Увеличение размера массива
ar[6]=7; // Установка значения новому элементу массив
Size=ArraySize(ar);// новое количество элементовArraySetAsSeries(ar,true); // Смена направления индексации//--- запись в файл
SaveArrayToFile ("s_ar", ar);
return;
}
bool SaveArrayToFile(string FileName, string &Array[])
{
//--- Открытие файлаint h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_TXT);
if(h==-1){Alert(" ошибка открытия файла в ф-ии "); return(false);} // Ошибка открытия файла//--- Запись в файлFileWriteInteger(h,ArraySize(Array),INT_VALUE); // Запись размера массиваFileWriteArray(h,Array); // Запись массива//--- Закрытие файлаFileClose(h);
return(true); // Сохранение выполнено
Al guardar y cargar un array desde un archivo, debemos considerar la diferencia de la primera dimensión del tamaño del array y el número total de sus elementos. Cuando se guarda un array, se debe escribir primero el tamaño del array (el número total de elementos determinado por ArraySize()) en el archivo, y luego el array completo:
bool SaveArrayToFile(string FileName,string &Array[])
{
//--- Открытие файлаint h=FileOpen(FileName,FILE_TXT|FILE_WRITE);
if(h==-1) return(false); // Ошибка открытия файла//--- Запись в файлFileWriteInteger(h,ArraySize(Array),INT_VALUE); // Запись размера массиваFileWriteArray(h,Array); // Запись массива//--- Закрытие файлаFileClose(h);
return(true); // Сохранение выполнено
}
Tengo dos EAs para el mismo instrumento con diferentes magias respectivamente. Yo configuro mi magik a través de CTrade y abro una posición a través de CTrade también. Cuando tengo una posición abierta del primer EA, su magik se asigna al segundo EA (lo comprobé después de abrir una posición, ver más abajo), por lo que la comprobación de posiciones abiertas no ve mi magik y abro muchas posiciones en una dirección. La cuenta está en una demo, esto no se puede detectar en el probador. Si el valor del magik se guarda en la clase, tal vez habría que ponerlo a cero, pero no sé cómo.
intOnInit()
{
// выставляем магик
m_trade.SetExpertMagicNumber(Magic);
return(INIT_SUCCEEDED);
}
открываю позицию соответственно тоже через CTrade:
if(SellCount()>0 || BuyCount()>0)
{
Print("Уже есть позиция на продажу !!!");
return; // не добавлять к открытой позиции на покупку
}
SL=NormalizeDouble(latest_price.bid + STP*_Point,_Digits);
TP=NormalizeDouble(latest_price.bid - TKP*_Point,_Digits);
m_trade.Sell(lots1,_Symbol,0,SL,TP,"LaquerreOSC_MA_2.5.6.7 + 2");
m_position.Select(_Symbol);
{
ulong myMagic=m_position.Magic();
Print(" Открыта поза Селл с магиком № ",myMagic,", И спредом ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
}
//+------------------------------------------------------------------+int SellCount()//проверка рыночных ордеров на продажу
{
int count=0;
for(int i=PositionsTotal()-1; i>=0;i--)
{
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
Tengo dos EAs para el mismo instrumento con diferentes magias respectivamente. Yo configuro mi magik a través de CTrade y abro una posición a través de CTrade también. Cuando tengo una posición abierta del primer EA, su magik se asigna al segundo EA (lo comprobé después de abrir una posición, ver más abajo), por lo que la comprobación de posiciones abiertas no ve mi magik y abro muchas posiciones en una dirección. La cuenta está en una demo, esto no se puede detectar en el probador. Si el valor del magik se guarda en la clase, quizás haya que ponerlo a cero, pero no sé cómo.
Por favor,pegue el código correctamente, no como una hoja de texto.
En cuanto al código: establecer los parámetros de entrada a cada EA con su propio magik. Digamos que se pone el primero en 10001 y el segundo en 10002.
Por favor,inserte el código correctamente, no como una hoja de texto.
En cuanto al código: establecer los parámetros de entrada a cada EA con su propia magia. Supongamos que se fija el primero en 10001 y el segundo en 10002.
Gracias por una respuesta tan breve. Pero esa es la cuestión, las magias son diferentes. Así, he determinado que el segundo robot abre posiciones con el primer mago. No sé cómo ocurre y dónde guarda el primer número mágico de EA pero me gustaría averiguarlo.
Gracias por la rápida respuesta. Pero esa es la cuestión, los magos son diferentes. Entonces descubrí que el segundo robot está abriendo posiciones con el número mágico del primero. No sé cómo ocurre y dónde guarda el primer número mágico de EA pero me gustaría averiguarlo.
En este caso, no es "mejor", es exactamente lo que necesita: es una clase envolvente para las funciones comerciales estándar. No almacena múltiples magias. Por eso hay que poner un magik cada vez antes y cuando se quiere abrir una posición con un nuevo magik.
Por lo general, la secuencia es la siguiente:
las posiciones deben abrirse con la magia 1 - establecemos la magia 1 y las posiciones posteriores tendrán la magia 1,
es necesario abrir posiciones con un Mago 2 - establecemos el Mago 2 y todas las posiciones siguientes tendrán un Mago 2,
es necesario abrir posiciones con magic 3 - estableceremos magic 3 y cada posición siguiente tendrá magic 3,
Originalmente era así, no ayuda. Pero en los ejemplos suele estar en OnInit por lo que se ha movido. Durante mucho tiempo he estado trasteando con esto, los búhos en la prueba parecen funcionar sin problemas, y de repente abro el servidor y hay 20 posiciones en una dirección. ¿Puede el hecho de que la comprobación de los puestos vacantes no sea a través de las clases?
Gracias por la rápida respuesta. Pero esa es la cuestión, los magos son diferentes. Entonces descubrí que el segundo robot está abriendo posiciones con el número mágico del primero. No sé cómo sucede y dónde guarda el primer número mágico de EA, pero quiero averiguarlo.
Dado que no hay un métodoGetExpertMagicNumber en la clase CTrade, por favor imprima este código después de la operación de comercio:
El experto en multidivisas del bucle pide los datos por símbolo. Hay un fragmento de este tipo:
Todos los símbolos pasan normalmente. Durante la primera pasada el tiempo es de unos 120ms, porque los buffers de los indicadores se están llenando. A partir de la segunda pasada el tiempo de cálculo en la barra actual es inferior a 1 ms.
La peculiaridad es que un conocido broker tiene el símbolo EURRUR, del que no hay datos ("Wait for update"). Por lo tanto, el cálculo se atasca en esta línea durante 51 segundos. Error 4806. 51 segundos es inaceptable incluso para una (primera) vez, por no hablar de un ciclo.
Pregunta. ¿Cómo puedo averiguar rápidamente que no hay datos para un determinado personaje? Luego lo memorizaba y en las siguientes iteraciones lo superaba y seguía sin perder el ritmo.
Colegas, por favor, aconsejen cómo convertir un array de tipo double a string. Necesito escribirlo en un archivo. Este es un código de formación general.
Información extraída del artículo
Guardar y cargar matrices desde un archivo
Al guardar y cargar un array desde un archivo, debemos considerar la diferencia de la primera dimensión del tamaño del array y el número total de sus elementos. Cuando se guarda un array, se debe escribir primero el tamaño del array (el número total de elementos determinado por ArraySize()) en el archivo, y luego el array completo:
Hola, me encuentro con el siguiente problema.
Tengo dos EAs para el mismo instrumento con diferentes magias respectivamente. Yo configuro mi magik a través de CTrade y abro una posición a través de CTrade también. Cuando tengo una posición abierta del primer EA, su magik se asigna al segundo EA (lo comprobé después de abrir una posición, ver más abajo), por lo que la comprobación de posiciones abiertas no ve mi magik y abro muchas posiciones en una dirección. La cuenta está en una demo, esto no se puede detectar en el probador. Si el valor del magik se guarda en la clase, tal vez habría que ponerlo a cero, pero no sé cómo.
Hola, me encuentro con el siguiente problema.
Tengo dos EAs para el mismo instrumento con diferentes magias respectivamente. Yo configuro mi magik a través de CTrade y abro una posición a través de CTrade también. Cuando tengo una posición abierta del primer EA, su magik se asigna al segundo EA (lo comprobé después de abrir una posición, ver más abajo), por lo que la comprobación de posiciones abiertas no ve mi magik y abro muchas posiciones en una dirección. La cuenta está en una demo, esto no se puede detectar en el probador. Si el valor del magik se guarda en la clase, quizás haya que ponerlo a cero, pero no sé cómo.
Por favor,pegue el código correctamente, no como una hoja de texto.
En cuanto al código: establecer los parámetros de entrada a cada EA con su propio magik. Digamos que se pone el primero en 10001 y el segundo en 10002.
Por favor,inserte el código correctamente, no como una hoja de texto.
En cuanto al código: establecer los parámetros de entrada a cada EA con su propia magia. Supongamos que se fija el primero en 10001 y el segundo en 10002.
Gracias por una respuesta tan breve. Pero esa es la cuestión, las magias son diferentes. Así, he determinado que el segundo robot abre posiciones con el primer mago. No sé cómo ocurre y dónde guarda el primer número mágico de EA pero me gustaría averiguarlo.
Gracias por la rápida respuesta. Pero esa es la cuestión, los magos son diferentes. Entonces descubrí que el segundo robot está abriendo posiciones con el número mágico del primero. No sé cómo ocurre y dónde guarda el primer número mágico de EA pero me gustaría averiguarlo.
En este caso, es mejor establecer el magik
// выставляем магик m_trade.SetExpertMagicNumber(Magic);antes de cada apertura de posición/orden en lugar de en OnInit.En este caso, es mejor especificar un magik
antes de cada apertura de posición, no en OnInit.En este caso, no es "mejor", es exactamente lo que necesita: es una clase envolvente para las funciones comerciales estándar. No almacena múltiples magias. Por eso hay que poner un magik cada vez antes y cuando se quiere abrir una posición con un nuevo magik.
Por lo general, la secuencia es la siguiente:
etc...
En este caso, es mejor establecer un magik
Antes de cada apertura de una posición/orden, y no en OnInit.Originalmente era así, no ayuda. Pero en los ejemplos suele estar en OnInit por lo que se ha movido. Durante mucho tiempo he estado trasteando con esto, los búhos en la prueba parecen funcionar sin problemas, y de repente abro el servidor y hay 20 posiciones en una dirección. ¿Puede el hecho de que la comprobación de los puestos vacantes no sea a través de las clases?
Gracias por la rápida respuesta. Pero esa es la cuestión, los magos son diferentes. Entonces descubrí que el segundo robot está abriendo posiciones con el número mágico del primero. No sé cómo sucede y dónde guarda el primer número mágico de EA, pero quiero averiguarlo.
Dado que no hay un métodoGetExpertMagicNumber en la clase CTrade, por favor imprima este código después de la operación de comercio:
De esta manera puedes comprobar si ambos EAs tienen magias diferentes.