Hola! Al estudiar el MQL4 me ha surgido una pequeña duda. El problema está publicado en el tutorial de este sitio. Esta es la condición: Tarea 25. Crear un programa, en el que se realicen las siguientes condiciones: si el tipo de cambio ha subido por encima del nivel especificado, entonces dar un mensaje, en el que las palabras indiquen que el tipo supera el nivel (hasta 100 puntos); en otros casos, informar de que el tipo no supera el nivel especificado. Y aquí está la solución propuesta:
//--------------------------------------------------------------------externdoubleLevel=1.3200; // Заданный уровень stringText[101]; // Объявление массива//--------------------------------------------------------------------intinit()// Спец. ф-ия init(){// Присвоение значенийText[1]="один "; Text[15]="пятнадцать ";
Text[2]="два "; Text[16]="шестнадцать ";
Text[3]="три "; Text[17]="семнадцать ";
Text[4]="четыре "; Text[18]="восемнадцать ";
Text[5]="пять "; Text[19]="девятнадцать ";
Text[6]="шесть "; Text[20]="двадцать ";
Text[7]="семь "; Text[30]="тридцать ";
Text[8]="восемь "; Text[40]="сорок ";
Text[9]="девять "; Text[50]="пятьдесят ";
Text[10]="десять "; Text[60]="шестьдесят";
Text[11]="одиннадцать "; Text[70]="семьдесят ";
Text[12]="двенадцать "; Text[80]="восемьдесят ";
Text[13]="тринадцать "; Text[90]="девяносто";
Text[14]="четырнадцать "; Text[100]= "сто";
// Вычисление значенийfor(inti=20; i<=90; i=i+10)// Цикл по десяткам{for(intj=1; j<=9; j++)// Цикл по единицамText[i+j]=Text[i] + Text[j]; // Вычисление значения }return; // Выход из init()}//--------------------------------------------------------------------intstart()// Спец. ф-ия start(){intDelta=NormalizeDouble((Bid-Level)/Point,0);// Превышение //--------------------------------------------------------------------if(Delta>=0)// Цена не выше уровня{Alert("Цена ниже уровня"); // Сообщениеreturn; // Выход из start()}//--------------------------------------------------------------------if(Delta<100)// Цена более 100{Alert("Более ста пунктов"); // Сообщениеreturn; // Выход из start()}//--------------------------------------------------------------------Alert("Плюс ",Text[Delta],"pt."); // Вывод на экранreturn; // Выход из start()}
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?
Step: Hola, tengo una pequeña pregunta mientras estudio MQL4. El problema se encuentra en el tutorial de este sitio. Esta es la condición: Problema 25. Cree un programa, en el que se realicen las siguientes condiciones: si la tasa supera el nivel especificado, emitirá un mensaje, en el que las palabras indicarán que la tasa supera el nivel (hasta 100 puntos); en otros casos, el mensaje informará de que la tasa no supera el nivel especificado. Y aquí está la solución propuesta:
Muestra posibles soluciones. Útil para la formación.
Step: Hola! Al estudiar MQL4, tengo una pequeña pregunta. La tarea se encuentra en el tutorial de este sitio. Esta es la condición: Problema 25. Cree un programa que realice las siguientes condiciones: si la tasa supera el nivel especificado, emitirá un mensaje diciendo que la tasa supera el nivel (hasta 100 puntos); en los demás casos, el mensaje diciendo que la tasa no supera el nivel especificado. Y aquí está la solución propuesta:
P.D.
En concreto, la utilidad de este ejemplo para tratar un array,
la posible representación de los datos en palabras,
el uso de la función NormalizeDouble y la variable Point predefinida.
Aparentemente, no hay forma de declarar directamente variables externas en la clase. Entonces, ¿cuáles son las opciones? Si no quiero declarar en el propio Asesor Experto o en otro lugar estas variables externas específicas, que son necesarias sólo cuando se utiliza esta clase. Creo que la única opción es hacer un inluder, que declare estas variables externas. Y entonces la clase debería estar incluida en ella, ¿no?
Entonces, para llamar a la clase, es necesario incluir la propia clase. ¿Es así? ¿O puede haber otras variantes?
Simplemente no me parece bien. Un montón de archivos de inclusión anidados para crear... Por eso tengo esa pregunta.
¿O sigue siendo posible, como en una biblioteca habitual, declarar las variables externas e importar las bibliotecas necesarias antes de declarar la clase? Me refiero a algo así:
// Объявляем внешние переменныеextern type Var1;
extern type Var2;
extern type Var3;
// Подключаем требуемые библиотеки//#include <LBase.mqh>//+---//#include <Logging.mqh>#import "user32.dll"int GetAncestor;
int PostMessageA;
#import
//class CLogging
{
protected:
// защищенные данныеpublic:
// открытые данные
};
Nunca he visto eso antes. Así que me pregunto si estoy yendo en la dirección correcta...
Al transferir el código del indicador al Asesor Experto, se produce un error. Los he emitido como variables globales en la pantalla del terminal a través de Comment.
if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
Los envía como variables globales a la pantalla del terminal a través de Comment. No había ceros, sólo números negativos. Entonces cambié
//---- indicator buffers
double zz[1500];
a
//---- indicator buffers
double zz[300];
todo cayó en su lugar, lo puso en su sitio. No hay error. ¿Cuál fue la razón? También he desconectado Internet.
Al transferir el código del indicador al Asesor Experto, se produce un error. División a cero en la parte del código
...
Las salidas con variables globales a la pantalla del terminal a través de Comment. No había ceros, sólo números negativos. Entonces cambié
...
a .
...
todo cayó en su lugar, lo puso en su sitio. No hay ningún error. ¿Cuál fue la causa? Apagué un poco más el internet.
También obtuve el error "dividir por cero" donde no se pudo pasar el cero en el denominador de la fracción. Ahora, antes de dividir, hago una comprobación formal como:
if(znamenatel==0)
{
какое-то действие;
}
Y el error desapareció. Es decir, se debe indicar al compilador qué hacer si el denominador=0 aunque el programador esté 100% seguro de que no hay ningún 0 allí.
Hola, ¿puede ayudarme con el código? Necesito que el EA haga lo elemental - abrir posiciones al acercarse a la línea vertical (es decir, estrictamente el tiempo, no el precio), a saber, para un intervalo de shi especificado, que tengo aquí 120 es decir, como entiendo - 2 minutos. El color de la línea debería determinar si es de compra o de venta. Busqué en Internet y lo reescribí y obtuve lo siguiente:
void OnTick() { int AllObject = ObjectsTotal(); for ( int i = 0; i < AllObject; i++) {
Hola, ¿puede ayudarme con el código? Necesito que el EA haga lo elemental - abrir posiciones al acercarse a la línea vertical (es decir, estrictamente el tiempo, no el precio), a saber, para un intervalo de shi especificado, que tengo aquí 120 es decir, como entiendo - 2 minutos. El color de la línea debería determinar si es de compra o de venta. Busqué en Internet y lo reescribí:
void OnTick() { int AllObject = ObjectsTotal(); for ( int i = 0; i < AllObject; i++) {
Si tiene la misma hora que la del terminal, puede utilizar TimeLocal(), pero TimeCurrent() es más fiable .
Cambiar el tipo de variable de operacia a int y eliminar las comillas OP_BUY y OP_SELL
Gracias. Sobre TimeCurrent es cierto, mi hora no coincide con la del servidor. Lo he arreglado, pero sigue sin funcionar... No escribe ningún error en el registro.
P.D. En mi post anterior, el código sin espacios fue insertado de alguna manera. Pero creo que he puesto todas las llaves correctamente.
MT4 - 625, mensaje del probador al intentar probar los búhos con la biblioteca:
2014.03.29 18:38:48.753'C:\N-Archivos de programaAdmiral1\MQL4\Libraries\ingLib094.mq4' no es una versión de 32 bits
Antes de que ese búho compilara sin problemas, y la biblioteca tampoco tenía una sola palabra. De hecho, no lo entiendo en absoluto.
Mi sistema (me refiero a Windows) es de 32 bits, nunca he tenido otro. Séptima.
La biblioteca es mi nativa, todo el camino con ella. Va bien en tiempo real en la nueva construcción. Incluso con otros búhos. Y en tester en versiones anteriores sin problemas.
Pero no quiere abrirse en el probador, y la razón se la chupan hasta los dedos.
Y no hay ni una palabra sobre los casos de 32 bits en todos los manuales.
Y aquí está la solución propuesta:
Hola, tengo una pequeña pregunta mientras estudio MQL4. El problema se encuentra en el tutorial de este sitio. Esta es la condición: Problema 25. Cree un programa, en el que se realicen las siguientes condiciones: si la tasa supera el nivel especificado, emitirá un mensaje, en el que las palabras indicarán que la tasa supera el nivel (hasta 100 puntos); en otros casos, el mensaje informará de que la tasa no supera el nivel especificado.
Y aquí está la solución propuesta:
Muestra posibles soluciones. Útil para la formación.
Hay otras opciones. Hay otros errores.
Confía más en ti mismo. Experimento.
Hola! Al estudiar MQL4, tengo una pequeña pregunta. La tarea se encuentra en el tutorial de este sitio. Esta es la condición: Problema 25. Cree un programa que realice las siguientes condiciones: si la tasa supera el nivel especificado, emitirá un mensaje diciendo que la tasa supera el nivel (hasta 100 puntos); en los demás casos, el mensaje diciendo que la tasa no supera el nivel especificado.
Y aquí está la solución propuesta:
P.D.
En concreto, la utilidad de este ejemplo para tratar un array,
la posible representación de los datos en palabras,
el uso de la función NormalizeDouble y la variable Point predefinida.
Posibilidad de elegir una afición más fácil.
Aparentemente, no hay forma de declarar directamente variables externas en la clase. Entonces, ¿cuáles son las opciones? Si no quiero declarar en el propio Asesor Experto o en otro lugar estas variables externas específicas, que son necesarias sólo cuando se utiliza esta clase. Creo que la única opción es hacer un inluder, que declare estas variables externas. Y entonces la clase debería estar incluida en ella, ¿no?
Entonces, para llamar a la clase, es necesario incluir la propia clase. ¿Es así? ¿O puede haber otras variantes?
Simplemente no me parece bien. Un montón de archivos de inclusión anidados para crear... Por eso tengo esa pregunta.
¿O sigue siendo posible, como en una biblioteca habitual, declarar las variables externas e importar las bibliotecas necesarias antes de declarar la clase? Me refiero a algo así:
Nunca he visto eso antes. Así que me pregunto si estoy yendo en la dirección correcta...Los envía como variables globales a la pantalla del terminal a través de Comment. No había ceros, sólo números negativos. Entonces cambié
Al transferir el código del indicador al Asesor Experto, se produce un error. División a cero en la parte del código
...
Las salidas con variables globales a la pantalla del terminal a través de Comment. No había ceros, sólo números negativos. Entonces cambié
...
a .
...
todo cayó en su lugar, lo puso en su sitio. No hay ningún error. ¿Cuál fue la causa? Apagué un poco más el internet.También obtuve el error "dividir por cero" donde no se pudo pasar el cero en el denominador de la fracción. Ahora, antes de dividir, hago una comprobación formal como:
Y el error desapareció. Es decir, se debe indicar al compilador qué hacer si el denominador=0 aunque el programador esté 100% seguro de que no hay ningún 0 allí.
Hola, ¿puede ayudarme con el código? Necesito que el EA haga lo elemental - abrir posiciones al acercarse a la línea vertical (es decir, estrictamente el tiempo, no el precio), a saber, para un intervalo de shi especificado, que tengo aquí 120 es decir, como entiendo - 2 minutos. El color de la línea debería determinar si es de compra o de venta. Busqué en Internet y lo reescribí y obtuve lo siguiente:
void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{
string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}
int kolpos = 0;
if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}
}
}
Hola, ¿puede ayudarme con el código? Necesito que el EA haga lo elemental - abrir posiciones al acercarse a la línea vertical (es decir, estrictamente el tiempo, no el precio), a saber, para un intervalo de shi especificado, que tengo aquí 120 es decir, como entiendo - 2 minutos. El color de la línea debería determinar si es de compra o de venta. Busqué en Internet y lo reescribí:
void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{
string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}
int kolpos = 0;
if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}
}
}
Si su hora coincide con la de la terminal, puede utilizar TimeLocal(), pero TimeCurrent() es más fiable .
Cambiar el tipo de variable de operacia a int y eliminar las comillas OP_BUY y OP_SELL
Si tiene la misma hora que la del terminal, puede utilizar TimeLocal(), pero TimeCurrent() es más fiable .
Cambiar el tipo de variable de operacia a int y eliminar las comillas OP_BUY y OP_SELL
Gracias. Sobre TimeCurrent es cierto, mi hora no coincide con la del servidor. Lo he arreglado, pero sigue sin funcionar... No escribe ningún error en el registro.
P.D. En mi post anterior, el código sin espacios fue insertado de alguna manera. Pero creo que he puesto todas las llaves correctamente.
MT4 - 625, mensaje del probador al intentar probar los búhos con la biblioteca:
2014.03.29 18:38:48.753 'C:\N-Archivos de programaAdmiral1\MQL4\Libraries\ingLib094.mq4' no es una versión de 32 bits
Antes de que ese búho compilara sin problemas, y la biblioteca tampoco tenía una sola palabra. De hecho, no lo entiendo en absoluto.
Mi sistema (me refiero a Windows) es de 32 bits, nunca he tenido otro. Séptima.
La biblioteca es mi nativa, todo el camino con ella. Va bien en tiempo real en la nueva construcción. Incluso con otros búhos. Y en tester en versiones anteriores sin problemas.
Pero no quiere abrirse en el probador, y la razón se la chupan hasta los dedos.
Y no hay ni una palabra sobre los casos de 32 bits en todos los manuales.