[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 606

 
Roger:


Mostrar la función en sí.

Si es void ClosePartPosBySelect(double Part), cambia a

void CerrarPartPosBySelect()

Pero, ¿cómo se puede pasar un parámetro a esta función? Supongamos:
if (x==2 && y==4) Part=0.5;
else Part=2;

ClosePartPosBySelect(Part);

La función ClosePosBySelect() de Kim se modifica para que requiera un parámetro pasado de tipo double, que es la variable Part

 
keekkenen:

dos formas

1. En la función donde se modifica el valor, añada un ampersand,

por ejemplo, void function( double& Part ){}

entonces, cuando se cambie un valor dentro de la función, el nuevo valor volverá al lugar de la llamada

2. eliminar la variable de la lista de parámetros de la función, ya que la variable está definida globalmente, su valor puede ser cambiado en cualquier lugar del código sin pasarla como parámetro...

La primera variante es mejor, ya que puede haber más de una variable declarada globalmente (y dentro de una función)...


He ojeado el post, de hecho, la respuesta ya está dada...

Gracias, lo intentaré...
 
zelek:

Hola queridos profesionales.

Me gustaría escribir un EA que abriera dos órdenes de venta y compra al mismo tiempo.

Entonces, después de una determinada cantidad de puntos (parámetro lim), la orden perdedora se cerraría,

y una rentable se cerrará cuando el precio haya caído por debajo del precio máximo desde que se abrió la orden

(una especie de trailing stop virtual).

En la agonía he creado esto, pero no funciona... no funciona

Por favor, sugiera algo

¿Cómo cree que decidirá si se trata de un retroceso o de una inversión? ¿O abrirá dos posiciones en cada retroceso? Es un fracaso...
 
artmedia70:
¿Cómo se pasa entonces un parámetro a esta función?


Si el parámetro se declara globalmente, no es necesario pasarlo, asigna directamente el valor deseado. Sólo entonces no es necesario anularlo en la función.
 
Es interesante...

Esto es todo el 2009... Sólo se utilizan las lecturas de Momentum para la entrada:
En el TF H1 buscamos el momento de la ruptura del movimiento del Momentum, y en el TF M5 encontramos el momento exacto para entrar en el mercado. Al abrir una posición, comprobamos la hora de apertura de la posición anterior, para no abrir todo el depósito en el momento de la señal de entrada...
El momento de entrar en el mercado se confirma por la posición de Demarker en zonas de sobrecompra/sobreventa en TF M5 y M15...
... Por cierto, sin taquillas también fue positivo.

... Incluso el hecho de que, por negligencia, haya realizado la prueba sólo con Demarker, ha dado resultados interesantes:

Es algo así en alguna parte:

//---------------------------------------------------------
   MomML_0   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,0);
   MomML_1   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,1);
   MomML_2   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,2);
   
   MomST_0  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,0);
   MomST_1  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,1);
   MomST_2  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,2);
   
   DeM5     =iDeMarker(NULL,PERIOD_M5, 14,0);
   DeM15    =iDeMarker(NULL,PERIOD_M15,14,0);

//---------------------------------------------------------
//==============================================================================================
   // Поиск пересечений
//==============================================================================================  
//----------------------- Проверка условий для старшего ТФ --------------------    
// ---------- Покупка --------
   MomBuy56M15=false;
   if (
         MomST_0<100 && 
         MomST_1<100 && 
         MomST_2<100 &&
         MomST_0>MomST_1 &&
         MomST_1<MomST_2 &&
         DeM15<0.3
      )                                
         {   
            MomBuy56M15=true;
         }

// ---------- Продажа --------
   MomSell56M15=false;
   if (
         MomST_0>100 && 
         MomST_1>100 && 
         MomST_2>100 &&
         MomST_0<MomST_1 &&
         MomST_1>MomST_2 &&
         DeM15>0.7
      )                                
         {   
            MomSell56M15=true;
         }
//----------------------- Проверка условий для младшего ТФ ---------------------    
// ---------- Покупка --------
   MomBuy56M5=false;
   if (
         MomML_0<100 && 
         MomML_1<100 && 
         MomML_2<100 &&
         MomML_0>MomML_1 &&
         MomML_1<MomML_2 &&
         DeM5<0.3   
      )                                
         {   
            MomBuy56M5=true;
         }

// ---------- Продажа --------
   MomSell56M5=false;
   if (
         MomML_0>100 && 
         MomML_1>100 && 
         MomML_2>100 &&
         MomML_0<MomML_1 &&
         MomML_1>MomML_2 &&
         DeM5>0.7   // ... и тут ...
      )                                
         {   
            MomSell56M5=true;
         }      

//==============================================================================================
   // Вычисление основных торговых критериев
//====================================================================  
   if (
         MomBuy56M15==true &&
         MomBuy56M5 ==true
      )
      
      return(106);                       // Открытие Buy по стратегии 6 
 //====================================================================   
 
   if (
         MomSell56M15==true &&
         MomSell56M5 ==true
      )
      
      return(206);                       // Открытие Sell по стратегии 6 
 //====================================================================   

Me pregunto, si el resultado es similar, entonces ¿por qué utilizar el momentum, que es bueno (como dicen) para mostrar el momento de agotamiento de la tendencia (final)? Cuando se rompe el impulso, el precio sigue subiendo y se abren posiciones en cada nueva ruptura del impulso... Así que fueron las primeras entradas las que decidí bloquear...
¿Qué te parece?

 

no se puede utilizar la barra cero en el tester, por la sencilla razón de que a pesar de que sólo se está formando (ticks del tester) el tester tiene información completa sobre los precios de esta barra, porque (la barra) es un hecho consumado y el tester mira al futuro tomando datos del histórico de cotizaciones, no lo que genera con los ticks... desplaza una barra a la izquierda y considera Momentums para 1,2,3 en lugar de 0,1,2 y demo 1 en lugar de 0...

También tiene sentido utilizar sólo los m5 actuales y multiplicar el período en el que se utilizan los precios más antiguos. 14 * PERIOD_H1 / Period() y 14 * PERIOD_M15 / Period()

 
keekkenen:

no se puede utilizar la barra cero en el tester, por la sencilla razón de que a pesar de que sólo se está formando (ticks del tester) el tester tiene información completa sobre los precios de esta barra, porque (la barra) es un hecho consumado y el tester mira al futuro tomando datos del histórico de cotizaciones, no lo que genera con los ticks... desplaza una barra a la izquierda y considera Momentums para 1,2,3 en lugar de 0,1,2 y demo 1 en lugar de 0...

También tiene sentido utilizar sólo los m5 actuales y multiplicar el período en el que se utilizan los precios más antiguos. 14 * PERIOD_H1 / Period() y 14 * PERIOD_M15 / Period()

¿Por qué si imprimimos cada precio de cierre de la barra cero en el probador, entonces en cada tick el precio es diferente? Lo mismo en marcos temporales más altos, lo mismo sin visualización. Entonces, ¿dónde está la visualización?
 
bueno, si el resultado (la dinámica) no es muy diferente del que se obtiene utilizando una barra de cero, puede que no haya que mirar, pero es mejor protegerse de las ilusiones...
 

Ya me he devanado los sesos :) - Este es el problema:

EA funciona en modo semiautomático - sus entradas son mis salidas de las posiciones, pero no puedo averiguar - cómo hacer que la EA para hacer sólo un comercio antes de mi comando para la siguiente, es decir, sólo no tengo un botón de inicio / inicio en el gráfico :) . Mi sección init() está ocupada, y no puedo desactivar mi EA - sus cálculos son necesarios para el arrastre correcto

 
keekkenen:
bueno, si el resultado (la dinámica) no es muy diferente del que se obtiene utilizando una barra de cero, puede que no haya miramientos, pero es mejor protegerse de las ilusiones...
Todas las ilusiones pueden ser ilusiones, pero a finales de 2008 toda la gran cofradía de Límites disparados, añadiendo fielmente depo, no pudo hacer frente al drawdown, formado por posiciones abiertas utilizando señales de indecks, y aquí está, la tan esperada llamada del tío Kolya... :)

¿Cómo es posible resolver estos problemas?


¿Quizás haya alguna forma de reducir ese deslizamiento? ¿Qué opinas?