[¡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 46

 
bool exit_for=false;
double max_1=0;
double max_2=0;
for(int k=0; k<Bars; k++)
{
	if(	iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)
		&& iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2) 	)
	{
		//Если это первый максимум:
		if( max_1==0)
			max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремума
		else
		//Если первый найден, записываем второй
		{	
                        max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
                        exit_for=true;
                } 
	}
        //Выход из цикла, когда найдены оба максимума
        if( exit_for==true) k=Bars+1;  
}
Buenas tardes. Por favor, avisa. A mi pregunta sobre la comparación de los máximos con el RSI después de que su valor supere el 70, se me planteó esta solución (código anterior)

No funciona así. Como resultado consigo que busque máximos en el historial (encuentra máximos en días anteriores), pero necesito que espere a que se cumpla después de que esta función actúe (como valor en la 1ª barra > 70) ... Si se cumple esta condición (no antes de la barra > 70, sino después) el 1º maci es inferior al 2º, entonces se cierra la orden

Algún consejo sobre qué cambiar.

Gracias
 
xruss писал(а) >>

una pregunta más - ayúdanos)

¿cómo determinar después de que una orden haya sido seleccionada en el historial su tipo (fue la orden cerrada por Compra o por Venta)?

// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            type  =OrderType(); <-----
          }
        }
      }
    }
  }
}
 
Roger >> :
Tienes una variable declarada y luego intentas usar otra.

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!! Bueno, deberías haberlo dicho enseguida........... porque si no, la vejez no es divertida - pero la juventud es desagradable.....

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡>> >>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Podrían aconsejarme por favor
Necesito entender claramente si una orden se cerró en stop o en beneficio
Hice las variables priceprofitbuy y pricestopbuy
antes de la finalización de la orden hago pricebuy = Ask, entonces la orden se somete a pricebuy, si tiene éxito, entonces alerta y recuerda priceprofitbuy y pricestopbuy, basado en pricebuy
además con priceprofitbuy >= Bid= Bid y pricetopbuy <= Bid, compruebo si la orden se cierra en beneficio o stop
; sin embargo, a veces Bid ha alcanzado el nivel de takeprofit y la orden se cierra, pero mientras el bucle llega a priceprofitbuy >= Bid, Bid ha bajado, y el bucle no funciona correctamente

Pregunta - ¿hay alguna manera de detectar claramente que la orden se ha cerrado con beneficio?
He intentado asignar una variable al número de ticket de la orden y luego comprobar el beneficio en el historial, pero no se puede seleccionar la orden desde el ticket - sólo se muestra el beneficio en el historial.

 
gramp >> :

Hice las variables priceprofitbuy y pricestopbuy
Coloco pricebuy = Ask antes de ordersend, luego order-send por pricebuy; si tiene éxito, alerta y almacena priceprofitbuy y pricestopbuy basado en pricebuy
entonces usando la condición priceprofitbuy >= Bid y pricestopbuy <= Bid, compruebo si la orden se cierra en beneficio o stop
sin embargo, sucede que Bid ha alcanzado el nivel de takeprofit, la orden se cierra, pero mientras el ciclo alcanzó priceprofitbuy >= Bid, Bid se ha vuelto más bajo y entonces el ciclo no funciona correctamente

Pregunta: ¿hay alguna forma de detectar claramente que la orden se ha cerrado con beneficios?
Intenté establecer el número de billete en una variable y luego comprobar el beneficio en el historial, pero no se puede seleccionar el pedido en el historial, sólo se muestra el puesto en el historial.

No es del todo correcto:

Una posición puede abrirse a un deslizamiento (normalmente a un precio peor) en lugar del precio exacto.

Sería más correcto determinar el precio de la orden abierta mediante la función OrderOpenPrice(), habiéndola seleccionado previamente mediante OrderSelect(...).

O, tras su cierre, calcula la diferencia entre el precio de apertura y el de cierre. Esta última se determina mediante la función OrderClosePrice().

OrderType() devolverá su tipo (compra/venta).

 

A xrust: Muchas gracias.


Sólo que no está claro cómo escribir en las condiciones de comercio que si el tipo de orden cerrada era OP_BUY, entonces blah blah(

Lo tengo así:


int ORDtype;
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            ORDtype  =OrderType(); <-----
          }
        }
      }
    }
  }
}
// торг условия
if(ORDtype=1)&&....

en la condición escribí correctamente que Si el tipo de orden era OP_BUY entonces blah blah blah?

 
xruss >> :

if(ORDtype=1)&&....

Escribí correctamente en la condición que Si el tipo de orden era OP_BUY entonces blablabla?

Debería serlo:

if(ORDtype==1)&&....

 
Everlost >> :

Debería serlo:

if(ORDtype==1)&&....

fa si no hay historia - en mi caso ORDtype ==0?

 
xruss >> :

Si no hay historial - en mi caso ORDtype ==0?

Será igual al valor especificado al declarar la variable, es decir, 0 en su caso, porque no se le asignó ningún valor explícitamente. Por cierto, no me había dado cuenta en tu post anterior de que querías seleccionar la orden OP_BUY - esta constante es 0, mientras que 1 es OP_SELL. Así que es mejor declarar la variable ORDtype con el valor -1:

int ORDtype=-1;

Para evitar confusiones sobre qué valor corresponde a qué tipo de operación, también se puede especificar en condición:


if (ORDtype==OP_BUY) ...

 
Everlost >> :

Será igual al valor especificado cuando se declaró la variable, es decir, en tu caso 0, ya que no se le asignó explícitamente un valor. Por cierto, no me he dado cuenta en tu post anterior de que querías seleccionar la orden OP_BUY - esta constante es exactamente 0, mientras que 1 es OP_SELL. Así que es mejor declarar la variable ORDtype con el valor -1:

int ORDtype=-1;

Además, para evitar confusiones, qué valor corresponde a qué tipo de operación, puede especificarlo en la condición:


if (ORDtype==OP_BUY) ...

y si hubiera una orden de venta en el historial y luego el Asesor Experto la cerrara (en el tipo de historial se muestra (su cierre) como t/p o s/l - ¿no se considerará como la última? no podría conseguir el efecto deseado((