Solo "Características útiles de KimIV". - página 11

 
Todo lo que obtuve fueron estas funciones, y decidí entender la lógica del programador. Por eso hago preguntas. Para eso está este foro.
 
satop:

Función DistMarketAndPos().

¡Aquí vamos! ¡Aquí vienen más funciones interesantes! Por ejemplo, devuelve la distancia en pips entre el mercado y la posición más cercana. La selección más precisa de las posiciones a comprobar se establece mediante parámetros externos:

  • sy - Nombre del instrumento. Si se establece este parámetro, la función sólo comprobará las posiciones del instrumento especificado. El "" o NULL significa el símbolo actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición (MagicNumber). El valor por defecto de -1 significa cualquier MagicNumber.


satop:

La función DistMarketAndPos().

¡Aquí vamos! ¡Pasemos a funciones más interesantes! Por ejemplo, devuelve la distancia, en puntos, entre el mercado y la posición más cercana. La selección más precisa de las posiciones a comprobar se establece mediante parámetros externos:

  • sy - Nombre del instrumento. Si se establece este parámetro, la función sólo comprobará las posiciones del instrumento especificado. El "" o NULL significa el símbolo actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición (MagicNumber). El valor por defecto -1 significa cualquier MagicNumber.


Intento que funcione de un lado a otro y que se abran pedidos de un lado a otro. Tengo un error, ayúdenme a solucionarlo.

extern int TomaDeBeneficio = 150;

extern double Lote = 0,01;

extern inttern MAGIC = 1234;

int inicio()

{

si (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point)

}

return(0);

}

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1)

{

doble d, p;

int i, k=Total de pedidos(), r=1000000;


if (sy=="" | sy=="0") sy=Símbolo();

p=MarketInfo(sy, MODE_POINT);

si (p==0) si (StringFind(sy, "")<0) p=0,00001; si no p=0,01;

for (i=0; i<k; i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn)

{

if (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

si (r>d) r=NormalizeDouble(d, 0);

}

if (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

si (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

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


si (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

}

return(0);


{

int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //esta línea da 1 error,

//si se elimina esta línea,

//compila, pero entonces

//No pongo op=OP_SELL,

//y sin ella, el Asesor Experto pensará,

//que el orden a partir del cual se quiere calcular

//la distancia es OP_BUY

if (sy=="" | sy=="0") sy=Símbolo();

p=MarketInfo(sy, MODE_POINT);

si (p==0) si (StringFind(sy, "")<0) p=0,00001; si no p=0,01;

for (i=0; i<k; i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn)

{

if (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

si (r>d) r=NormalizeDouble(d, 0);

}

if (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

si (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

return(r);

return(r);

}

}

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

GRACIAS

 
qwanya:


Estoyintentando que funcione de un lado a otro y abrir pedidos de un lado a otro con él. Tengo un fallo que no consigo eliminar, por favor ayúdenme a solucionarlo.

GRACIAS


Deberías probarlo:

Y con preguntas aquí...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Por favor, deje sus comentarios en la rama de la fuente. Puerta a la fuente (Características útiles de KimIV).
 
Por favor, deje sus comentarios en la rama de la fuente. Puerta a la fuente (Características útiles de KimIV).
 
satop:

Función MovingInWL().

¿Puede alguien explicar por qué hay que publicar funciones que no funcionan?

'LevelWLoss' - identificador no declarado
'LevelProfit' - identificador no declarado
'ModifyOrder' - función no definida
'LevelWLoss' - identificador no declarado
'LevelProfit' - identificador no declarado
'ModifyOrder' - función no definida
6 error(es), 0 warning(s)

y esto dentro de la propia función

 
DenisovOleg:

¿Puede alguien explicar por qué hay que publicar funciones que no funcionan?

'LevelWLoss' - identificador no declarado
'LevelProfit' - identificador no declarado
'ModifyOrder' - función no definida
'LevelWLoss' - identificador no declarado
'LevelProfit' - identificador no declarado
'ModifyOrder' - función no definida
6 error(es), 0 warning(s)

y esto es dentro de la propia función

La función funciona, pero llama a la función ModifyOrder, que debería añadirse al código del EA y también añadir al EA las variables LevelWLoss y LevelProfit, algo así

extern int BeneficioNivel = 1000;

extern int NivelPérdida = 50;

 
Виктор
Iurii Tokman

Muchas gracias por este hilo del foro. El mayor agradecimiento a lurii Tokman por las características. Personalmente, estoy casi dispuesto a equipararlo a Stroustrup.
Gracias.

 
Iurii Tokman:

La función GetAmountLotFromOpenPos().

Esta función devuelve la suma de los lotes de las posiciones abiertas. Una selección más precisa de las posiciones a tener en cuenta se especifica mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del símbolo especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición, MagicNumber. El valor por defecto -1 significa cualquier identificador.

¡¡¡No vuelve!!!

no importa cómo lo haga, o bien ceros o " función de manejo de eventos no encontrada 4.mq4 1 1
"

 
Aleksey Maryaskin:

Muchas gracias por este hilo del foro. El mayor agradecimiento a lurii Tokman por las características. Personalmente, estoy casi dispuesto a equipararlo a Stroustrup.
Gracias.

No te olvides de dar las gracias también al autor de los artículos.
Razón de la queja: