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.
¿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()
staticdatetime dtBar;
//.................if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)//
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...?
staticbool 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);
}
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í.
¿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.
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.
Descarga el historial y la pregunta desaparece
¿Cómo se descarga?
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.
¿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:
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...?
¡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 :)
¿Es esto lo correcto? No hay una sola transacción en el probador... Aunque debería haberla si es correcta. ¿Qué pasa...?
¡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;
?
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.
es decir, en mi versión
if(OrdersTotal()>1)return;
?