[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 186

 
Vinin:


if (c % 2==0) //par


Yo no comprobaría doblemente la igualdad a nada.
 
¿Pueden decirme cómo ejecutar un bucle for en órdenes con pérdidas ya cerradas? ¿O quizás alguien ya tiene una función: cuando se cierra una operación con pérdidas, multiplicar el lote?
 
tara:

Yo no comprobaría la igualdad con nada.


Pensé que había escrito antes que sólo para los enteros. ¿O no lo lees bien?

Vinin 18.09.2011 03:14 am | borrar
NickXXX:

Pregunta para un rompecabezas).

¿Cómo determinar mediante programación si un número es par o impar?

Por ejemplo:

int a, b, c;

a=2;

b=3;

c=a+b

¿C es par o impar?



Si los números son enteros, comprueba el resto de la división por 2.

if (c % 2==0) //четное

 

aclarar los errores del código


avatar
2
Qwuyt 18.09.2011 11:56

¡Buenas tardes!

Por favor, quien no tenga pereza que mire el código y me aconseje cuáles son mis errores. Tengo un montón de errores en la compilación. Este es mi primer EA, acabo de empezar a entenderlo. La idea del Asesor Experto es la siguiente: el lunes a una hora determinada colocamos órdenes pendientes en ambas direcciones a una distancia de X puntos del cierre de la semana anterior. El viernes, a una hora determinada, cerraremos las órdenes de mercado y borraremos las pendientes. Eso es todo.

//+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link      ""

//--- input parameters
extern double    lot=0.01;                                                 //размер лота 
extern int       tp=200;                                                   //тейк профит
extern int       sl=50;                                                    //стоплосс
extern int       move=100;                                                 //движение цены 
extern int       hc=22;                                                    //час закрытия 
extern int       ho=4;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                //день недели
bool Ans = false;                                                          //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
  int Curday = DayOfWeek                                    
  double BP = iClose(NULL,10080,1)+NormalizeDouble(move*Point,Digits);     //      
  double SP = iClose(NULL,10080,1)-NormalizeDouble(move*Point,Digits);
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие бай
    {
    OrderSend (Symbol(),OP_BUYSTOP,lot,BP,3,sl,tp,NULL,0,0,Red)
    }
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие селл
    {
    OrderSend (Symbol(),OP_SELLSTOP,lot,SP,3,sl,tp,NULL,0,0,Red)
    }
    while(true)                                                           //цикл закрытия орд.
     {
      if (Tip==0 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      if (Tip==1 && hc >= Hour && Curday=6)                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates();                                                   // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);
         return;                                                          // Выход из start()
        }
      if (Tip==4||Tip==5 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderDelete(Ticket,CLR_NONE);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      break;                                                               // Выход из while
     }
     Tip = OrderType();
return();
  }
Archivos adjuntos:
Semana_1.mq4 (4.52 KB)



929
abolk 18.09.2011 12:00 am correcto | borrar

para empezar:

1) poner ; al final de cada operador

2) utilizar funciones correctas, por ejemplo Hour()

 
Falmera:
¿Pueden decirme cómo ejecutar un bucle for en órdenes con pérdidas ya cerradas? ¿O quizás alguien ya tiene una función: cuando se cierra una operación con pérdidas, multiplicar el lote?

¿algún consejo?
 
Falmera:

así que ayúdame por favor


Muéstrame tus propios intentos de implementar esta función - el hilo de "ayuda para novatos".

o busque "buscar el último pedido cerrado" o algo similar - el tema ha existido durante mucho tiempo

 
Falmera:

Bueno, dame una pista.

Vea los búhos de la rama Avalancha.
 

Estoy aprendiendo un lenguaje de programación y tengo problemas para entender el comportamiento del programa. He escrito un EA basado en el libro de texto, pero lo he retorcido a un principio de funcionamiento ligeramente diferente.

El Asesor Experto se basa en un promedio de 2 muwings. La idea es sencilla, las medias móviles se cruzan, se cierra la orden y se abre la contraria. He escrito un EA y funciona bien. Por supuesto, está en ligera desventaja, pero de acuerdo con la idea. El problema completo es el siguiente (en negrita):

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

