Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 582

 

Buenas tardes.

Me he roto la cabeza para saber por qué no funciona el siguiente algoritmo. No pasa un array a la función. Al principio estuve buscando la razón, pero conseguí localizarla en este ejemplo de prueba.

Informa: "No se puede encontrar 'functest' en 'TestLib.ex4' " entonces "llamada de función de importación no resuelta".

Contenido del archivo Test.mq4

#propiedad estricta
#include <TestLibx.mqh>

int masa [5];

int OnInit() { return(INIT_SUCCEED); }
void OnDeinit(const int reason) { }

void OnTick()
{
(masa);
int c=0;
for (c=0;c<5;c++) Print (" masa[",c,"]=",masa[c]," ");
Sueño(2000);
}

Contenido del archivo de la biblioteca TestLibx.mq4

#Biblioteca de propiedades
#propiedad estricta
void functest (int &massx[])
{
int c=0;
mientras (c<5)
{
massx[c]=MathRand();
c++;
}
volver;
}
Contenido del archivo de la biblioteca TestLibx.mqh

#propiedad estricta
#importar "TestLibx.ex4"
void functest (int &massx[]);
#importar

Adjunta los ficheros originales al archivo.

Por favor, ayúdame a entender cómo pasar arrays en MQL4 a la función de la biblioteca.

Gracias.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
Archivos adjuntos:
MQL4.zip  11 kb
 
Alexey Viktorov:
La diferencia de valores es mayor que 10*Punto, pero tenemos que considerar si la diferencia será positiva o negativa.

Gracias. Quiero transferir para intercambiar puntos y comisiones. ¿Qué hay de malo en ello?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//
 
bij:

Gracias. Quiero transferir para intercambiar puntos y comisiones. ¿Qué pasa?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

Gracias.

Op, has cambiado tu respuesta, no necesito saber el beneficio. Intercambio y comisión, puede haber más de una posición.

 
bij:

Gracias.

Op, algo que cambió su respuesta, no necesito saber el beneficio. Intercambio y comisión.

Es que tienes que dividir por lote y necesitas multiplicar.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

El principio mismo mostró lo que uso. Y aplicarlo a su código es bastante sencillo.

 
Konstantin Nikitin:

Es que tienes la división por lotes y necesitas multiplicar.

El principio mismo mostró lo que uso. Y aplicarlo a tu código es bastante fácil.

Ya veo, gracias.
 

¡Hola!

Pregunta: El indicador crea objetos gráficos(OBJ_ARROW), pero algunos de ellos sólo aparecen después de la compilación o del cambio de marco temporal. No hay errores ni advertencias durante la compilación. En el probador, Print("Error al llamar a ObjectCreate():",GetLastError());0, Print("Error al llamar a ObjectCreate():",GetLastError());4200.

¡Si no te importa responder a un tonto!

 
¿Cómo puede el probador cargar mediante programación las cotizaciones de un marco temporal diferente (más pequeño)?
 
Juer:
¿Cómo puede el probador cargar programáticamente las cotizaciones para un marco temporal diferente (más pequeño)?
El marco temporal alto se basa en los datos del bajo. Por lo tanto, no es necesario.
 
bij:
Cierra la posición si la hora actual = hora de apertura más 5 minutos o en la apertura de una nueva barra si el periodo del gráfico es M5.

Gracias. Mejoró. Pero ahora hay otro problema. El probador sigue dándome resultados del 100%. Pero no es así como funciona. Muchas operaciones se abren y normalmente se cierran después del tiempo especificado según el registro. Sin embargo, no todas las operaciones son rentables según el gráfico de resultados donde podemos ver los momentos de apertura y cierre de posiciones. ¿Cuál puede ser la razón de esa izquierda al 100%?

Gracias también a Artem.