Lo mismo. Se cierra una posición, se establece una orden pendiente, etc. Hay una función que devuelve el último valor (por ejemplo, OrderCloseTime()). Con cada tick, obtengo el valor del tiempo de la última posición cerrada (digamos, la posición #1). Al cerrar la siguiente posición (posición #2) con un nuevo tick obtengo el tiempo para cerrar esta posición (#2). El valor de OrderCloseTime() ha cambiado con respecto al anterior. Y así sucesivamente. No me importa cómo o cuánto ha cambiado la variable. Lo que me importa es el hecho mismo de que la variable haya cambiado. Es como una operación lógica: Si el OrderCloseTime() de la última posición cerrada es mayor que el OrderCloseTime() de la penúltima, entonces debemos hacer BLA-BLA-BLA. También - si el OrderClosePrice() de la última posición cerrada no es igual al OrderClosePrice() de la penúltima, entonces haga un BLA-BLA-BLA. ¿O tal vez no es posible hacer tal comparación?
Esta es la pregunta. Supongamos, por ejemplo, que nuestro EA muestra una señal de compra cuando el indicador (por ejemplo, tomé CCI) cruza algún nivel (la línea roja) de abajo hacia arriba, y una señal de venta cuando, respectivamente, baja. ¿Cómo hacer que la orden se abra sólo una vez durante la formación de la barra A? Es decir, supongamos que el indicador cruza el nivel (línea roja) hacia abajo y hacia arriba varias veces durante la formación de la barra A. Como ya he mencionado, debemos hacer que una orden se abra sólo una vez.
Lo que necesito es que la señal de venta que se reciba en la barra D (situación 2 del gráfico) no cierre la orden abierta en la barra A , y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el Asesor Experto después de su apertura.
Forrim: Esta es la pregunta. Supongamos que la señal de compra en el EA se mostrará cuando el indicador (por ejemplo, tomé CCI) cruce algún nivel (línea roja) de abajo hacia arriba y la señal de venta, respectivamente, cuando sea de arriba hacia abajo. ¿Cómo hacer que la orden se abra sólo una vez durante la formación de la barra A? Supongamos que el indicador cruza el nivel (la línea roja) hacia abajo y hacia arriba varias veces durante la formación de la barra A. Como ya he mencionado, deberíamos hacer que un pedido se abra sólo una vez.
Esto requiere que ante una señal de venta que se reciba en la barra D (situación 2 en el gráfico) la orden abierta en la barra A no se cierre y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el EA después de su apertura.
Muchas gracias de antemano.
En realidad, el CCI salta tanto que es mejor comprobarlo después de que el bar haya cerrado y se haya abierto uno nuevo.
Si queremos comprobar si la hora de apertura de una vela es diferente (si lo es, se abre la orden) o es la misma (=> no se abre ninguna orden), entonces en cada cruce debemos almacenar la hora de apertura en la variable global.
Forrim: Esta es la pregunta. Supongamos, por ejemplo, que nuestro EA muestra una señal de compra cuando el indicador (por ejemplo, tomé CCI) cruza algún nivel (la línea roja) de abajo hacia arriba, y una señal de venta cuando, respectivamente, baja. ¿Cómo hacer que la orden se abra sólo una vez durante la formación de la barra A? Supongamos que el indicador cruza el nivel (la línea roja) hacia abajo y hacia arriba varias veces durante la formación de la barra A. Como ya he mencionado, debemos hacer que la orden se abra sólo una vez.
Lo que necesitamos es que la señal de venta que se reciba en la barra D (situación 2 del gráfico) no cierre la orden abierta en la barra A , y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el Asesor Experto después de su apertura.
Gracias de antemano.
Si una posición de este tipo ya está abierta, no abra ninguna más.
//--------------------------------------------------------------- 1 --// Численные значения для М15externdouble StopLoss =20; // SL для открываемого ордераexterndouble TakeProfit =20; // ТР для открываемого ордераexterndouble Step_Sar=0.02; // Шаг Sarexterndouble Maximum_Sar=0.2; // Максимум Sarexterndouble Lot=0.01; // Жестко заданное колич. лотовbool Work=true; // Эксперт будет работать.//--------------------------------------------------------------- 2 --int start()
{
int
Total, // Количество ордеров в окне
Ticket; // Номер ордераdouble
Sar_1 , // Значен. Sar текущее
Sar_0 , // Значение Sar предыдущей свечки
Price, // Цена ордера
SL, // SL ордера
TP; // TP ордераbool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell//--------------------------------------------------------------- 3 -- // Учёт ордеров
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symbol())continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 6 --// Торговые критерии
Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1); // Sar_1
Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0); // Sar_0if (Sar_0 > Price && Sar_1 < Price) // если Sar меняет положение
{
Opn_B=true; // Критерий откр. Buy
}
if (Sar_0 < Price && Sar_1 > Price) // если Sar меняет положение
{
Opn_S=true; // Критерий откр. Sell
}
//--------------------------------------------------------------- 7 --
{
if (Opn_B==true)
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Bid; // Вычисление SL откр.
TP=20*Bid; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()if (Opn_S==true) // критерий откр. Sell
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Ask; // Вычисление SL откр.
TP=20*Ask; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Selreturn; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --return; // Выход из start()
}
//-------------------------------------------------------------- 10 --int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
EA elemental, debe abrir una posición cuando el indicador Parabolic SAR cambia en relación con el gráfico de precios, trabaja en M15, SL y TP son siempre constantes para la posición abierta.
El EA compara las posiciones de los indicadores de las velas actuales y anteriores.
No hay errores ni fallos durante la compilación, en la prueba en las pestañas "resultados" "gráfico" "informe" está vacío, en el registro está esto: "imagen".
Estoy codificando por segundo día, nunca he codificado antes, leí mis libros de mql y busqué en internet mi problema. Estoy en un punto muerto, por favor ayuda si puedes.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
¿Qué va a cambiar la próxima vez?
Lo que necesito es que la señal de venta que se reciba en la barra D (situación 2 del gráfico) no cierre la orden abierta en la barra A , y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el Asesor Experto después de su apertura.
Gracias de antemano.
Por favor, ayúdeme a adjuntar un trozo de código Sequent Demarque al EA https://www.mql5.com/ru/code/7372
no funciona así:
num=0:
for(i=barras; i>=0; i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
comprar.......
si (num==9)
cerrar........
1. Contar el número de pedidos del primer tipo
2. Contar el número de pedidos de tipo 2
3. Compare los resultados
Querido Vinin. ¡Muchas gracias!
Esta es la pregunta. Supongamos que la señal de compra en el EA se mostrará cuando el indicador (por ejemplo, tomé CCI) cruce algún nivel (línea roja) de abajo hacia arriba y la señal de venta, respectivamente, cuando sea de arriba hacia abajo. ¿Cómo hacer que la orden se abra sólo una vez durante la formación de la barra A? Supongamos que el indicador cruza el nivel (la línea roja) hacia abajo y hacia arriba varias veces durante la formación de la barra A. Como ya he mencionado, deberíamos hacer que un pedido se abra sólo una vez.
Esto requiere que ante una señal de venta que se reciba en la barra D (situación 2 en el gráfico) la orden abierta en la barra A no se cierre y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el EA después de su apertura.
Muchas gracias de antemano.
En realidad, el CCI salta tanto que es mejor comprobarlo después de que el bar haya cerrado y se haya abierto uno nuevo.
Si queremos comprobar si la hora de apertura de una vela es diferente (si lo es, se abre la orden) o es la misma (=> no se abre ninguna orden), entonces en cada cruce debemos almacenar la hora de apertura en la variable global.
Esta es la pregunta. Supongamos, por ejemplo, que nuestro EA muestra una señal de compra cuando el indicador (por ejemplo, tomé CCI) cruza algún nivel (la línea roja) de abajo hacia arriba, y una señal de venta cuando, respectivamente, baja. ¿Cómo hacer que la orden se abra sólo una vez durante la formación de la barra A? Supongamos que el indicador cruza el nivel (la línea roja) hacia abajo y hacia arriba varias veces durante la formación de la barra A. Como ya he mencionado, debemos hacer que la orden se abra sólo una vez.
Lo que necesitamos es que la señal de venta que se reciba en la barra D (situación 2 del gráfico) no cierre la orden abierta en la barra A , y no se vea afectada de ninguna manera.
Es decir, las órdenes no son controladas por el Asesor Experto después de su apertura.
Gracias de antemano.
EA elemental, debe abrir una posición cuando el indicador Parabolic SAR cambia en relación con el gráfico de precios, trabaja en M15, SL y TP son siempre constantes para la posición abierta.
El EA compara las posiciones de los indicadores de las velas actuales y anteriores.
No hay errores ni fallos durante la compilación, en la prueba en las pestañas "resultados" "gráfico" "informe" está vacío, en el registro está esto: "imagen".
Estoy codificando por segundo día, nunca he codificado antes, leí mis libros de mql y busqué en internet mi problema. Estoy en un punto muerto, por favor ayuda si puedes.
T.H.C. prueba esto
T.H.C. Prueba esto.
Muchas gracias, no esperaba una respuesta tan rápida y un cambio tan grande en el código.
Por favor, aconsejen sobre libros de programación que no sean de mql básico
Muchas gracias, no esperaba tanta rapidez y cambios en el código.
Por favor, aconsejen más libros de programación, además de mql básico.