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

 
mersi:
Descarga el historial y la pregunta desaparece

¿Cómo se descarga?
 
kolyango:

Lo he entendido bien:

La aplicación concreta está muy ligada a sus condiciones.

Una bandera es simplemente una variable en la que se almacena el estado. A grandes rasgos, se puede subir o bajar. Construye a partir de ahí e implementa tu lógica.

 
w_ersoc:

¿Pueden aconsejar cómo escribir una condición correcta para que el Asesor Experto se active 1 vez con la apertura de una nueva barra en un marco de tiempo especificado? :(

Se puede llegar a diferentes variantes, a menudo se utiliza este tipo de condición:

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

La aplicación concreta está muy ligada a sus condiciones.

Una bandera es simplemente una variable en la que se almacena la condición. A grandes rasgos, se puede subir o bajar. Construye a partir de ahí e implementa tu lógica.


Bueno, ¿he entendido bien el punto?

Lo he entendido bien:

1. si se cumple la condición1, se asigna a Flag_SSSR1 un valor verdadero y se empieza a comprobar inmediatamente la condición2

2. si la condición2 se cumple, entonces se asigna el valor verdadero al indicador Flag_CCP2; si no, entonces es un indicador falso, y en el siguiente tick

no comprobamos más la condición1, y pasamos directamente a la condición2 y así sucesivamente, hasta que la condición2 se cumpla y tome un valor verdadero

3. entonces comprobamos la condición3 y Flag_USSR2 (¿y qué se comprueba exactamente en USSR2 si es verdadero o falso, o qué?)

¿Es esto correcto? No hay una sola transacción en el probador... Aunque debería haberla si es correcta. ¿Qué pasa...?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 

¡Hola!

Me puse como objetivo limitar las posiciones abiertas simultáneas a 1.

Con la variable Nivel de apertura/cierre = 3/2 multiplicado por Punto, colocada en las condiciones de posición de apertura/cierre intenté resolver esta tarea, pero no lo conseguí.

Por favor, ayúdenme a resolverlo :)

 
kolyango:


¿Es esto lo correcto? No hay una sola transacción en el probador... Aunque debería haberla si es correcta. ¿Qué pasa...?

Ahora, vuelve a escribir las condiciones completas en lenguaje normal y podrás corregir el código... Lo bueno de las señales es que deben tener una fecha de caducidad y cancelación.
 
skyjet:

¡Hola!

Me he fijado el objetivo de limitar las posiciones abiertas simultáneamente a 1.

if(OrdersTotal()>0) return;

O una variante con el símbolo y tirando las órdenes pendientes.

 

es decir, en mi versión

if(OrdersTotal()>1)return;

?

 
splxgf:
Ahora, vuelve a escribir las condiciones completas en lenguaje normal y podrás corregir el código... Lo bueno de las señales es que deben tener un periodo de caducidad y cancelación.

Todas estas condiciones pueden no seguirse a la vez (puede ser después de una hora o dos o tres), por lo que tenemos que hacer que tan pronto como el indicador llegue a 1.0000, esta condición no se compruebe en cada tick, y esperar hasta que una barra cierre con caída, y después de eso estas 2 condiciones no se comprueben en cada tick, y esperar hasta que el indicador llegue a 0.9980 o menos. En cuanto se cumplan todas las condiciones, abrimos una orden de mercado para vender 0,1 lotes con un stop loss de 400p y un take profit de 400p.
 
skyjet:

es decir, en mi versión

if(OrdersTotal()>1)return;

?

Mejor aún la primera opción, colocar antes de intentar abrir un pedido(OrderSend)
Razón de la queja: