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

 

¿Puede decirme cómo comparar correctamente el precio actual o la media móvil con la línea de tendencia?

Gracias de antemano.

    double maH_fast=iMA(NULL,fast_maH_timeframe,fast_maH_period,0,fast_maH_method,fast_maH_price,0);

    if (ObjectFind("Tr_S1")==-1)
     {
      Create_Tr_S("Tr_S1",White,timf2s,TF2S,timf1s,TF1S);
     }

    if(maH_fast>"Tr_S1")
     {...}
 
ikatsko:

¿CÓMO SE CUENTA EL NÚMERO DE POSICIONES LARGAS RENTABLES Y POR SEPARADO EL NÚMERO DE POSICIONES CORTAS RENTABLES?

La estrategia es la siguiente: si el número de posiciones largas rentables desde el inicio del EA (o mejor - para todo el historial de la cuenta) es mayor que el número de posiciones cortas, entonces sólo se debe permitir la apertura de posiciones largas. Y viceversa.

Está claro cómo contar estas operaciones, si son cerradas por el Asesor Experto: Cerrar - Contar. Pero si una posición se cierra por TP o SL, entonces ... ?

¿Tal vez alguien tiene un código listo de la función?


int ProfitableOrdersOfLongs(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()==0)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
//====================================================================================================== 
int ProfitableOrdersOfShorts(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()=1)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
 
nemo811:

¿Puede decirme cómo comparar correctamente el precio actual o la media móvil con la línea de tendencia?

Gracias de antemano.

Una línea de tendencia tiene un punto inicial con coordenadas de tiempo-precio y un punto final con coordenadas de tiempo-precio.

Puede utilizar la ecuación de la línea recta con las mismas coordenadas para encontrar el nivel de precios en cualquier punto que se encuentre entre estas dos coordenadas del segmento construido y comparar los niveles de precios de MAA y el punto de cruce de la barra deseada con esta línea...

Puede leer - hay una descripción detallada de tal ejemplo.

 
Roman.:

Tomas la última orden cerrada, comparas su hora de cierre con la anterior cerrada usando OrderCloseTime(), si es la misma, la comparas con la hora de cierre de tu anterior orden cerrada... así, naturalmente, está todo en un bucle - desde el último cerrado hasta el primero, vas uno tras otro y comparas el tiempo de cierre de los pedidos... Otra cosa - imprimir la hora de cierre de las últimas órdenes que conoces de antemano, digamos tres órdenes , puede ser diferente, incluso si lo entiendes como " simultáneamente", es decir, como yo lo entiendo, la orden se cierra en cualquier momento, es decir. En realidad, la hora de cierre de, digamos, tres órdenes a la vez no puede ser la misma - intente imprimir() y vea los valores de sus tres órdenes TIME - sus valores de las características de OrderCloseTime(), es decir, puede que tengamos que introducir el concepto de TIEMPO de cierre, es decir, la desviación de la hora de cierre de varias órdenes por algún pequeño valor cuando podemos considerar que han cerrado simultáneamente. Experimenten y véanlo ustedes mismos desde aquí.

Gracias, ha funcionado, pero ahora abre un pedido múltiple

Lo hice así

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
 
vik-777:

Gracias funcionó, pero ahora se abre un pedido múltiple

Lo hice así

Problema resuelto. Gracias a todos.

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
     a = OrdersHistoryTotal();
     if (a>w)
     {
     if (sarik>0)
      {   
      OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,4),1,Ask - SL1*Point,Ask + 10*Point,0,2);
      w++;
      }
 
nemo811:

¿Pueden decirme cómo comparar correctamente el precio actual o la media móvil con la línea de tendencia?

1. if(maH_fast>"Tr_S1") {...} -- error: maH_fast es un número real, "Tr_S1"- valor de tipo cadena;
2. double ObjectGetValueByShift( string name, int shift)
La función calcula y devuelve el valor del precio para la barra especificada (desplazamiento desde la barra actual). El valor del precio se calcula mediante la ecuación lineal basada en las coordenadas primera y segunda. Se aplica a las líneas de tendencia.
Parámetros:
name - Nombre del objeto.
turno - Número de barra.
Ejemplo: double price=ObjectGetValueByShift("MyTrendLine#123", 11);
 
Hola, tengo una pregunta... digamos que iHighest y iLowest pueden utilizarse para averiguar el número de barra con el valor máximo de high/low para un determinado período, pero ¿cómo puedo averiguar el valor máximo del indicador st Dev para un determinado número de barras?
 
double maxdev,mindev=1;
for(int i=0;i<counbar;i>0)
{
double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
if(mindev>val)mindev=val;
if(maxdev<val)maxdev=val;
}
Print("maxdev - ",maxdev," mindev - ",mindev);
En algún lugar como este.
 
7sintez:

He mirado todo, he hecho todo... No abrirá una posición, ¡eso es todo! Se cierra correctamente, pero no se abre... ¡No sé qué hacer! ¿Tal vez alguien encuentre un error en el programa?




Abre y cierra órdenes en 5 min EURUSD correctamente. Ligeros problemas de modificación, a menudo se intenta modificar con los mismos valores, por lo que los errores son frecuentes.
 

Hola a todos. Ayuda para un principiante, por favor:

El resultado final.

1)el período es de 1 día.

2)Hay una orden abierta OrderSend(...). Tiene SL y TP. Pero como condición adicional al stop y a la pérdida, tenemos que poner la orden en vivo desde el momento en que se abrió hasta las 18 horas, y luego cerrarla al precio actual.

En otras palabras, debe cumplirse una de las tres condiciones:

1. se activa un stop loss

o

2. se activa el take profit

o

3. Dado que no se ha activado ni el Stop Loss ni el Take Profit, la posición se cierra 18 horas después de su apertura al precio vigente en ese momento.

Así es como se establece esta condición de tiempo, ¿eh?


Pregunta 2:

Cómo se escribe correctamente la condición de que el evento se produzca si( periodo de 1 día):

- El cierre de la barra actual es mayor que C de la barra anterior y mayor que C de la barra anterior, y C de la barra anterior también es mayor que C de la barra anterior.


No te preocupes, por favor. Antes estaba sentado en Rumus, y estoy en proceso de reconstruir...