Funciones útiles de KimIV - página 120

 

Buenas tardes.

He modificado la función GetProfitOpenPosInCurrency() para que devuelva la peor posición perdedora. ¿Puede decir qué funciones serían adecuadas para devolver la hora de apertura de esta posición (OrderOpenTime())?

double GetMaxLoseOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) 
            if(p > OrderProfit() + OrderSwap() + OrderCommission()){
            p=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
 
abeiks:

Buenas tardes.

He modificado la función GetProfitOpenPosInCurrency() para que devuelva la posición más perdedora. ¿Puede decir qué funciones serían adecuadas para devolver la hora de apertura de esta posición (OrderOpenTime())?


Devuelve el número de billete y puede hacer con las funciones estándar
 
Vinin:

Devuelve el número de billete y puedes prescindir de las funciones estándar

Gracias.
 

KimIV , hola.Buscando... no encuentro el script... borrar todas las órdenes pendientes en el símbolo... y rastrearen el símbolo, tal vez hay... post........ no lo considero impertinente.Gracias de antemano .

 

Buenas tardes.

Estoy utilizando la función isTradeTimeInt() de KimIV. Utilizaré muchos intervalos de tiempo y para cada intervalo asignaré diferentes variables. He hecho este código para ello (2 intervalos hasta ahora). La pregunta es: ¿es ésta la solución más correcta o debería enfocar la tarea de otra manera?

extern int OH1=9;extern int OM1=0;extern int CH1=12;extern int CM1=0;
extern int OH2=13;extern int OM2=0;extern int CH2=15;extern int CM2=0;

int HourOpenTime()
{
int trade = 0;
if(isTradeTimeInt(OH1,OM1,CH1,CM1))trade = 1;
if(isTradeTimeInt(OH2,OM2,CH2,CM2))trade = 2;
return (trade);
}
 
bestseich:

Estimado Igor Kim, ayúdame a escribir una función como OrderCloseBy(), pero debe trabajar en diferentes pares y OrderProfit(), y no importa si las órdenes están dirigidas de manera diferente o no, como un OrderProfit() > otro, otro par, por cuántos puntos y ambos, exactamente, sólo estos dos, cerrar simultáneamente. Mi variante es así:

for (int i=TotalPedidos()-1;i>=0;i--)

{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!=Symbol()||OrderSymbol()==Symbol())
{
if(OrderProfit()>=pr*Point)//pr está en los parámetros, puntos de beneficio
int ot=OrderTicket();double op=OrderProfit();
if(OrderProfit()<=pru*(-1)*Punto)//pru-está en los parámetros, puntos de pérdida
int otu=OrderTicket();double opu=OrderProfit();
if(op>opu*v*(-1)&&(OrderType()==OP_BUY||OrderType()==OP_SELL))
//v es un ratio de beneficios/pérdidas, es decir, 1,5
OrderClose(otu,OrderLots(),Bid,sleep,Blue);
OrderClose(ot,OrderLots(),Bid,sleep,Blue);
OrderClose(otu,OrderLots(),Ask,sleep,Blue);
OrderClose(ot,OrderLots(),Ask,sleep,Blue);

}}}

¿Funcionará? Corrige o sugiere tu propia solución, si no te importa.

 

¡Querido Igor!

¿Podríais indicar si tenéis una función para calcular el volumen del lote en función del saldo de la cuenta después de cerrar la última orden y antes de abrir la siguiente?

Se lo agradezco de antemano.

 
vasabu2012:

¡Querido Igor!

¿Podríais indicar si tenéis una función para calcular el volumen del lote en función del saldo de la cuenta después de cerrar la última orden y antes de abrir la siguiente?

Se lo agradezco de antemano.

Aquí está la función de Igor.

Archivos adjuntos:
b-lots.mqh  3 kb
 

En la actualización la función PriceOpenLastPos dejó de funcionar en las condiciones, casi me rompe el cerebro, da valores en los comentarios pero no funciona en las condiciones, una pequeña edición solucionó el problema.

double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0, r2=0;
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}

r2 = DoubleToStr(r, 4);

return(r2);
}


 
Por favor, ayude a recompilar el EA e-CloseByEquity.rar con cambios de programación en el MetaEditor
Razón de la queja: