Pregunta para los entendidos - página 12

 
rid писал(а) >>

Realmente no soy un experto en esto.

Pero se supone que si después de la 1ª señal se "cuelga" la bandera, entonces que se cuelgue.

Incluso si la primera señal ya está agotada.

Entonces la 2ª señal dará una señal de apertura sin ningún problema.

Si he entendido bien la pregunta...

Pero la bandera es una variable, según entiendo, y con un nuevo tick el programa verá el valor inicial o recién calculado de la bandera. ¿Quizá no he entendido bien lo que es una bandera?

 
MQLBankir >> :

Pero una bandera es una variable, según entiendo, y con un nuevo tick el programa verá el valor inicial o calculado de la bandera a partir de los nuevos datos. ¿Quizás no he entendido bien lo que es una bandera?

Una bandera es una constante booleana que tiene un valor verdadero o falso, con una representación numérica de 1 o 0 respectivamente.

Si la condición 1 es una señal (como el cruce de 2 ruedas) entonces la bandera se pone en verdadero, si el cruce aún no se ha producido la bandera seguirá siendo falsa. Para su tarea... se vería algo así :

bool signal1=true;

int inicio()

if (signal1==false) {return();}

signal1 ......... tra la get signal

if (signal1 ==true) //aparece la primera señal

{

señal2 .............. tra la señal de recepción

señal1=falso;

}

algo así debería ocurrir )))

oh, mientras escribía, ya estaba definido abajo)

 
MQLBankir >> :

Pero una bandera es una variable, según entiendo, y con un nuevo tick el programa verá el valor inicial o calculado de la bandera a partir de los nuevos datos. ¿Quizás no he entendido bien lo que es una bandera?

Puedo añadir que las variables declaradas globalmente guardan sus valores.

>> hasta que se cambien a la fuerza o se cierre el programa.

 

La protección de la bandera se realiza de la siguiente manera:

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
Por cierto
// функция принятия решения и установки флага

puede estar en cualquier lugar, según la idea del autor, con una secuencia de acciones diferente.

 
Urain писал(а) >>

La protección de la bandera se realiza de la siguiente manera:

por cierto

puede estar en cualquier lugar, según la idea del autor, y cambia la secuencia de acciones.

>>Gracias a todos, parece que lo han resuelto))

 

Buenas noches. Los problemas han bajado de alguna parte.

Un asesor con una martingala.

10 pasos. En cada paso la posición tiene un mago diferente.

Al principio todo funcionaba bien. Durante varios días.

Sin embargo, ¡de repente no funcionó en absoluto!

La primera posición se abre e inmediatamente, en la siguiente barra, se cierra.

No está claro por qué.


Y sigue y sigue. Se abre y se cierra.

Acaba de empezar hoy. ¡De repente!

Aquí está el bloque de cierre:

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

¿Tal vez alguien vea la inexactitud o el error? (por precios de las posiciones abiertas)

 

rid писал(а) >>

No está claro por qué.

¿Alguien verá de repente alguna inexactitud o error?

El problema probablemente no está en este código, sino en la apertura de posiciones o en el cálculo de TakeProfit_Buy. Es más probable que sea lo segundo.

Si se reproduce en el probador, la impresión debería ayudar.

 

No calculo el TakeProfit_Buy - sólo lo establezco en los parámetros externos.

extern int       TakeProfit_Buy=21;

En el probador - la misma mierda. Pero en lugares. Al principio, todo es normal.

Y entonces aparece esta mierda. Y no siempre.

Tendré que insertar un comentario o una impresión...

Además. Nunca he intentado utilizar este tipo de magia cuando era un novato, pero nunca lo he olvidado.

 

Creo que me he equivocado. Y, por supuesto, no es en absoluto donde yo estaba buscando originalmente.

Además del cierre anterior, también tengo este:

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

Resulta que la función bandera
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
después de su ejecución es igual a 1, pero después de que todas las otras posiciones se han cerrado sigue siendo igual a 1 ! Y, por supuesto, cuando la siguiente primera posición con número mágico = número mágico se abre - se cierra inmediatamente !

¿No está claro por qué este error no apareció durante dos días?

//--------------------------------------------------------------

También. ¿Pueden aconsejarme, - cómo puedo hacer que este bloque funcione correctamente después de todo?

En otras palabras, ¿cómo reiniciar la función isCloseLastPosByTake() después de cerrar todas las posiciones?

 
rid >> :

En otras palabras, ¿cómo puedo restablecer la función isCloseLastPosByTake() después de que se hayan cerrado todas las posiciones?

Por lo que tengo entendido, el tiempo de apertura de una posición cerrada en beneficio debe ser mayor que el de las restantes órdenes pequeñas, añade esta condición y todo irá bien.