Si cambio la forma de calcular las medias móviles (puede mostrar el signo más) y pongo el método exponencial( MODE_SMA) en lugar del simple(MODE_EEMA ) y uno más(MODE_SMMA), el llamado método suavizado, todo va mal. El principio de funcionamiento se vuelve aún más divertido (en el probador de estrategias) ya que el EA abre una orden al principio del periodo establecido y la cierra al final. Es decir, durante un año abre una única operación al principio del periodo y la cierra al final. Como resultado, el Asesor Experto me ha mostrado un plus, pero no necesito dicho plus. Yo mismo puedo lanzar una moneda al aire y abrir una orden de compra o de venta y ver, si estoy ganando o perdiendo en un año. Por cierto, si pongo MODE_SMA en MODE_LWMA (Media Móvil Lineal Ponderada), el programa funciona bien.

Por favor, aconséjeme, ¿qué pasa? El principio es el mismo, pero la forma de cálculo de las medias móviles ha cambiado un poco.

El código completo está en el archivo adjunto.


Me han contestado aquí, pero no son competentes y no se basan en los méritos. Supuestamente uso 4 medias móviles. Esto no es cierto, hay dos medias móviles, pero para cada media móvil se toman los valores de dos barras (un total de 4 llamadas al array, A, B, C, D):1 y 2 . Además, escribieron que cuando se cierra una orden, deberíamos bajar el número de órdenes totales, pero no es necesario porque las órdenes se cuentan usando la función Odertotal y si cierro una orden, el propio total de la orden cambia su valor en la siguiente iteración. También sugieren el uso de los llamados números mágicos para hacer un seguimiento de los pedidos, pero todavía no he llegado a esa parte del manual. Debo repetir que el programa funciona cuando se utiliza MODE_SMA y MODE_LWMA pero no cuando se utiliza MODE_EMA y MODE_SMMA. Quién sabe por qué, escríbeme una respuesta por favor.

Archivos adjuntos:
 
Falmera:

Por favor, dame una pista.
vete al tema de la avalancha, allí hay un montón de asesores con cualquier lote incrementado... Busca en el foro en la parte superior derecha o en Google.
 
neisseria:

Estoy aprendiendo un lenguaje de programación y tengo problemas para entender el comportamiento del programa. He escrito un EA basado en el libro de texto, pero lo he retorcido a un principio de funcionamiento ligeramente diferente.

El Asesor Experto se basa en un promedio de 2 muwings. La idea es sencilla, las medias móviles se cruzan, se cierra la orden y se abre la contraria. He escrito un EA y funciona bien. Por supuesto, está en ligera desventaja, pero de acuerdo con la idea. El problema completo es el siguiente (en negrita):

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

Si cambio la forma de calcular las medias móviles (puede mostrar el signo más) y pongo el método exponencial( MODE_SMA) en lugar del simple(MODE_EEMA ) y uno más(MODE_SMMA), el llamado método suavizado, todo va mal. El principio de funcionamiento se vuelve aún más divertido (en el probador de estrategias) ya que el EA abre una orden al principio del periodo establecido y la cierra al final. Es decir, durante un año abre una única operación al principio del periodo y la cierra al final. Como resultado, el Asesor Experto me ha mostrado un plus, pero no necesito dicho plus. Yo mismo puedo lanzar una moneda al aire y abrir una orden de compra o de venta y ver, si estoy ganando o perdiendo en un año. Por cierto, si pongo MODE_SMA en MODE_LWMA (Media Móvil Lineal Ponderada), el programa funciona bien.

Por favor, aconséjeme, ¿qué pasa? El principio es el mismo, pero la forma de cálculo de las medias móviles ha cambiado un poco.

El código completo está en el archivo adjunto.


Me han contestado aquí, pero no son competentes y no se basan en los méritos. Supuestamente uso 4 medias móviles. Esto no es cierto, hay dos medias móviles, pero para cada media móvil se toman los valores de dos barras (un total de 4 llamadas al array, A, B, C, D):1 y 2 . Además, escribieron que cuando se cierra una orden, deberíamos bajar el número de órdenes totales, pero no es necesario porque las órdenes se cuentan usando la función Odertotal y si cierro una orden, el propio total de la orden cambia su valor en la siguiente iteración. También sugieren el uso de los llamados números mágicos para hacer un seguimiento de los pedidos, pero todavía no he llegado a esa parte del manual. Debo repetir que el programa funciona cuando se utiliza MODE_SMA y MODE_LWMA pero no cuando se utiliza MODE_EMA y MODE_SMMA. Quién sabe por qué, escríbeme una respuesta por favor.


También comprobaría dos veces las condiciones. Puede haber un problema allí