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

 
Vinin:

¿Qué va a cambiar la próxima vez?
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.


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........

 
Vinin:


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!
 
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 --
                                   // Численные значения для М15
extern double StopLoss   =20;      // SL для открываемого ордера
extern double TakeProfit =20;      // ТР для открываемого ордера
extern double Step_Sar=0.02;       // Шаг Sar
extern double Maximum_Sar=0.2;     // Максимум Sar
extern double 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_0
 
   if (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);//Открытие Sel
         
         return;                                // Выход из start()
        }
        
      if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                      
         return;                                // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134: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.


 

T.H.C. prueba esto




Archivos adjuntos:
0000001_1.mq4  3 kb
 
Techno:

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

 
T.H.C.:

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.

Sólo he leído la base, se necesita más práctica para dominar el tema.