Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 114

 
MarkTrade:

Le ruego que me explique cuál es el error aquí. No puedo entenderlo.


for (i=0;i>5<==ошибка;i++)
 
MarkTrade:

Perdón, explique cuál es el error aquí. No puedo entenderlo.

Vamos a desglosar la cadena.

for (i=0;i<5;i++)

Dejemos que i varíe de cero a cinco. Después de cada iteración el contador aumentará en uno. Las iteraciones se calcularán hasta que i sea inferior a cinco. Es decir, el bucle funcionará y se ejecutará a través de cinco iteraciones: 0, 1, 2, 3, 4 - estos son valores del contador del bucle i. Cuando i sea igual a cinco, el bucle terminará

Veamos lo que tienes:

for (i=0;i>5;i++)

Tienes el contador i inicializado a cero, pero las iteraciones del bucle deben tener lugar mientras i sea mayor que cinco. Y no es inicialmente mayor que cinco. Por lo tanto, el bucle no se inicia.

 
artmedia70:

Desglosemos la cadena

Dejemos que i varíe de cero a cinco. Después de cada iteración el contador aumentará en uno. Las iteraciones se calcularán hasta que i sea inferior a cinco. Es decir, el bucle funcionará y se ejecutará a través de cinco iteraciones: 0, 1, 2, 3, 4 - estos son valores del contador del bucle i. Cuando i sea igual a cinco, el bucle terminará

Veamos lo que tienes:

Tienes el contador i inicializado con cero, pero las iteraciones del bucle deben tener lugar siempre que i sea mayor que cinco. Y no es inicialmente mayor que cinco. Por lo tanto, el bucle no se inicia.



¡Oh, sí! ¡Gracias! Supongo que mi ojo ha estado un poco "borroso".
 
K-o-t:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Señores programadores, por favor, aconsejen cómo combinar un EA con un indicador?

Por ejemplo, tomé un simple bot mo_bidir.mq4 que negocia usando su propio algoritmo y quiero que abra operaciones usando su propio algoritmo pero después de 3 señales de MA

Por ejemplo en laseñal - Tres medias móviles:

FastEMA>MediumEMA>SlowEMA (tendencia hacia arriba) - bot compra

FastEMA<MediumEMA<SlowEMA (tendencia hacia abajo) - bot vende

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod= 48;

Quiero que mi Asesor Experto opere en el marco de tiempo de 5 minutos y que el indicador dé señales desde el marco de tiempo diario o de 4 horas, y quiero poder cambiar los marcos de tiempo en la configuración del bot.

\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Pido disculpas por la repetición, pero al menos dime en qué hilo del foro debo solicitarlo, ¿o debo crear un hilo nuevo?

No sé qué hacer.


Lo que se quiere hacer se llama filtrado. Así que haz una búsqueda de la palabra "filtro", mira un par de EAs con filtrado, y mira si puedes hacer lo que necesitas.
 
artmedia70:

Me estoy confundiendo un poco... :) Un problema:

1. Hay una posición abierta de 0,1 lotes

2. Su valor de TakeProfit es de 50 pips.

3. Calculo su beneficio potencial según la fórmula PotentialProfit = Lotes*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. del cálculo obtengo el beneficio potencial de 5,00 dólares (0,1*50*1,0).

La posición entra en rojo y en algún momento se abre una compra más de media, pero con 0,2 lotes

1. Calculo el Breakeven para estas dos posiciones. La función se ha utilizado durante mucho tiempo, según lo requerido, y no tengo ninguna queja hasta ahora:

2. Perfecto. Has calculado el nivel de equilibrio, pero... si pones las fichas de esas dos posiciones, se cerrarán a cero. Bien, creo. Ahora tengo que añadir a este nivel de la BU tantos puntos como necesite para obtener un beneficio total, igual al calculado anteriormente - 5 dólares.

3. Y aquí es donde se me bloquea el cerebro. Lo que hago: tomo 5 dólares, los divido por el lote total de estas dos posiciones (0,1 + 0,2 = 0,3), multiplicado por TICK_VALUE

