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

 
Stereosin:
Buenos días a todos. La idea es colocar una orden pendiente en la dirección opuesta para cada orden de mercado abierta (es decir, toma de beneficios y stop loss) cuando se activa el stop loss (si se trata de una orden de compra, entonces se envía una orden pendiente). No puedo encontrar ninguna secuencia de sintaxis para escribir un script que borre la orden pendiente cuando la actual se cierre en el take profit? Tal vez haya un guión escrito entre los libres, pero la búsqueda no tiene éxito ( . Me gustaría escribir uno yo mismo para poder tratarlo, pero no puedo entender la secuencia sintáctica. Permítanme explicar otro ejemplo - Quiero un helado - la secuencia de sintaxis - 1) - levantarse del sofá 2) Vestirse 3) Ir a la tienda 4) Comprar un helado. ¿Es posible hacer lo mismo con mi tarea?

cuando se cierre la actual, el número de órdenes de compra disminuirá, o no habrá ninguna (depende del algoritmo), se hace esta comprobación y se eliminan las órdenes pendientes

algo así (en este caso, por el contrario, las órdenes pendientes se eliminan si una compra colocada anteriormente ha cerrado con beneficios):

 for(int m=OrdersTotal()-1;m>=0;m--)
   if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) 
     if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) {  
    
      if(OrderType()==OP_BUY)  sBuy++; 
      if(OrderType()==OP_SELL) sSell++;
       
      if(OrderType()==OP_BUYLIMIT)
       if(sBuy==0 || sSell>0) OrderDelete(OrderTicket());
      if(OrderType()==OP_SELLLIMIT) 
       if(sSell==0 || sBuy>0) OrderDelete(OrderTicket());
  }
 
Ratmirf:

¿Entonces esto es correcto?

if (OrderOpenTime()+7200+15*60 <=TimeCurrent()) Cls_Buy=true;

if (OrderOpenTime()+7200+900 <=TimeCurrent()) Cls_Buy=true;

¿y terminar así?

si (OrderOpenTime()+8100 <=TimeCurrent()) Cls_Buy=true;

Bueno, es la matemática de la escuela secundaria... Ten un poco más de confianza.
 
harbor:

cuando se cierre la actual, el número de órdenes de compra disminuirá, o no habrá ninguna (depende del algoritmo), se hace esta comprobación y se borran las órdenes pendientes

algo así (en este caso, por el contrario, las órdenes pendientes se eliminan si una compra colocada anteriormente ha cerrado con beneficios):

Muchas gracias. Lo investigaré esta noche.
 

Si esto sucede - aumento el Stop Loss al tamaño requerido. No establezco el umbral, sino que lo dejo virtual en el programa y abro una orden. Como resultado, sólo se abre una de 15 a 20 órdenes. ¿Qué debo hacer para abrir todas las órdenes?

RefreshRates();


     double bid = MarketInfo(symbol,MODE_BID);
     double ask = MarketInfo(symbol,MODE_ASK);

    

     double stoplevel =  NormalizeDouble(stoplevelTemp * tickTemp,digitsTemp)+tickTemp;

     if(digitsTemp == 5 )
          stoplevel+=(700 * tickTemp);
     
     if(spreadOrdDangBr < stoplevel)                                                                           //если спред меньше стоплевела - перебиваем
         spreadOrdDangBr=stoplevel;
         
     double lotDB = calculationLot(spreadOrdDangBr,0.0025);                                                      //расчитываем лот - четверть процента свободных денег
     


         slODB=ask-spreadOrdDangBr;                                                                              
         tpODB= ask+ spreadOrdDangBr;

         orderTicketODB=OrderSend(symbol,OP_BUY,lotDB,ask,3,slODB,0,("dangBr" +spreadOrdDangBr));



y como resultado en la terminal


 
Hola a todos) Cómo determinar el precio máximo de una barra seleccionada (por ejemplo, la barra 100)
 

¡Ayuda, por favor! Quiero abrir una posición de compra, y si el precio sube un 100
pips, mi stop loss será igual a cero con respecto al stop loss anterior.

¿Lo estoy haciendo correctamente?


if(Oferta-Precio Abierto()>Punto*100)

{

OrderModify(OrderTicket(),OrderOpenPrice(), 0,TakeProfit,0,);

return(0);

}

Gracias.

 
Tema97:
Hola a todos) como determinar el precio máximo de una barra seleccionada ( por ejemplo la 100 )
Alto[100] no ayudará
 

Encontré una función que define el precio máximo y mínimo para 100 barras y dibuja líneas horizontales (por favor, ayúdame a hacer pasar las primeras 15 barras y sólo entonces comprobar para 100 (¿cómo hago este cambio?) y otro problema con las líneas - dibuja sólo 1 vez - es decir - si vamos otros 100 puntos con nuevos máximos y mínimos - las líneas no se dibujan) alguien sabe por favor escriba - aquí está el código

extern inttern Quant_Bars=100; // Número de barras

//--------------------------------------------------------------------

int start() // Función especial start

{

int i; // número de barra

double Minimum=Bid; // Precio mínimo

Máximo=Oferta; // Precio máximo

for(i=0;i<=Quant_Bars-1;i++) // De cero (!) a

{ // ...Quant_Bars-1 (!)

if (Low[i]<Minimum) // Si < conocido

Minimum=Low[i]; // este será el Min

if (Alto[i]> Máximo) // si > conocido

Máximo=Alto[i]; // será el máximo.

}

Alert("Para el último ",Quant_Bars, // Mostrar

"Min= ",Mínimo," Max= ",Máximo);

double linia1=ObjectCreate("highLine",OBJ_HLINE,0,0,Maximum);

double linia2=ObjectCreate("lowLine",OBJ_HLINE,0,0,Minimum);

return(0); //salir start()

}

 
Tema leyó por fin la documentación. Puedes encontrar tantas cosas interesantes allí... Por ejemplo, iHighest devuelve el índice del mayor valor encontrado (desplazamiento relativo a la barra actual) del gráfico correspondiente. Y iHigh devuelve el valor del precio máximo de la barra (especificado por el parámetro shift) del gráfico correspondiente. Una vez que comprenda estas dos funciones, podrá resolver fácilmente su problema sin recurrir a funciones que no siempre están escritas por otros.
 
Chicos, si el indicador dibuja objetos gráficos no estándar, ¿es posible acceder a ellos? El problema es que no se muestran en la lista de objetos (cuando se pulsa el botón All) y la función ObjectsTotal() no los ve. Al intentar acceder a los objetos por su nombre, GetLastError() devuelve el error 4202(función ObjectFind())
Razón de la queja: