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

 
Code:


Gracias por la respuesta y responderé a tus preguntas.

Esa característica es exactamente la idea que subyace al indicador. Y al mismo tiempo es un ejercicio de MQL. He pensado en una tarea e intuyo que su implementación en un lenguaje no es muy difícil. Me siento y lo pruebo.

Así, la esencia de la característica es que comparo un determinado nivel teórico fijo de dos volúmenes unidireccionales con el nivel real. Es decir, si la relación real de la suma de dos volúmenes con el intervalo real de "apertura-cierre" es superior a la teórica especificada, añado una "bonificación" al segundo volumen real en forma de diferencia entre los resultados teóricos y reales calculados. Si el nivel real es inferior al teórico, restaré la misma diferencia al volumen del segundo compás. ¿Puedo explicarlo claramente?

Por si acaso, diré que al revelar esta característica, pusiste mal los paréntesis, probablemente con prisas.

Además, me parece que esas cadenas que consideras equivalentes a las mías te llevarán a la división por cero. Lo comprobaré ahora.

Está claro. Pero no está claro cómo se relacionan 2 (la media entre los dos volúmenes) y lo que se calcula en la variable UP12. Al fin y al cabo, las dimensiones de ambos son diferentes. Los tiempos y el precio en los denominadores. Al fin y al cabo, en el colegio nos enseñaron que los metros y los kilogramos no se suman de ninguna manera. :))))


Así es, ¡está mal! :)))) Una cosa es que las fórmulas sean fracciones, pero otra cosa es poner todo en una línea y no entender cómo... Eso es falta de atención, no prisa...

También he optimizado el código de forma incorrecta. También en este caso se trata de un error matemático. Se me olvidó poner entre paréntesis.

   double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);
 
Roman.:

Su punto no es el correcto en absoluto... a los criterios de negociación equivocados, la pregunta es sobre STOHAS-TEAM... :-Р

La pregunta era la siguiente:

ideas para la vida:

Si se cumple la condición1, entonces:
-comprobar si hay órdenes de venta abiertas
-Si los hay, ciérralos
-comprobar la disponibilidad de fondos en la cuenta
-abrir orden de COMPRA

Lo mismo si se cumple la condición 2, entonces
-comprobar si hay órdenes de COMPRA abiertas
-si los hay, cerrarlos
comprobar si hay órdenes de COMPRA abiertas - si las hay, cerrarlas
-abrir una orden de VENTA
+ análisis de errores (no es lo principal, pero es posible)

¿Qué tiene esto que ver con HOSTAGE? :))))

Ya se han realizado todas las comprobaciones necesarias y se ha formado o no una señal de negociación.

 
demlin:

Hola a todos.

Gracias a la inestimable ayuda de los expertos de esta rama (sobre todo de Roman) he conseguido hacer un sencillo Asesor Experto, que se ha mostrado + en el probador. Pregunta: ¿Cómo determinar si se puede colocar para el comercio real? ¿Hay algún criterio?


Sí, ¿cuáles son los criterios, se trabaja en las cosas "básicas" (afilado para el real - el control de la desconexión y el cambio a una línea adicional no considero), en la forma de manejo inteligente de los posibles errores con la adopción del experto de las decisiones organizativas apropiadas sobre el trabajo posterior, entonces la demo es obligatoria, entonces el micro-real ... Si está satisfecho con los resultados, "vuélvase loco"... :-)) Para empezar, tome aparte el manejo de errores de los EAs del tutorial, antes de colocar las órdenes no se olvide de hacer las comprobaciones necesarias de los requisitos y las limitaciones de las operaciones de comercio, en su búsqueda de Google algo así como: el manejo de errores site:mql4.com, la preparación de EA para el real site:mql4.com, yo (parte :-R) tienen un experto que hace tales fi ndings como este:

// После старта
if (!IsTradeAllowed() || IsTradeContextBusy() || !IsConnected()) return; // если торговля невозможна, то выходим

Comprobación de la selección de pedidos para su uso

                if (ticket>0)                                               // Если позиция открылась
                    {
                       while(OrderSelect(ticket,SELECT_BY_TICKET)==false) Sleep(1000);     // Если ордер выбран
                         double OpenPrice=OrderOpenPrice();
                         ...  
                           

Al principio

color ColorBuy = Blue, ColorSell = Red;
bool UseSound = true;
string alert.wav;
color clr, ClrClose = Gray;
int Level_new; 
double price;
bool result, Buy_signal=false, Sell_signal=false;
int  orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                        // Номер ордера
double orderLots;                  // Lots   
double orderProfit;                // Profit
double Price;                      // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double  TP;                        // Значение TakeProfit ордера
static datetime prevtime = 0;       // по ценам открытия

int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
      
    if (!IsTesting())
       {
         if (IsExpertEnabled())  Comment("Советник запустится следующим тиком");       
           else  Comment("Отжата кнопка \"Разрешить запуск советников\"");
      
       }
    ...
   
   return (0);
}

Eso es todo, en mi opinión, para empezar; podríamos seguir y seguir...

En cualquier caso, el control del "Gestor" es necesario... :-R Para que no sea insoportablemente doloroso para los depósitos perdidos...

 

MaxZ:


La pregunta era la siguiente:

¿Qué tiene esto que ver con STOCHASTAGE? :))))

Se ha realizado toda la comprobación necesaria y se ha formado la señal de trading o no.


Había una pregunta directa:

"Todo esto depende del par de divisas actual.
int inicio()
{
double M_0, M_1; // Valor PRINCIPAL en 0 y 1 bar
S_0, S_1; // Valor de la señal en 0 y 1 bar
//--------------------------------------------------------------------
// Llama a la función para la visualización técnica.
M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 bar
M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1 barra
S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 bar
S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 barra
//--------------------------------------------------------------------

if( M_1 < S_1 && M_0 >= S_0 ) // CONDICIÓN 1: El verde cruza el rojo desde abajo

if( M_1 > S_1 && M_0 <= S_0 ) // CONDICIÓN 2: El verde cruza el rojo desde arriba

//--------------------------------------------------------------------
return; //Salir de start()
}"

Básicamente, lo que sea, IMHO, el autor fue referido, él lo resolverá... :-Р

 

Roman.:


Al principio.

...
int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
...

¿Cuál es el propósito de la variable IsExpertStopped? Y resulta que en cada tick del registro aparece el mensaje " Expert Advisor must be allowed to trade"...

 
MaxZ:

¿Cuál es el propósito de la variable IsExpertStopped? Y resulta que cada tick en el registro habrá un mensaje "Expert Advisor debe ser autorizado a operar"...

Esto es lo que hago:


F1 pulse en
IsTradeAllowed()

Lo descubrirás... :-Р

En concreto "

Si el EA tiene permiso para operar y el hilo está libre", entonces opere, de lo contrario IsExpertStopped = EA detenido, esperando permiso para operar...

 
Roman.:

F1 pulse en

averigua... :-Р

A saber "

si el EA tiene permiso para operar y el hilo para la ejecución de la operación está libre", entonces opere, de lo contrario IsExpertStopped = EA detenido, esperando permiso para operar...

Lo tengo... Hoy estoy totalmente distraído. ¡Veo init() y pienso en start()! :)))))

 
MaxZ:

Está claro. Pero no está claro cómo se relacionan 2 (la media entre los dos volúmenes) y lo que se calcula en la variable UP12. Al fin y al cabo, las dimensiones de ambos son diferentes. Los tiempos y el precio en los denominadores. Al fin y al cabo, en el colegio nos enseñaron que los metros y los kilogramos no se suman de ninguna manera. :))))


¡Eso es, eso no está bien! :)))) Una cosa es que las fórmulas sean fracciones y otra cosa es poner todo en una línea y no entender cómo... Eso es falta de atención, no prisa...

También he optimizado mal el código. También en este caso se trata de un error matemático. Me olvidé de usar paréntesis.


¡MaxZ, apúrate, oh apúrate :))) con las conclusiones!

No sumo kilómetros y kilogramos. Un ejemplo de la vida real. El eurodólar de hoy, 5 minutos. Acabo de mirar el gráfico donde hay 2 velas alcistas seguidas.

vback1=703, dVolume=696. (vback1+dVolume)/2=699,5.

En las mismas velas (Close[i]-Open[i+1] )*1000=(1.42911-1.42549)*1000=3.62

(vback1+dVolume)/3.62=386.5

Total: 696+699,5-386,5=1009. Que es lo que debería dibujarse. Y lo que exactamente 1009 es mostrado por el indicador en este lugar. Y así sucesivamente.

Otra cosa es que yo mismo he calculado este ejemplo aquí y he comprobado que según la fórmula del código no ocurre lo que he descrito en el post anterior. De hecho, resultó ser una ideología diferente, una especie de autorregulación. Mientras los valores negativos del parámetro vrealUP12 no superen la suma de dVolumen+vteor12, se producirá una adición al último volumen. O hay que introducir parámetros adicionales para el cálculo de ExtVolumesBuffer[i].

Y en la línea

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

Acabo de ponerlo de nuevo en

double vrealUP12=(dVolume+vback1)/UP12;

para no alargarse.

 
Code:


¡MaxZ, apúrate, oh apúrate :))) con tus conclusiones!

No he sumado kilómetros y kilos. Un ejemplo de la vida real. El eurodólar de hoy, 5 minutos. Acabo de mirar el gráfico donde hay 2 velas alcistas seguidas.

Mierda... Sí que sumas, ¡y de qué manera! :))

La variable vteor12 tiene la dimensión de Volúmenes (que son Nuestros metros).

 vteor12=(dVolume+vback1)/2;

La variable UP12 tiene la dimensión de Pips para algún par de divisas.

UP12=(Close[i]-Open[i+1])*1000

La variable vrealUP12 tiene como dimensión la relación entre los volúmenes y los puntos (es decir, nuestros kilogramos).

vrealUP12=(dVolume+vback1)/UP12;

Y acabas calculando tu característica, que es la suma de metros y kilogramos, ¡que es de lo que se trata! ;D

ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;


¡A no ser que 2 no sean los 20 puntos que el Precio por dos barras debería pasar en teoría! :)) Pero eso ya es una tontería...


Código:


Y en la línea

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

Lo puse de nuevo en

double vrealUP12=(dVolume+vback1)/UP12;

para no alargarlo.

El alargamiento a veces es útil. Ahorra recursos informáticos. :))) ¿Por qué necesitas esta variable adicional?

 
MaxZ:

Oh, hombre... Lo eres. :))

La variable vteor12 tiene la dimensión de Volúmenes (que son Nuestros metros).

La variable UP12 tiene la dimensionalidad de Precio.

La variable vrealUP12 está dimensionada por Volúmenes y Precio (esto es Nuestros kilogramos).

Y al final calculas tu característica, que es la suma de metros y kilogramos, ¡que es de lo que se trata! ;D


Bien, probemos otra forma de verlo.

vteor12 puede escribirse como (dVolumen+vback1)/k1 (factor 1)

vrealUP12 puede escribirse como (dVolumen+vback1)/k2 (factor 2)

Como he intentado describir la ideología del indicador, consiste en la comparación de algunos niveles teóricos y reales. Para obtener estos niveles comparo (es decir, divido) el mismo valor (dVolumen+vback1) con algún valor teórico (k1) y real (k2). Está claro que k1 me lo estoy inventando, para poner las cosas por su nombre. O, si se quiere, hacer una suposición. Ahora esto tiene que ser comparado con algo. Nada es más objetivo y verdadero que el propio gráfico en este caso. Así que tomo las diferencias de apertura y cierre, tomándolas como la línea de fondo de un periodo de tiempo determinado. Y la única tarea aquí es llevarla al mismo dígito, por lo que se multiplica por 1000.

Intente calcular varias variantes de velas vecinas en una calculadora y se sorprenderá de la variedad de resultados según esta fórmula tan sencilla.

Y en cuanto a la lógica escolar tienes razón. Yo añado Volumen + Volumen/Precio, eso no se puede hacer en la escuela. :))