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

 
Figar0 >> :

>> Poner todo el código, no hay olor a tapones aquí todavía...

No se trata de stoppers, se trata de cerrar una posición tan pronto como el precio toque la MA

 
Novice писал(а) >>

No se trata de stoplots, se trata de cerrar la posición en cuanto el precio toque la MA

Que sea así, fuiste tú quien escribió sobre las paradas...) Pero no puedo entender por qué no funciona sin el código. La pieza anterior no es muy informativa.

 
Figar0 >> :

Que así sea, fuiste tú quien escribió sobre los tapones...). De todos modos, sin el código es imposible entender por qué no funciona, la pieza publicada es completamente desinformativa.

Debo haberme expresado muy mal, pido disculpas, quise decir que la propia MA debería servir como stop-loss

>> :

... ... la posición se cerró en cuanto el precio tocó la MA


Y el código es extremadamente primitivo:


         Ticket=OrderTicket();                 
         Tip   =OrderType();                   
         Lot   =OrderLots();                   

    MA2C=iMA(NULL,0, Period_MA2,0,MODE_SMA,PRICE_CLOSE,0); //Есть две MA с разным периодом.
    MA3C=iMA(NULL,0, Period_MA3,0,MODE_SMA,PRICE_CLOSE,0); //И вот с такими параметрами.
     
     //Так же есть условия, при которых по идее должны срабатывать 
     // функции закрытия ордеров.
     
     RefreshRates();                  
    if ( Tip==0 && Bid== MA2C)        //Обозначение типа ордера и условия закрытия
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C)
     {
      CloseSell=true;                               // Закрыть Sell
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Закрыть Sell
     }

        // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if ( Tip==0 && CloseBuy==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Bid,3,Blue);      // Закрытие Buy
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
        if ( Tip==1 && CloseSell==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Ask,3,Red);      // Закрытие Sell
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

Ya creo que las 4 condiciones se pueden cambiar a 2


     RefreshRates();
    if ( Tip==0 && Bid== MA2C || Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C || Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Критерий закр. Sell
     }
 
     RefreshRates();
    if ( Tip==0 && (Bid== MA2C  || Bid== MA3C))
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && (Ask== MA2C ||  Ask== MA3C))
     {
      CloseSell=true;                               // Критерий закр. Sell
     }

Luego es así) En fin, es una pieza delirante, los vagones se construyen a precios de Oferta, y compararlos así.... No lo sé.

Algo en su código, OrderSelect no ver?

 

Es estándar, de un libro de texto:


Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if ( Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }

//И далее как выше...
Es importante para mí entender si esto es posible en principio, porque cuando se prueba en el modo de visualización, las órdenes no se cierran en MA
 
Novice писал(а) >>

Quiero saber si es posible hacer esto en principio porque durante las pruebas en modo de visualización, las órdenes no se cierran en MA

En principio es posible. ¿Sólo tiene un único pedido posible en su sistema?

Intenta normalizar los precios Bid/Ask y los valores MA para que sean iguales, es necesario...

¿Por qué no utiliza su Asesor Experto? Lo habría corregido hace mucho tiempo.

 
Figar0 >> :

En principio es posible. ¿Sólo tiene un único pedido posible en su sistema?

Intenta normalizar los precios Bid/Ask y los valores MA para que sean iguales, es necesario...

¿Por qué no utiliza su Asesor Experto? Lo habría corregido hace tiempo.

Después de eso mi cabeza empezó a dar vueltas...

No) A un grial como a otra galaxia, sólo intentos de realizar y mejorar la CT.


No he podido meter todo el código en el post, así que adjunto

Archivos adjuntos:
g.ei.vn.gl..mq4  12 kb
 
Novice писал(а) >>

Después de eso, mi cabeza empezó a dar vueltas...

No) El Grial es como otra galaxia, sólo un intento de implementar y mejorar el TC.

No he conseguido poner todo el código en este post, así que lo pego aquí.

Pero en principio, de alguna manera funciona:

Lo único que he quitado es el aumento del lote. ¿Creía que había dicho que los pedidos no estaban cerrados?

 
No cierran en MA, exactamente cuando el precio los toca. En MA2C y MA3C. Sobre la divagación, sí, aún no la he terminado.


¿Y cómo...?

Figar0 >> :

...normalizar los precios Bid/Ask y los valores MA al comparar para la igualdad...

Es que no entiendo muy bien cómo normalizar... NormalizarDoble(Pregunta, Dígitos) ?

 

El problema es de actualidad, todavía me pregunto cómo hacer que las órdenes se cierren inmediatamente cuando se alcanza el precio de la MA.


Después de la normalización salió un error durante la compilación por alguna razón, y en la parte del código donde no se tocó para nada.