Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 452

 
Profitov:
Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?

Es posible.
 
Ayuda -- me he comprado un nuevo portátil con vin.8 instalado -- me he descargado el terminal de alpari actualizado por última vez -- cargo los indicadores con los que trabajaba antes, en la carpeta MQL4-indicators, aparecen ahí -- pero en el propio terminal en los usuarios no los veo, el servicio de atención al cliente no dice nada claro - ¿qué hacer?
 
galinka:
Ayuda -- me he comprado un nuevo portátil con vin.8 instalado -- me he descargado el terminal de alpari actualizado por última vez -- cargo los indicadores con los que trabajaba antes, en la carpeta MQL4-indicators, aparecen ahí -- pero en el propio terminal en los usuarios no los veo, el servicio de atención al cliente no dice nada claro - ¿qué hacer?

El menú del sistema "Archivo" tiene un nuevo elemento "Abrir carpeta de datos". Ahí es donde tienes que ponerlo ahora.
 
No se puede hacer - no están en la terminal
 

Debo haber entendido mal lo que hay que hacer - archivos de programa - tengo Alpari - abro ---- hay carpetas ---- MQL4- indikators - los pongo - aparecen - cierro - abro el terminal - no están en los archivos de usuario

 
Tal vez hay algo en mis indicadores que necesita ser cambiado
 

Gracias, me ha servido de ayuda.

 
1mql:

Debajo del último extern:
extern int slippage = 2; // deslizamiento del precio al cerrar posiciones de mercado

inserte otro:
extern bool total_symb = true; // en todos los pares

y en cada línea:
if ((OrderSymbol() == Symbol()))
y
if(OrderSymbol() == Symbol())

sustituya esto:
if(OrderSymbol() == Symbol() || total_symb)

en teoría debería funcionar, compruébelo.


Sólo cierra un par de gráficos en los que la posición está activada. en otros se cierra un error 4107. He intentado cambiar en extern bool Buy = false; //borrar/cerrar la dirección de las órdenes de compra
extern bool Sell = false; //borrar/cerrar la dirección de la orden de venta. en true . no funcionó. pero si por ejemplo lo ponemos en un gráfico sin posición abierta, no se cierra ninguna y se ve el error 4107.
 
Profitov:
Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?
Ya está escrito.
 
alsu:

Por lo tanto, Ticket todavía se utiliza en alguna parte de la versión antigua. Tenemos que limpiar el código...

Hecho de la siguiente manera:

 Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   int order[7];//буффер для семи ордеров
   int ord;//количество ордеров
   ArrayInitialize(order,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;}
         Total++;                               // Счётчик рыночн. орд
         if (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         order  [OrderType()]++;                    // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
     ord=order  [OrderType()];

 while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }

Las posiciones se cierran completamente. Es cierto que sale el error cero, pero los muelles dicen que significa que no hay errores. Y no encuentro el mensaje"Todos los pedidos cerrados" en el registro.

He puesto en negrita las líneas que he cambiado. Parece que funciona, aún no lo he comprobado a fondo.

No entiendo muy bien cómo funcionan los bucles. Supongamos que tengo código por encima y por debajo y en medio del bucle. Si las condiciones del bucle coinciden, el código se ejecuta sólo dentro del bucle y no deja que se ejecuten las líneas de código por debajo del bucle? Considerando este ejemplo, ¿el operadorbreak interrumpe el bucle? ¿Permite que se ejecuten las líneas por debajo del bucle, o el programa empieza a calcular desde el principio?

Corrígeme si me equivoco: break interrumpe el bucle en el que se encuentra, mientras quecontinue realiza la evaluación del operador que está por encima de él, por lo que no queda claro si hay un segundo operador: ¿se interrumpirá su evaluación ocontinue interrumpe todo el código y manda al programa a ejecutarlo primero?