Tengo 5/(0,3*1,0) = 16,6666 Luego lo multiplico por el punto (0,00016) y lo añado al precio de equilibrio.

4. Perfecto. Las tomas se transfieren allí, pero me parece que el beneficio total de dos Baisers cerrando a este nivel no es igual a 5 dólares - me parece menos. Esto se puede ver en el gráfico de pruebas. Muestra claramente que cuando se cierra una posición, el aumento del saldo es mucho mayor que cuando se cierran varias posiciones al nivel de toma total calculado (puede ver estos lugares en el gráfico por la aparición de la línea de equidad en ellos). Gráfico:


¿En qué me equivoco?

Entiendo que se puede imprimir el beneficio total, pero... Quiero entender dónde puedo estar equivocado en mis cálculos, no el valor de las variables. Ya los he imprimido.

( 0.3 * 16 = 4.8 ) < ( 0.3 * 16.66666 = 5 )
No sé si esta es la diferencia que tenías en mente, pero debido al redondeo de 16,6666, el beneficio será naturalmente menor que los 5 dólares que pensabas obtener.
 
artmedia70:

Me estoy volviendo un poco engreído... :) El problema:

1. Hay una posición abierta de 0,1 lotes

2. Su valor de TakeProfit es de 50 pips.

3. Calculo su beneficio potencial según la fórmula PotentialProfit = Lotes*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. del cálculo obtengo el beneficio potencial de 5,00 dólares (0,1*50*1,0).

La posición entra en rojo y en algún momento se abre una compra más de media, pero con 0,2 lotes

1. Calculo el Breakeven para estas dos posiciones. La función se ha utilizado durante mucho tiempo, según lo requerido, y no tengo ninguna queja hasta ahora:

2. Perfecto. Has calculado el nivel de equilibrio, pero... si pones las fichas de esas dos posiciones, se cerrarán a cero. Bien, creo. Ahora tengo que añadir a este nivel de la BU tantos puntos como necesite para obtener un beneficio total, igual al calculado anteriormente - 5 dólares.

3. Y aquí es donde se me bloquea el cerebro. Lo que hago: tomo 5 dólares, los divido por el lote total de estas dos posiciones (0,1 + 0,2 = 0,3), multiplicado por TICK_VALUE

Tengo 5/(0,3*1,0) = 16,6666 Luego lo multiplico por el punto (0,00016) y lo añado al precio de equilibrio.

4. Perfecto. Las tomas se transfieren allí, pero me parece que el beneficio total de dos Baisers cerrando a este nivel no es igual a 5 dólares - me parece menos. Esto se puede ver en el gráfico de pruebas. Muestra claramente que cuando se cierra una posición, el aumento del saldo es mucho mayor que cuando se cierran varias posiciones al nivel de toma total calculado (puede ver estos lugares en el gráfico por la aparición de la línea de equidad en ellos). El gráfico:


¿En qué me equivoco?

Entiendo que se puede imprimir el beneficio total, pero... Quiero entender dónde puedo estar equivocado en mis cálculos, no el valor de las variables. Ya los he imprimido.

No entiendo por qué tiene que ser tan complicado.
¿No sería eso más fácil?

  double sumprofit=0;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
 

o así

double sumprofit;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
  if(sumprofit < -5) Dolivka();//  определенным лотом Sell или Buy
 
Por favor, aconséjeme, no soy programador, en qué parte del terminal están los indicadores descargados (cómo verlos y ejecutarlos). Los he descargado e instalado, pero no los encuentro en el propio terminal.
 
fox6900:
Por favor, aconséjeme, no soy programador, en qué parte del terminal están los indicadores descargados (cómo verlos y ejecutarlos). Los he descargado e instalado, pero no los encuentro en el propio terminal.

¿cómo los instalaste? Díganos cómo... tal vez tengamos una pista...
 
¿Se puede leer AccountNumber( ) desde la dll y cómo? Al menos dame una pista de dónde cavar. Me refiero a no pasar el valor de la función a la dll, es decir, desde la propia librería dinámica.