Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 465

 
Rewerpool:

¿Por qué escribirlo así?

¿Si sólo pones el EA en un símbolo, pero funcionará en todos ellos? ¡Y el mago verá a los suyos!

¡Estoy confundido!

En el antiguo mql4 la condición se comprobaba desde el principio hasta el final, independientemente del resultado de la comprobación del primero de la lista de condiciones. De ahí este feo escrito, deseo de reducir el tiempo de procesamiento.

Hoy en día, está escrito en alguna parte, pero no recuerdo dónde, si la primera condición no se cumple, entonces la comprobación se detiene. En consecuencia, rascarse la oreja izquierda con el dedo meñique del pie derecho no tiene sentido.

 

@Konstantin Nikitin Entonces si escribo al principio de la iteración así


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

Así que si escribo al principio de la iteración así

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
Algo así.
 

Buenas tardes. Esto es lo que escriben.

"El producto sólo puede contener un archivo EX4, no se permiten archivos adicionales. El nombre del archivo EX4 y los nombres de los parámetros de entrada deben escribirse en letras latinas. Se recomienda utilizarRecursos para crear una interfaz fácil de usar.

Por razones de seguridad, no se permite llamar a ninguna DLL en el programa. Si se requieren datos de prueba para el programa de demostración, el programa debe crear el archivo requerido por sí mismo e informar al usuario sobre ello. También puede añadir los archivos necesarios mediante la función ResourceLoad, pero tenga en cuenta que todos los productos se comprueban para detectar posibles actividades maliciosas antes de publicarlos en el Mercado.

Se prohíbe incorporar cualquier restricción al Producto en función del tiempo, tipo o número de la cuenta de operaciones, instrumento financiero, etc. Todas estas acciones se considerarán hostiles al Comprador y no se tolerarán".

Diga HOW..... Hacer una solicitud de EA a un indicador.

 
Oleksandr Kulibaba:

Buenas tardes. Esto es lo que escriben.

"El producto sólo puede contener un archivo EX4, no se permiten archivos adicionales. El nombre del archivo EX4 y los nombres de los parámetros de entrada deben escribirse en letras latinas. Se recomienda utilizarRecursos para crear una interfaz fácil de usar.

Por razones de seguridad, no se permite llamar a ninguna DLL en el programa. Si se requieren datos de prueba para el programa de demostración, el programa debe crear el archivo requerido por sí mismo e informar al usuario sobre ello. También puede añadir los archivos necesarios mediante la función ResourceLoad, pero tenga en cuenta que todos los productos se comprueban para detectar posibles actividades maliciosas antes de publicarlos en el Mercado.

Se prohíbe incorporar cualquier restricción al Producto en función del tiempo, tipo o número de la cuenta de operaciones, instrumento financiero, etc. Todas estas acciones se considerarán hostiles al Comprador y no se tolerarán".

Diga HOW..... Realiza una solicitud de EA al indicador.

Tú mismo has escrito la respuesta: Utiliza un recurso

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

Tú mismo has escrito la respuesta: Utiliza el recurso

Gracias por la respuesta. Pero ya lo he leído y he intentado insertarlo. No lo consigo. Estoy haciendo algo mal o poniéndolo en el lugar equivocado. Llamo a tres indicadores. Por favor, describa este script con más detalles.

Qué, dónde, qué parámetros... Gracias de antemano.

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

Gracias por la respuesta. Pero ya lo he leído y he intentado ponerlo. No consigo que funcione, o lo hago mal o lo pongo en el lugar equivocado. Llamo a tres indicadores. Por favor, describa este script con más detalles.

Qué, dónde, qué parámetros... Gracias de antemano.

Crea tres o tantas variables como necesites y llámalas como en el ejemplohandle_ind=iCustom(_Símbolo,_Periodo,"::Indicadores\\Nblah-blah-blah) Inserta el código. Para que la gente lo entienda.

¡iCustom es ESTO!

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
Si
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

Cree tres variables o las que necesite y sondee como en el ejemplohandle_ind=iCustom(_Símbolo,_Periodo,"::Indicadores\\Nblah-blah-blah) Inserte el código. Para que la gente lo entienda.

¡iCustom es ESTO!

Si

Lo intentaré. Gracias.

 
@Oleksandr Kulibaba ¡Inserta tu código, errores! ¡Para tener entendimiento! Las buenas personas ayudarán. No está claro cuál es su problema.
 
@Konstantin Nikitin Buen trabajo. Eliminado del código
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

El tope ahora se mueve en cada tic )))))


¡En el post señalaste el cierre del código para el mago ! ¡Lo entiendo! La situación es la siguiente: Opero a mano, pero de repente necesito dar un paso atrás y dar el control al EA (buscar un patrón y punto de entrada). Quiero separar todas las operaciones. Pero la parada y la retirada, como se requiere por todos. Tal vez todavía no lo estoy entendiendo bien.