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

 
Michey25 >>:

что тут не так?

Короче этот советник я прикрепляю к часовому графику, и если цена в начале часа выше чем cn1 а текущая не привышает её на 8 пунктов то ордер должен открыться (также если цена ниже текущего уровня) А он у меня почему-то сразу открывает позицию. Почему?

¿Y dónde está escrita la condición de 8 puntos? Mejor multiplicar 8 por MarketInfo(NULL,MODE_POINT);

 
splxgf >>:

А где записано условие на 8 пунктов? лучше восемь умножать на MarketInfo(NULL,MODE_POINT);

(a-cn1)<0.0008)

 
¡Ayúdenme a fusionar dos EAs.El experto PYLOSE cierra las órdenes con un determinado MAGIKOM cuando una cantidad de dinero determinada, y el EA Trailing arrastra la equidad cuando llega a una cantidad determinada.Ayúdenme a insertar algún código de Trailing en PYLOSE, también arrastra, pero no cierra las órdenes con un determinado MAGIKOM cuando llega a una cantidad especificada.Y posiblemente comentar los fondos arrastrables que se muestran en la pantalla.Gracias!
Archivos adjuntos:
archive_1.zip  10 kb
 

Michey25


cuando respondía el código era un poco diferente ;)

Aunque hay algunas dudas, el resultado de op(0) depende mucho del marco temporal actual. no está claro de dónde vienen los cn y de qué tipo son.

¿No se puede hacer Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0,0008)?

También es mejor utilizar break en lugar de i=1, esto saldrá del bucle inmediatamente en lugar de ejecutar todos los comandos hasta el final.

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

Hola. Por favor, ayúdenme a implementar lo siguiente. Hay 2 condiciones independientes en un EA, en base a las cuales se abren órdenes separadas, cada una con su propia magia. En cualquier momento en un gráfico sólo puede haber una orden para cada una de las condiciones, y pueden estar al mismo tiempo entre sí. Para comprobar la posibilidad de abrir órdenes, hago la siguiente estructura

int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0, buystop=0, sellstop=0;
//----
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()== MAGIC1 || OrderMagicNumber()== MAGIC2))
              {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
          if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//----
   if( buys>0) return( buys);
   else       return(- sells);

Pero los pedidos sólo se abren con la segunda magia.

A continuación, los pedidos se cierran también de forma independiente. Al mismo tiempo, la orden con la primera magia utiliza una red de arrastre y la segunda no

He utilizado este ejemplo, pero el cierre no se produce según las reglas de la primera o la segunda condición, o no se produce en absoluto

 

  for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1)
     if(OrderType()==OP_BUY) 
     if ( Sell1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
             }
                     
      if(OrderType()==OP_SELL) 
      if ( Buy1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
             }
  
      if(OrderType()==OP_BUYSTOP && Sell1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buy1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
    }
   
   for(int i2=0; i2<OrdersTotal(); i2++)
     {
      if(OrderSelect( i2, SELECT_BY_POS, MODE_TRADES)) 
   
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC2)
     if(OrderType()==OP_BUY)
      if ( Sellcl0==1)
       {

       OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
            }
                 
    if(OrderType()==OP_SELL) 
    if ( Buycl0==1)
    
            {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
          
        }
     if(OrderType()==OP_BUYSTOP) 
     if ( Sellcl0==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buycl0==1)
        {
         OrderDelete(OrderTicket());
        return(0);
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy( parab);
    TrailingPositionsSell( parab);
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return (0);
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_BUY) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss( parab);
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_SELL) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss( parab);
                  
               } 
            } 
         } 
      } 
   } 

Sell1, buy1, sellcl0, buycl0 son descripciones de las condiciones de cierre.


¿Funcionaría en absoluto esa doble anulación de posiciones? Gracias.

 
exolon >>:

Здравствуйте. Помогите пожалуйста реализовать такую вещь. В одном эксперте работают 2 независимых условия, на основе которых открываются отдельные ордера, каждый со своим magic. В каждый момент времени на одном графике может быть только один ордер по каждому из условий, при этом они могут быть одновременно друг с другом. Для проверки возможности открытия ордеров делаю такую конструкцию

Но открываются ордера только со вторым magic.

Далее, закрываются ордера тоже независимо друг от друга. При этом ордер с первым magic использует трал, а второй нет

Применил вот такой вариант, но закрытия либо происходят не по правилам ни от первого, ни от второго условия, либо не происходят вообще

sell1, buy1, sellcl0, buycl0 - описания условий на закрытие.


Будет ли вообще работать такой двойной перебор позиций? Благодарю!


después de cerrar y borrar las órdenes, quitar el retornado y ponerlo al final de la función o poner un continuo en su lugar

 

Hola a todos, estoy escribiendo mi primer programa de mql y aprendiendo el lenguaje al mismo tiempo.

Estoy aprendiendo el idioma, ¿puede aconsejarme por favor?


Tengo una pregunta: si estoy escribiendo mi primer programa mql, me gustaría saber qué es lo que falla. ¿Puede decirme qué pasa? Me he pasado cuatro horas hojeando el libro de referencia, yo tampoco lo entiendo.


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а) >>

Hola a todos, estoy escribiendo mi primer programa de mql y aprendiendo el lenguaje al mismo tiempo.

Estoy aprendiendo el idioma, ¿puede aconsejarme por favor?

Tengo una pregunta: si estoy escribiendo mi primer programa mql, me gustaría saber qué es lo que falla. ¿Puede decirme qué pasa? He hurgado en el libro de referencia durante unas cuatro horas, no lo entiendo.

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

Y para qué hice el bucle. Si no hay ninguna condición, no debemos esperar un número desconocido de días para que aparezca la señal.

 

Buenas tardes.

El indicador tiene IndicatorShortName("iC_C_mod, ..... ");

Sin embargo, necesito, además de esta leyenda, insertar un comentario con una variable que cambia dinámicamente en la ventana del indicador.

Como f-i Comment();

Lo necesito en la ventana del indicador, pero no en el gráfico.

Por favor, aconséjeme...

 
Jahspear >>:



void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}


Probablemente algo así, porque los bucles infinitos tardan mucho en el hardware moderno.