[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 315

 
¿Sabes si el probador de estrategias tiene algún límite en el número de pases? Ejecuté el probador, en la parte inferior izquierda por encima de la barra al comienzo de la prueba fue: 0/1280 (25706). He contado 25 kopecks: es el número de todas las combinaciones posibles. Pero terminó la prueba cuando era: 1088/1280 (25706). ¿Sólo hizo 1088 pases? ¿Qué significan las dos primeras cifras?
Además, cuenta de alguna manera extraña... cuando añadió otro criterio para 3 parámetros, las 25 piezas no aumentaron 3 veces, sino que dieron algo así como 40 koz. ¿Es un fallo o me equivoco en alguna parte?
 
AndrejFX:
¿Sabes si el probador de estrategias tiene algún límite en el número de pases? Ejecuté el probador, en la parte inferior izquierda por encima de la barra al comienzo de la prueba fue: 0/1280 (25706). He contado 25 kopecks: es el número de todas las combinaciones posibles. Pero terminó la prueba cuando era: 1088/1280 (25706). ¿Sólo hizo 1088 pases? ¿Qué significan las dos primeras cifras?
Además, cuenta de alguna manera extraña... cuando añadió otro criterio para 3 parámetros, las 25 piezas no aumentaron 3 veces, sino que dieron algo así como 40 koz. ¿Es un fallo o me equivoco en alguna parte?
Lea el manual. Allí se detalla personalmente.
 

¡¡Ayuda a resolver el código de arrastre!!

Debe arrastrar los StopLosses ya abiertos a la distancia "TrailingStop", desde el nivel Alto o Bajo, de las velas anteriores. Una vez que el Asesor Experto se inicia, sólo funciona con una orden en la primera operación abierta. Una vez que se activa el StopLoss y se abre la siguiente operación, la orden de StopLoss no tiene seguimiento. Si entiendo bien, ¿esto es porque la variable "ORDER_SL" no se modifica y no se cumple la condición de modificar el pedido? Si es así, ¿por qué y cómo corregirlo?

Aquí está el código de seguimiento:

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);
int ORDER_Type=OrderType();
double ORDER_SL=OrderStopLoss();
double Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*Point;
double Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*Point;
            if (ORDER_Type==OP_BUY && ORDER_SL<Point_High){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }
            if (ORDER_Type==OP_SELL && ORDER_SL>Point_Low){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }

Aquí está el EA en su totalidad:

Archivos adjuntos:
 

Este código

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);

debe ser puesto en perlas. Lo más interesante es que funciona, pero sólo en el probador en el primer pedido.

 
Christoff:

¡¡¡Ayuda con el arrastre!!!

Debe arrastrar los StopLosses ya abiertos a la distancia de "TrailingStop", desde el nivel de High o Low, de las velas anteriores. Después de iniciar el Asesor Experto trabaja sólo con una orden en la primera operación abierta. Una vez que se activa el StopLoss y se abre la siguiente operación, la orden de StopLoss no tiene seguimiento. Si entiendo bien, ¿esto es porque la variable "ORDER_SL" no se modifica y no se cumple la condición de modificar el pedido? Y si es así, ¿por qué y cómo corregirlo?

Aquí está el código de la red de arrastre:

Aquí está el Asesor Experto en su totalidad:

Antes de buscar algo, hay que seleccionarlo. Primero hay que recorrer todas las posiciones abiertas del terminal, seleccionando las que están abiertas por el Asesor Experto. En cada iteración del bucle, si se selecciona el orden requerido, llame a su arrastre directamente desde el bucle. Sólo en este caso, todas las posiciones abiertas por el Asesor Experto serán arrastradas.

Más o menos:

void Trailing(string sy, int mn) 
{
   int      i, err, ORDER_Type, k=OrdersTotal();
   double   PointX, ORDER_SL, Point_High, Point_Low;
 
   if (sy=="0") sy=Symbol();
   int    dg=MarketInfo(sy, MODE_DIGITS);
   double pt=MarketInfo(sy, MODE_POINT);
   
   if(dg==5 || dg==3) PointX=pt*10;
   if(dg==4 || dg==2) PointX=pt;
   
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (OrderMagicNumber()!=mn)   continue;
               
         ORDER_Type=OrderType();
         ORDER_SL=OrderStopLoss();
         Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*PointX;
         Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*PointX;
         if (ORDER_Type==OP_BUY)
            if (NormalizeDouble(Point_High-ORDER_SL,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         if (ORDER_Type==OP_SELL)
            if (NormalizeDouble(ORDER_SL-Point_Low,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         }
      if (!OrderSelect(i, SELECT_BY_POS)) {
         err=GetLastError();
         Print("FUNC Trailing: Ошибка выбора ордера - ", err);
         break;
         }
      }
   return;
}

No he mirado el código de tu arrastre, sino que lo he dejado como está (aunque también debería cambiarlo - añadir una comprobación para que no se supere el StopLevel, o quizás algo más), sólo he añadido un bucle en los pedidos y la normalización al comparar valores dobles en tu código de arrastre, y así... algunas cosas útiles ... Lo descubrirás si quieres :)

ZS. No he revisado el código, lo escribí tal cual, así que puede haber errores. Es sólo un ejemplo.

Ahora, en ese lugar del código en el que necesitas arrastrar posiciones, llama a esta función:

Trailing(Symbol(), Magic);
Mágico - número mágico establecido en el EA como un número entero único para que pueda distinguir sus propias órdenes de las órdenes de otro EA o de las órdenes abiertas manualmente donde no hay ningún número mágico.
Si dejamos Symbol() en la llamada a la función, las posiciones del símbolo en el que se encuentra nuestro EA serán el objetivo.
Como alternativa, en lugar de Symbol(), puede sustituirlo por el nombre del par de divisas cuyas posiciones desea consultar.
 
Por favor, ayúdenme a intercambiar datos de la manera más rápida entre terminales MT4 en un ordenador.
 
trave:
Por favor, ayúdenme a intercambiar datos de la manera más rápida entre terminales MT4 en un ordenador.

Si necesitas copiar operaciones, aquí tienes el copiador. Si sólo intercambias datos, entonces necesitas hacer un dll
Archivos adjuntos:
kopirowshik.zip  465 kb
 
drknn:

Si quieres copiar operaciones, aquí tienes la copiadora. Si sólo quieres intercambiar datos, tienes que hacer un dll

Felices fiestas para ti... :-)))
 
Vinin:

No deberías publicar cosas robadas en este foro. Es un camino al destierro.

es en sentido figurado, este pavo ha sido finalizado por mí.
 
Roman.:
Felices fiestas para ti... :-)))
Vladimir, ya que has publicado una recopilación, debes haber tratado este tema.
¿Ha encontrado una variante sencilla de transferir una variable de terminal a terminal a través de la memoria, la variable de Windows, etc., es decir, no a través de un archivo?
Como última variante, un indicador que dibuja la línea Close[0] de otro terminal en un terminal en línea. En un gráfico de ticks esta comparación se vería muy clara.